diff --git a/.gitignore b/.gitignore index fa88afc..6ecf647 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,31 @@ -.ds_store -**/.ds_store \ No newline at end of file +# macOS .DS_Store file +**/.DS_Store + +# Development purpose files and folders +node_modules +/lib +/test + +# VSCode settings +.vscode + +# Distribution files +/index.js +index.d.ts + +# parcel folders +.parcel-cache +dist + +# testing files and folder +testing + +# Build +build.iife.js +# build.main.sh +# build.test.sh + +# # website stuff +# website-stuff/config.build.sh +# website-stuff/config.terser.sh +# website-stuff/rollup.config.mjs \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 3719dba..3c38831 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,13 +1,10 @@ { - "liveSassCompile.settings.generateMap": false, "liveSassCompile.settings.formats": [ { "format": "compressed", "extensionName": ".css", - "savePath": "./bundle" - // "savePath": "./website-stuff" + "savePath": "./src" } ], - "liveSassCompile.settings.forceBaseDirectory": "src" - // "liveSassCompile.settings.forceBaseDirectory": "website-stuff" + "liveSassCompile.settings.generateMap": false } diff --git a/README.md b/README.md index ce2df01..1469746 100644 --- a/README.md +++ b/README.md @@ -1,61 +1,120 @@ -# Sharer by KP +[![](./sharer-from-kpverse.jpg)](https://kpverse.in/sharer/ "Sharer from KPVERSE") - +###
Sharer - A URL Sharing Tool for Websites and Web Apps, from KPVERSE
-![](./assets/sharer-preview-mac-iphone.png) +--- -# 📝 Description +## Installation -Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! +[![npm (scoped)](https://img.shields.io/npm/v/@patelka2211/sharer)](https://www.npmjs.com/package/@patelka2211/sharer) +[![npm bundle size (scoped)](https://img.shields.io/bundlephobia/min/@patelka2211/sharer)](https://bundlephobia.com/package/@patelka2211/sharer@1.0.0) +[![npm](https://img.shields.io/npm/dy/@patelka2211/sharer)](https://www.npmjs.com/package/@patelka2211/sharer) +[![jsDelivr hits (npm scoped)](https://img.shields.io/jsdelivr/gh/hy/patelka2211/sharer)](https://cdn.jsdelivr.net/gh/patelka2211/sharer@1.0.0/) -# 📚 Usage +To install Sharer from NPM, run the following command: -| Provided files | File location | -| -------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | -| Sharer [IIFE](https://developer.mozilla.org/en-US/docs/Glossary/IIFE) file (It can be directly imported into your website) | [sharer.iife.js](https://github.com/patelka2211/sharer/tree/main/bundle/sharer.iife.js) | -| Sharer [ESM](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules) file (To use Sharer in your project) | [sharer.esm.js](https://github.com/patelka2211/sharer/tree/main/bundle/sharer.esm.js) | -| Sharer button ( to offer convenient sharing options with Sharer button!) | [sharer_button.js](https://github.com/patelka2211/sharer/tree/main/bundle/sharer_button.js) | +```sh +npm i @patelka2211/sharer +``` -- Both Sharer IIFE and ESM files provide a total of 6 functions. +Alternatively, you can visit [this page](kpverse.in/sharer/#install) and configure Sharer to work the best way and directly in your website using a HTML ` + + + + + +``` -| Function Name | Method chaining supported | Parameters | Description | -| -------------- | ------------------------- | ---------------- | ----------------------------------------------------------------------------------------------- | -| setURL | Yes | `url`: `String` | To share a customized URL using the Sharer (`default URL` is the `current URL of the page`) | -| setDefaultURL | Yes | none | To `assign the URL variable` of the Sharer feature to the `current URL of the page` | -| setText | Yes | `text`: `String` | To share a customized text using the Sharer (`default text` is the `current title of the page`) | -| setDefaultText | Yes | none | To `assign the text variable` of the Sharer feature to the `current title of the page` | -| open | No | none | To open the Sharer | -| close | No | none | To close the Sharer | +--- -# 💡 Examples +## Available APIs -- If you want to share a customized URL and text, such as sharing information about "ChatGPT," you can use the following code to set the URL and text of "ChatGPT" for sharing. +### open - type _`function`_ -```js -sharer.setURl("https://chat.openai.com/").setText("ChatGPT").open(); +```ts +/** + * Opens the Sharer with the specified options. + * @param option — Optional configuration for the Sharer. + */ +function openSharer(option?: { url?: string; text?: string }): void; +``` + +### close - type _`function`_ + +```ts +/** + * Closes the Sharer. + * + * @returns {void} + */ +function closeSharer(): void; +``` + +### setColor - type _`function`_ + +```ts +/** + * Sets Sharer color. + * + * @param {string | undefined} newColor - The new color value. + * @returns {object} An object containing open and close functions. + * @property {function} open - The function to open the Sharer. + * @property {function} close - The function to close the Sharer. + */ +function setColor(newColor?: string): object; ``` -- If you want to set URL and text to default, you can use the following code. +--- -`NOTE: By default, the URL and text values are automatically set to the URL and title of the current page, respectively.` +### button - type _`object`_ + +Sharer button is an object containing [`activate`](#buttonactivate---activates-the-sharer-button) and [`deactivate`](#buttondeactivate---deactivates-the-sharer-button) functions. + +```ts +const button: { + activate: () => void; + deactivate: () => void; +}; +``` + +#### `button.activate` - Activates the Sharer button. + +#### `button.deactivate` - Deactivates the Sharer button. + +--- + +### Method chaining + +You can use method chaining in [`setColor`](#setcolor---type-function) function. + +Suppose you need to [set color](#setcolor---type-function) theme of Sharer and then you immediately want to [open Sharer](#open---type-function), you can do this using method chaining with just single line of code. ```js -sharer.setDefaultURL().setDefaultText().open(); +// The given example code will set color theme to "#2596D1" and will open Sharer. +// There is only one line of code present in the given example. It looks like 4 lines of code because it is formatted, to make sure it is easily readable. +setColor("#2596D1").open({ + url: "https://kpverse.in/", + text: "The official KPVERSE website.", +}); ``` -# 📄 License +--- + +### License + +[MIT License](./LICENSE) -- This project is licensed under the [MIT License](./LICENSE) -- The MIT License permits the following actions: - - Use the software - - Copy the software - - Modify the software - - Merge the software with other software - - Publish the software - - Distribute the software - - Sublicense the software -- The permitted actions are subject to the conditions stated in the [LICENSE file](./LICENSE). +--- -# 🙌🏻 Credits +###
-I would like to acknowledge and give credit to the creator of "[qrcode-svg](https://github.com/datalog/qrcode-svg/)", [@datalog](https://github.com/datalog/), for providing the library that enabled me to create SVG QR codes for Sharer, significantly enhancing its functionality and user experience. Furthermore, I would like to invite you to check out my other project, "[JSON2HTML](https://github.com/patelka2211/json2html/)", which was also utilized in the creation of Sharer. +
© 2023 Kartavya Patel. All rights reserved.
diff --git a/Sharer.js b/Sharer.js new file mode 100644 index 0000000..c2096c7 --- /dev/null +++ b/Sharer.js @@ -0,0 +1,14 @@ +/** + * Sharer from KPVERSE + * + * v1.0.0 + * + * Updated on August 8, 2023. + * + * Copyright © 2023-present, Kartavya Patel. All rights reserved. + * + * @author Kartavya Patel + * + * @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} + */ +!function(r,e,t){"use strict";function n(r){return"kpverseSharer".concat(r)}function a(r,e){var t;return r=n(r),"object"==typeof e&&(e=JSON.stringify(e)),e=function(r){try{return btoa(r)}catch(e){return r}}(e),localStorage.setItem(r,e),(t={})[r]=e,t}function o(r){try{return atob(r)}catch(e){return r}}function i(r){r=n(r);var e=localStorage.getItem(r);if(null!==e){e=o(e);try{return JSON.parse(e)}catch(r){return e}}}var s='@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap";body{margin:0}body.sharer-is-open{overflow:hidden}body #kpverse-sharer-button{border-radius:23%;width:48px;height:48px;transition:all .4s;position:fixed;bottom:20px;right:20px;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000,0 0 0 1px #0000}body #kpverse-sharer-button.hide{width:32px;height:32px;bottom:-32px;right:28px}body #kpverse-sharer-button #sharer-icon-svg .icon-bg{fill:var(--sharer-dc-secondaryContainer);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-fg{fill:var(--sharer-dc-onSecondaryContainer);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-border{fill:rgba(var(--sharer-dc-onSecondaryContainer-rgb),16%);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-stroke{stroke:rgba(var(--sharer-dc-onSecondaryContainer-rgb),16%);transition:all .4s}body #kpverse-sharer-button.sharer-icon-hover{cursor:none;width:56px;height:56px;bottom:16px;right:16px;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000008f,0 0 0 1px #0000}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-bg{fill:var(--sharer-dc-primaryContainer)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-fg{fill:var(--sharer-dc-onPrimaryContainer)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-border{fill:rgba(var(--sharer-dc-onPrimaryContainer-rgb),24%)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-stroke{stroke:rgba(var(--sharer-dc-onPrimaryContainer-rgb),32%)}body #kpverse-sharer{opacity:1;box-sizing:content-box;backdrop-filter:blur(6px);background-color:#00000052;flex-direction:row;justify-content:space-around;align-items:center;width:100vw;height:100vh;font-family:Inter,sans-serif;transition:opacity .4s;display:flex;position:fixed}body #kpverse-sharer.hide{opacity:0}body #kpverse-sharer *{box-sizing:content-box}body #kpverse-sharer .sharer-window{background-color:var(--sharer-dc-background);-ms-overflow-style:none;scrollbar-width:none;border-radius:16.9px;flex-direction:column;align-items:center;width:100%;max-width:414px;max-height:calc(100% - 20px);display:flex;overflow:auto;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000008f,0 0 0 1px #00000014}body #kpverse-sharer .sharer-window::-webkit-scrollbar{display:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component{background-color:var(--sharer-dc-background);width:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr{width:calc(100% - 20px)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr{aspect-ratio:1;-ms-overflow-style:none;scrollbar-width:none;border-radius:6.9px;margin:10px 10px 0;overflow:auto}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr::-webkit-scrollbar{display:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item{border-bottom:1px solid rgba(var(--sharer-dc-secondaryContainer-rgb),32%);justify-content:space-between;align-items:center;width:calc(100% - 20px);height:30px;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item:last-child{border-bottom:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-icon-container{aspect-ratio:1;background-color:rgba(var(--sharer-dc-onSecondaryContainer-rgb),8%);border-radius:23%;height:calc(100% - 2px);padding:1px}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-icon-container .applist-item-icon-image{border-radius:23%;width:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-name{color:var(--sharer-dc-onBackground);white-space:nowrap;text-overflow:ellipsis;width:calc(100% - 120px);font-size:18px;font-weight:500;overflow:hidden!important}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-name:hover{cursor:default}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon{aspect-ratio:1;border-radius:23%;height:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon:hover,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon:hover{cursor:pointer;background-color:var(--sharer-dc-secondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon:hover .applist-btns-icon-svg path,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon:hover .applist-btns-icon-svg path{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon .applist-btns-icon-svg path,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon .applist-btns-icon-svg path{fill:rgba(var(--sharer-dc-onSecondaryContainer-rgb),32%)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item:hover{background-color:rgba(var(--sharer-dc-secondaryContainer-rgb),32%)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container{flex-direction:column;justify-content:space-around;align-items:center;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg{width:calc(100% - 20px);max-width:195px}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .svg-fonts{fill:var(--sharer-dc-onBackground)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .sharer-logo-bg{fill:var(--sharer-dc-secondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .sharer-logo-fg{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg:hover{cursor:pointer}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container{flex-direction:row;justify-content:space-between;align-items:center;width:calc(100% - 20px);height:30px;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner,body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center{background-color:var(--sharer-dc-secondaryContainer);border:none;border-radius:6.9px;flex-direction:column;justify-content:space-around;align-items:center;height:100%;padding:0;display:flex}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner:hover,body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center:hover{cursor:pointer}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner{aspect-ratio:1}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner .icon-svg path{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center{color:var(--sharer-dc-onSecondaryContainer);white-space:nowrap;text-overflow:ellipsis;width:calc(100% - 88px);height:calc(100% - 8px);padding:4px;font-size:18px;overflow:hidden!important}@media (width<=434px){body #kpverse-sharer{align-items:end}body #kpverse-sharer .sharer-window{border-bottom-right-radius:0;border-bottom-left-radius:0;max-width:100%;box-shadow:inset 0 1px #0000,0 -22px 70px 4px #00000047,0 0 0 1px #00000014}}',C=!0;function c(){!0===C&&r.render(document.head,r.tag("style",{attributes:{id:"kpverse-sharer-css"},children:s}),{clearBeforeRender:!1,insertType:"append"}).then((function(){void 0===i("AppsIdList")&&a("AppsIdList",["x","wa","mstdn","tg","lnkdn","fb","gml","rdt","pntrst","snpcht"]),C=void 0}))}var l=void 0;function d(r){l=r}var h=void 0;function p(r){h=r}function u(){return document.getElementById("kpverse-sharer-button")}var v=function(r,e,t){if(t||2===arguments.length)for(var n,a=0,o=e.length;a>>7)^(e>>>n&1)*r;return t},g=function(r,e){for(var t=[],n=r.length,a=n;a;)for(var o=r[n-a--]^t.shift(),i=e.length;i--;)t[i]^=m(e[i],o);return t},w=function(r){for(var e=[function(){return 0==(t+n)%2},function(){return 0==t%2},function(){return 0==n%3},function(){return 0==(t+n)%3},function(){return 0==((t/2|0)+(n/3|0))%2},function(){return 0==t*n%2+t*n%3},function(){return 0==(t*n%2+t*n%3)%2},function(){return 0==((t+n)%2+t*n%3)%2}][r],t=a;t--;)for(var n=a;n--;)i[t][n]||(o[t][n]^=e())},b=function(){for(var r=function(r,e){e[6]||(r+=a),e.shift(),e.push(r)},e=function(e,n,o){return e&&(r(n,o),n=0),r(n+=a,o),t(o)},t=function(r){var e=r[5],t=e>0&&r[4]==e&&r[3]==3*e&&r[2]==e&&r[1]==e;return(t&&r[6]>=4*e&&r[0]>=e?1:0)+(t&&r[0]>=4*e&&r[6]>=e?1:0)},n=0,i=a*a,s=0,C=a;C--;){for(var d=[0,0,0,0,0,0,0],h=[0,0,0,0,0,0,0],p=!1,u=!1,v=0,f=0,m=a;m--;){o[C][m]==p?5==++v?n+=3:v>5&&n++:(r(v,d),n+=40*t(d),v=1,p=o[C][m]),o[m][C]==u?5==++f?n+=3:f>5&&n++:(r(f,h),n+=40*t(h),f=1,u=o[m][C]);var g=o[C][m];g&&s++,m&&C&&g==o[C][m-1]&&g==o[C-1][m]&&g==o[C-1][m-1]&&(n+=3)}n+=40*e(p,v,d)+40*e(u,f,h)}return n+10*(l(c(20*s-10*i)/i)-1)},H=function(r,e,t){for(;e--;)t.push(r>>>e&1)},V=function(r,e){return r.numBitsCharCount[(e+7)/17|0]},y=function(r,e){return 0!=(r>>>e&1)},x=function(r,e){for(var t=0,n=r.length;n--;){var a=r[n],o=V(a,e);if(1<40)throw"Version number out of range";var e=(16*r+128)*r+64;if(r>=2){var t=r/7|2;e-=(25*t-10)*t-55,r>=7&&(e-=36)}return e},M=function(r,e){for(var t=2;-2<=t;t--)for(var n=2;-2<=n;n--)B(r+n,e+t,1!=s(c(n),c(t)))},k=function(r,e){for(var t=4;-4<=t;t--)for(var n=4;-4<=n;n--){var o=s(c(n),c(t)),i=r+n,C=e+t;0<=i&&i>>9);var i=21522^(e<<10|n);if(i>>>15!=0)throw"Assertion error";for(o=0;o<=5;o++)B(8,o,y(i,o));for(B(8,7,y(i,6)),B(8,8,y(i,7)),B(7,8,y(i,8)),o=9;o<15;o++)B(14-o,8,y(i,o));for(o=0;o<8;o++)B(a-1-o,8,y(i,o));for(o=8;o<15;o++)B(8,a-15+o,y(i,o));B(8,a-8,1)},S=function(){for(var r=a;r--;)B(6,r,0==r%2),B(r,6,0==r%2);for(var t=function(){var r=[];if(e>1)for(var t=2+(e/7|0),n=32==e?26:2*l((a-13)/(2*t-2));t--;)r[t]=t*n+6;return r}(),n=r=t.length;n--;)for(var o=r;o--;)0==o&&0==n||0==o&&n==r-1||o==r-1&&0==n||M(t[o],t[n]);k(3,3),k(a-4,3),k(3,a-4),Z(0),function(){if(!(7>e)){for(var r=e,t=12;t--;)r=r<<1^7973*(r>>>11);var n=e<<12|r;if(t=18,n>>>18!=0)throw"Assertion error";for(;t--;){var o=a-11+t%3,i=t/3|0,s=y(n,t);B(o,i,s),B(i,o,s)}}}()},E=function(r){for(var e=[],t=(r=encodeURI(r),0);t0;s-=2){6==s&&--s;for(var C=0>(t=-t)?n:0,c=0;cs-2;--l)i[C][l]||(o[C][l]=y(r[e>>>3],7-(7&e)),++e);C+=t}}}(function(r){if(r.length!=_(e,t))throw"Invalid argument";for(var n=v[t[0]][e],a=u[t[0]][e],o=L(e)/8|0,i=n-o%n,s=o/n|0,C=[],c=function(r){var e=1,t=[];t[r-1]=1;for(var n=0;n=i)&&f.push(C[w][l]);return f}(C)),0>n){var d=1e9;for(l=8;l--;){w(l),Z(l);var h=b();d>h&&(d=h,n=l),w(l)}}w(n),Z(n),i=[]},P=function(r,e,t,n,a,o){if(void 0===a&&(a=1),void 0===o&&(o=40),void 0===n&&(n=-1),void 0===t&&(t=!0),!(1<=a&&a<=o&&o<=40)||n<-1||n>7)throw"Invalid value";for(var i=[],s=236,c=[],l=a;;){var d=x(r,l);if(d<=8*_(l,e))break;if(l>=o)throw"Data too long";l++}if(t)for(var h=(p=[f.H,f.Q,f.M]).length;h--;)d<=8*_(l,p[h])&&(e=p[h]);for(var p=0;pg)throw"Assertion error";if(H(0,C(4,g-i.length),i),H(0,(8-i.length%8)%8,i),i.length%8!=0)throw"Assertion error";for(;i.length>>3]|=i[h]<<7-(7&h);return R(l,e,c,n)};return function(){function e(r,e){for(var t in r=document.createElementNS(d,r),e||{})r.setAttribute(t,e[t]);return r}var t,n,i,s,C,l,d="http://www.w3.org/2000/svg",h="",p="string"==typeof r?{msg:r}:r||{},u=p.pal||["#000"],v=[1,0,0,1,l=(l=c(p.pad))>-1?l:4,l],m=void 0!==u[0]?u[0]:"#000",g=void 0!==u[1]?u[1]:0,w=p.vrb?0:1;for(T(p.msg||"",f[p.ecl]||f.M,0==p.ecb?0:1,p.mtx),C=a+2*l,i=a;i--;)for(s=0,n=a;n--;)o[i][n]&&(w?(s++,o[i][n-1]||(h+="M"+n+","+i+"h"+s+"v1h-"+s+"v-1z",s=0)):h+="M"+n+","+i+"h1v1h-1v-1z");return t=e("svg",{viewBox:[0,0,C,C].join(" "),width:"100%",style:"aspect-ratio: 1;",class:"sharer-qr",fill:m,"shape-rendering":"crispEdges",xmlns:d,version:"1.1"}),g&&t.appendChild(e("path",{fill:g,d:"M0,0V"+C+"H"+C+"V0H0Z"})),t.appendChild(e("path",{transform:"matrix("+v+")",d:h})),t}()}var W=' ';function X(){var e=Q(),t=$(),n=F();null!==e&&null!==t&&null!==n&&(r.render(e,r.tagList.apply(void 0,tr())),r.render(t,r.SVGParser(T)).then((function(){null!==t&&r.attachEventListeners(t,{click:q})})),r.render(n,"Feedback").then((function(){null!==n&&r.attachEventListeners(n,{click:P})})))}function Y(e){var t,n=Q(),a=$(),o=F();null!==n&&null!==a&&null!==o&&(r.render(n,r.SVGParser((t=z(e.url_format),K({msg:t,pad:0,ecl:"H",ecb:1,pal:["var(--sharer-dc-onSecondaryContainer)"]}).outerHTML))).then((function(){null==n||n.scrollTo({top:0})})),r.render(a,r.SVGParser(W)).then((function(){null!==a&&r.attachEventListeners(a,{click:X})})),r.render(o,"Download QR").then((function(){null!==o&&r.attachEventListeners(o,{click:function(){void 0!==S&&J(S.hostname,e.name)}})})))}var rr={gml:{id:"gml",name:"Email",url_format:"mailto:?subject={%text%}&body={%url%}"},mstdn:{id:"mstdn",name:"Mastodon",url_format:"https://toot.kytta.dev/?text={%text%}%0A{%url%}"},fb:{id:"fb",name:"Facebook",url_format:"https://www.facebook.com/sharer/sharer.php?t={%text%}&u={%url%}"},wa:{id:"wa",name:"WhatsApp",url_format:"https://api.whatsapp.com/send?text={%text%}%0A{%url%}"},x:{id:"x",name:"X",url_format:"https://twitter.com/intent/tweet?text={%text%}&url={%url%}"},lnkdn:{id:"lnkdn",name:"LinkedIn",url_format:"https://www.linkedin.com/shareArticle?mini=true&url={%url%}&title={%text%}"},rdt:{id:"rdt",name:"Reddit",url_format:"https://reddit.com/submit?title={%text%}&url={%url%}"},pntrst:{id:"pntrst",name:"Pinterest",url_format:"https://www.pinterest.com/pin/create/button/?description={%text%}&url={%url%}&method=button"},snpcht:{id:"snpcht",name:"Snapchat",url_format:"https://snapchat.com/scan?attachmentUrl={%url%}"},tg:{id:"tg",name:"Telegram",url_format:"https://telegram.me/share/url?url={%url%}&text={%text%}"}};function er(r){var e=i("AppsIdList");if(Array.isArray(e)){if(r>=e.length||r<=0)return;var t=e.splice(r,1)[0];e.unshift(t),a("AppsIdList",e)}}function tr(){var e=i("AppsIdList");return Array.isArray(e)?e.map((function(e,t){var n=rr[e];return r.tag("div",{attributes:{id:"applist-item-".concat(n.id),class:"applist-item"},children:r.tagList(r.tag("div",{attributes:{class:"applist-item-icon-container"},children:U(n.id)}),r.tag("span",{attributes:{class:"applist-item-name",title:n.name},children:n.name}),r.tag("div",{attributes:{class:"applist-item-qr-icon",title:"Show QR Code"},children:r.SVGParser(j),attachEventListeners:{click:function(){Y(n),er(t)}}}),r.tag("div",{attributes:{class:"applist-item-open-icon",title:"Open ".concat(n.name)},children:r.SVGParser(G),attachEventListeners:{click:function(){R(z(n.url_format)),er(t)}}}))})})):[]}function nr(t){if(!0!==h){if(!0===C&&c(),void 0!==t){var n=t.url,o=t.text;E(void 0!==n?n:location.href),B(void 0!==o?o:document.title)}else E(location.href),B(document.title);var i=1;!0===m&&(w(),i=400),setTimeout((function(){r.render(document.body,r.tag("div",{attributes:{id:"kpverse-sharer",class:"hide"},children:r.tag("div",{attributes:{class:"sharer-window"},children:r.tagList(r.tag("div",{attributes:{id:"sharer-downloadable-component"},children:r.tagList(r.tag("div",{attributes:{id:"sharer-applist-n-qr"},children:r.tagList.apply(void 0,tr())}),r.tag("div",{attributes:{class:"powered-by-sharer-container"},children:r.SVGParser(D)}))}),r.tag("div",{attributes:{id:"sharer-cntrl-btns-container"},children:r.tagList(r.tag("button",{attributes:{id:"sharer-cntrl-btn-left",class:"sharer-cntrl-btn-corner"},children:Z(!0),attachEventListeners:{click:function(){a("Theme",e.themeCycle());var t=x();null!==t&&r.render(t,Z())}}}),r.tag("button",{attributes:{id:"sharer-cntrl-btn-center"},children:"Feedback",attachEventListeners:{click:P}}),r.tag("button",{attributes:{id:"sharer-cntrl-btn-right",class:"sharer-cntrl-btn-corner"},children:r.SVGParser(T),attachEventListeners:{click:q}}))})),attachEventListeners:{click:function(){d(!1)}}}),attachEventListeners:{click:function(){(l||void 0===l)&&q(),d(!0)}}}),{clearBeforeRender:!1,insertType:"prepend"}).then((function(){setTimeout((function(){var e=b();null!==e&&(e.style.zIndex="".concat(f()),e.classList.remove("hide")),document.body.classList.add("sharer-is-open");var t=document.getElementById("powered-by-sharer-svg");t&&r.attachEventListeners(t,{click:function(){R("https://kpverse.in/sharer?utm_source=sharer&utm_medium=powered_by_sharer&utm_campaign=kpverse_sharer")}}),function(){var r=b();null!==r&&(r.style.height="".concat(document.documentElement.clientHeight,"px")),addEventListener("resize",y)}(),p(!0)}),1)}))}),i)}}var ar=' ';function or(){r.render(document.body,r.tag("div",{attributes:{id:"kpverse-sharer-button",class:"hide",title:"Click to Share!"},children:r.SVGParser(ar),attachEventListeners:{mouseenter:function(){var r=u();null==r||r.classList.add("sharer-icon-hover")},mouseleave:function(){var r=u();null==r||r.classList.remove("sharer-icon-hover")},click:function(){nr()}}}),{clearBeforeRender:!1,insertType:"prepend"}).then((function(){var r=u();r&&(r.style.zIndex="".concat(f()),setTimeout((function(){r&&r.classList.remove("hide")}),1))}))}var ir={activate:function(){!0!==m&&(!0===C&&c(),void 0===m&&g(!0),void 0===h&&or())},deactivate:function(){void 0!==m&&(!0===m&&g(void 0),w())}};"loading"===document.readyState?window.addEventListener("load",(function r(){c(),setTimeout((function(){window.removeEventListener("load",r)}),1e3)})):c(),console.log("Discover the incredible sharing capabilities of Sharer from KPVERSE.\n\nFor more information about Sharer, visit https://kpverse.in/sharer?utm_source=sharer&utm_medium=browser_console&utm_campaign=kpverse_sharer.");var sr=Object.freeze({__proto__:null,VERSION:N,button:ir,close:q,open:nr,setColor:function(r){var e={open:nr,close:q};if(A){try{A.setColor(r||"#2596D1")}catch(r){console.warn(r)}a("Color",r||"#2596D1")}else console.warn('"sharerDynamicColors" is not defined.');return e}});window.Sharer=sr}(Dominar,DynamicColors,html2canvas); \ No newline at end of file diff --git a/assets/closeIcon.svg b/assets/closeIcon.svg deleted file mode 100644 index 0d12d8d..0000000 --- a/assets/closeIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/emlIcon.svg b/assets/emlIcon.svg deleted file mode 100644 index 737031f..0000000 --- a/assets/emlIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/fbIcon.svg b/assets/fbIcon.svg deleted file mode 100644 index 6292ca2..0000000 --- a/assets/fbIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/kooIcon.svg b/assets/kooIcon.svg deleted file mode 100644 index 8419723..0000000 --- a/assets/kooIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/lnkdnIcon.svg b/assets/lnkdnIcon.svg deleted file mode 100644 index 604c876..0000000 --- a/assets/lnkdnIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/opengraph.jpg b/assets/opengraph.jpg deleted file mode 100644 index e53eb0d..0000000 Binary files a/assets/opengraph.jpg and /dev/null differ diff --git a/assets/pntrstIcon.svg b/assets/pntrstIcon.svg deleted file mode 100644 index 30fdf6b..0000000 --- a/assets/pntrstIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/rdtIcon.svg b/assets/rdtIcon.svg deleted file mode 100644 index c9bd7d9..0000000 --- a/assets/rdtIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/sharer-preview-mac-iphone.png b/assets/sharer-preview-mac-iphone.png deleted file mode 100644 index e78fda4..0000000 Binary files a/assets/sharer-preview-mac-iphone.png and /dev/null differ diff --git a/assets/sharer-preview.jpg b/assets/sharer-preview.jpg deleted file mode 100644 index 9402bb2..0000000 Binary files a/assets/sharer-preview.jpg and /dev/null differ diff --git a/assets/sharerIcon.svg b/assets/sharerIcon.svg deleted file mode 100644 index 10e77e3..0000000 --- a/assets/sharerIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/snpchtIcon.svg b/assets/snpchtIcon.svg deleted file mode 100644 index f75006e..0000000 --- a/assets/snpchtIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/tgIcon.svg b/assets/tgIcon.svg deleted file mode 100644 index fcf48bc..0000000 --- a/assets/tgIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/twIcon.svg b/assets/twIcon.svg deleted file mode 100644 index cff86f3..0000000 --- a/assets/twIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/assets/waIcon.svg b/assets/waIcon.svg deleted file mode 100644 index 86d7633..0000000 --- a/assets/waIcon.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/bundle/sharer.esm.js b/bundle/sharer.esm.js deleted file mode 100644 index 9738265..0000000 --- a/bundle/sharer.esm.js +++ /dev/null @@ -1,898 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-04-22T09:23:57.921Z -*/ -const cdn = { - url: "https://patelka2211.github.io/sharer/", - // url: "http://localhost:5500/", // For development purpose only. - getPath(path) { - if (typeof path === "string") - return this.url + path; - return this.url + path.join("/"); - }, -}; - -class json2html { - constructor(root) { - this.root = root; - this.list = []; - } - append(input) { - this.list.push(input); - return this; - } - render(input = this.list, root = this.root, clearRoot = true) { - if (clearRoot) - root.innerHTML = ""; - input.forEach((item) => { - for (const key in item) { - if (Object.prototype.hasOwnProperty.call(item, key)) { - const element = document.createElement(key); - const value = item[key]; - j2h.setAttribute(element, value[0]); - if (typeof value[1] == "string") { - element.innerHTML = value[1]; - } - else if (typeof value[1] == "object") { - if (value[1].length === undefined) { - this.render([value[1]], element, false); - } - else if (value[1].length !== undefined) { - this.render(value[1], element, false); - } - } - root.appendChild(element); - } - } - }); - } -} -const j2h = { - setRoot: (root) => { - return new json2html(root); - }, - element: (tagName, attributes = {}, innerHTML = "") => { - return { - [tagName]: [attributes, innerHTML], - }; - }, - setAttribute: (element, attributes) => { - if (element instanceof json2html) { - element = element.root; - } - if (typeof attributes === "string") { - element.setAttribute(attributes, ""); - } - else if (typeof attributes === "object" && - attributes.length !== undefined && - typeof attributes[0] === "string") { - for (let index = 0; index < attributes.length; index++) { - const item = attributes[index]; - element.setAttribute(item, ""); - } - } - else if (attributes.length === undefined) { - for (const key in attributes) { - element.setAttribute(key, attributes[key].toString()); - } - } - else { - attributes.map((item) => { - if (item.length === undefined) { - let pairedAttribute = item; - for (const key in pairedAttribute) { - element.setAttribute(key, pairedAttribute[key].toString()); - } - } - else if (typeof item === "object") { - item.map((item) => { - element.setAttribute(item, ""); - }); - } - else { - element.setAttribute(item, ""); - } - }); - } - return element; - }, -}; - -const elements = { - sharer_by_KP: () => document.getElementById("sharer-by-KP"), - sharer_container: () => document.getElementById("sharer-container"), - sharer_footer: () => document.getElementById("sharer-footer"), - sharer_footer_text: () => document.getElementById("sharer-footer-text"), - sharer_window: () => document.getElementById("sharer-window"), - sharer_content: () => document.getElementById("sharer-content-main"), - header_close_icon: () => document.getElementById("header-close-icon"), - header_icon_container: () => document.getElementById("header-icon-container"), - header_title: () => document.getElementById("header-title"), - credits_container: () => document.getElementById("credits-container"), -}; - -function openWebsite(url = "https://patelka2211.github.io/sharer/") { - window.open(url, "_blank"); -} - -function setFooterInterface(inputText = "Powered by Sharer", fontColor = "#5900ff", bgColor = "#5900ff14", actionPerform = () => openWebsite()) { - ((element) => { - element.innerText = inputText; - element.style.color = fontColor; - })(elements.sharer_footer_text()); - ((element) => { - element.style.backgroundColor = bgColor; - element.onclick = actionPerform; - })(elements.sharer_footer()); -} - -function getCDNsvgs(filename) { - return j2h.element("img", { - src: cdn.getPath(["assets", filename]), - }); -} -const svgs = { - local: { - sharerIcon: ` `, - closeIcon: ` `, - arrowLeftIcon: ` `, - arrowRightIcon: ` `, - }, - cdn: (function (obj) { - [ - "wa", - "fb", - "tw", - "eml", - "lnkdn", - "pntrst", - "rdt", - "snpcht", - "koo", - "tg", - ].forEach((app) => { - obj[app] = getCDNsvgs(`${app}Icon.svg`); - }); - return obj; - })({}), -}; - -function QRCode(r) { - var n, t, o, e, a = [], f = [], i = Math.max, u = Math.min, h = Math.abs, v = Math.ceil, c = /^[0-9]*$/, s = /^[A-Z0-9 $%*+.\/:-]*$/, l = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:", g = [ - [ - -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, - 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, - 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, - ], - [ - -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, - 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, - 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - ], d = [ - [ - -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, - 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, - 22, 24, 25, - ], - [ - -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, - 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, - 38, 40, 43, 45, 47, 49, - ], - [ - -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, - 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, - 53, 56, 59, 62, 65, 68, - ], - [ - -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, - 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, - 60, 63, 66, 70, 74, 77, 81, - ], - ], m = { L: [0, 1], M: [1, 0], Q: [2, 3], H: [3, 2] }, p = function (r, n) { - for (var t = 0, o = 8; o--;) - t = (t << 1) ^ (285 * (t >>> 7)) ^ (((n >>> o) & 1) * r); - return t; - }, C = function (r, n) { - for (var t = [], o = r.length, e = o; e;) - for (var a = r[o - e--] ^ t.shift(), f = n.length; f--;) - t[f] ^= p(n[f], a); - return t; - }, w = function (r) { - for (var n = [ - function () { - return 0 == (t + o) % 2; - }, - function () { - return 0 == t % 2; - }, - function () { - return 0 == o % 3; - }, - function () { - return 0 == (t + o) % 3; - }, - function () { - return 0 == (((t / 2) | 0) + ((o / 3) | 0)) % 2; - }, - function () { - return 0 == ((t * o) % 2) + ((t * o) % 3); - }, - function () { - return 0 == (((t * o) % 2) + ((t * o) % 3)) % 2; - }, - function () { - return 0 == (((t + o) % 2) + ((t * o) % 3)) % 2; - }, - ][r], t = e; t--;) - for (var o = e; o--;) - f[t][o] || (a[t][o] ^= n()); - }, b = function () { - for (var r = function (r, n) { - n[6] || (r += e), n.shift(), n.push(r); - }, n = function (n, o, a) { - return n && (r(o, a), (o = 0)), r((o += e), a), t(a); - }, t = function (r) { - var n = r[5], t = n > 0 && - r[4] == n && - r[3] == 3 * n && - r[2] == n && - r[1] == n; - return ((t && r[6] >= 4 * n && r[0] >= n ? 1 : 0) + - (t && r[0] >= 4 * n && r[6] >= n ? 1 : 0)); - }, o = 0, f = e * e, i = 0, u = e; u--;) { - for (var c = [0, 0, 0, 0, 0, 0, 0], s = [0, 0, 0, 0, 0, 0, 0], l = !1, g = !1, d = 0, m = 0, p = e; p--;) { - a[u][p] == l - ? 5 == ++d - ? (o += 3) - : d > 5 && o++ - : (r(d, c), (o += 40 * t(c)), (d = 1), (l = a[u][p])), - a[p][u] == g - ? 5 == ++m - ? (o += 3) - : m > 5 && o++ - : (r(m, s), - (o += 40 * t(s)), - (m = 1), - (g = a[p][u])); - var C = a[u][p]; - C && i++, - p && - u && - C == a[u][p - 1] && - C == a[u - 1][p] && - C == a[u - 1][p - 1] && - (o += 3); - } - o += 40 * n(l, d, c) + 40 * n(g, m, s); - } - return (o += 10 * (v(h(20 * i - 10 * f) / f) - 1)); - }, A = function (r, n, t) { - for (; n--;) - t.push((r >>> n) & 1); - }, M = function (r, n) { - return r.numBitsCharCount[((n + 7) / 17) | 0]; - }, B = function (r, n) { - return 0 != ((r >>> n) & 1); - }, x = function (r, n) { - for (var t = 0, o = r.length; o--;) { - var e = r[o], a = M(e, n); - if (1 << a <= e.numChars) - return 1 / 0; - t += 4 + a + e.bitData.length; - } - return t; - }, D = function (r) { - if (r < 1 || r > 40) - throw "Version number out of range"; - var n = (16 * r + 128) * r + 64; - if (r >= 2) { - var t = (r / 7) | 2; - (n -= (25 * t - 10) * t - 55), r >= 7 && (n -= 36); - } - return n; - }, I = function (r, n) { - for (var t = 2; -2 <= t; t--) - for (var o = 2; -2 <= o; o--) - E(r + o, n + t, 1 != i(h(o), h(t))); - }, H = function (r, n) { - for (var t = 4; -4 <= t; t--) - for (var o = 4; -4 <= o; o--) { - var a = i(h(o), h(t)), f = r + o, u = n + t; - 0 <= f && - f < e && - 0 <= u && - u < e && - E(f, u, 2 != a && 4 != a); - } - }, $ = function (r) { - for (var n = (t[1] << 3) | r, o = n, a = 10; a--;) - o = (o << 1) ^ (1335 * (o >>> 9)); - var f = 21522 ^ ((n << 10) | o); - if (f >>> 15 != 0) - throw "Assertion error"; - for (a = 0; a <= 5; a++) - E(8, a, B(f, a)); - E(8, 7, B(f, 6)), E(8, 8, B(f, 7)), E(7, 8, B(f, 8)); - for (a = 9; a < 15; a++) - E(14 - a, 8, B(f, a)); - for (a = 0; a < 8; a++) - E(e - 1 - a, 8, B(f, a)); - for (a = 8; a < 15; a++) - E(8, e - 15 + a, B(f, a)); - E(8, e - 8, 1); - }, O = function () { - for (var r = e; r--;) - E(6, r, 0 == r % 2), E(r, 6, 0 == r % 2); - for (var t = (function () { - var r = []; - if (n > 1) - for (var t = 2 + ((n / 7) | 0), o = 32 == n - ? 26 - : 2 * v((e - 13) / (2 * t - 2)); t--;) - r[t] = t * o + 6; - return r; - })(), o = (r = t.length); o--;) - for (var a = r; a--;) - (0 == a && 0 == o) || - (0 == a && o == r - 1) || - (a == r - 1 && 0 == o) || - I(t[a], t[o]); - H(3, 3), - H(e - 4, 3), - H(3, e - 4), - $(0), - (function () { - if (!(7 > n)) { - for (var r = n, t = 12; t--;) - r = (r << 1) ^ (7973 * (r >>> 11)); - var o = (n << 12) | r; - if (((t = 18), o >>> 18 != 0)) - throw "Assertion error"; - for (; t--;) { - var a = e - 11 + (t % 3), f = (t / 3) | 0, i = B(o, t); - E(a, f, i), E(f, a, i); - } - } - })(); - }, Q = function (r) { - if (r.length != V(n, t)) - throw "Invalid argument"; - for (var o = d[t[0]][n], e = g[t[0]][n], a = (D(n) / 8) | 0, f = o - (a % o), i = (a / o) | 0, u = [], h = (function (r) { - var n = 1, t = []; - t[r - 1] = 1; - for (var o = 0; o < r; o++) { - for (var e = 0; e < r; e++) - t[e] = p(t[e], n) ^ t[e + 1]; - n = p(n, 2); - } - return t; - })(e), v = 0, c = 0; v < o; v++) { - var s = r.slice(c, c + i - e + (v < f ? 0 : 1)); - c += s.length; - var l = C(s, h); - v < f && s.push(0), u.push(s.concat(l)); - } - var m = []; - for (v = 0; v < u[0].length; v++) - for (var w = 0; w < u.length; w++) - (v != i - e || w >= f) && m.push(u[w][v]); - return m; - }, S = function (r) { - for (var n = [], t = ((r = encodeURI(r)), 0); t < r.length; t++) - "%" != r.charAt(t) - ? n.push(r.charCodeAt(t)) - : (n.push(parseInt(r.substr(t + 1, 2), 16)), (t += 2)); - return n; - }, V = function (r, n) { - return ((D(r) / 8) | 0) - g[n[0]][r] * d[n[0]][r]; - }, E = function (r, n, t) { - (a[n][r] = t ? 1 : 0), (f[n][r] = 1); - }, R = function (r) { - for (var n = [], t = 0, o = r; t < o.length; t++) { - var e = o[t]; - A(e, 8, n); - } - return { - modeBits: 4, - numBitsCharCount: [8, 16, 16], - numChars: r.length, - bitData: n, - }; - }, Z = function (r) { - if (!c.test(r)) - throw "String contains non-numeric characters"; - for (var n = [], t = 0; t < r.length;) { - var o = u(r.length - t, 3); - A(parseInt(r.substr(t, o), 10), 3 * o + 1, n), (t += o); - } - return { - modeBits: 1, - numBitsCharCount: [10, 12, 14], - numChars: r.length, - bitData: n, - }; - }, z = function (r) { - if (!s.test(r)) - throw "String contains unencodable characters in alphanumeric mode"; - var n, t = []; - for (n = 0; n + 2 <= r.length; n += 2) { - var o = 45 * l.indexOf(r.charAt(n)); - (o += l.indexOf(r.charAt(n + 1))), A(o, 11, t); - } - return (n < r.length && A(l.indexOf(r.charAt(n)), 6, t), - { - modeBits: 2, - numBitsCharCount: [9, 11, 13], - numChars: r.length, - bitData: t, - }); - }, L = function (r, n, t, o) { - var e = (function (r) { - return "" == r - ? [] - : c.test(r) - ? [Z(r)] - : s.test(r) - ? [z(r)] - : [R(S(r))]; - })(r); - return U(e, n, t, o); - }, N = function (r, i, u, h) { - (t = i), (o = h); - for (var v = (e = 4 * (n = r) + 17); v--;) - (a[v] = []), (f[v] = []); - if ((O(), - (function (r) { - for (var n = 0, t = 1, o = e - 1, i = o; i > 0; i -= 2) { - 6 == i && --i; - for (var u = 0 > (t = -t) ? o : 0, h = 0; h < e; ++h) { - for (var v = i; v > i - 2; --v) - f[u][v] || - ((a[u][v] = B(r[n >>> 3], 7 - (7 & n))), - ++n); - u += t; - } - } - })(Q(u)), - 0 > o)) { - var c = 1e9; - for (v = 8; v--;) { - w(v), $(v); - var s = b(); - c > s && ((c = s), (o = v)), w(v); - } - } - w(o), $(o), (f = []); - }, U = function (r, n, t, o, e, a) { - if ((void 0 === e && (e = 1), - void 0 === a && (a = 40), - void 0 === o && (o = -1), - void 0 === t && (t = !0), - !(1 <= e && e <= a && a <= 40) || o < -1 || o > 7)) - throw "Invalid value"; - for (var f = [], i = 236, h = [], v = e;;) { - var c = x(r, v); - if (c <= 8 * V(v, n)) - break; - if (v >= a) - throw "Data too long"; - v++; - } - if (t) - for (var s = (l = [m.H, m.Q, m.M]).length; s--;) - c <= 8 * V(v, l[s]) && (n = l[s]); - for (var l = 0; l < r.length; l++) { - var g = r[l]; - A(g.modeBits, 4, f), A(g.numChars, M(g, v), f); - for (var d = 0, p = g.bitData; d < p.length; d++) - f.push(p[d]); - } - if (f.length != c) - throw "Assertion error"; - var C = 8 * V(v, n); - if (f.length > C) - throw "Assertion error"; - if ((A(0, u(4, C - f.length), f), - A(0, (8 - (f.length % 8)) % 8, f), - f.length % 8 != 0)) - throw "Assertion error"; - for (; f.length < C;) - A(i, 8, f), (i ^= 253); - for (s = f.length; s--;) - h[s >>> 3] |= f[s] << (7 - (7 & s)); - return N(v, n, h, o); - }; - return (function () { - function n(r) { - return /^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(r); - } - function t(r, n) { - for (var t in ((r = document.createElementNS(s, r)), n || {})) - r.setAttribute(t, n[t]); - return r; - } - var o, f, i, u, v, c, s = "http://www.w3.org/2000/svg", l = "", g = "string" == typeof r ? { msg: r } : r || {}, d = g.pal || ["#000"], - // p = h(g.dim) || 256, - p = "100%", C = [1, 0, 0, 1, (c = (c = h(g.pad)) > -1 ? c : 4), c], w = n((w = d[0])) ? w : "#000", b = n((b = d[1])) ? b : 0, A = g.vrb ? 0 : 1; - for (L(g.msg || "", m[g.ecl] || m.M, 0 == g.ecb ? 0 : 1, g.mtx), - v = e + 2 * c, - i = e; i--;) - for (u = 0, f = e; f--;) - a[i][f] && - (A - ? (u++, - a[i][f - 1] || - ((l += - "M" + - f + - "," + - i + - "h" + - u + - "v1h-" + - u + - "v-1z"), - (u = 0))) - : (l += "M" + f + "," + i + "h1v1h-1v-1z")); - return ((o = t("svg", { - viewBox: [0, 0, v, v].join(" "), - width: p, - height: p, - fill: w, - "shape-rendering": "crispEdges", - xmlns: s, - version: "1.1", - })), - b && - o.appendChild(t("path", { fill: b, d: "M0,0V" + v + "H" + v + "V0H0Z" })), - o.appendChild(t("path", { transform: "matrix(" + C + ")", d: l })), - o); - })(); -} -function qr_svg(input_data) { - let svgNode = QRCode({ - msg: input_data, - // dim: 256, - pad: 0, - // pad: 40, - // mtx: 7, - // ecl: "H", - // ecb: 0, - pal: ["#000000", "#ffffff"], - // vrb: 1, - }), _ = new XMLSerializer(); - return `data:image/svg+xml;base64,${btoa(_.serializeToString(svgNode))}`; -} - -const applist = { - wa: { - id: "wa", - name: "WhatsApp", - theme: { primary: "#25D366", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://api.whatsapp.com/send?text=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - fb: { - id: "fb", - name: "Facebook", - theme: { primary: "#0c87ef", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent(text)}&u=${encodeURIComponent(input_url)}`; - }, - }, - tw: { - id: "tw", - name: "Twitter", - theme: { primary: "#1D9BF0", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`; - }, - }, - eml: { - id: "eml", - name: "Email", - theme: { primary: "#EA4335", secondary: "#ffffff" }, - url_format: (body, subject = "") => { - return `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; - }, - }, - lnkdn: { - id: "lnkdn", - name: "LinkedIn", - theme: { primary: "#0A66C2", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.linkedin.com/cws/share?url=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - pntrst: { - id: "pntrst", - name: "Pinterest", - theme: { primary: "#E60123", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&method=button`; - }, - }, - rdt: { - id: "rdt", - name: "Reddit", - theme: { primary: "#e45b34", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://reddit.com/submit?title=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}`; - }, - }, - snpcht: { - id: "snpcht", - name: "Snapchat", - theme: { primary: "#fffC00", secondary: "#000000" }, - url_format: (input_url, text = "") => { - return `https://snapchat.com/scan?attachmentUrl=${encodeURIComponent(input_url)}`; - }, - }, - koo: { - id: "koo", - name: "Koo", - theme: { primary: "#FACD00", secondary: "#383838" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.kooapp.com/create?title=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - tg: { - id: "tg", - name: "Telegram", - theme: { primary: "#2aa1da", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://t.me/share/url?url=${encodeURIComponent(input_url)}&text=${encodeURIComponent(text)}`; - }, - }, -}; - -let QRInterfaceState = false; -let default_url = window.location.href, default_text = document.title; -function setSharerText$1(text) { - default_text = text; -} -function setSharerURL$1(url) { - default_url = url; -} -function setDefaultSharerURL$1() { - default_url = window.location.href; -} -function setDefaultSharerText$1() { - default_text = document.title; -} -function openQRInterfaceState() { - QRInterfaceState = true; -} -function closeQRInterfaceState() { - QRInterfaceState = false; -} -function isQRInterfaceStateOpen() { - return QRInterfaceState; -} -function revertBackToRoot() { - ((element) => { - element.innerHTML = svgs.local.sharerIcon; - element.onclick = () => openWebsite(); - })(elements.header_icon_container()); - elements.header_title().innerText = "Sharer by KP"; - ((element) => { - element.style.height = "auto"; - element.style.aspectRatio = "1"; - })(elements.sharer_content()); - setApplistInterface(); - closeQRInterfaceState(); -} -function setQRInterface(appid) { - let sharer_content = j2h.setRoot(elements.sharer_content()), url_to_be_shared = applist[appid].url_format(default_url, default_text); - sharer_content - .append(j2h.element("div", { - class: "sharer-qr-container", - }, j2h.element("div", { - class: "sharer-qr", - style: `background: url(${qr_svg(url_to_be_shared)})`, - }, svgs.cdn[appid]))) - .append(j2h.element("div", { class: "sharer-credits" }, j2h.element("div", { id: "credits-container" }, [ - j2h.element("div", { class: "credits-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { class: "credits-text" }, "Powered by Sharer"), - ]))); - sharer_content.render(); - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - elements.credits_container().onclick = () => openWebsite(); - openQRInterfaceState(); - ((element) => { - element.innerHTML = svgs.local.arrowLeftIcon; - element.onclick = revertBackToRoot; - })(elements.header_icon_container()); - ((app_details) => { - // elements.header_title().innerText = `Share on ${app_details.name}`; - elements.header_title().innerText = `Scan to open ${app_details.name}`; - setFooterInterface(`Open ${app_details.name}`, app_details.theme.secondary, app_details.theme.primary, () => { - openWebsite(url_to_be_shared); - }); - })(applist[appid]); -} -function setApplistInterface() { - let applist_html = j2h.setRoot(elements.sharer_content()); - Object.keys(applist).forEach((id) => { - applist_html.append(j2h.element("div", { id: `open-${id}-qr`, class: "sharer-applist-item" }, [ - j2h.element("div", { class: "sharer-applist-icon-container" }, svgs.cdn[id]), - j2h.element("div", { class: "sharer-applist-app-name" }, applist[id].name), - j2h.element("div", { class: "sharer-applist-arrow-right-icon" }, svgs.local.arrowRightIcon), - ])); - }); - applist_html.render(); - Object.keys(applist).forEach((id) => { - document.getElementById(`open-${id}-qr`).onclick = - () => { - setQRInterface(id); - }; - }); - setFooterInterface(); - closeQRInterfaceState(); -} - -let resizeLock = false; -function resizeObserverAction() { - if (resizeLock) - return; - resizeLock = true; - setTimeout(() => { - resizeLock = false; - elements.sharer_container().style.height = `${document.documentElement.clientHeight - 12}px`; - if (isQRInterfaceStateOpen()) { - elements.sharer_content().style.height = `${elements.sharer_content().offsetWidth + 51}px`; - } - }, 500); -} -function startResizeObserver() { - window.addEventListener("resize", resizeObserverAction); -} -function closeResizeObserver() { - window.removeEventListener("resize", resizeObserverAction); -} - -let continue_to_close = true; -function setContinueToCloseFalse() { - continue_to_close = false; -} -function closeSharer$1() { - if (continue_to_close) { - try { - elements.sharer_container().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().remove(); - closeResizeObserver(); - }, 100); - }, 300); - document.body.classList.remove("sharer-opened"); - try { - ((sharer_button) => { - sharer_button.classList.remove("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - } - catch (error) { - console.log(error); - } - } - continue_to_close = true; -} - -function setSharerRoot() { - const Sharer_By_KP = document.createElement("div"); - j2h.setAttribute(Sharer_By_KP, { id: "sharer-by-KP", class: "hide" }); - const sharer_root = j2h.setRoot(Sharer_By_KP); - sharer_root.append(j2h.element("div", { id: "sharer-container", class: "hide" }, j2h.element("div", { id: "sharer-window" }, [ - j2h.element("div", { class: "sharer-header" }, [ - j2h.element("div", { id: "header-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { id: "header-title" }, "Sharer by KP"), - j2h.element("div", { id: "header-close-icon" }, svgs.local.closeIcon), - ]), - j2h.element("div", { id: "sharer-content-main" }), - j2h.element("div", { id: "sharer-footer" }, j2h.element("div", { id: "sharer-footer-text" })), - ]))); - document.body.prepend(Sharer_By_KP); - sharer_root.render(); -} -function openSharer$1() { - try { - document.getElementById("sharer-by-KP").remove(); - } - catch (error) { } - try { - ((sharer_button) => { - sharer_button.classList.add("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - setSharerRoot(); - setTimeout(() => { - elements.sharer_by_KP().classList.remove("hide"); - elements.sharer_container().classList.remove("hide"); - }, 10); - elements.sharer_window().onclick = setContinueToCloseFalse; - elements.sharer_container().onclick = closeSharer$1; - elements.header_close_icon().onclick = closeSharer$1; - [elements.header_icon_container(), elements.sharer_footer()].forEach((element) => { - element.onclick = () => openWebsite(); - }); - setApplistInterface(); - setFooterInterface(); - resizeObserverAction(); - startResizeObserver(); - document.body.classList.add("sharer-opened"); -} - -var sharer_functions = { - setURL: function (url) { - setSharerURL$1(url); - return this; - }, - setDefaultURL: function () { - setDefaultSharerURL$1(); - return this; - }, - setText: function (text) { - setSharerText$1(text); - return this; - }, - setDefaultText: function () { - setDefaultSharerText$1(); - return this; - }, - open: function () { - openSharer$1(); - }, - close: function () { - closeSharer$1(); - }, -}; -// Adding Sharer css programmatically -document.head.appendChild(j2h.setAttribute(document.createElement("link"), { - id: "sharer_css_file", - rel: "stylesheet", - href: cdn.getPath(["bundle", "sharerByKP.css"]), -})); -try { - localStorage.removeItem("sharer_deployment_sha"); // To be removed after some time -} -catch (error) { } - -// Destructuring all the functions -const setSharerURL = sharer_functions.setURL, setDefaultSharerURL = sharer_functions.setDefaultURL, setSharerText = sharer_functions.setText, setDefaultSharerText = sharer_functions.setDefaultText, openSharer = sharer_functions.open, closeSharer = sharer_functions.close; - -export { closeSharer, openSharer, setDefaultSharerText, setDefaultSharerURL, setSharerText, setSharerURL }; diff --git a/bundle/sharer.esm.min.js b/bundle/sharer.esm.min.js deleted file mode 100644 index 9ec2d30..0000000 --- a/bundle/sharer.esm.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-04-22T09:23:57.921Z -*/ -const cdn={url:"https://patelka2211.github.io/sharer/",getPath(e){return"string"==typeof e?this.url+e:this.url+e.join("/")}};class json2html{constructor(e){this.root=e,this.list=[]}append(e){return this.list.push(e),this}render(e=this.list,t=this.root,r=!0){r&&(t.innerHTML=""),e.forEach((e=>{for(const r in e)if(Object.prototype.hasOwnProperty.call(e,r)){const n=document.createElement(r),o=e[r];j2h.setAttribute(n,o[0]),"string"==typeof o[1]?n.innerHTML=o[1]:"object"==typeof o[1]&&(void 0===o[1].length?this.render([o[1]],n,!1):void 0!==o[1].length&&this.render(o[1],n,!1)),t.appendChild(n)}}))}}const j2h={setRoot:e=>new json2html(e),element:(e,t={},r="")=>({[e]:[t,r]}),setAttribute:(e,t)=>{if(e instanceof json2html&&(e=e.root),"string"==typeof t)e.setAttribute(t,"");else if("object"==typeof t&&void 0!==t.length&&"string"==typeof t[0])for(let r=0;r{if(void 0===t.length){let r=t;for(const t in r)e.setAttribute(t,r[t].toString())}else"object"==typeof t?t.map((t=>{e.setAttribute(t,"")})):e.setAttribute(t,"")}));return e}},elements={sharer_by_KP:()=>document.getElementById("sharer-by-KP"),sharer_container:()=>document.getElementById("sharer-container"),sharer_footer:()=>document.getElementById("sharer-footer"),sharer_footer_text:()=>document.getElementById("sharer-footer-text"),sharer_window:()=>document.getElementById("sharer-window"),sharer_content:()=>document.getElementById("sharer-content-main"),header_close_icon:()=>document.getElementById("header-close-icon"),header_icon_container:()=>document.getElementById("header-icon-container"),header_title:()=>document.getElementById("header-title"),credits_container:()=>document.getElementById("credits-container")};function openWebsite(e="https://patelka2211.github.io/sharer/"){window.open(e,"_blank")}function setFooterInterface(e="Powered by Sharer",t="#5900ff",r="#5900ff14",n=(()=>openWebsite())){var o;(o=elements.sharer_footer_text()).innerText=e,o.style.color=t,(e=>{e.style.backgroundColor=r,e.onclick=n})(elements.sharer_footer())}function getCDNsvgs(e){return j2h.element("img",{src:cdn.getPath(["assets",e])})}const svgs={local:{sharerIcon:' ',closeIcon:' ',arrowLeftIcon:' ',arrowRightIcon:' '},cdn:function(e){return["wa","fb","tw","eml","lnkdn","pntrst","rdt","snpcht","koo","tg"].forEach((t=>{e[t]=getCDNsvgs(`${t}Icon.svg`)})),e}({})};function QRCode(e){var t,r,n,o,a=[],s=[],i=Math.max,c=Math.min,l=Math.abs,h=Math.ceil,f=/^[0-9]*$/,d=/^[A-Z0-9 $%*+.\/:-]*$/,u="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",m=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],p=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],v={L:[0,1],M:[1,0],Q:[2,3],H:[3,2]},g=function(e,t){for(var r=0,n=8;n--;)r=r<<1^285*(r>>>7)^(t>>>n&1)*e;return r},C=function(e,t){for(var r=[],n=e.length,o=n;o;)for(var a=e[n-o--]^r.shift(),s=t.length;s--;)r[s]^=g(t[s],a);return r},_=function(e){for(var t=[function(){return 0==(r+n)%2},function(){return 0==r%2},function(){return 0==n%3},function(){return 0==(r+n)%3},function(){return 0==((r/2|0)+(n/3|0))%2},function(){return 0==r*n%2+r*n%3},function(){return 0==(r*n%2+r*n%3)%2},function(){return 0==((r+n)%2+r*n%3)%2}][e],r=o;r--;)for(var n=o;n--;)s[r][n]||(a[r][n]^=t())},w=function(){for(var e=function(e,t){t[6]||(e+=o),t.shift(),t.push(e)},t=function(t,n,a){return t&&(e(n,a),n=0),e(n+=o,a),r(a)},r=function(e){var t=e[5],r=t>0&&e[4]==t&&e[3]==3*t&&e[2]==t&&e[1]==t;return(r&&e[6]>=4*t&&e[0]>=t?1:0)+(r&&e[0]>=4*t&&e[6]>=t?1:0)},n=0,s=o*o,i=0,c=o;c--;){for(var f=[0,0,0,0,0,0,0],d=[0,0,0,0,0,0,0],u=!1,m=!1,p=0,v=0,g=o;g--;){a[c][g]==u?5==++p?n+=3:p>5&&n++:(e(p,f),n+=40*r(f),p=1,u=a[c][g]),a[g][c]==m?5==++v?n+=3:v>5&&n++:(e(v,d),n+=40*r(d),v=1,m=a[g][c]);var C=a[c][g];C&&i++,g&&c&&C==a[c][g-1]&&C==a[c-1][g]&&C==a[c-1][g-1]&&(n+=3)}n+=40*t(u,p,f)+40*t(m,v,d)}return n+10*(h(l(20*i-10*s)/s)-1)},y=function(e,t,r){for(;t--;)r.push(e>>>t&1)},b=function(e,t){return e.numBitsCharCount[(t+7)/17|0]},I=function(e,t){return 0!=(e>>>t&1)},x=function(e,t){for(var r=0,n=e.length;n--;){var o=e[n],a=b(o,t);if(1<40)throw"Version number out of range";var t=(16*e+128)*e+64;if(e>=2){var r=e/7|2;t-=(25*r-10)*r-55,e>=7&&(t-=36)}return t},R=function(e,t){for(var r=2;-2<=r;r--)for(var n=2;-2<=n;n--)j(e+n,t+r,1!=i(l(n),l(r)))},L=function(e,t){for(var r=4;-4<=r;r--)for(var n=4;-4<=n;n--){var a=i(l(n),l(r)),s=e+n,c=t+r;0<=s&&s>>9);var s=21522^(t<<10|n);if(s>>>15!=0)throw"Assertion error";for(a=0;a<=5;a++)j(8,a,I(s,a));for(j(8,7,I(s,6)),j(8,8,I(s,7)),j(7,8,I(s,8)),a=9;a<15;a++)j(14-a,8,I(s,a));for(a=0;a<8;a++)j(o-1-a,8,I(s,a));for(a=8;a<15;a++)j(8,o-15+a,I(s,a));j(8,o-8,1)},k=function(){for(var e=o;e--;)j(6,e,0==e%2),j(e,6,0==e%2);for(var r=function(){var e=[];if(t>1)for(var r=2+(t/7|0),n=32==t?26:2*h((o-13)/(2*r-2));r--;)e[r]=r*n+6;return e}(),n=e=r.length;n--;)for(var a=e;a--;)0==a&&0==n||0==a&&n==e-1||a==e-1&&0==n||R(r[a],r[n]);L(3,3),L(o-4,3),L(3,o-4),$(0),function(){if(!(7>t)){for(var e=t,r=12;r--;)e=e<<1^7973*(e>>>11);var n=t<<12|e;if(r=18,n>>>18!=0)throw"Assertion error";for(;r--;){var a=o-11+r%3,s=r/3|0,i=I(n,r);j(a,s,i),j(s,a,i)}}}()},B=function(e){for(var t=[],r=(e=encodeURI(e),0);r0;i-=2){6==i&&--i;for(var c=0>(r=-r)?n:0,l=0;li-2;--h)s[c][h]||(a[c][h]=I(e[t>>>3],7-(7&t)),++t);c+=r}}}(function(e){if(e.length!=A(t,r))throw"Invalid argument";for(var n=p[r[0]][t],o=m[r[0]][t],a=S(t)/8|0,s=n-a%n,i=a/n|0,c=[],l=function(e){var t=1,r=[];r[e-1]=1;for(var n=0;n=s)&&v.push(c[_][h]);return v}(c)),0>n){var f=1e9;for(h=8;h--;){_(h),$(h);var d=w();f>d&&(f=d,n=h),_(h)}}_(n),$(n),s=[]},F=function(e,t,r,n,o,a){if(void 0===o&&(o=1),void 0===a&&(a=40),void 0===n&&(n=-1),void 0===r&&(r=!0),!(1<=o&&o<=a&&a<=40)||n<-1||n>7)throw"Invalid value";for(var s=[],i=236,l=[],h=o;;){var f=x(e,h);if(f<=8*A(h,t))break;if(h>=a)throw"Data too long";h++}if(r)for(var d=(u=[v.H,v.Q,v.M]).length;d--;)f<=8*A(h,u[d])&&(t=u[d]);for(var u=0;uC)throw"Assertion error";if(y(0,c(4,C-s.length),s),y(0,(8-s.length%8)%8,s),s.length%8!=0)throw"Assertion error";for(;s.length>>3]|=s[d]<<7-(7&d);return D(h,t,l,n)};return function(){function t(e){return/^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(e)}function r(e,t){for(var r in e=document.createElementNS(d,e),t||{})e.setAttribute(r,t[r]);return e}var n,s,i,c,h,f,d="http://www.w3.org/2000/svg",u="",m="string"==typeof e?{msg:e}:e||{},p=m.pal||["#000"],g="100%",C=[1,0,0,1,f=(f=l(m.pad))>-1?f:4,f],_=t(_=p[0])?_:"#000",w=t(w=p[1])?w:0,y=m.vrb?0:1;for(T(m.msg||"",v[m.ecl]||v.M,0==m.ecb?0:1,m.mtx),h=o+2*f,i=o;i--;)for(c=0,s=o;s--;)a[i][s]&&(y?(c++,a[i][s-1]||(u+="M"+s+","+i+"h"+c+"v1h-"+c+"v-1z",c=0)):u+="M"+s+","+i+"h1v1h-1v-1z");return n=r("svg",{viewBox:[0,0,h,h].join(" "),width:g,height:g,fill:_,"shape-rendering":"crispEdges",xmlns:d,version:"1.1"}),w&&n.appendChild(r("path",{fill:w,d:"M0,0V"+h+"H"+h+"V0H0Z"})),n.appendChild(r("path",{transform:"matrix("+C+")",d:u})),n}()}function qr_svg(e){let t=QRCode({msg:e,pad:0,pal:["#000000","#ffffff"]}),r=new XMLSerializer;return`data:image/svg+xml;base64,${btoa(r.serializeToString(t))}`}const applist={wa:{id:"wa",name:"WhatsApp",theme:{primary:"#25D366",secondary:"#ffffff"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://api.whatsapp.com/send?text=${encodeURIComponent(`${t}${e}`)}`)},fb:{id:"fb",name:"Facebook",theme:{primary:"#0c87ef",secondary:"#ffffff"},url_format:(e,t="")=>`https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent(t)}&u=${encodeURIComponent(e)}`},tw:{id:"tw",name:"Twitter",theme:{primary:"#1D9BF0",secondary:"#ffffff"},url_format:(e,t="")=>`https://twitter.com/intent/tweet?text=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`},eml:{id:"eml",name:"Email",theme:{primary:"#EA4335",secondary:"#ffffff"},url_format:(e,t="")=>`mailto:?subject=${encodeURIComponent(t)}&body=${encodeURIComponent(e)}`},lnkdn:{id:"lnkdn",name:"LinkedIn",theme:{primary:"#0A66C2",secondary:"#ffffff"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://www.linkedin.com/cws/share?url=${encodeURIComponent(`${t}${e}`)}`)},pntrst:{id:"pntrst",name:"Pinterest",theme:{primary:"#E60123",secondary:"#ffffff"},url_format:(e,t="")=>`https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}&method=button`},rdt:{id:"rdt",name:"Reddit",theme:{primary:"#e45b34",secondary:"#ffffff"},url_format:(e,t="")=>`https://reddit.com/submit?title=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}`},snpcht:{id:"snpcht",name:"Snapchat",theme:{primary:"#fffC00",secondary:"#000000"},url_format:(e,t="")=>`https://snapchat.com/scan?attachmentUrl=${encodeURIComponent(e)}`},koo:{id:"koo",name:"Koo",theme:{primary:"#FACD00",secondary:"#383838"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://www.kooapp.com/create?title=${encodeURIComponent(`${t}${e}`)}`)},tg:{id:"tg",name:"Telegram",theme:{primary:"#2aa1da",secondary:"#ffffff"},url_format:(e,t="")=>`https://t.me/share/url?url=${encodeURIComponent(e)}&text=${encodeURIComponent(t)}`}};let QRInterfaceState=!1,default_url=window.location.href,default_text=document.title;function setSharerText$1(e){default_text=e}function setSharerURL$1(e){default_url=e}function setDefaultSharerURL$1(){default_url=window.location.href}function setDefaultSharerText$1(){default_text=document.title}function openQRInterfaceState(){QRInterfaceState=!0}function closeQRInterfaceState(){QRInterfaceState=!1}function isQRInterfaceStateOpen(){return QRInterfaceState}function revertBackToRoot(){var e;(e=elements.header_icon_container()).innerHTML=svgs.local.sharerIcon,e.onclick=()=>openWebsite(),elements.header_title().innerText="Sharer by KP",(e=>{e.style.height="auto",e.style.aspectRatio="1"})(elements.sharer_content()),setApplistInterface(),closeQRInterfaceState()}function setQRInterface(e){let t=j2h.setRoot(elements.sharer_content()),r=applist[e].url_format(default_url,default_text);var n,o;t.append(j2h.element("div",{class:"sharer-qr-container"},j2h.element("div",{class:"sharer-qr",style:`background: url(${qr_svg(r)})`},svgs.cdn[e]))).append(j2h.element("div",{class:"sharer-credits"},j2h.element("div",{id:"credits-container"},[j2h.element("div",{class:"credits-icon-container"},svgs.local.sharerIcon),j2h.element("div",{class:"credits-text"},"Powered by Sharer")]))),t.render(),(n=t.root).style.height=`${n.offsetWidth+51}px`,elements.credits_container().onclick=()=>openWebsite(),openQRInterfaceState(),(e=>{e.innerHTML=svgs.local.arrowLeftIcon,e.onclick=revertBackToRoot})(elements.header_icon_container()),o=applist[e],elements.header_title().innerText=`Scan to open ${o.name}`,setFooterInterface(`Open ${o.name}`,o.theme.secondary,o.theme.primary,(()=>{openWebsite(r)}))}function setApplistInterface(){let e=j2h.setRoot(elements.sharer_content());Object.keys(applist).forEach((t=>{e.append(j2h.element("div",{id:`open-${t}-qr`,class:"sharer-applist-item"},[j2h.element("div",{class:"sharer-applist-icon-container"},svgs.cdn[t]),j2h.element("div",{class:"sharer-applist-app-name"},applist[t].name),j2h.element("div",{class:"sharer-applist-arrow-right-icon"},svgs.local.arrowRightIcon)]))})),e.render(),Object.keys(applist).forEach((e=>{document.getElementById(`open-${e}-qr`).onclick=()=>{setQRInterface(e)}})),setFooterInterface(),closeQRInterfaceState()}let resizeLock=!1;function resizeObserverAction(){resizeLock||(resizeLock=!0,setTimeout((()=>{resizeLock=!1,elements.sharer_container().style.height=document.documentElement.clientHeight-12+"px",isQRInterfaceStateOpen()&&(elements.sharer_content().style.height=`${elements.sharer_content().offsetWidth+51}px`)}),500))}function startResizeObserver(){window.addEventListener("resize",resizeObserverAction)}function closeResizeObserver(){window.removeEventListener("resize",resizeObserverAction)}let continue_to_close=!0;function setContinueToCloseFalse(){continue_to_close=!1}function closeSharer$1(){if(continue_to_close)try{elements.sharer_container().classList.add("hide"),setTimeout((()=>{elements.sharer_by_KP().classList.add("hide"),setTimeout((()=>{elements.sharer_by_KP().remove(),closeResizeObserver()}),100)}),300),document.body.classList.remove("sharer-opened");try{document.getElementById("sharer-btn-default").classList.remove("hide")}catch(e){}}catch(e){console.log(e)}continue_to_close=!0}function setSharerRoot(){const e=document.createElement("div");j2h.setAttribute(e,{id:"sharer-by-KP",class:"hide"});const t=j2h.setRoot(e);t.append(j2h.element("div",{id:"sharer-container",class:"hide"},j2h.element("div",{id:"sharer-window"},[j2h.element("div",{class:"sharer-header"},[j2h.element("div",{id:"header-icon-container"},svgs.local.sharerIcon),j2h.element("div",{id:"header-title"},"Sharer by KP"),j2h.element("div",{id:"header-close-icon"},svgs.local.closeIcon)]),j2h.element("div",{id:"sharer-content-main"}),j2h.element("div",{id:"sharer-footer"},j2h.element("div",{id:"sharer-footer-text"}))]))),document.body.prepend(e),t.render()}function openSharer$1(){try{document.getElementById("sharer-by-KP").remove()}catch(e){}try{document.getElementById("sharer-btn-default").classList.add("hide")}catch(e){}setSharerRoot(),setTimeout((()=>{elements.sharer_by_KP().classList.remove("hide"),elements.sharer_container().classList.remove("hide")}),10),elements.sharer_window().onclick=setContinueToCloseFalse,elements.sharer_container().onclick=closeSharer$1,elements.header_close_icon().onclick=closeSharer$1,[elements.header_icon_container(),elements.sharer_footer()].forEach((e=>{e.onclick=()=>openWebsite()})),setApplistInterface(),setFooterInterface(),resizeObserverAction(),startResizeObserver(),document.body.classList.add("sharer-opened")}var sharer_functions={setURL:function(e){return setSharerURL$1(e),this},setDefaultURL:function(){return setDefaultSharerURL$1(),this},setText:function(e){return setSharerText$1(e),this},setDefaultText:function(){return setDefaultSharerText$1(),this},open:function(){openSharer$1()},close:function(){closeSharer$1()}};document.head.appendChild(j2h.setAttribute(document.createElement("link"),{id:"sharer_css_file",rel:"stylesheet",href:cdn.getPath(["bundle","sharerByKP.css"])}));try{localStorage.removeItem("sharer_deployment_sha")}catch(e){}const setSharerURL=sharer_functions.setURL,setDefaultSharerURL=sharer_functions.setDefaultURL,setSharerText=sharer_functions.setText,setDefaultSharerText=sharer_functions.setDefaultText,openSharer=sharer_functions.open,closeSharer=sharer_functions.close;export{closeSharer,openSharer,setDefaultSharerText,setDefaultSharerURL,setSharerText,setSharerURL}; \ No newline at end of file diff --git a/bundle/sharer.iife.js b/bundle/sharer.iife.js deleted file mode 100644 index aa2f5be..0000000 --- a/bundle/sharer.iife.js +++ /dev/null @@ -1,900 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-04-20T09:31:49.006Z -*/ -var sharer = (function () { - 'use strict'; - - const cdn = { - url: "https://patelka2211.github.io/sharer/", - // url: "http://localhost:5500/", // For development purpose only. - getPath(path) { - if (typeof path === "string") - return this.url + path; - return this.url + path.join("/"); - }, - }; - - class json2html { - constructor(root) { - this.root = root; - this.list = []; - } - append(input) { - this.list.push(input); - return this; - } - render(input = this.list, root = this.root, clearRoot = true) { - if (clearRoot) - root.innerHTML = ""; - input.forEach((item) => { - for (const key in item) { - if (Object.prototype.hasOwnProperty.call(item, key)) { - const element = document.createElement(key); - const value = item[key]; - j2h.setAttribute(element, value[0]); - if (typeof value[1] == "string") { - element.innerHTML = value[1]; - } - else if (typeof value[1] == "object") { - if (value[1].length === undefined) { - this.render([value[1]], element, false); - } - else if (value[1].length !== undefined) { - this.render(value[1], element, false); - } - } - root.appendChild(element); - } - } - }); - } - } - const j2h = { - setRoot: (root) => { - return new json2html(root); - }, - element: (tagName, attributes = {}, innerHTML = "") => { - return { - [tagName]: [attributes, innerHTML], - }; - }, - setAttribute: (element, attributes) => { - if (element instanceof json2html) { - element = element.root; - } - if (typeof attributes === "string") { - element.setAttribute(attributes, ""); - } - else if (typeof attributes === "object" && - attributes.length !== undefined && - typeof attributes[0] === "string") { - for (let index = 0; index < attributes.length; index++) { - const item = attributes[index]; - element.setAttribute(item, ""); - } - } - else if (attributes.length === undefined) { - for (const key in attributes) { - element.setAttribute(key, attributes[key].toString()); - } - } - else { - attributes.map((item) => { - if (item.length === undefined) { - let pairedAttribute = item; - for (const key in pairedAttribute) { - element.setAttribute(key, pairedAttribute[key].toString()); - } - } - else if (typeof item === "object") { - item.map((item) => { - element.setAttribute(item, ""); - }); - } - else { - element.setAttribute(item, ""); - } - }); - } - return element; - }, - }; - - const elements = { - sharer_by_KP: () => document.getElementById("sharer-by-KP"), - sharer_container: () => document.getElementById("sharer-container"), - sharer_footer: () => document.getElementById("sharer-footer"), - sharer_footer_text: () => document.getElementById("sharer-footer-text"), - sharer_window: () => document.getElementById("sharer-window"), - sharer_content: () => document.getElementById("sharer-content-main"), - header_close_icon: () => document.getElementById("header-close-icon"), - header_icon_container: () => document.getElementById("header-icon-container"), - header_title: () => document.getElementById("header-title"), - credits_container: () => document.getElementById("credits-container"), - }; - - function openWebsite(url = "https://patelka2211.github.io/sharer/") { - window.open(url, "_blank"); - } - - function setFooterInterface(inputText = "Powered by Sharer", fontColor = "#5900ff", bgColor = "#5900ff14", actionPerform = () => openWebsite()) { - ((element) => { - element.innerText = inputText; - element.style.color = fontColor; - })(elements.sharer_footer_text()); - ((element) => { - element.style.backgroundColor = bgColor; - element.onclick = actionPerform; - })(elements.sharer_footer()); - } - - function getCDNsvgs(filename) { - return j2h.element("img", { - src: cdn.getPath(["assets", filename]), - }); - } - const svgs = { - local: { - sharerIcon: ` `, - closeIcon: ` `, - arrowLeftIcon: ` `, - arrowRightIcon: ` `, - }, - cdn: (function (obj) { - [ - "wa", - "fb", - "tw", - "eml", - "lnkdn", - "pntrst", - "rdt", - "snpcht", - "koo", - "tg", - ].forEach((app) => { - obj[app] = getCDNsvgs(`${app}Icon.svg`); - }); - return obj; - })({}), - }; - - function QRCode(r) { - var n, t, o, e, a = [], f = [], i = Math.max, u = Math.min, h = Math.abs, v = Math.ceil, c = /^[0-9]*$/, s = /^[A-Z0-9 $%*+.\/:-]*$/, l = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:", g = [ - [ - -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, - 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, - 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, - ], - [ - -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, - 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, - 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - ], d = [ - [ - -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, - 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, - 22, 24, 25, - ], - [ - -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, - 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, - 38, 40, 43, 45, 47, 49, - ], - [ - -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, - 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, - 53, 56, 59, 62, 65, 68, - ], - [ - -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, - 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, - 60, 63, 66, 70, 74, 77, 81, - ], - ], m = { L: [0, 1], M: [1, 0], Q: [2, 3], H: [3, 2] }, p = function (r, n) { - for (var t = 0, o = 8; o--;) - t = (t << 1) ^ (285 * (t >>> 7)) ^ (((n >>> o) & 1) * r); - return t; - }, C = function (r, n) { - for (var t = [], o = r.length, e = o; e;) - for (var a = r[o - e--] ^ t.shift(), f = n.length; f--;) - t[f] ^= p(n[f], a); - return t; - }, w = function (r) { - for (var n = [ - function () { - return 0 == (t + o) % 2; - }, - function () { - return 0 == t % 2; - }, - function () { - return 0 == o % 3; - }, - function () { - return 0 == (t + o) % 3; - }, - function () { - return 0 == (((t / 2) | 0) + ((o / 3) | 0)) % 2; - }, - function () { - return 0 == ((t * o) % 2) + ((t * o) % 3); - }, - function () { - return 0 == (((t * o) % 2) + ((t * o) % 3)) % 2; - }, - function () { - return 0 == (((t + o) % 2) + ((t * o) % 3)) % 2; - }, - ][r], t = e; t--;) - for (var o = e; o--;) - f[t][o] || (a[t][o] ^= n()); - }, b = function () { - for (var r = function (r, n) { - n[6] || (r += e), n.shift(), n.push(r); - }, n = function (n, o, a) { - return n && (r(o, a), (o = 0)), r((o += e), a), t(a); - }, t = function (r) { - var n = r[5], t = n > 0 && - r[4] == n && - r[3] == 3 * n && - r[2] == n && - r[1] == n; - return ((t && r[6] >= 4 * n && r[0] >= n ? 1 : 0) + - (t && r[0] >= 4 * n && r[6] >= n ? 1 : 0)); - }, o = 0, f = e * e, i = 0, u = e; u--;) { - for (var c = [0, 0, 0, 0, 0, 0, 0], s = [0, 0, 0, 0, 0, 0, 0], l = !1, g = !1, d = 0, m = 0, p = e; p--;) { - a[u][p] == l - ? 5 == ++d - ? (o += 3) - : d > 5 && o++ - : (r(d, c), (o += 40 * t(c)), (d = 1), (l = a[u][p])), - a[p][u] == g - ? 5 == ++m - ? (o += 3) - : m > 5 && o++ - : (r(m, s), - (o += 40 * t(s)), - (m = 1), - (g = a[p][u])); - var C = a[u][p]; - C && i++, - p && - u && - C == a[u][p - 1] && - C == a[u - 1][p] && - C == a[u - 1][p - 1] && - (o += 3); - } - o += 40 * n(l, d, c) + 40 * n(g, m, s); - } - return (o += 10 * (v(h(20 * i - 10 * f) / f) - 1)); - }, A = function (r, n, t) { - for (; n--;) - t.push((r >>> n) & 1); - }, M = function (r, n) { - return r.numBitsCharCount[((n + 7) / 17) | 0]; - }, B = function (r, n) { - return 0 != ((r >>> n) & 1); - }, x = function (r, n) { - for (var t = 0, o = r.length; o--;) { - var e = r[o], a = M(e, n); - if (1 << a <= e.numChars) - return 1 / 0; - t += 4 + a + e.bitData.length; - } - return t; - }, D = function (r) { - if (r < 1 || r > 40) - throw "Version number out of range"; - var n = (16 * r + 128) * r + 64; - if (r >= 2) { - var t = (r / 7) | 2; - (n -= (25 * t - 10) * t - 55), r >= 7 && (n -= 36); - } - return n; - }, I = function (r, n) { - for (var t = 2; -2 <= t; t--) - for (var o = 2; -2 <= o; o--) - E(r + o, n + t, 1 != i(h(o), h(t))); - }, H = function (r, n) { - for (var t = 4; -4 <= t; t--) - for (var o = 4; -4 <= o; o--) { - var a = i(h(o), h(t)), f = r + o, u = n + t; - 0 <= f && - f < e && - 0 <= u && - u < e && - E(f, u, 2 != a && 4 != a); - } - }, $ = function (r) { - for (var n = (t[1] << 3) | r, o = n, a = 10; a--;) - o = (o << 1) ^ (1335 * (o >>> 9)); - var f = 21522 ^ ((n << 10) | o); - if (f >>> 15 != 0) - throw "Assertion error"; - for (a = 0; a <= 5; a++) - E(8, a, B(f, a)); - E(8, 7, B(f, 6)), E(8, 8, B(f, 7)), E(7, 8, B(f, 8)); - for (a = 9; a < 15; a++) - E(14 - a, 8, B(f, a)); - for (a = 0; a < 8; a++) - E(e - 1 - a, 8, B(f, a)); - for (a = 8; a < 15; a++) - E(8, e - 15 + a, B(f, a)); - E(8, e - 8, 1); - }, O = function () { - for (var r = e; r--;) - E(6, r, 0 == r % 2), E(r, 6, 0 == r % 2); - for (var t = (function () { - var r = []; - if (n > 1) - for (var t = 2 + ((n / 7) | 0), o = 32 == n - ? 26 - : 2 * v((e - 13) / (2 * t - 2)); t--;) - r[t] = t * o + 6; - return r; - })(), o = (r = t.length); o--;) - for (var a = r; a--;) - (0 == a && 0 == o) || - (0 == a && o == r - 1) || - (a == r - 1 && 0 == o) || - I(t[a], t[o]); - H(3, 3), - H(e - 4, 3), - H(3, e - 4), - $(0), - (function () { - if (!(7 > n)) { - for (var r = n, t = 12; t--;) - r = (r << 1) ^ (7973 * (r >>> 11)); - var o = (n << 12) | r; - if (((t = 18), o >>> 18 != 0)) - throw "Assertion error"; - for (; t--;) { - var a = e - 11 + (t % 3), f = (t / 3) | 0, i = B(o, t); - E(a, f, i), E(f, a, i); - } - } - })(); - }, Q = function (r) { - if (r.length != V(n, t)) - throw "Invalid argument"; - for (var o = d[t[0]][n], e = g[t[0]][n], a = (D(n) / 8) | 0, f = o - (a % o), i = (a / o) | 0, u = [], h = (function (r) { - var n = 1, t = []; - t[r - 1] = 1; - for (var o = 0; o < r; o++) { - for (var e = 0; e < r; e++) - t[e] = p(t[e], n) ^ t[e + 1]; - n = p(n, 2); - } - return t; - })(e), v = 0, c = 0; v < o; v++) { - var s = r.slice(c, c + i - e + (v < f ? 0 : 1)); - c += s.length; - var l = C(s, h); - v < f && s.push(0), u.push(s.concat(l)); - } - var m = []; - for (v = 0; v < u[0].length; v++) - for (var w = 0; w < u.length; w++) - (v != i - e || w >= f) && m.push(u[w][v]); - return m; - }, S = function (r) { - for (var n = [], t = ((r = encodeURI(r)), 0); t < r.length; t++) - "%" != r.charAt(t) - ? n.push(r.charCodeAt(t)) - : (n.push(parseInt(r.substr(t + 1, 2), 16)), (t += 2)); - return n; - }, V = function (r, n) { - return ((D(r) / 8) | 0) - g[n[0]][r] * d[n[0]][r]; - }, E = function (r, n, t) { - (a[n][r] = t ? 1 : 0), (f[n][r] = 1); - }, R = function (r) { - for (var n = [], t = 0, o = r; t < o.length; t++) { - var e = o[t]; - A(e, 8, n); - } - return { - modeBits: 4, - numBitsCharCount: [8, 16, 16], - numChars: r.length, - bitData: n, - }; - }, Z = function (r) { - if (!c.test(r)) - throw "String contains non-numeric characters"; - for (var n = [], t = 0; t < r.length;) { - var o = u(r.length - t, 3); - A(parseInt(r.substr(t, o), 10), 3 * o + 1, n), (t += o); - } - return { - modeBits: 1, - numBitsCharCount: [10, 12, 14], - numChars: r.length, - bitData: n, - }; - }, z = function (r) { - if (!s.test(r)) - throw "String contains unencodable characters in alphanumeric mode"; - var n, t = []; - for (n = 0; n + 2 <= r.length; n += 2) { - var o = 45 * l.indexOf(r.charAt(n)); - (o += l.indexOf(r.charAt(n + 1))), A(o, 11, t); - } - return (n < r.length && A(l.indexOf(r.charAt(n)), 6, t), - { - modeBits: 2, - numBitsCharCount: [9, 11, 13], - numChars: r.length, - bitData: t, - }); - }, L = function (r, n, t, o) { - var e = (function (r) { - return "" == r - ? [] - : c.test(r) - ? [Z(r)] - : s.test(r) - ? [z(r)] - : [R(S(r))]; - })(r); - return U(e, n, t, o); - }, N = function (r, i, u, h) { - (t = i), (o = h); - for (var v = (e = 4 * (n = r) + 17); v--;) - (a[v] = []), (f[v] = []); - if ((O(), - (function (r) { - for (var n = 0, t = 1, o = e - 1, i = o; i > 0; i -= 2) { - 6 == i && --i; - for (var u = 0 > (t = -t) ? o : 0, h = 0; h < e; ++h) { - for (var v = i; v > i - 2; --v) - f[u][v] || - ((a[u][v] = B(r[n >>> 3], 7 - (7 & n))), - ++n); - u += t; - } - } - })(Q(u)), - 0 > o)) { - var c = 1e9; - for (v = 8; v--;) { - w(v), $(v); - var s = b(); - c > s && ((c = s), (o = v)), w(v); - } - } - w(o), $(o), (f = []); - }, U = function (r, n, t, o, e, a) { - if ((void 0 === e && (e = 1), - void 0 === a && (a = 40), - void 0 === o && (o = -1), - void 0 === t && (t = !0), - !(1 <= e && e <= a && a <= 40) || o < -1 || o > 7)) - throw "Invalid value"; - for (var f = [], i = 236, h = [], v = e;;) { - var c = x(r, v); - if (c <= 8 * V(v, n)) - break; - if (v >= a) - throw "Data too long"; - v++; - } - if (t) - for (var s = (l = [m.H, m.Q, m.M]).length; s--;) - c <= 8 * V(v, l[s]) && (n = l[s]); - for (var l = 0; l < r.length; l++) { - var g = r[l]; - A(g.modeBits, 4, f), A(g.numChars, M(g, v), f); - for (var d = 0, p = g.bitData; d < p.length; d++) - f.push(p[d]); - } - if (f.length != c) - throw "Assertion error"; - var C = 8 * V(v, n); - if (f.length > C) - throw "Assertion error"; - if ((A(0, u(4, C - f.length), f), - A(0, (8 - (f.length % 8)) % 8, f), - f.length % 8 != 0)) - throw "Assertion error"; - for (; f.length < C;) - A(i, 8, f), (i ^= 253); - for (s = f.length; s--;) - h[s >>> 3] |= f[s] << (7 - (7 & s)); - return N(v, n, h, o); - }; - return (function () { - function n(r) { - return /^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(r); - } - function t(r, n) { - for (var t in ((r = document.createElementNS(s, r)), n || {})) - r.setAttribute(t, n[t]); - return r; - } - var o, f, i, u, v, c, s = "http://www.w3.org/2000/svg", l = "", g = "string" == typeof r ? { msg: r } : r || {}, d = g.pal || ["#000"], - // p = h(g.dim) || 256, - p = "100%", C = [1, 0, 0, 1, (c = (c = h(g.pad)) > -1 ? c : 4), c], w = n((w = d[0])) ? w : "#000", b = n((b = d[1])) ? b : 0, A = g.vrb ? 0 : 1; - for (L(g.msg || "", m[g.ecl] || m.M, 0 == g.ecb ? 0 : 1, g.mtx), - v = e + 2 * c, - i = e; i--;) - for (u = 0, f = e; f--;) - a[i][f] && - (A - ? (u++, - a[i][f - 1] || - ((l += - "M" + - f + - "," + - i + - "h" + - u + - "v1h-" + - u + - "v-1z"), - (u = 0))) - : (l += "M" + f + "," + i + "h1v1h-1v-1z")); - return ((o = t("svg", { - viewBox: [0, 0, v, v].join(" "), - width: p, - height: p, - fill: w, - "shape-rendering": "crispEdges", - xmlns: s, - version: "1.1", - })), - b && - o.appendChild(t("path", { fill: b, d: "M0,0V" + v + "H" + v + "V0H0Z" })), - o.appendChild(t("path", { transform: "matrix(" + C + ")", d: l })), - o); - })(); - } - function qr_svg(input_data) { - let svgNode = QRCode({ - msg: input_data, - // dim: 256, - pad: 0, - // pad: 40, - // mtx: 7, - // ecl: "H", - // ecb: 0, - pal: ["#000000", "#ffffff"], - // vrb: 1, - }), _ = new XMLSerializer(); - return `data:image/svg+xml;base64,${btoa(_.serializeToString(svgNode))}`; - } - - const applist = { - wa: { - id: "wa", - name: "WhatsApp", - theme: { primary: "#25D366", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://api.whatsapp.com/send?text=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - fb: { - id: "fb", - name: "Facebook", - theme: { primary: "#0c87ef", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent(text)}&u=${encodeURIComponent(input_url)}`; - }, - }, - tw: { - id: "tw", - name: "Twitter", - theme: { primary: "#1D9BF0", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`; - }, - }, - eml: { - id: "eml", - name: "Email", - theme: { primary: "#EA4335", secondary: "#ffffff" }, - url_format: (body, subject = "") => { - return `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; - }, - }, - lnkdn: { - id: "lnkdn", - name: "LinkedIn", - theme: { primary: "#0A66C2", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.linkedin.com/cws/share?url=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - pntrst: { - id: "pntrst", - name: "Pinterest", - theme: { primary: "#E60123", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&method=button`; - }, - }, - rdt: { - id: "rdt", - name: "Reddit", - theme: { primary: "#e45b34", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://reddit.com/submit?title=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}`; - }, - }, - snpcht: { - id: "snpcht", - name: "Snapchat", - theme: { primary: "#fffC00", secondary: "#000000" }, - url_format: (input_url, text = "") => { - return `https://snapchat.com/scan?attachmentUrl=${encodeURIComponent(input_url)}`; - }, - }, - koo: { - id: "koo", - name: "Koo", - theme: { primary: "#FACD00", secondary: "#383838" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.kooapp.com/create?title=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - tg: { - id: "tg", - name: "Telegram", - theme: { primary: "#2aa1da", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://t.me/share/url?url=${encodeURIComponent(input_url)}&text=${encodeURIComponent(text)}`; - }, - }, - }; - - let QRInterfaceState = false; - let default_url = window.location.href, default_text = document.title; - function setSharerText(text) { - default_text = text; - } - function setSharerURL(url) { - default_url = url; - } - function setDefaultSharerURL() { - default_url = window.location.href; - } - function setDefaultSharerText() { - default_text = document.title; - } - function openQRInterfaceState() { - QRInterfaceState = true; - } - function closeQRInterfaceState() { - QRInterfaceState = false; - } - function isQRInterfaceStateOpen() { - return QRInterfaceState; - } - function revertBackToRoot() { - ((element) => { - element.innerHTML = svgs.local.sharerIcon; - element.onclick = () => openWebsite(); - })(elements.header_icon_container()); - elements.header_title().innerText = "Sharer by KP"; - ((element) => { - element.style.height = "auto"; - element.style.aspectRatio = "1"; - })(elements.sharer_content()); - setApplistInterface(); - closeQRInterfaceState(); - } - function setQRInterface(appid) { - let sharer_content = j2h.setRoot(elements.sharer_content()), url_to_be_shared = applist[appid].url_format(default_url, default_text); - sharer_content - .append(j2h.element("div", { - class: "sharer-qr-container", - }, j2h.element("div", { - class: "sharer-qr", - style: `background: url(${qr_svg(url_to_be_shared)})`, - }, svgs.cdn[appid]))) - .append(j2h.element("div", { class: "sharer-credits" }, j2h.element("div", { id: "credits-container" }, [ - j2h.element("div", { class: "credits-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { class: "credits-text" }, "Powered by Sharer"), - ]))); - sharer_content.render(); - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - elements.credits_container().onclick = () => openWebsite(); - openQRInterfaceState(); - ((element) => { - element.innerHTML = svgs.local.arrowLeftIcon; - element.onclick = revertBackToRoot; - })(elements.header_icon_container()); - ((app_details) => { - // elements.header_title().innerText = `Share on ${app_details.name}`; - elements.header_title().innerText = `Scan to open ${app_details.name}`; - setFooterInterface(`Open ${app_details.name}`, app_details.theme.secondary, app_details.theme.primary, () => { - openWebsite(url_to_be_shared); - }); - })(applist[appid]); - } - function setApplistInterface() { - let applist_html = j2h.setRoot(elements.sharer_content()); - Object.keys(applist).forEach((id) => { - applist_html.append(j2h.element("div", { id: `open-${id}-qr`, class: "sharer-applist-item" }, [ - j2h.element("div", { class: "sharer-applist-icon-container" }, svgs.cdn[id]), - j2h.element("div", { class: "sharer-applist-app-name" }, applist[id].name), - j2h.element("div", { class: "sharer-applist-arrow-right-icon" }, svgs.local.arrowRightIcon), - ])); - }); - applist_html.render(); - Object.keys(applist).forEach((id) => { - document.getElementById(`open-${id}-qr`).onclick = - () => { - setQRInterface(id); - }; - }); - setFooterInterface(); - closeQRInterfaceState(); - } - - let resizeLock = false; - function resizeObserverAction() { - if (resizeLock) - return; - resizeLock = true; - setTimeout(() => { - resizeLock = false; - elements.sharer_container().style.height = `${document.documentElement.clientHeight - 12}px`; - if (isQRInterfaceStateOpen()) { - elements.sharer_content().style.height = `${elements.sharer_content().offsetWidth + 51}px`; - } - }, 500); - } - function startResizeObserver() { - window.addEventListener("resize", resizeObserverAction); - } - function closeResizeObserver() { - window.removeEventListener("resize", resizeObserverAction); - } - - let continue_to_close = true; - function setContinueToCloseFalse() { - continue_to_close = false; - } - function closeSharer() { - if (continue_to_close) { - try { - elements.sharer_container().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().remove(); - closeResizeObserver(); - }, 100); - }, 300); - document.body.classList.remove("sharer-opened"); - try { - ((sharer_button) => { - sharer_button.classList.remove("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - } - catch (error) { - console.log(error); - } - } - continue_to_close = true; - } - - function setSharerRoot() { - const Sharer_By_KP = document.createElement("div"); - j2h.setAttribute(Sharer_By_KP, { id: "sharer-by-KP", class: "hide" }); - const sharer_root = j2h.setRoot(Sharer_By_KP); - sharer_root.append(j2h.element("div", { id: "sharer-container", class: "hide" }, j2h.element("div", { id: "sharer-window" }, [ - j2h.element("div", { class: "sharer-header" }, [ - j2h.element("div", { id: "header-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { id: "header-title" }, "Sharer by KP"), - j2h.element("div", { id: "header-close-icon" }, svgs.local.closeIcon), - ]), - j2h.element("div", { id: "sharer-content-main" }), - j2h.element("div", { id: "sharer-footer" }, j2h.element("div", { id: "sharer-footer-text" })), - ]))); - document.body.prepend(Sharer_By_KP); - sharer_root.render(); - } - function openSharer() { - try { - document.getElementById("sharer-by-KP").remove(); - } - catch (error) { } - try { - ((sharer_button) => { - sharer_button.classList.add("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - setSharerRoot(); - setTimeout(() => { - elements.sharer_by_KP().classList.remove("hide"); - elements.sharer_container().classList.remove("hide"); - }, 10); - elements.sharer_window().onclick = setContinueToCloseFalse; - elements.sharer_container().onclick = closeSharer; - elements.header_close_icon().onclick = closeSharer; - [elements.header_icon_container(), elements.sharer_footer()].forEach((element) => { - element.onclick = () => openWebsite(); - }); - setApplistInterface(); - setFooterInterface(); - resizeObserverAction(); - startResizeObserver(); - document.body.classList.add("sharer-opened"); - } - - var sharer_functions = { - setURL: function (url) { - setSharerURL(url); - return this; - }, - setDefaultURL: function () { - setDefaultSharerURL(); - return this; - }, - setText: function (text) { - setSharerText(text); - return this; - }, - setDefaultText: function () { - setDefaultSharerText(); - return this; - }, - open: function () { - openSharer(); - }, - close: function () { - closeSharer(); - }, - }; - // Adding Sharer css programmatically - document.head.appendChild(j2h.setAttribute(document.createElement("link"), { - id: "sharer_css_file", - rel: "stylesheet", - href: cdn.getPath(["bundle", "sharerByKP.css"]), - })); - try { - localStorage.removeItem("sharer_deployment_sha"); // To be removed after some time - } - catch (error) { } - - return sharer_functions; - -})(); diff --git a/bundle/sharer.iife.min.js b/bundle/sharer.iife.min.js deleted file mode 100644 index 8e821cd..0000000 --- a/bundle/sharer.iife.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-04-20T09:31:49.006Z -*/ -var sharer=function(){"use strict";const e={url:"https://patelka2211.github.io/sharer/",getPath(e){return"string"==typeof e?this.url+e:this.url+e.join("/")}};class t{constructor(e){this.root=e,this.list=[]}append(e){return this.list.push(e),this}render(e=this.list,t=this.root,n=!0){n&&(t.innerHTML=""),e.forEach((e=>{for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)){const o=document.createElement(n),a=e[n];r.setAttribute(o,a[0]),"string"==typeof a[1]?o.innerHTML=a[1]:"object"==typeof a[1]&&(void 0===a[1].length?this.render([a[1]],o,!1):void 0!==a[1].length&&this.render(a[1],o,!1)),t.appendChild(o)}}))}}const r={setRoot:e=>new t(e),element:(e,t={},r="")=>({[e]:[t,r]}),setAttribute:(e,r)=>{if(e instanceof t&&(e=e.root),"string"==typeof r)e.setAttribute(r,"");else if("object"==typeof r&&void 0!==r.length&&"string"==typeof r[0])for(let t=0;t{if(void 0===t.length){let r=t;for(const t in r)e.setAttribute(t,r[t].toString())}else"object"==typeof t?t.map((t=>{e.setAttribute(t,"")})):e.setAttribute(t,"")}));return e}},n={sharer_by_KP:()=>document.getElementById("sharer-by-KP"),sharer_container:()=>document.getElementById("sharer-container"),sharer_footer:()=>document.getElementById("sharer-footer"),sharer_footer_text:()=>document.getElementById("sharer-footer-text"),sharer_window:()=>document.getElementById("sharer-window"),sharer_content:()=>document.getElementById("sharer-content-main"),header_close_icon:()=>document.getElementById("header-close-icon"),header_icon_container:()=>document.getElementById("header-icon-container"),header_title:()=>document.getElementById("header-title"),credits_container:()=>document.getElementById("credits-container")};function o(e="https://patelka2211.github.io/sharer/"){window.open(e,"_blank")}function a(e="Powered by Sharer",t="#5900ff",r="#5900ff14",a=(()=>o())){var i;(i=n.sharer_footer_text()).innerText=e,i.style.color=t,(e=>{e.style.backgroundColor=r,e.onclick=a})(n.sharer_footer())}const i={local:{sharerIcon:' ',closeIcon:' ',arrowLeftIcon:' ',arrowRightIcon:' '},cdn:(s={},["wa","fb","tw","eml","lnkdn","pntrst","rdt","snpcht","koo","tg"].forEach((t=>{var n;s[t]=(n=`${t}Icon.svg`,r.element("img",{src:e.getPath(["assets",n])}))})),s)};var s;function c(e){var t,r,n,o,a=[],i=[],s=Math.max,c=Math.min,l=Math.abs,f=Math.ceil,h=/^[0-9]*$/,d=/^[A-Z0-9 $%*+.\/:-]*$/,u="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",m=[[-1,7,10,15,20,26,18,20,24,30,18,20,24,26,30,22,24,28,30,28,28,28,28,30,30,26,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,10,16,26,18,24,16,18,22,22,26,30,22,22,24,24,28,28,26,26,26,26,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28,28],[-1,13,22,18,26,18,24,18,22,20,24,28,26,24,20,30,24,28,28,26,30,28,30,30,30,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30],[-1,17,28,22,16,22,28,26,26,24,28,24,28,22,24,24,30,28,28,26,28,30,24,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30]],p=[[-1,1,1,1,1,1,2,2,2,2,4,4,4,4,4,6,6,6,6,7,8,8,9,9,10,12,12,12,13,14,15,16,17,18,19,19,20,21,22,24,25],[-1,1,1,1,2,2,4,4,4,5,5,5,8,9,9,10,10,11,13,14,16,17,17,18,20,21,23,25,26,28,29,31,33,35,37,38,40,43,45,47,49],[-1,1,1,2,2,4,4,6,6,8,8,8,10,12,16,12,17,16,18,21,20,23,23,25,27,29,34,34,35,38,40,43,45,48,51,53,56,59,62,65,68],[-1,1,1,2,4,4,4,5,6,8,8,11,11,16,16,18,16,19,21,25,25,25,34,30,32,35,37,40,42,45,48,51,54,57,60,63,66,70,74,77,81]],v={L:[0,1],M:[1,0],Q:[2,3],H:[3,2]},g=function(e,t){for(var r=0,n=8;n--;)r=r<<1^285*(r>>>7)^(t>>>n&1)*e;return r},C=function(e,t){for(var r=[],n=e.length,o=n;o;)for(var a=e[n-o--]^r.shift(),i=t.length;i--;)r[i]^=g(t[i],a);return r},w=function(e){for(var t=[function(){return 0==(r+n)%2},function(){return 0==r%2},function(){return 0==n%3},function(){return 0==(r+n)%3},function(){return 0==((r/2|0)+(n/3|0))%2},function(){return 0==r*n%2+r*n%3},function(){return 0==(r*n%2+r*n%3)%2},function(){return 0==((r+n)%2+r*n%3)%2}][e],r=o;r--;)for(var n=o;n--;)i[r][n]||(a[r][n]^=t())},y=function(){for(var e=function(e,t){t[6]||(e+=o),t.shift(),t.push(e)},t=function(t,n,a){return t&&(e(n,a),n=0),e(n+=o,a),r(a)},r=function(e){var t=e[5],r=t>0&&e[4]==t&&e[3]==3*t&&e[2]==t&&e[1]==t;return(r&&e[6]>=4*t&&e[0]>=t?1:0)+(r&&e[0]>=4*t&&e[6]>=t?1:0)},n=0,i=o*o,s=0,c=o;c--;){for(var h=[0,0,0,0,0,0,0],d=[0,0,0,0,0,0,0],u=!1,m=!1,p=0,v=0,g=o;g--;){a[c][g]==u?5==++p?n+=3:p>5&&n++:(e(p,h),n+=40*r(h),p=1,u=a[c][g]),a[g][c]==m?5==++v?n+=3:v>5&&n++:(e(v,d),n+=40*r(d),v=1,m=a[g][c]);var C=a[c][g];C&&s++,g&&c&&C==a[c][g-1]&&C==a[c-1][g]&&C==a[c-1][g-1]&&(n+=3)}n+=40*t(u,p,h)+40*t(m,v,d)}return n+10*(f(l(20*s-10*i)/i)-1)},_=function(e,t,r){for(;t--;)r.push(e>>>t&1)},b=function(e,t){return e.numBitsCharCount[(t+7)/17|0]},x=function(e,t){return 0!=(e>>>t&1)},I=function(e,t){for(var r=0,n=e.length;n--;){var o=e[n],a=b(o,t);if(1<40)throw"Version number out of range";var t=(16*e+128)*e+64;if(e>=2){var r=e/7|2;t-=(25*r-10)*r-55,e>=7&&(t-=36)}return t},L=function(e,t){for(var r=2;-2<=r;r--)for(var n=2;-2<=n;n--)R(e+n,t+r,1!=s(l(n),l(r)))},k=function(e,t){for(var r=4;-4<=r;r--)for(var n=4;-4<=n;n--){var a=s(l(n),l(r)),i=e+n,c=t+r;0<=i&&i>>9);var i=21522^(t<<10|n);if(i>>>15!=0)throw"Assertion error";for(a=0;a<=5;a++)R(8,a,x(i,a));for(R(8,7,x(i,6)),R(8,8,x(i,7)),R(7,8,x(i,8)),a=9;a<15;a++)R(14-a,8,x(i,a));for(a=0;a<8;a++)R(o-1-a,8,x(i,a));for(a=8;a<15;a++)R(8,o-15+a,x(i,a));R(8,o-8,1)},A=function(){for(var e=o;e--;)R(6,e,0==e%2),R(e,6,0==e%2);for(var r=function(){var e=[];if(t>1)for(var r=2+(t/7|0),n=32==t?26:2*f((o-13)/(2*r-2));r--;)e[r]=r*n+6;return e}(),n=e=r.length;n--;)for(var a=e;a--;)0==a&&0==n||0==a&&n==e-1||a==e-1&&0==n||L(r[a],r[n]);k(3,3),k(o-4,3),k(3,o-4),$(0),function(){if(!(7>t)){for(var e=t,r=12;r--;)e=e<<1^7973*(e>>>11);var n=t<<12|e;if(r=18,n>>>18!=0)throw"Assertion error";for(;r--;){var a=o-11+r%3,i=r/3|0,s=x(n,r);R(a,i,s),R(i,a,s)}}}()},E=function(e){for(var t=[],r=(e=encodeURI(e),0);r0;s-=2){6==s&&--s;for(var c=0>(r=-r)?n:0,l=0;ls-2;--f)i[c][f]||(a[c][f]=x(e[t>>>3],7-(7&t)),++t);c+=r}}}(function(e){if(e.length!=M(t,r))throw"Invalid argument";for(var n=p[r[0]][t],o=m[r[0]][t],a=B(t)/8|0,i=n-a%n,s=a/n|0,c=[],l=function(e){var t=1,r=[];r[e-1]=1;for(var n=0;n=i)&&v.push(c[w][f]);return v}(c)),0>n){var h=1e9;for(f=8;f--;){w(f),$(f);var d=y();h>d&&(h=d,n=f),w(f)}}w(n),$(n),i=[]},F=function(e,t,r,n,o,a){if(void 0===o&&(o=1),void 0===a&&(a=40),void 0===n&&(n=-1),void 0===r&&(r=!0),!(1<=o&&o<=a&&a<=40)||n<-1||n>7)throw"Invalid value";for(var i=[],s=236,l=[],f=o;;){var h=I(e,f);if(h<=8*M(f,t))break;if(f>=a)throw"Data too long";f++}if(r)for(var d=(u=[v.H,v.Q,v.M]).length;d--;)h<=8*M(f,u[d])&&(t=u[d]);for(var u=0;uC)throw"Assertion error";if(_(0,c(4,C-i.length),i),_(0,(8-i.length%8)%8,i),i.length%8!=0)throw"Assertion error";for(;i.length>>3]|=i[d]<<7-(7&d);return D(f,t,l,n)};return function(){function t(e){return/^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(e)}function r(e,t){for(var r in e=document.createElementNS(d,e),t||{})e.setAttribute(r,t[r]);return e}var n,i,s,c,f,h,d="http://www.w3.org/2000/svg",u="",m="string"==typeof e?{msg:e}:e||{},p=m.pal||["#000"],g="100%",C=[1,0,0,1,h=(h=l(m.pad))>-1?h:4,h],w=t(w=p[0])?w:"#000",y=t(y=p[1])?y:0,_=m.vrb?0:1;for(H(m.msg||"",v[m.ecl]||v.M,0==m.ecb?0:1,m.mtx),f=o+2*h,s=o;s--;)for(c=0,i=o;i--;)a[s][i]&&(_?(c++,a[s][i-1]||(u+="M"+i+","+s+"h"+c+"v1h-"+c+"v-1z",c=0)):u+="M"+i+","+s+"h1v1h-1v-1z");return n=r("svg",{viewBox:[0,0,f,f].join(" "),width:g,height:g,fill:w,"shape-rendering":"crispEdges",xmlns:d,version:"1.1"}),y&&n.appendChild(r("path",{fill:y,d:"M0,0V"+f+"H"+f+"V0H0Z"})),n.appendChild(r("path",{transform:"matrix("+C+")",d:u})),n}()}function l(e){let t=c({msg:e,pad:0,pal:["#000000","#ffffff"]}),r=new XMLSerializer;return`data:image/svg+xml;base64,${btoa(r.serializeToString(t))}`}const f={wa:{id:"wa",name:"WhatsApp",theme:{primary:"#25D366",secondary:"#ffffff"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://api.whatsapp.com/send?text=${encodeURIComponent(`${t}${e}`)}`)},fb:{id:"fb",name:"Facebook",theme:{primary:"#0c87ef",secondary:"#ffffff"},url_format:(e,t="")=>`https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent(t)}&u=${encodeURIComponent(e)}`},tw:{id:"tw",name:"Twitter",theme:{primary:"#1D9BF0",secondary:"#ffffff"},url_format:(e,t="")=>`https://twitter.com/intent/tweet?text=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`},eml:{id:"eml",name:"Email",theme:{primary:"#EA4335",secondary:"#ffffff"},url_format:(e,t="")=>`mailto:?subject=${encodeURIComponent(t)}&body=${encodeURIComponent(e)}`},lnkdn:{id:"lnkdn",name:"LinkedIn",theme:{primary:"#0A66C2",secondary:"#ffffff"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://www.linkedin.com/cws/share?url=${encodeURIComponent(`${t}${e}`)}`)},pntrst:{id:"pntrst",name:"Pinterest",theme:{primary:"#E60123",secondary:"#ffffff"},url_format:(e,t="")=>`https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}&method=button`},rdt:{id:"rdt",name:"Reddit",theme:{primary:"#e45b34",secondary:"#ffffff"},url_format:(e,t="")=>`https://reddit.com/submit?title=${encodeURIComponent(t)}&url=${encodeURIComponent(e)}`},snpcht:{id:"snpcht",name:"Snapchat",theme:{primary:"#fffC00",secondary:"#000000"},url_format:(e,t="")=>`https://snapchat.com/scan?attachmentUrl=${encodeURIComponent(e)}`},koo:{id:"koo",name:"Koo",theme:{primary:"#FACD00",secondary:"#383838"},url_format:(e,t="")=>(""!=t&&(t+="\n"),`https://www.kooapp.com/create?title=${encodeURIComponent(`${t}${e}`)}`)},tg:{id:"tg",name:"Telegram",theme:{primary:"#2aa1da",secondary:"#ffffff"},url_format:(e,t="")=>`https://t.me/share/url?url=${encodeURIComponent(e)}&text=${encodeURIComponent(t)}`}};let h=!1,d=window.location.href,u=document.title;function m(){h=!1}function p(){var e;(e=n.header_icon_container()).innerHTML=i.local.sharerIcon,e.onclick=()=>o(),n.header_title().innerText="Sharer by KP",(e=>{e.style.height="auto",e.style.aspectRatio="1"})(n.sharer_content()),g(),m()}function v(e){let t=r.setRoot(n.sharer_content()),s=f[e].url_format(d,u);var c,m;t.append(r.element("div",{class:"sharer-qr-container"},r.element("div",{class:"sharer-qr",style:`background: url(${l(s)})`},i.cdn[e]))).append(r.element("div",{class:"sharer-credits"},r.element("div",{id:"credits-container"},[r.element("div",{class:"credits-icon-container"},i.local.sharerIcon),r.element("div",{class:"credits-text"},"Powered by Sharer")]))),t.render(),(c=t.root).style.height=`${c.offsetWidth+51}px`,n.credits_container().onclick=()=>o(),h=!0,(e=>{e.innerHTML=i.local.arrowLeftIcon,e.onclick=p})(n.header_icon_container()),m=f[e],n.header_title().innerText=`Scan to open ${m.name}`,a(`Open ${m.name}`,m.theme.secondary,m.theme.primary,(()=>{o(s)}))}function g(){let e=r.setRoot(n.sharer_content());Object.keys(f).forEach((t=>{e.append(r.element("div",{id:`open-${t}-qr`,class:"sharer-applist-item"},[r.element("div",{class:"sharer-applist-icon-container"},i.cdn[t]),r.element("div",{class:"sharer-applist-app-name"},f[t].name),r.element("div",{class:"sharer-applist-arrow-right-icon"},i.local.arrowRightIcon)]))})),e.render(),Object.keys(f).forEach((e=>{document.getElementById(`open-${e}-qr`).onclick=()=>{v(e)}})),a(),m()}let C=!1;function w(){C||(C=!0,setTimeout((()=>{C=!1,n.sharer_container().style.height=document.documentElement.clientHeight-12+"px",h&&(n.sharer_content().style.height=`${n.sharer_content().offsetWidth+51}px`)}),500))}let y=!0;function _(){y=!1}function b(){if(y)try{n.sharer_container().classList.add("hide"),setTimeout((()=>{n.sharer_by_KP().classList.add("hide"),setTimeout((()=>{n.sharer_by_KP().remove(),window.removeEventListener("resize",w)}),100)}),300),document.body.classList.remove("sharer-opened");try{document.getElementById("sharer-btn-default").classList.remove("hide")}catch(e){}}catch(e){console.log(e)}y=!0}function x(){try{document.getElementById("sharer-by-KP").remove()}catch(e){}try{document.getElementById("sharer-btn-default").classList.add("hide")}catch(e){}!function(){const e=document.createElement("div");r.setAttribute(e,{id:"sharer-by-KP",class:"hide"});const t=r.setRoot(e);t.append(r.element("div",{id:"sharer-container",class:"hide"},r.element("div",{id:"sharer-window"},[r.element("div",{class:"sharer-header"},[r.element("div",{id:"header-icon-container"},i.local.sharerIcon),r.element("div",{id:"header-title"},"Sharer by KP"),r.element("div",{id:"header-close-icon"},i.local.closeIcon)]),r.element("div",{id:"sharer-content-main"}),r.element("div",{id:"sharer-footer"},r.element("div",{id:"sharer-footer-text"}))]))),document.body.prepend(e),t.render()}(),setTimeout((()=>{n.sharer_by_KP().classList.remove("hide"),n.sharer_container().classList.remove("hide")}),10),n.sharer_window().onclick=_,n.sharer_container().onclick=b,n.header_close_icon().onclick=b,[n.header_icon_container(),n.sharer_footer()].forEach((e=>{e.onclick=()=>o()})),g(),a(),w(),window.addEventListener("resize",w),document.body.classList.add("sharer-opened")}var I={setURL:function(e){return function(e){d=e}(e),this},setDefaultURL:function(){return d=window.location.href,this},setText:function(e){return function(e){u=e}(e),this},setDefaultText:function(){return u=document.title,this},open:function(){x()},close:function(){b()}};document.head.appendChild(r.setAttribute(document.createElement("link"),{id:"sharer_css_file",rel:"stylesheet",href:e.getPath(["bundle","sharerByKP.css"])}));try{localStorage.removeItem("sharer_deployment_sha")}catch(e){}return I}(); \ No newline at end of file diff --git a/bundle/sharerByKP.css b/bundle/sharerByKP.css deleted file mode 100644 index 49713a4..0000000 --- a/bundle/sharerByKP.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";body{margin:0}body #sharer-by-KP{box-sizing:content-box;z-index:2147483647;font-family:"Inter",sans-serif;position:fixed;width:100vw;height:100vh;top:0px;left:0px;pointer-events:all;opacity:1;background-color:rgba(0,0,0,.32);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);display:flex;flex-direction:column;align-items:center;justify-content:space-around;transition:opacity .2s ease,background-color .2s ease,-webkit-backdrop-filter .2s ease;transition:opacity .2s ease,background-color .2s ease,backdrop-filter .2s ease;transition:opacity .2s ease,background-color .2s ease,backdrop-filter .2s ease,-webkit-backdrop-filter .2s ease}body #sharer-by-KP *{box-sizing:content-box}body #sharer-by-KP.hide{opacity:0;background-color:rgba(0,0,0,0);-webkit-backdrop-filter:blur(0px);backdrop-filter:blur(0px)}body #sharer-by-KP #sharer-container{position:absolute;width:calc(100vw - 12px);height:calc(100vh - 12px);display:flex;flex-direction:row;align-items:center;justify-content:space-around;top:6px;transition:top .6s ease}body #sharer-by-KP #sharer-container.hide{top:100%}body #sharer-by-KP #sharer-container #sharer-window{background-color:#fff;width:calc(100% - 42px);max-height:calc(100% - 84px);max-width:438px;padding:21px;border-radius:30px;display:flex;flex-direction:column;align-items:center;box-shadow:0 32px 128px 0 rgba(40,40,40,.32)}body #sharer-by-KP #sharer-container #sharer-window .sharer-header{width:100%;height:30px;display:flex;align-items:center;justify-content:space-between;margin-bottom:21px}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-icon-container{height:calc(100% - 2px);padding:1px;aspect-ratio:1;background-color:#f6f6f6;border-radius:7px}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-icon-container:hover{cursor:pointer}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-icon-container svg{height:100%;aspect-ratio:inherit}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-title{font-family:"Inter",sans-serif;width:calc(100% - 76px);font-weight:500;font-size:20px;text-align:left;display:inline-block;white-space:nowrap;overflow:hidden !important;text-overflow:ellipsis}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-close-icon{height:100%;aspect-ratio:1;background-color:#f6f6f6;border-radius:7px;display:flex;flex-direction:column;align-items:center;justify-content:space-around}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-close-icon:hover{cursor:pointer}body #sharer-by-KP #sharer-container #sharer-window .sharer-header #header-close-icon svg{height:100%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main{width:100%;aspect-ratio:1;overflow:auto;border-radius:18px;-ms-overflow-style:none;scrollbar-width:none}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item{width:calc(100% - 20px);height:30px;padding:10px;border-radius:18px;display:flex;align-items:center;justify-content:space-between}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item:hover{background-color:#f6f6f6;cursor:pointer}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item .sharer-applist-icon-container{height:calc(100% - 2px);padding:1px;aspect-ratio:1;background-color:#f6f6f6;border-radius:7px}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item .sharer-applist-icon-container img{height:100%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item .sharer-applist-app-name{text-align:left;font-family:"Inter",sans-serif;width:calc(100% - 76px);display:inline-block;white-space:nowrap;overflow:hidden !important;text-overflow:ellipsis;font-size:18px}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item .sharer-applist-arrow-right-icon{height:100%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-applist-item .sharer-applist-arrow-right-icon svg{height:100%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-qr-container{width:calc(100% - 42px);aspect-ratio:1;padding:21px;padding-bottom:0}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-qr-container .sharer-qr{width:100%;aspect-ratio:1;border-radius:7px;display:flex;flex-direction:column;align-items:center;justify-content:space-around}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-qr-container .sharer-qr img{width:12%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits{height:72px;width:100%;display:flex;flex-direction:column;align-items:center;justify-content:space-around}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits #credits-container{height:30px;display:flex;align-items:center}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits #credits-container:hover{cursor:pointer}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits #credits-container .credits-icon-container{height:calc(100% - 2px);padding:1px;aspect-ratio:1;background-color:#f6f6f6;border-radius:7px;margin-right:8px}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits #credits-container .credits-icon-container svg{height:100%;aspect-ratio:1}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main .sharer-credits #credits-container .credits-text{font-family:"Inter",sans-serif;font-size:20px;font-weight:500;text-align:center}body #sharer-by-KP #sharer-container #sharer-window #sharer-content-main::-webkit-scrollbar{display:none}body #sharer-by-KP #sharer-container #sharer-window #sharer-footer{height:50px;width:100%;margin-top:21px;border-radius:18px;display:flex;flex-direction:column;align-items:center;justify-content:space-around;text-align:center}body #sharer-by-KP #sharer-container #sharer-window #sharer-footer:hover{cursor:pointer}body #sharer-by-KP #sharer-container #sharer-window #sharer-footer #sharer-footer-text{font-family:"Inter",sans-serif;font-size:20px;font-weight:600}body.sharer-opened{overflow:hidden}@media(max-width: 500px){body #sharer-by-KP #sharer-container{align-items:end}body #sharer-by-KP #sharer-container #sharer-window{box-shadow:none}} \ No newline at end of file diff --git a/bundle/sharer_button.css b/bundle/sharer_button.css deleted file mode 100644 index ef5b389..0000000 --- a/bundle/sharer_button.css +++ /dev/null @@ -1 +0,0 @@ -body{margin:0}body #sharer-btn-default{position:fixed;bottom:20px;right:20px;width:48px;height:48px;z-index:2147483646;box-shadow:0 16px 64px 0 rgba(40,40,40,.32);border-radius:11.8px;opacity:1;transition:opacity .4s ease,bottom .4s ease,right .4s ease,width .4s ease,height .4s ease,box-shadow .4s ease;pointer-events:all}body #sharer-btn-default:hover{cursor:pointer;box-shadow:0 16px 64px 0 rgba(40,40,40,.48);bottom:16px;right:16px;width:56px;height:56px}body #sharer-btn-default.hide{opacity:0;bottom:-68px;pointer-events:none} \ No newline at end of file diff --git a/bundle/sharer_button.js b/bundle/sharer_button.js deleted file mode 100644 index cd54eba..0000000 --- a/bundle/sharer_button.js +++ /dev/null @@ -1,47 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-03-13T11:55:04.701Z -*/ -(function () { - 'use strict'; - - const cdn = { - url: "https://patelka2211.github.io/sharer/", - // url: "http://localhost:5500/", // For development purpose only. - getPath(path) { - if (typeof path === "string") - return this.url + path; - return this.url + path.join("/"); - }, - }; - - function loadSharerButton() { - document.head.appendChild(((element) => { - element.id = "sharer_button_css_file"; - element.rel = "stylesheet"; - element.href = cdn.getPath(["bundle", "sharer_button.css"]); - return element; - })(document.createElement("link"))); - let sharer_button = document.createElement("img"); - sharer_button.src = cdn.getPath(["assets", "sharerIcon.svg"]); - sharer_button.id = "sharer-btn-default"; - sharer_button.classList.add("hide"); - sharer_button.setAttribute("onclick", `try { sharer.setDefaultURL().setDefaultText().open(); } catch { alert('It appears that the Sharer module has not been fully loaded at this time.'); }`); - document.body.appendChild(sharer_button); - setTimeout(() => { - sharer_button.classList.remove("hide"); - }, 400); - } - window.addEventListener("load", loadSharerButton); - -})(); diff --git a/bundle/sharer_button.min.js b/bundle/sharer_button.min.js deleted file mode 100644 index eb43b28..0000000 --- a/bundle/sharer_button.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel 2023 -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : 2023-03-13T11:55:04.701Z -*/ -!function(){"use strict";const e={url:"https://patelka2211.github.io/sharer/",getPath(e){return"string"==typeof e?this.url+e:this.url+e.join("/")}};window.addEventListener("load",(function(){var t;document.head.appendChild(((t=document.createElement("link")).id="sharer_button_css_file",t.rel="stylesheet",t.href=e.getPath(["bundle","sharer_button.css"]),t));let s=document.createElement("img");s.src=e.getPath(["assets","sharerIcon.svg"]),s.id="sharer-btn-default",s.classList.add("hide"),s.setAttribute("onclick","try { sharer.setDefaultURL().setDefaultText().open(); } catch { alert('It appears that the Sharer module has not been fully loaded at this time.'); }"),document.body.appendChild(s),setTimeout((()=>{s.classList.remove("hide")}),400)}))}(); \ No newline at end of file diff --git a/config.build.sh b/config.build.sh deleted file mode 100644 index 694f82b..0000000 --- a/config.build.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -# Compile JS from TS -tsc -p tsconfig.json - -# Bundle all JS -rollup -c - -# Minify bundled JS -terser ./bundle/sharer.iife.js -c -m -o ./bundle/sharer.iife.min.js -terser ./bundle/sharer.esm.js -c -m -o ./bundle/sharer.esm.min.js -terser ./bundle/sharer_button.js -c -m -o ./bundle/sharer_button.min.js \ No newline at end of file diff --git a/config.rollup.sh b/config.rollup.sh deleted file mode 100644 index 8944e07..0000000 --- a/config.rollup.sh +++ /dev/null @@ -1 +0,0 @@ -rollup -c -w \ No newline at end of file diff --git a/config.terser.sh b/config.terser.sh deleted file mode 100644 index 643329b..0000000 --- a/config.terser.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/bash - -input=$1 -output="${input/.js/.min.js}" - -terser $input -c -m -o $output \ No newline at end of file diff --git a/config.typescript.sh b/config.typescript.sh deleted file mode 100644 index 9ef887e..0000000 --- a/config.typescript.sh +++ /dev/null @@ -1 +0,0 @@ -tsc -w -p tsconfig.json \ No newline at end of file diff --git a/dist/cdn.js b/dist/cdn.js deleted file mode 100644 index 55c49de..0000000 --- a/dist/cdn.js +++ /dev/null @@ -1,10 +0,0 @@ -const cdn = { - url: "https://patelka2211.github.io/sharer/", - // url: "http://localhost:5500/", // For development purpose only. - getPath(path) { - if (typeof path === "string") - return this.url + path; - return this.url + path.join("/"); - }, -}; -export default cdn; diff --git a/dist/gui/element.js b/dist/gui/element.js deleted file mode 100644 index 631dadf..0000000 --- a/dist/gui/element.js +++ /dev/null @@ -1,13 +0,0 @@ -const elements = { - sharer_by_KP: () => document.getElementById("sharer-by-KP"), - sharer_container: () => document.getElementById("sharer-container"), - sharer_footer: () => document.getElementById("sharer-footer"), - sharer_footer_text: () => document.getElementById("sharer-footer-text"), - sharer_window: () => document.getElementById("sharer-window"), - sharer_content: () => document.getElementById("sharer-content-main"), - header_close_icon: () => document.getElementById("header-close-icon"), - header_icon_container: () => document.getElementById("header-icon-container"), - header_title: () => document.getElementById("header-title"), - credits_container: () => document.getElementById("credits-container"), -}; -export default elements; diff --git a/dist/gui/resizeObserver.js b/dist/gui/resizeObserver.js deleted file mode 100644 index ee2e9a2..0000000 --- a/dist/gui/resizeObserver.js +++ /dev/null @@ -1,21 +0,0 @@ -import elements from "./element"; -import { isQRInterfaceStateOpen } from "./sharerContent/content.functions"; -let resizeLock = false; -export function resizeObserverAction() { - if (resizeLock) - return; - resizeLock = true; - setTimeout(() => { - resizeLock = false; - elements.sharer_container().style.height = `${document.documentElement.clientHeight - 12}px`; - if (isQRInterfaceStateOpen()) { - elements.sharer_content().style.height = `${elements.sharer_content().offsetWidth + 51}px`; - } - }, 500); -} -export function startResizeObserver() { - window.addEventListener("resize", resizeObserverAction); -} -export function closeResizeObserver() { - window.removeEventListener("resize", resizeObserverAction); -} diff --git a/dist/gui/sharerContent/QRcode.js b/dist/gui/sharerContent/QRcode.js deleted file mode 100644 index 21f9065..0000000 --- a/dist/gui/sharerContent/QRcode.js +++ /dev/null @@ -1,418 +0,0 @@ -function QRCode(r) { - var n, t, o, e, a = [], f = [], i = Math.max, u = Math.min, h = Math.abs, v = Math.ceil, c = /^[0-9]*$/, s = /^[A-Z0-9 $%*+.\/:-]*$/, l = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:", g = [ - [ - -1, 7, 10, 15, 20, 26, 18, 20, 24, 30, 18, 20, 24, 26, 30, 22, - 24, 28, 30, 28, 28, 28, 28, 30, 30, 26, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 10, 16, 26, 18, 24, 16, 18, 22, 22, 26, 30, 22, 22, 24, 24, - 28, 28, 26, 26, 26, 26, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, - ], - [ - -1, 13, 22, 18, 26, 18, 24, 18, 22, 20, 24, 28, 26, 24, 20, 30, - 24, 28, 28, 26, 30, 28, 30, 30, 30, 30, 28, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - [ - -1, 17, 28, 22, 16, 22, 28, 26, 26, 24, 28, 24, 28, 22, 24, 24, - 30, 28, 28, 26, 28, 30, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, - 30, 30, 30, 30, 30, 30, 30, 30, 30, - ], - ], d = [ - [ - -1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 4, 4, 4, 4, 4, 6, 6, 6, 6, 7, 8, - 8, 9, 9, 10, 12, 12, 12, 13, 14, 15, 16, 17, 18, 19, 19, 20, 21, - 22, 24, 25, - ], - [ - -1, 1, 1, 1, 2, 2, 4, 4, 4, 5, 5, 5, 8, 9, 9, 10, 10, 11, 13, - 14, 16, 17, 17, 18, 20, 21, 23, 25, 26, 28, 29, 31, 33, 35, 37, - 38, 40, 43, 45, 47, 49, - ], - [ - -1, 1, 1, 2, 2, 4, 4, 6, 6, 8, 8, 8, 10, 12, 16, 12, 17, 16, 18, - 21, 20, 23, 23, 25, 27, 29, 34, 34, 35, 38, 40, 43, 45, 48, 51, - 53, 56, 59, 62, 65, 68, - ], - [ - -1, 1, 1, 2, 4, 4, 4, 5, 6, 8, 8, 11, 11, 16, 16, 18, 16, 19, - 21, 25, 25, 25, 34, 30, 32, 35, 37, 40, 42, 45, 48, 51, 54, 57, - 60, 63, 66, 70, 74, 77, 81, - ], - ], m = { L: [0, 1], M: [1, 0], Q: [2, 3], H: [3, 2] }, p = function (r, n) { - for (var t = 0, o = 8; o--;) - t = (t << 1) ^ (285 * (t >>> 7)) ^ (((n >>> o) & 1) * r); - return t; - }, C = function (r, n) { - for (var t = [], o = r.length, e = o; e;) - for (var a = r[o - e--] ^ t.shift(), f = n.length; f--;) - t[f] ^= p(n[f], a); - return t; - }, w = function (r) { - for (var n = [ - function () { - return 0 == (t + o) % 2; - }, - function () { - return 0 == t % 2; - }, - function () { - return 0 == o % 3; - }, - function () { - return 0 == (t + o) % 3; - }, - function () { - return 0 == (((t / 2) | 0) + ((o / 3) | 0)) % 2; - }, - function () { - return 0 == ((t * o) % 2) + ((t * o) % 3); - }, - function () { - return 0 == (((t * o) % 2) + ((t * o) % 3)) % 2; - }, - function () { - return 0 == (((t + o) % 2) + ((t * o) % 3)) % 2; - }, - ][r], t = e; t--;) - for (var o = e; o--;) - f[t][o] || (a[t][o] ^= n()); - }, b = function () { - for (var r = function (r, n) { - n[6] || (r += e), n.shift(), n.push(r); - }, n = function (n, o, a) { - return n && (r(o, a), (o = 0)), r((o += e), a), t(a); - }, t = function (r) { - var n = r[5], t = n > 0 && - r[4] == n && - r[3] == 3 * n && - r[2] == n && - r[1] == n; - return ((t && r[6] >= 4 * n && r[0] >= n ? 1 : 0) + - (t && r[0] >= 4 * n && r[6] >= n ? 1 : 0)); - }, o = 0, f = e * e, i = 0, u = e; u--;) { - for (var c = [0, 0, 0, 0, 0, 0, 0], s = [0, 0, 0, 0, 0, 0, 0], l = !1, g = !1, d = 0, m = 0, p = e; p--;) { - a[u][p] == l - ? 5 == ++d - ? (o += 3) - : d > 5 && o++ - : (r(d, c), (o += 40 * t(c)), (d = 1), (l = a[u][p])), - a[p][u] == g - ? 5 == ++m - ? (o += 3) - : m > 5 && o++ - : (r(m, s), - (o += 40 * t(s)), - (m = 1), - (g = a[p][u])); - var C = a[u][p]; - C && i++, - p && - u && - C == a[u][p - 1] && - C == a[u - 1][p] && - C == a[u - 1][p - 1] && - (o += 3); - } - o += 40 * n(l, d, c) + 40 * n(g, m, s); - } - return (o += 10 * (v(h(20 * i - 10 * f) / f) - 1)); - }, A = function (r, n, t) { - for (; n--;) - t.push((r >>> n) & 1); - }, M = function (r, n) { - return r.numBitsCharCount[((n + 7) / 17) | 0]; - }, B = function (r, n) { - return 0 != ((r >>> n) & 1); - }, x = function (r, n) { - for (var t = 0, o = r.length; o--;) { - var e = r[o], a = M(e, n); - if (1 << a <= e.numChars) - return 1 / 0; - t += 4 + a + e.bitData.length; - } - return t; - }, D = function (r) { - if (r < 1 || r > 40) - throw "Version number out of range"; - var n = (16 * r + 128) * r + 64; - if (r >= 2) { - var t = (r / 7) | 2; - (n -= (25 * t - 10) * t - 55), r >= 7 && (n -= 36); - } - return n; - }, I = function (r, n) { - for (var t = 2; -2 <= t; t--) - for (var o = 2; -2 <= o; o--) - E(r + o, n + t, 1 != i(h(o), h(t))); - }, H = function (r, n) { - for (var t = 4; -4 <= t; t--) - for (var o = 4; -4 <= o; o--) { - var a = i(h(o), h(t)), f = r + o, u = n + t; - 0 <= f && - f < e && - 0 <= u && - u < e && - E(f, u, 2 != a && 4 != a); - } - }, $ = function (r) { - for (var n = (t[1] << 3) | r, o = n, a = 10; a--;) - o = (o << 1) ^ (1335 * (o >>> 9)); - var f = 21522 ^ ((n << 10) | o); - if (f >>> 15 != 0) - throw "Assertion error"; - for (a = 0; a <= 5; a++) - E(8, a, B(f, a)); - E(8, 7, B(f, 6)), E(8, 8, B(f, 7)), E(7, 8, B(f, 8)); - for (a = 9; a < 15; a++) - E(14 - a, 8, B(f, a)); - for (a = 0; a < 8; a++) - E(e - 1 - a, 8, B(f, a)); - for (a = 8; a < 15; a++) - E(8, e - 15 + a, B(f, a)); - E(8, e - 8, 1); - }, O = function () { - for (var r = e; r--;) - E(6, r, 0 == r % 2), E(r, 6, 0 == r % 2); - for (var t = (function () { - var r = []; - if (n > 1) - for (var t = 2 + ((n / 7) | 0), o = 32 == n - ? 26 - : 2 * v((e - 13) / (2 * t - 2)); t--;) - r[t] = t * o + 6; - return r; - })(), o = (r = t.length); o--;) - for (var a = r; a--;) - (0 == a && 0 == o) || - (0 == a && o == r - 1) || - (a == r - 1 && 0 == o) || - I(t[a], t[o]); - H(3, 3), - H(e - 4, 3), - H(3, e - 4), - $(0), - (function () { - if (!(7 > n)) { - for (var r = n, t = 12; t--;) - r = (r << 1) ^ (7973 * (r >>> 11)); - var o = (n << 12) | r; - if (((t = 18), o >>> 18 != 0)) - throw "Assertion error"; - for (; t--;) { - var a = e - 11 + (t % 3), f = (t / 3) | 0, i = B(o, t); - E(a, f, i), E(f, a, i); - } - } - })(); - }, Q = function (r) { - if (r.length != V(n, t)) - throw "Invalid argument"; - for (var o = d[t[0]][n], e = g[t[0]][n], a = (D(n) / 8) | 0, f = o - (a % o), i = (a / o) | 0, u = [], h = (function (r) { - var n = 1, t = []; - t[r - 1] = 1; - for (var o = 0; o < r; o++) { - for (var e = 0; e < r; e++) - t[e] = p(t[e], n) ^ t[e + 1]; - n = p(n, 2); - } - return t; - })(e), v = 0, c = 0; v < o; v++) { - var s = r.slice(c, c + i - e + (v < f ? 0 : 1)); - c += s.length; - var l = C(s, h); - v < f && s.push(0), u.push(s.concat(l)); - } - var m = []; - for (v = 0; v < u[0].length; v++) - for (var w = 0; w < u.length; w++) - (v != i - e || w >= f) && m.push(u[w][v]); - return m; - }, S = function (r) { - for (var n = [], t = ((r = encodeURI(r)), 0); t < r.length; t++) - "%" != r.charAt(t) - ? n.push(r.charCodeAt(t)) - : (n.push(parseInt(r.substr(t + 1, 2), 16)), (t += 2)); - return n; - }, V = function (r, n) { - return ((D(r) / 8) | 0) - g[n[0]][r] * d[n[0]][r]; - }, E = function (r, n, t) { - (a[n][r] = t ? 1 : 0), (f[n][r] = 1); - }, R = function (r) { - for (var n = [], t = 0, o = r; t < o.length; t++) { - var e = o[t]; - A(e, 8, n); - } - return { - modeBits: 4, - numBitsCharCount: [8, 16, 16], - numChars: r.length, - bitData: n, - }; - }, Z = function (r) { - if (!c.test(r)) - throw "String contains non-numeric characters"; - for (var n = [], t = 0; t < r.length;) { - var o = u(r.length - t, 3); - A(parseInt(r.substr(t, o), 10), 3 * o + 1, n), (t += o); - } - return { - modeBits: 1, - numBitsCharCount: [10, 12, 14], - numChars: r.length, - bitData: n, - }; - }, z = function (r) { - if (!s.test(r)) - throw "String contains unencodable characters in alphanumeric mode"; - var n, t = []; - for (n = 0; n + 2 <= r.length; n += 2) { - var o = 45 * l.indexOf(r.charAt(n)); - (o += l.indexOf(r.charAt(n + 1))), A(o, 11, t); - } - return (n < r.length && A(l.indexOf(r.charAt(n)), 6, t), - { - modeBits: 2, - numBitsCharCount: [9, 11, 13], - numChars: r.length, - bitData: t, - }); - }, L = function (r, n, t, o) { - var e = (function (r) { - return "" == r - ? [] - : c.test(r) - ? [Z(r)] - : s.test(r) - ? [z(r)] - : [R(S(r))]; - })(r); - return U(e, n, t, o); - }, N = function (r, i, u, h) { - (t = i), (o = h); - for (var v = (e = 4 * (n = r) + 17); v--;) - (a[v] = []), (f[v] = []); - if ((O(), - (function (r) { - for (var n = 0, t = 1, o = e - 1, i = o; i > 0; i -= 2) { - 6 == i && --i; - for (var u = 0 > (t = -t) ? o : 0, h = 0; h < e; ++h) { - for (var v = i; v > i - 2; --v) - f[u][v] || - ((a[u][v] = B(r[n >>> 3], 7 - (7 & n))), - ++n); - u += t; - } - } - })(Q(u)), - 0 > o)) { - var c = 1e9; - for (v = 8; v--;) { - w(v), $(v); - var s = b(); - c > s && ((c = s), (o = v)), w(v); - } - } - w(o), $(o), (f = []); - }, U = function (r, n, t, o, e, a) { - if ((void 0 === e && (e = 1), - void 0 === a && (a = 40), - void 0 === o && (o = -1), - void 0 === t && (t = !0), - !(1 <= e && e <= a && a <= 40) || o < -1 || o > 7)) - throw "Invalid value"; - for (var f = [], i = 236, h = [], v = e;;) { - var c = x(r, v); - if (c <= 8 * V(v, n)) - break; - if (v >= a) - throw "Data too long"; - v++; - } - if (t) - for (var s = (l = [m.H, m.Q, m.M]).length; s--;) - c <= 8 * V(v, l[s]) && (n = l[s]); - for (var l = 0; l < r.length; l++) { - var g = r[l]; - A(g.modeBits, 4, f), A(g.numChars, M(g, v), f); - for (var d = 0, p = g.bitData; d < p.length; d++) - f.push(p[d]); - } - if (f.length != c) - throw "Assertion error"; - var C = 8 * V(v, n); - if (f.length > C) - throw "Assertion error"; - if ((A(0, u(4, C - f.length), f), - A(0, (8 - (f.length % 8)) % 8, f), - f.length % 8 != 0)) - throw "Assertion error"; - for (; f.length < C;) - A(i, 8, f), (i ^= 253); - for (s = f.length; s--;) - h[s >>> 3] |= f[s] << (7 - (7 & s)); - return N(v, n, h, o); - }; - return (function () { - function n(r) { - return /^#[0-9a-f]{3}(?:[0-9a-f]{3})?$/i.test(r); - } - function t(r, n) { - for (var t in ((r = document.createElementNS(s, r)), n || {})) - r.setAttribute(t, n[t]); - return r; - } - var o, f, i, u, v, c, s = "http://www.w3.org/2000/svg", l = "", g = "string" == typeof r ? { msg: r } : r || {}, d = g.pal || ["#000"], - // p = h(g.dim) || 256, - p = "100%", C = [1, 0, 0, 1, (c = (c = h(g.pad)) > -1 ? c : 4), c], w = n((w = d[0])) ? w : "#000", b = n((b = d[1])) ? b : 0, A = g.vrb ? 0 : 1; - for (L(g.msg || "", m[g.ecl] || m.M, 0 == g.ecb ? 0 : 1, g.mtx), - v = e + 2 * c, - i = e; i--;) - for (u = 0, f = e; f--;) - a[i][f] && - (A - ? (u++, - a[i][f - 1] || - ((l += - "M" + - f + - "," + - i + - "h" + - u + - "v1h-" + - u + - "v-1z"), - (u = 0))) - : (l += "M" + f + "," + i + "h1v1h-1v-1z")); - return ((o = t("svg", { - viewBox: [0, 0, v, v].join(" "), - width: p, - height: p, - fill: w, - "shape-rendering": "crispEdges", - xmlns: s, - version: "1.1", - })), - b && - o.appendChild(t("path", { fill: b, d: "M0,0V" + v + "H" + v + "V0H0Z" })), - o.appendChild(t("path", { transform: "matrix(" + C + ")", d: l })), - o); - })(); -} -export function qr_svg(input_data) { - let svgNode = QRCode({ - msg: input_data, - // dim: 256, - pad: 0, - // pad: 40, - // mtx: 7, - // ecl: "H", - // ecb: 0, - pal: ["#000000", "#ffffff"], - // vrb: 1, - }), _ = new XMLSerializer(); - return `data:image/svg+xml;base64,${btoa(_.serializeToString(svgNode))}`; -} diff --git a/dist/gui/sharerContent/applist.js b/dist/gui/sharerContent/applist.js deleted file mode 100644 index 249d7be..0000000 --- a/dist/gui/sharerContent/applist.js +++ /dev/null @@ -1,88 +0,0 @@ -export const applist = { - wa: { - id: "wa", - name: "WhatsApp", - theme: { primary: "#25D366", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://api.whatsapp.com/send?text=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - fb: { - id: "fb", - name: "Facebook", - theme: { primary: "#0c87ef", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent(text)}&u=${encodeURIComponent(input_url)}`; - }, - }, - tw: { - id: "tw", - name: "Twitter", - theme: { primary: "#1D9BF0", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://twitter.com/intent/tweet?text=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`; - }, - }, - eml: { - id: "eml", - name: "Email", - theme: { primary: "#EA4335", secondary: "#ffffff" }, - url_format: (body, subject = "") => { - return `mailto:?subject=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`; - }, - }, - lnkdn: { - id: "lnkdn", - name: "LinkedIn", - theme: { primary: "#0A66C2", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.linkedin.com/cws/share?url=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - pntrst: { - id: "pntrst", - name: "Pinterest", - theme: { primary: "#E60123", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}&method=button`; - }, - }, - rdt: { - id: "rdt", - name: "Reddit", - theme: { primary: "#e45b34", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://reddit.com/submit?title=${encodeURIComponent(text)}&url=${encodeURIComponent(input_url)}`; - }, - }, - snpcht: { - id: "snpcht", - name: "Snapchat", - theme: { primary: "#fffC00", secondary: "#000000" }, - url_format: (input_url, text = "") => { - return `https://snapchat.com/scan?attachmentUrl=${encodeURIComponent(input_url)}`; - }, - }, - koo: { - id: "koo", - name: "Koo", - theme: { primary: "#FACD00", secondary: "#383838" }, - url_format: (input_url, text = "") => { - if (text != "") - text += "\n"; - return `https://www.kooapp.com/create?title=${encodeURIComponent(`${text}${input_url}`)}`; - }, - }, - tg: { - id: "tg", - name: "Telegram", - theme: { primary: "#2aa1da", secondary: "#ffffff" }, - url_format: (input_url, text = "") => { - return `https://t.me/share/url?url=${encodeURIComponent(input_url)}&text=${encodeURIComponent(text)}`; - }, - }, -}; diff --git a/dist/gui/sharerContent/content.functions.js b/dist/gui/sharerContent/content.functions.js deleted file mode 100644 index 1742bc9..0000000 --- a/dist/gui/sharerContent/content.functions.js +++ /dev/null @@ -1,93 +0,0 @@ -import j2h from "../../j2h"; -import elements from "../element"; -import { setFooterInterface } from "../sharerFooter/footer.functions"; -import { openWebsite } from "../sharerWebsite"; -import svgs from "../svgs"; -import { qr_svg } from "./QRcode"; -import { applist } from "./applist"; -let QRInterfaceState = false; -let default_url = window.location.href, default_text = document.title; -export function setSharerText(text) { - default_text = text; -} -export function setSharerURL(url) { - default_url = url; -} -export function setDefaultSharerURL() { - default_url = window.location.href; -} -export function setDefaultSharerText() { - default_text = document.title; -} -export function openQRInterfaceState() { - QRInterfaceState = true; -} -function closeQRInterfaceState() { - QRInterfaceState = false; -} -export function isQRInterfaceStateOpen() { - return QRInterfaceState; -} -export function revertBackToRoot() { - ((element) => { - element.innerHTML = svgs.local.sharerIcon; - element.onclick = () => openWebsite(); - })(elements.header_icon_container()); - elements.header_title().innerText = "Sharer by KP"; - ((element) => { - element.style.height = "auto"; - element.style.aspectRatio = "1"; - })(elements.sharer_content()); - setApplistInterface(); - closeQRInterfaceState(); -} -function setQRInterface(appid) { - let sharer_content = j2h.setRoot(elements.sharer_content()), url_to_be_shared = applist[appid].url_format(default_url, default_text); - sharer_content - .append(j2h.element("div", { - class: "sharer-qr-container", - }, j2h.element("div", { - class: "sharer-qr", - style: `background: url(${qr_svg(url_to_be_shared)})`, - }, svgs.cdn[appid]))) - .append(j2h.element("div", { class: "sharer-credits" }, j2h.element("div", { id: "credits-container" }, [ - j2h.element("div", { class: "credits-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { class: "credits-text" }, "Powered by Sharer"), - ]))); - sharer_content.render(); - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - elements.credits_container().onclick = () => openWebsite(); - openQRInterfaceState(); - ((element) => { - element.innerHTML = svgs.local.arrowLeftIcon; - element.onclick = revertBackToRoot; - })(elements.header_icon_container()); - ((app_details) => { - // elements.header_title().innerText = `Share on ${app_details.name}`; - elements.header_title().innerText = `Scan to open ${app_details.name}`; - setFooterInterface(`Open ${app_details.name}`, app_details.theme.secondary, app_details.theme.primary, () => { - openWebsite(url_to_be_shared); - }); - })(applist[appid]); -} -export function setApplistInterface() { - let applist_html = j2h.setRoot(elements.sharer_content()); - Object.keys(applist).forEach((id) => { - applist_html.append(j2h.element("div", { id: `open-${id}-qr`, class: "sharer-applist-item" }, [ - j2h.element("div", { class: "sharer-applist-icon-container" }, svgs.cdn[id]), - j2h.element("div", { class: "sharer-applist-app-name" }, applist[id].name), - j2h.element("div", { class: "sharer-applist-arrow-right-icon" }, svgs.local.arrowRightIcon), - ])); - }); - applist_html.render(); - Object.keys(applist).forEach((id) => { - document.getElementById(`open-${id}-qr`).onclick = - () => { - setQRInterface(id); - }; - }); - setFooterInterface(); - closeQRInterfaceState(); -} diff --git a/dist/gui/sharerContent/sharerCard.js b/dist/gui/sharerContent/sharerCard.js deleted file mode 100644 index 7498c98..0000000 --- a/dist/gui/sharerContent/sharerCard.js +++ /dev/null @@ -1,22 +0,0 @@ -import j2h from "../../j2h"; -import elements from "../element"; -import { openWebsite } from "../sharerWebsite"; -import svgs from "../svgs"; -import { qr_svg } from "./QRcode"; -export function setSharerCard() { - let sharer_content = j2h.setRoot(elements.sharer_content()); - sharer_content - .append(j2h.element("div", { - class: "sharer-qr-container", - style: `background: url(${qr_svg("Hello")})`, - })) - .append(j2h.element("div", { class: "sharer-credits" }, j2h.element("div", { id: "credits-container" }, [ - j2h.element("div", { class: "credits-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { class: "credits-text" }, "Powered by Sharer"), - ]))); - sharer_content.render(); - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - elements.credits_container().onclick = () => openWebsite(); -} diff --git a/dist/gui/sharerFooter/footer.functions.js b/dist/gui/sharerFooter/footer.functions.js deleted file mode 100644 index c942412..0000000 --- a/dist/gui/sharerFooter/footer.functions.js +++ /dev/null @@ -1,12 +0,0 @@ -import elements from "../element"; -import { openWebsite } from "../sharerWebsite"; -export function setFooterInterface(inputText = "Powered by Sharer", fontColor = "#5900ff", bgColor = "#5900ff14", actionPerform = () => openWebsite()) { - ((element) => { - element.innerText = inputText; - element.style.color = fontColor; - })(elements.sharer_footer_text()); - ((element) => { - element.style.backgroundColor = bgColor; - element.onclick = actionPerform; - })(elements.sharer_footer()); -} diff --git a/dist/gui/sharerHeader/header.functions.js b/dist/gui/sharerHeader/header.functions.js deleted file mode 100644 index ce2c3c6..0000000 --- a/dist/gui/sharerHeader/header.functions.js +++ /dev/null @@ -1,31 +0,0 @@ -import elements from "../element"; -import { closeResizeObserver } from "../resizeObserver"; -let continue_to_close = true; -export function setContinueToCloseFalse() { - continue_to_close = false; -} -export function closeSharer() { - if (continue_to_close) { - try { - elements.sharer_container().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().remove(); - closeResizeObserver(); - }, 100); - }, 300); - document.body.classList.remove("sharer-opened"); - try { - ((sharer_button) => { - sharer_button.classList.remove("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - } - catch (error) { - console.log(error); - } - } - continue_to_close = true; -} diff --git a/dist/gui/sharerRoot.js b/dist/gui/sharerRoot.js deleted file mode 100644 index 3a3490e..0000000 --- a/dist/gui/sharerRoot.js +++ /dev/null @@ -1,52 +0,0 @@ -import j2h from "../j2h"; -import elements from "./element"; -import { resizeObserverAction, startResizeObserver } from "./resizeObserver"; -import { setApplistInterface } from "./sharerContent/content.functions"; -import { setFooterInterface } from "./sharerFooter/footer.functions"; -import { closeSharer, setContinueToCloseFalse, } from "./sharerHeader/header.functions"; -import { openWebsite } from "./sharerWebsite"; -import svgs from "./svgs"; -function setSharerRoot() { - const Sharer_By_KP = document.createElement("div"); - j2h.setAttribute(Sharer_By_KP, { id: "sharer-by-KP", class: "hide" }); - const sharer_root = j2h.setRoot(Sharer_By_KP); - sharer_root.append(j2h.element("div", { id: "sharer-container", class: "hide" }, j2h.element("div", { id: "sharer-window" }, [ - j2h.element("div", { class: "sharer-header" }, [ - j2h.element("div", { id: "header-icon-container" }, svgs.local.sharerIcon), - j2h.element("div", { id: "header-title" }, "Sharer by KP"), - j2h.element("div", { id: "header-close-icon" }, svgs.local.closeIcon), - ]), - j2h.element("div", { id: "sharer-content-main" }), - j2h.element("div", { id: "sharer-footer" }, j2h.element("div", { id: "sharer-footer-text" })), - ]))); - document.body.prepend(Sharer_By_KP); - sharer_root.render(); -} -export function openSharer() { - try { - document.getElementById("sharer-by-KP").remove(); - } - catch (error) { } - try { - ((sharer_button) => { - sharer_button.classList.add("hide"); - })(document.getElementById("sharer-btn-default")); - } - catch (error) { } - setSharerRoot(); - setTimeout(() => { - elements.sharer_by_KP().classList.remove("hide"); - elements.sharer_container().classList.remove("hide"); - }, 10); - elements.sharer_window().onclick = setContinueToCloseFalse; - elements.sharer_container().onclick = closeSharer; - elements.header_close_icon().onclick = closeSharer; - [elements.header_icon_container(), elements.sharer_footer()].forEach((element) => { - element.onclick = () => openWebsite(); - }); - setApplistInterface(); - setFooterInterface(); - resizeObserverAction(); - startResizeObserver(); - document.body.classList.add("sharer-opened"); -} diff --git a/dist/gui/sharerWebsite.js b/dist/gui/sharerWebsite.js deleted file mode 100644 index 44f6ba4..0000000 --- a/dist/gui/sharerWebsite.js +++ /dev/null @@ -1,3 +0,0 @@ -export function openWebsite(url = "https://patelka2211.github.io/sharer/") { - window.open(url, "_blank"); -} diff --git a/dist/gui/svgs.js b/dist/gui/svgs.js deleted file mode 100644 index bd2adef..0000000 --- a/dist/gui/svgs.js +++ /dev/null @@ -1,33 +0,0 @@ -import cdn from "../cdn"; -import j2h from "../j2h"; -function getCDNsvgs(filename) { - return j2h.element("img", { - src: cdn.getPath(["assets", filename]), - }); -} -const svgs = { - local: { - sharerIcon: ` `, - closeIcon: ` `, - arrowLeftIcon: ` `, - arrowRightIcon: ` `, - }, - cdn: (function (obj) { - [ - "wa", - "fb", - "tw", - "eml", - "lnkdn", - "pntrst", - "rdt", - "snpcht", - "koo", - "tg", - ].forEach((app) => { - obj[app] = getCDNsvgs(`${app}Icon.svg`); - }); - return obj; - })({}), -}; -export default svgs; diff --git a/dist/j2h.js b/dist/j2h.js deleted file mode 100644 index f7f3f97..0000000 --- a/dist/j2h.js +++ /dev/null @@ -1,86 +0,0 @@ -class json2html { - constructor(root) { - this.root = root; - this.list = []; - } - append(input) { - this.list.push(input); - return this; - } - render(input = this.list, root = this.root, clearRoot = true) { - if (clearRoot) - root.innerHTML = ""; - input.forEach((item) => { - for (const key in item) { - if (Object.prototype.hasOwnProperty.call(item, key)) { - const element = document.createElement(key); - const value = item[key]; - j2h.setAttribute(element, value[0]); - if (typeof value[1] == "string") { - element.innerHTML = value[1]; - } - else if (typeof value[1] == "object") { - if (value[1].length === undefined) { - this.render([value[1]], element, false); - } - else if (value[1].length !== undefined) { - this.render(value[1], element, false); - } - } - root.appendChild(element); - } - } - }); - } -} -const j2h = { - setRoot: (root) => { - return new json2html(root); - }, - element: (tagName, attributes = {}, innerHTML = "") => { - return { - [tagName]: [attributes, innerHTML], - }; - }, - setAttribute: (element, attributes) => { - if (element instanceof json2html) { - element = element.root; - } - if (typeof attributes === "string") { - element.setAttribute(attributes, ""); - } - else if (typeof attributes === "object" && - attributes.length !== undefined && - typeof attributes[0] === "string") { - for (let index = 0; index < attributes.length; index++) { - const item = attributes[index]; - element.setAttribute(item, ""); - } - } - else if (attributes.length === undefined) { - for (const key in attributes) { - element.setAttribute(key, attributes[key].toString()); - } - } - else { - attributes.map((item) => { - if (item.length === undefined) { - let pairedAttribute = item; - for (const key in pairedAttribute) { - element.setAttribute(key, pairedAttribute[key].toString()); - } - } - else if (typeof item === "object") { - item.map((item) => { - element.setAttribute(item, ""); - }); - } - else { - element.setAttribute(item, ""); - } - }); - } - return element; - }, -}; -export default j2h; diff --git a/dist/sharer_button/sharer_button.js b/dist/sharer_button/sharer_button.js deleted file mode 100644 index 7d9fa86..0000000 --- a/dist/sharer_button/sharer_button.js +++ /dev/null @@ -1,19 +0,0 @@ -import cdn from "../cdn"; -function loadSharerButton() { - document.head.appendChild(((element) => { - element.id = "sharer_button_css_file"; - element.rel = "stylesheet"; - element.href = cdn.getPath(["bundle", "sharer_button.css"]); - return element; - })(document.createElement("link"))); - let sharer_button = document.createElement("img"); - sharer_button.src = cdn.getPath(["assets", "sharerIcon.svg"]); - sharer_button.id = "sharer-btn-default"; - sharer_button.classList.add("hide"); - sharer_button.setAttribute("onclick", `try { sharer.setDefaultURL().setDefaultText().open(); } catch { alert('It appears that the Sharer module has not been fully loaded at this time.'); }`); - document.body.appendChild(sharer_button); - setTimeout(() => { - sharer_button.classList.remove("hide"); - }, 400); -} -window.addEventListener("load", loadSharerButton); diff --git a/dist/sharer_esm.js b/dist/sharer_esm.js deleted file mode 100644 index 604f365..0000000 --- a/dist/sharer_esm.js +++ /dev/null @@ -1,4 +0,0 @@ -import sharer_functions from "./sharer_functions"; -// Destructuring all the functions -const setSharerURL = sharer_functions.setURL, setDefaultSharerURL = sharer_functions.setDefaultURL, setSharerText = sharer_functions.setText, setDefaultSharerText = sharer_functions.setDefaultText, openSharer = sharer_functions.open, closeSharer = sharer_functions.close; -export { setSharerURL, setDefaultSharerURL, setSharerText, setDefaultSharerText, openSharer, closeSharer, }; diff --git a/dist/sharer_functions.js b/dist/sharer_functions.js deleted file mode 100644 index 98193f7..0000000 --- a/dist/sharer_functions.js +++ /dev/null @@ -1,39 +0,0 @@ -import cdn from "./cdn"; -import { setDefaultSharerText, setDefaultSharerURL, setSharerText, setSharerURL, } from "./gui/sharerContent/content.functions"; -import { closeSharer } from "./gui/sharerHeader/header.functions"; -import { openSharer } from "./gui/sharerRoot"; -import j2h from "./j2h"; -export default { - setURL: function (url) { - setSharerURL(url); - return this; - }, - setDefaultURL: function () { - setDefaultSharerURL(); - return this; - }, - setText: function (text) { - setSharerText(text); - return this; - }, - setDefaultText: function () { - setDefaultSharerText(); - return this; - }, - open: function () { - openSharer(); - }, - close: function () { - closeSharer(); - }, -}; -// Adding Sharer css programmatically -document.head.appendChild(j2h.setAttribute(document.createElement("link"), { - id: "sharer_css_file", - rel: "stylesheet", - href: cdn.getPath(["bundle", "sharerByKP.css"]), -})); -try { - localStorage.removeItem("sharer_deployment_sha"); // To be removed after some time -} -catch (error) { } diff --git a/dist/sharer_iife.js b/dist/sharer_iife.js deleted file mode 100644 index 726b667..0000000 --- a/dist/sharer_iife.js +++ /dev/null @@ -1,2 +0,0 @@ -import sharer_functions from "./sharer_functions"; -export default sharer_functions; diff --git a/index.html b/index.html deleted file mode 100644 index 9242afb..0000000 --- a/index.html +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - Sharer by KP - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- Sharer Icon -

Sharer by KP

-
- Sharer preview -

Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing - across various applications and social media platforms. Boost engagement and increase website reach with - Sharer - the top-rated JavaScript library for seamless URL sharing!

- Discover - more about Sharer - -
-

Import the latest JavaScript library by - pasting the script tag into your HTML document's head tag. - Optimize sharing capabilities today with Sharer!

-
- - -
-
-
-

Or you can obtain the Sharer JavaScript Module by downloading the file from this GitHub - page.

-
- -

Sharer was created with the help of two libraries - "JSON2HTML" and "qrcode-svg". -

- - KP -

Developed in India with ❤️ by KP

-
-
- - - \ No newline at end of file diff --git a/kpverse-sharer.svg b/kpverse-sharer.svg new file mode 100644 index 0000000..0eb54fd --- /dev/null +++ b/kpverse-sharer.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e1c630c --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6157 @@ +{ + "name": "@patelka2211/sharer", + "version": "0.1.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@patelka2211/sharer", + "version": "0.1.0", + "license": "MIT", + "dependencies": { + "@patelka2211/dominar": "^1.2.4", + "dynamic-colors": "^1.1.5", + "html2canvas": "^1.4.1" + }, + "devDependencies": { + "@parcel/transformer-sass": "^2.9.3", + "parcel": "^2.9.3", + "rollup": "^3.27.1", + "rollup-plugin-dts": "^5.3.1", + "terser": "^5.19.2", + "typescript": "^5.1.6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "node_modules/@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.0" + } + }, + "node_modules/@lmdb/lmdb-darwin-arm64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.7.11.tgz", + "integrity": "sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-darwin-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.7.11.tgz", + "integrity": "sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.7.11.tgz", + "integrity": "sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-arm64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.7.11.tgz", + "integrity": "sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-linux-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz", + "integrity": "sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@lmdb/lmdb-win32-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.7.11.tgz", + "integrity": "sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "dependencies": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", + "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", + "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", + "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", + "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", + "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", + "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@parcel/bundler-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.9.3.tgz", + "integrity": "sha512-JjJK8dq39/UO/MWI/4SCbB1t/qgpQRFnFDetAAAezQ8oN++b24u1fkMDa/xqQGjbuPmGeTds5zxGgYs7id7PYg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/graph": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/cache": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.9.3.tgz", + "integrity": "sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q==", + "dev": true, + "dependencies": { + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/utils": "2.9.3", + "lmdb": "2.7.11" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/codeframe": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.9.3.tgz", + "integrity": "sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/compressor-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.9.3.tgz", + "integrity": "sha512-jz3t4/ICMsHEqgiTmv5i1DJva2k5QRpZlBELVxfY+QElJTVe8edKJ0TiKcBxh2hx7sm4aUigGmp7JiqqHRRYmA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/config-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.9.3.tgz", + "integrity": "sha512-tqN5tF7QnVABDZAu76co5E6N8mA9n8bxiWdK4xYyINYFIEHgX172oRTqXTnhEMjlMrdmASxvnGlbaPBaVnrCTw==", + "dev": true, + "dependencies": { + "@parcel/bundler-default": "2.9.3", + "@parcel/compressor-raw": "2.9.3", + "@parcel/namer-default": "2.9.3", + "@parcel/optimizer-css": "2.9.3", + "@parcel/optimizer-htmlnano": "2.9.3", + "@parcel/optimizer-image": "2.9.3", + "@parcel/optimizer-svgo": "2.9.3", + "@parcel/optimizer-swc": "2.9.3", + "@parcel/packager-css": "2.9.3", + "@parcel/packager-html": "2.9.3", + "@parcel/packager-js": "2.9.3", + "@parcel/packager-raw": "2.9.3", + "@parcel/packager-svg": "2.9.3", + "@parcel/reporter-dev-server": "2.9.3", + "@parcel/resolver-default": "2.9.3", + "@parcel/runtime-browser-hmr": "2.9.3", + "@parcel/runtime-js": "2.9.3", + "@parcel/runtime-react-refresh": "2.9.3", + "@parcel/runtime-service-worker": "2.9.3", + "@parcel/transformer-babel": "2.9.3", + "@parcel/transformer-css": "2.9.3", + "@parcel/transformer-html": "2.9.3", + "@parcel/transformer-image": "2.9.3", + "@parcel/transformer-js": "2.9.3", + "@parcel/transformer-json": "2.9.3", + "@parcel/transformer-postcss": "2.9.3", + "@parcel/transformer-posthtml": "2.9.3", + "@parcel/transformer-raw": "2.9.3", + "@parcel/transformer-react-refresh-wrap": "2.9.3", + "@parcel/transformer-svg": "2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/core": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.9.3.tgz", + "integrity": "sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/graph": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/profiler": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/diagnostic": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.9.3.tgz", + "integrity": "sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/events": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.9.3.tgz", + "integrity": "sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/fs": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.9.3.tgz", + "integrity": "sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg==", + "dev": true, + "dependencies": { + "@parcel/fs-search": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/fs-search": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.9.3.tgz", + "integrity": "sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/graph": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.9.3.tgz", + "integrity": "sha512-3LmRJmF8+OprAr6zJT3X2s8WAhLKkrhi6RsFlMWHifGU5ED1PFcJWFbOwJvSjcAhMQJP0fErcFIK1Ludv3Vm3g==", + "dev": true, + "dependencies": { + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/hash": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.9.3.tgz", + "integrity": "sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ==", + "dev": true, + "dependencies": { + "xxhash-wasm": "^0.4.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/logger": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.9.3.tgz", + "integrity": "sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/markdown-ansi": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.9.3.tgz", + "integrity": "sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/namer-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.9.3.tgz", + "integrity": "sha512-1ynFEcap48/Ngzwwn318eLYpLUwijuuZoXQPCsEQ21OOIOtfhFQJaPwXTsw6kRitshKq76P2aafE0BioGSqxcA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/node-resolver-core": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.0.3.tgz", + "integrity": "sha512-AjxNcZVHHJoNT/A99PKIdFtwvoze8PAiC3yz8E/dRggrDIOboUEodeQYV5Aq++aK76uz/iOP0tST2T8A5rhb1A==", + "dev": true, + "dependencies": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.9.3.tgz", + "integrity": "sha512-RK1QwcSdWDNUsFvuLy0hgnYKtPQebzCb0vPPzqs6LhL+vqUu9utOyRycGaQffHCkHVQP6zGlN+KFssd7YtFGhA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.9.3.tgz", + "integrity": "sha512-9g/KBck3c6DokmJfvJ5zpHFBiCSolaGrcsTGx8C3YPdCTVTI9P1TDCwUxvAr4LjpcIRSa82wlLCI+nF6sSgxKA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/@parcel/optimizer-htmlnano/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@parcel/optimizer-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.9.3.tgz", + "integrity": "sha512-530YzthE7kmecnNhPbkAK+26yQNt69pfJrgE0Ev0BZaM1Wu2+33nki7o8qvkTkikhPrurEJLGIXt1qKmbKvCbA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/optimizer-svgo": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.9.3.tgz", + "integrity": "sha512-ytQS0wY5JJhWU4mL0wfhYDUuHcfuw+Gy2+JcnTm1t1AZXHlOTbU6EzRWNqBShsgXjvdrQQXizAe3B6GFFlFJVQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "svgo": "^2.4.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@parcel/optimizer-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/@parcel/optimizer-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@parcel/optimizer-swc": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.9.3.tgz", + "integrity": "sha512-GQINNeqtdpL1ombq/Cpwi6IBk02wKJ/JJbYbyfHtk8lxlq13soenpwOlzJ5T9D2fdG+FUhai9NxpN5Ss4lNoAg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "@swc/core": "^1.3.36", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/package-manager": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.9.3.tgz", + "integrity": "sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/node-resolver-core": "3.0.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/packager-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.9.3.tgz", + "integrity": "sha512-mePiWiYZOULY6e1RdAIJyRoYqXqGci0srOaVZYaP7mnrzvJgA63kaZFFsDiEWghunQpMUuUjM2x/vQVHzxmhKQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-html": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.9.3.tgz", + "integrity": "sha512-0Ex+O0EaZf9APNERRNGgGto02hFJ6f5RQEvRWBK55WAV1rXeU+kpjC0c0qZvnUaUtXfpWMsEBkevJCwDkUMeMg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.9.3.tgz", + "integrity": "sha512-V5xwkoE3zQ3R+WqAWhA1KGQ791FvJeW6KonOlMI1q76Djjgox68hhObqcLu66AmYNhR2R/wUpkP18hP2z8dSFw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.9.3.tgz", + "integrity": "sha512-oPQTNoYanQ2DdJyL61uPYK2py83rKOT8YVh2QWAx0zsSli6Kiy64U3+xOCYWgDVCrHw9+9NpQMuAdSiFg4cq8g==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/packager-svg": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.9.3.tgz", + "integrity": "sha512-p/Ya6UO9DAkaCUFxfFGyeHZDp9YPAlpdnh1OChuwqSFOXFjjeXuoK4KLT+ZRalVBo2Jo8xF70oKMZw4MVvaL7Q==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "posthtml": "^0.16.4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/plugin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.9.3.tgz", + "integrity": "sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g==", + "dev": true, + "dependencies": { + "@parcel/types": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/profiler": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.9.3.tgz", + "integrity": "sha512-pyHc9lw8VZDfgZoeZWZU9J0CVEv1Zw9O5+e0DJPDPHuXJYr72ZAOhbljtU3owWKAeW+++Q2AZWkbUGEOjI/e6g==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "chrome-trace-event": "^1.0.2" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-cli": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.9.3.tgz", + "integrity": "sha512-pZiEvQpuXFuQBafMHxkDmwH8CnnK9sWHwa3bSbsnt385aUahtE8dpY0LKt+K1zfB6degKoczN6aWVj9WycQuZQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-dev-server": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.9.3.tgz", + "integrity": "sha512-s6eboxdLEtRSvG52xi9IiNbcPKC0XMVmvTckieue2EqGDbDcaHQoHmmwkk0rNq0/Z/UxelGcQXoIYC/0xq3ykQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/reporter-tracer": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.9.3.tgz", + "integrity": "sha512-9cXpKWk0m6d6d+4+TlAdOe8XIPaFEIKGWMWG+5SFAQE08u3olet4PSvd49F4+ZZo5ftRE7YI3j6xNbXvJT8KGw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "chrome-trace-event": "^1.0.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/resolver-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.9.3.tgz", + "integrity": "sha512-8ESJk1COKvDzkmOnppNXoDamNMlYVIvrKc2RuFPmp8nKVj47R6NwMgvwxEaatyPzvkmyTpq5RvG9I3HFc+r4Cw==", + "dev": true, + "dependencies": { + "@parcel/node-resolver-core": "3.0.3", + "@parcel/plugin": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-browser-hmr": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.9.3.tgz", + "integrity": "sha512-EgiDIDrVAWpz7bOzWXqVinQkaFjLwT34wsonpXAbuI7f7r00d52vNAQC9AMu+pTijA3gyKoJ+Q4NWPMZf7ACDA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.9.3.tgz", + "integrity": "sha512-EvIy+qXcKnB5qxHhe96zmJpSAViNVXHfQI5RSdZ2a7CPwORwhTI+zPNT9sb7xb/WwFw/WuTTgzT40b41DceU6Q==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-react-refresh": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.9.3.tgz", + "integrity": "sha512-XBgryZQIyCmi6JwEfMUCmINB3l1TpTp9a2iFxmYNpzHlqj4Ve0saKaqWOVRLvC945ZovWIBzcSW2IYqWKGtbAA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/runtime-service-worker": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.9.3.tgz", + "integrity": "sha512-qLJLqv1mMdWL7gyh8aKBFFAuEiJkhUUgLKpdn6eSfH/R7kTtb76WnOwqUrhvEI9bZFUM/8Pa1bzJnPpqSOM+Sw==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": "^12.18.3 || >=14" + } + }, + "node_modules/@parcel/transformer-babel": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.9.3.tgz", + "integrity": "sha512-pURtEsnsp3h6tOBDuzh9wRvVtw4PgIlqwAArIWdrG7iwqOUYv9D8ME4+ePWEu7MQWAp58hv9pTJtqWv4T+Sq8A==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.9.3.tgz", + "integrity": "sha512-duWMdbEBBPjg3fQdXF16iWIdThetDZvCs2TpUD7xOlXH6kR0V5BJy8ONFT15u1RCqIV9hSNGaS3v3I9YRNY5zQ==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-html": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.9.3.tgz", + "integrity": "sha512-0NU4omcHzFXA1seqftAXA2KNZaMByoKaNdXnLgBgtCGDiYvOcL+6xGHgY6pw9LvOh5um10KI5TxSIMILoI7VtA==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2", + "srcset": "4" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.9.3.tgz", + "integrity": "sha512-7CEe35RaPadQzLIuxzTtIxnItvOoy46hcbXtOdDt6lmVa4omuOygZYRIya2lsGIP4JHvAaALMb5nt99a1uTwJg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/transformer-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.9.3.tgz", + "integrity": "sha512-Z2MVVg5FYcPOfxlUwxqb5l9yjTMEqE3KI3zq2MBRUme6AV07KxLmCDF23b6glzZlHWQUE8MXzYCTAkOPCcPz+Q==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "@swc/helpers": "^0.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@parcel/transformer-json": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.9.3.tgz", + "integrity": "sha512-yNL27dbOLhkkrjaQjiQ7Im9VOxmkfuuSNSmS0rA3gEjVcm07SLKRzWkAaPnyx44Lb6bzyOTWwVrb9aMmxgADpA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "json5": "^2.2.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-postcss": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.9.3.tgz", + "integrity": "sha512-HoDvPqKzhpmvMmHqQhDnt8F1vH61m6plpGiYaYnYv2Om4HHi5ZIq9bO+9QLBnTKfaZ7ndYSefTKOxTYElg7wyw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-posthtml": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.9.3.tgz", + "integrity": "sha512-2fQGgrzRmaqbWf3y2/T6xhqrNjzqMMKksqJzvc8TMfK6f2kg3Ddjv158eaSW2JdkV39aY7tvAOn5f1uzo74BMA==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.9.3.tgz", + "integrity": "sha512-oqdPzMC9QzWRbY9J6TZEqltknjno+dY24QWqf8ondmdF2+W+/2mRDu59hhCzQrqUHgTq4FewowRZmSfpzHxwaQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-react-refresh-wrap": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.9.3.tgz", + "integrity": "sha512-cb9NyU6oJlDblFIlzqIE8AkvRQVGl2IwJNKwD4PdE7Y6sq2okGEPG4hOw3k/Y9JVjM4/2pUORqvjSRhWwd9oVQ==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "react-refresh": "^0.9.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-sass": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.9.3.tgz", + "integrity": "sha512-i9abj9bKg3xCHghJyTM3rUVxIEn9n1Rl+DFdpyNAD8VZ52COfOshFDQOWNuhU1hEnJOFYCjnfcO0HRTsg3dWmg==", + "dev": true, + "dependencies": { + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "sass": "^1.38.0" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/transformer-svg": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.9.3.tgz", + "integrity": "sha512-ypmE+dzB09IMCdEAkOsSxq1dEIm2A3h67nAFz4qbfHbwNgXBUuy/jB3ZMwXN/cO0f7SBh/Ap8Jhq6vmGqB5tWw==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + }, + "engines": { + "node": ">= 12.0.0", + "parcel": "^2.9.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/types": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.9.3.tgz", + "integrity": "sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA==", + "dev": true, + "dependencies": { + "@parcel/cache": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.9.3", + "utility-types": "^3.10.0" + } + }, + "node_modules/@parcel/utils": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.9.3.tgz", + "integrity": "sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg==", + "dev": true, + "dependencies": { + "@parcel/codeframe": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/markdown-ansi": "2.9.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.2.0.tgz", + "integrity": "sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.2.0", + "@parcel/watcher-darwin-arm64": "2.2.0", + "@parcel/watcher-darwin-x64": "2.2.0", + "@parcel/watcher-linux-arm-glibc": "2.2.0", + "@parcel/watcher-linux-arm64-glibc": "2.2.0", + "@parcel/watcher-linux-arm64-musl": "2.2.0", + "@parcel/watcher-linux-x64-glibc": "2.2.0", + "@parcel/watcher-linux-x64-musl": "2.2.0", + "@parcel/watcher-win32-arm64": "2.2.0", + "@parcel/watcher-win32-x64": "2.2.0" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.2.0.tgz", + "integrity": "sha512-nU2wh00CTQT9rr1TIKTjdQ9lAGYpmz6XuKw0nAwAN+S2A5YiD55BK1u+E5WMCT8YOIDe/n6gaj4o/Bi9294SSQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.2.0.tgz", + "integrity": "sha512-cJl0UZDcodciy3TDMomoK/Huxpjlkkim3SyMgWzjovHGOZKNce9guLz2dzuFwfObBFCjfznbFMIvAZ5syXotYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.2.0.tgz", + "integrity": "sha512-QI77zxaGrCV1StKcoRYfsUfmUmvPMPfQrubkBBy5XujV2fwaLgZivQOTQMBgp5K2+E19u1ufpspKXAPqSzpbyg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.2.0.tgz", + "integrity": "sha512-I2GPBcAXazPzabCmfsa3HRRW+MGlqxYd8g8RIueJU+a4o5nyNZDz0CR1cu0INT0QSQXEZV7w6UE8Hz9CF8u3Pg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.2.0.tgz", + "integrity": "sha512-St5mlfp+2lS9AmgixUqfwJa/DwVmTCJxC1HcOubUTz6YFOKIlkHCeUa1Bxi4E/tR/HSez8+heXHL8HQkJ4Bd8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.2.0.tgz", + "integrity": "sha512-jS+qfhhoOBVWwMLP65MaG8xdInMK30pPW8wqTCg2AAuVJh5xepMbzkhHJ4zURqHiyY3EiIRuYu4ONJKCxt8iqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.2.0.tgz", + "integrity": "sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.2.0.tgz", + "integrity": "sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.2.0.tgz", + "integrity": "sha512-z225cPn3aygJsyVUOWwfyW+fY0Tvk7N3XCOl66qUPFxpbuXeZuiuuJemmtm8vxyqa3Ur7peU/qJxrpC64aeI7Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.2.0.tgz", + "integrity": "sha512-JqGW0RJ61BkKx+yYzIURt9s53P7xMVbv0uxYPzAXLBINGaFmkIKSuUPyBVfy8TMbvp93lvF4SPBNDzVRJfvgOw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/workers": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.9.3.tgz", + "integrity": "sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w==", + "dev": true, + "dependencies": { + "@parcel/diagnostic": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/profiler": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "peerDependencies": { + "@parcel/core": "^2.9.3" + } + }, + "node_modules/@patelka2211/dominar": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@patelka2211/dominar/-/dominar-1.2.4.tgz", + "integrity": "sha512-azlD/7yByJmn5GFLXFlQ9dEZDvrYNGA6+pAUPzrJjSh/n2ZLn6w0WGPS9mk0NZ7fQ/aBew8jQwyDnAVY0uFDGQ==" + }, + "node_modules/@swc/core": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.74.tgz", + "integrity": "sha512-P+MIExOTdWlfq8Heb1/NhBAke6UTckd4cRDuJoFcFMGBRvgoCMNWhnfP3FRRXPLI7GGg27dRZS+xHiqYyQmSrA==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/swc" + }, + "optionalDependencies": { + "@swc/core-darwin-arm64": "1.3.74", + "@swc/core-darwin-x64": "1.3.74", + "@swc/core-linux-arm-gnueabihf": "1.3.74", + "@swc/core-linux-arm64-gnu": "1.3.74", + "@swc/core-linux-arm64-musl": "1.3.74", + "@swc/core-linux-x64-gnu": "1.3.74", + "@swc/core-linux-x64-musl": "1.3.74", + "@swc/core-win32-arm64-msvc": "1.3.74", + "@swc/core-win32-ia32-msvc": "1.3.74", + "@swc/core-win32-x64-msvc": "1.3.74" + }, + "peerDependencies": { + "@swc/helpers": "^0.5.0" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@swc/core-darwin-arm64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.74.tgz", + "integrity": "sha512-2rMV4QxM583jXcREfo0MhV3Oj5pgRSfSh/kVrB1twL2rQxOrbzkAPT/8flmygdVoL4f2F7o1EY5lKlYxEBiIKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-darwin-x64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.74.tgz", + "integrity": "sha512-KKEGE1wXneYXe15fWDRM8/oekd/Q4yAuccA0vWY/7i6nOSPqWYcSDR0nRtR030ltDxWt0rk/eCTmNkrOWrKs3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm-gnueabihf": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.74.tgz", + "integrity": "sha512-HehH5DR6r/5fIVu7tu8ZqgrHkhSCQNewf1ztFQJgcmaQWn+H4AJERBjwkjosqh4TvUJucZv8vyRTvrFeBXaCSA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.74.tgz", + "integrity": "sha512-+xkbCRz/wczgdknoV4NwYxbRI2dD7x/qkIFcVM2buzLCq8oWLweuV8+aL4pRqu0qDh7ZSb1jcaVTUIsySCJznA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-arm64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.74.tgz", + "integrity": "sha512-maKFZSCD3tQznzPV7T3V+TtiWZFEFM8YrnSS5fQNNb+K9J65sL+170uTb3M7H4cFkG+9Sm5k5yCrCIutlvV48g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.74.tgz", + "integrity": "sha512-LEXpcShF6DLTWJSiBhMSYZkLQ27UvaQ24fCFhoIV/R3dhYaUpHmIyLPPBNC82T03lB3ONUFVwrRw6fxDJ/f00A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-linux-x64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.74.tgz", + "integrity": "sha512-sxsFctbFMZEFmDE7CmYljG0dMumH8XBTwwtGr8s6z0fYAzXBGNq2AFPcmEh2np9rPWkt7pE1m0ByESD+dMkbxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-arm64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.74.tgz", + "integrity": "sha512-F7hY9/BjFCozA4YPFYFH5FGCyWwa44vIXHqG66F5cDwXDGFn8ZtBsYIsiPfUYcx0AeAo1ojnVWKPxokZhYNYqA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-ia32-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.74.tgz", + "integrity": "sha512-qBAsiD1AlIdqED6wy3UNRHyAys9pWMUidX0LJ6mj24r/vfrzzTBAUrLJe5m7bzE+F1Rgi001avYJeEW1DLEJ+Q==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/core-win32-x64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.74.tgz", + "integrity": "sha512-S3YAvvLprTnPRwQuy9Dkwubb5SRLpVK3JJsqYDbGfgj8PGQyKHZcVJ5X3nfFsoWLy3j9B/3Os2nawprRSzeC5A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@swc/helpers": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", + "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==", + "engines": { + "node": ">= 0.6.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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "css-tree": "~2.2.0" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/dynamic-colors": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/dynamic-colors/-/dynamic-colors-1.1.5.tgz", + "integrity": "sha512-NBhHG2/7CDB32u89InrXy3LAMKg/wjYRzEqQdXJKf/a6t8pBL5KOt/y9XotxF47t2XoSuMGKujLb0w5kCmkMMg==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.483", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.483.tgz", + "integrity": "sha512-YLwU0iF//9R3cCEfq0wgL+pf9vglE4kwAg4S5tkVVZljUDKv7Wcz67mTY4OOj+T7YUbTGuqlbqgdl/s+7Q8KTw==", + "dev": true + }, + "node_modules/entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "dependencies": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/htmlnano": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz", + "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.0.0", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + }, + "peerDependencies": { + "cssnano": "^6.0.0", + "postcss": "^8.3.11", + "purgecss": "^5.0.0", + "relateurl": "^0.2.7", + "srcset": "4.0.0", + "svgo": "^3.0.2", + "terser": "^5.10.0", + "uncss": "^0.17.3" + }, + "peerDependenciesMeta": { + "cssnano": { + "optional": true + }, + "postcss": { + "optional": true + }, + "purgecss": { + "optional": true + }, + "relateurl": { + "optional": true + }, + "srcset": { + "optional": true + }, + "svgo": { + "optional": true + }, + "terser": { + "optional": true + }, + "uncss": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "node_modules/immutable": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", + "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lightningcss": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.21.5.tgz", + "integrity": "sha512-/pEUPeih2EwIx9n4T82aOG6CInN83tl/mWlw6B5gWLf36UplQi1L+5p3FUHsdt4fXVfOkkh9KIaM3owoq7ss8A==", + "dev": true, + "dependencies": { + "detect-libc": "^1.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.21.5", + "lightningcss-darwin-x64": "1.21.5", + "lightningcss-linux-arm-gnueabihf": "1.21.5", + "lightningcss-linux-arm64-gnu": "1.21.5", + "lightningcss-linux-arm64-musl": "1.21.5", + "lightningcss-linux-x64-gnu": "1.21.5", + "lightningcss-linux-x64-musl": "1.21.5", + "lightningcss-win32-x64-msvc": "1.21.5" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.21.5.tgz", + "integrity": "sha512-z05hyLX85WY0UfhkFUOrWEFqD69lpVAmgl3aDzMKlIZJGygbhbegqb4PV8qfUrKKNBauut/qVNPKZglhTaDDxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.21.5.tgz", + "integrity": "sha512-MSJhmej/U9MrdPxDk7+FWhO8+UqVoZUHG4VvKT5RQ4RJtqtANTiWiI97LvoVNMtdMnHaKs1Pkji6wHUFxjJsHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.21.5.tgz", + "integrity": "sha512-xN6+5/JsMrbZHL1lPl+MiNJ3Xza12ueBKPepiyDCFQzlhFRTj7D0LG+cfNTzPBTO8KcYQynLpl1iBB8LGp3Xtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.21.5.tgz", + "integrity": "sha512-KfzFNhC4XTbmG3ma/xcTs/IhCwieW89XALIusKmnV0N618ZDXEB0XjWOYQRCXeK9mfqPdbTBpurEHV/XZtkniQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.21.5.tgz", + "integrity": "sha512-bc0GytQO5Mn9QM6szaZ+31fQHNdidgpM1sSCwzPItz8hg3wOvKl8039rU0veMJV3ZgC9z0ypNRceLrSHeRHmXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.21.5.tgz", + "integrity": "sha512-JwMbgypPQgc2kW2av3OwzZ8cbrEuIiDiXPJdXRE6aVxu67yHauJawQLqJKTGUhiAhy6iLDG8Wg0a3/ziL+m+Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.21.5.tgz", + "integrity": "sha512-Ib8b6IQ/OR/VrPU6YBgy4T3QnuHY7DUa95O+nz+cwrTkMSN6fuHcTcIaz4t8TJ6HI5pl3uxUOZjmtls2pyQWow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.21.5.tgz", + "integrity": "sha512-A8cSi8lUpBeVmoF+DqqW7cd0FemDbCuKr490IXdjyeI+KL8adpSKUs8tcqO0OXPh1EoDqK7JNkD/dELmd4Iz5g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lmdb": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.7.11.tgz", + "integrity": "sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "msgpackr": "1.8.5", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.6", + "ordered-binary": "^1.4.0", + "weak-lru-cache": "^1.2.2" + }, + "bin": { + "download-lmdb-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@lmdb/lmdb-darwin-arm64": "2.7.11", + "@lmdb/lmdb-darwin-x64": "2.7.11", + "@lmdb/lmdb-linux-arm": "2.7.11", + "@lmdb/lmdb-linux-arm64": "2.7.11", + "@lmdb/lmdb-linux-x64": "2.7.11", + "@lmdb/lmdb-win32-x64": "2.7.11" + } + }, + "node_modules/lmdb/node_modules/msgpackr": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", + "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.1" + } + }, + "node_modules/lmdb/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", + "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "optional": true, + "peer": true + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/msgpackr": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.6.tgz", + "integrity": "sha512-50rmb6+ZWvEm0vJn8R8CwI1Eavss3h5rgtKrcdUal3EkZcpqw82+xsmc7RoHb8fYB5V4EOU2NDaOitDAdO0t+w==", + "dev": true, + "optionalDependencies": { + "msgpackr-extract": "^3.0.2" + } + }, + "node_modules/msgpackr-extract": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", + "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "dependencies": { + "node-gyp-build-optional-packages": "5.0.7" + }, + "bin": { + "download-msgpackr-prebuilds": "bin/download-prebuilds.js" + }, + "optionalDependencies": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2" + } + }, + "node_modules/msgpackr-extract/node_modules/node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "dev": true + }, + "node_modules/node-gyp-build-optional-packages": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz", + "integrity": "sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==", + "dev": true, + "bin": { + "node-gyp-build-optional-packages": "bin.js", + "node-gyp-build-optional-packages-optional": "optional.js", + "node-gyp-build-optional-packages-test": "build-test.js" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "node_modules/ordered-binary": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.1.tgz", + "integrity": "sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==", + "dev": true + }, + "node_modules/parcel": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.9.3.tgz", + "integrity": "sha512-2GTVocFkwblV/TIg9AmT7TI2fO4xdWkyN8aFUEVtiVNWt96GTR3FgQyHFValfCbcj1k9Xf962Ws2hYXYUr9k1Q==", + "dev": true, + "dependencies": { + "@parcel/config-default": "2.9.3", + "@parcel/core": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/reporter-cli": "2.9.3", + "@parcel/reporter-dev-server": "2.9.3", + "@parcel/reporter-tracer": "2.9.3", + "@parcel/utils": "2.9.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0" + }, + "bin": { + "parcel": "lib/bin.js" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "dev": true + }, + "node_modules/posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "dependencies": { + "is-json": "^2.0.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/posthtml/node_modules/posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "dependencies": { + "htmlparser2": "^7.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/rollup": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.1.tgz", + "integrity": "sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/rollup-plugin-dts": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz", + "integrity": "sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==", + "dev": true, + "dependencies": { + "magic-string": "^0.30.2" + }, + "engines": { + "node": ">=v14.21.3" + }, + "funding": { + "url": "https://github.com/sponsors/Swatinem" + }, + "optionalDependencies": { + "@babel/code-frame": "^7.22.5" + }, + "peerDependencies": { + "rollup": "^3.0", + "typescript": "^4.1 || ^5.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "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/sass": { + "version": "1.64.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.2.tgz", + "integrity": "sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg==", + "dev": 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": ">=14.0.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "optional": true, + "peer": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" + } + }, + "node_modules/term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "dependencies": { + "utrie": "^1.0.2" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "dependencies": { + "base64-arraybuffer": "^1.0.2" + } + }, + "node_modules/weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "node_modules/xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", + "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "dev": true, + "requires": { + "@babel/highlight": "^7.22.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", + "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "dev": true + }, + "@babel/highlight": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", + "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } + } + }, + "@lezer/common": { + "version": "0.15.12", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-0.15.12.tgz", + "integrity": "sha512-edfwCxNLnzq5pBA/yaIhwJ3U3Kz8VAUOTRg0hhxaizaI1N+qxV7EXDv/kLCkLeq2RzSFvxexlaj5Mzfn2kY0Ig==", + "dev": true + }, + "@lezer/lr": { + "version": "0.15.8", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-0.15.8.tgz", + "integrity": "sha512-bM6oE6VQZ6hIFxDNKk8bKPa14hqFrV07J/vHGOeiAbJReIaQXmkVb6xQu4MR+JBTLa5arGRyAAjJe1qaQt3Uvg==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.0" + } + }, + "@lmdb/lmdb-darwin-arm64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-arm64/-/lmdb-darwin-arm64-2.7.11.tgz", + "integrity": "sha512-r6+vYq2vKzE+vgj/rNVRMwAevq0+ZR9IeMFIqcSga+wMtMdXQ27KqQ7uS99/yXASg29bos7yHP3yk4x6Iio0lw==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-darwin-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-darwin-x64/-/lmdb-darwin-x64-2.7.11.tgz", + "integrity": "sha512-jhj1aB4K8ycRL1HOQT5OtzlqOq70jxUQEWRN9Gqh3TIDN30dxXtiHi6EWF516tzw6v2+3QqhDMJh8O6DtTGG8Q==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-arm": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm/-/lmdb-linux-arm-2.7.11.tgz", + "integrity": "sha512-dHfLFVSrw/v5X5lkwp0Vl7+NFpEeEYKfMG2DpdFJnnG1RgHQZngZxCaBagFoaJGykRpd2DYF1AeuXBFrAUAXfw==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-arm64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-arm64/-/lmdb-linux-arm64-2.7.11.tgz", + "integrity": "sha512-7xGEfPPbmVJWcY2Nzqo11B9Nfxs+BAsiiaY/OcT4aaTDdykKeCjvKMQJA3KXCtZ1AtiC9ljyGLi+BfUwdulY5A==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-linux-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-linux-x64/-/lmdb-linux-x64-2.7.11.tgz", + "integrity": "sha512-vUKI3JrREMQsXX8q0Eq5zX2FlYCKWMmLiCyyJNfZK0Uyf14RBg9VtB3ObQ41b4swYh2EWaltasWVe93Y8+KDng==", + "dev": true, + "optional": true + }, + "@lmdb/lmdb-win32-x64": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/@lmdb/lmdb-win32-x64/-/lmdb-win32-x64-2.7.11.tgz", + "integrity": "sha512-BJwkHlSUgtB+Ei52Ai32M1AOMerSlzyIGA/KC4dAGL+GGwVMdwG8HGCOA2TxP3KjhbgDPMYkv7bt/NmOmRIFng==", + "dev": true, + "optional": true + }, + "@mischnic/json-sourcemap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mischnic/json-sourcemap/-/json-sourcemap-0.1.0.tgz", + "integrity": "sha512-dQb3QnfNqmQNYA4nFSN/uLaByIic58gOXq4Y4XqLOWmOrw73KmJPt/HLyG0wvn1bnR6mBKs/Uwvkh+Hns1T0XA==", + "dev": true, + "requires": { + "@lezer/common": "^0.15.7", + "@lezer/lr": "^0.15.4", + "json5": "^2.2.1" + } + }, + "@msgpackr-extract/msgpackr-extract-darwin-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-arm64/-/msgpackr-extract-darwin-arm64-3.0.2.tgz", + "integrity": "sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-darwin-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-darwin-x64/-/msgpackr-extract-darwin-x64-3.0.2.tgz", + "integrity": "sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm/-/msgpackr-extract-linux-arm-3.0.2.tgz", + "integrity": "sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-arm64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-arm64/-/msgpackr-extract-linux-arm64-3.0.2.tgz", + "integrity": "sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-linux-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-linux-x64/-/msgpackr-extract-linux-x64-3.0.2.tgz", + "integrity": "sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==", + "dev": true, + "optional": true + }, + "@msgpackr-extract/msgpackr-extract-win32-x64": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.2.tgz", + "integrity": "sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==", + "dev": true, + "optional": true + }, + "@parcel/bundler-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/bundler-default/-/bundler-default-2.9.3.tgz", + "integrity": "sha512-JjJK8dq39/UO/MWI/4SCbB1t/qgpQRFnFDetAAAezQ8oN++b24u1fkMDa/xqQGjbuPmGeTds5zxGgYs7id7PYg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/graph": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/cache": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/cache/-/cache-2.9.3.tgz", + "integrity": "sha512-Bj/H2uAJJSXtysG7E/x4EgTrE2hXmm7td/bc97K8M9N7+vQjxf7xb0ebgqe84ePVMkj4MVQSMEJkEucXVx4b0Q==", + "dev": true, + "requires": { + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/utils": "2.9.3", + "lmdb": "2.7.11" + } + }, + "@parcel/codeframe": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/codeframe/-/codeframe-2.9.3.tgz", + "integrity": "sha512-z7yTyD6h3dvduaFoHpNqur74/2yDWL++33rjQjIjCaXREBN6dKHoMGMizzo/i4vbiI1p9dDox2FIDEHCMQxqdA==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/compressor-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/compressor-raw/-/compressor-raw-2.9.3.tgz", + "integrity": "sha512-jz3t4/ICMsHEqgiTmv5i1DJva2k5QRpZlBELVxfY+QElJTVe8edKJ0TiKcBxh2hx7sm4aUigGmp7JiqqHRRYmA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3" + } + }, + "@parcel/config-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/config-default/-/config-default-2.9.3.tgz", + "integrity": "sha512-tqN5tF7QnVABDZAu76co5E6N8mA9n8bxiWdK4xYyINYFIEHgX172oRTqXTnhEMjlMrdmASxvnGlbaPBaVnrCTw==", + "dev": true, + "requires": { + "@parcel/bundler-default": "2.9.3", + "@parcel/compressor-raw": "2.9.3", + "@parcel/namer-default": "2.9.3", + "@parcel/optimizer-css": "2.9.3", + "@parcel/optimizer-htmlnano": "2.9.3", + "@parcel/optimizer-image": "2.9.3", + "@parcel/optimizer-svgo": "2.9.3", + "@parcel/optimizer-swc": "2.9.3", + "@parcel/packager-css": "2.9.3", + "@parcel/packager-html": "2.9.3", + "@parcel/packager-js": "2.9.3", + "@parcel/packager-raw": "2.9.3", + "@parcel/packager-svg": "2.9.3", + "@parcel/reporter-dev-server": "2.9.3", + "@parcel/resolver-default": "2.9.3", + "@parcel/runtime-browser-hmr": "2.9.3", + "@parcel/runtime-js": "2.9.3", + "@parcel/runtime-react-refresh": "2.9.3", + "@parcel/runtime-service-worker": "2.9.3", + "@parcel/transformer-babel": "2.9.3", + "@parcel/transformer-css": "2.9.3", + "@parcel/transformer-html": "2.9.3", + "@parcel/transformer-image": "2.9.3", + "@parcel/transformer-js": "2.9.3", + "@parcel/transformer-json": "2.9.3", + "@parcel/transformer-postcss": "2.9.3", + "@parcel/transformer-posthtml": "2.9.3", + "@parcel/transformer-raw": "2.9.3", + "@parcel/transformer-react-refresh-wrap": "2.9.3", + "@parcel/transformer-svg": "2.9.3" + } + }, + "@parcel/core": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/core/-/core-2.9.3.tgz", + "integrity": "sha512-4KlM1Zr/jpsqWuMXr2zmGsaOUs1zMMFh9vfCNKRZkptf+uk8I3sugHbNdo+F5B+4e2yMuOEb1zgAmvJLeuH6ww==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/cache": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/graph": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/profiler": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "abortcontroller-polyfill": "^1.1.9", + "base-x": "^3.0.8", + "browserslist": "^4.6.6", + "clone": "^2.1.1", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "json5": "^2.2.0", + "msgpackr": "^1.5.4", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + } + }, + "@parcel/diagnostic": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/diagnostic/-/diagnostic-2.9.3.tgz", + "integrity": "sha512-6jxBdyB3D7gP4iE66ghUGntWt2v64E6EbD4AetZk+hNJpgudOOPsKTovcMi/i7I4V0qD7WXSF4tvkZUoac0jwA==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/events": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/events/-/events-2.9.3.tgz", + "integrity": "sha512-K0Scx+Bx9f9p1vuShMzNwIgiaZUkxEnexaKYHYemJrM7pMAqxIuIqhnvwurRCsZOVLUJPDDNJ626cWTc5vIq+A==", + "dev": true + }, + "@parcel/fs": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/fs/-/fs-2.9.3.tgz", + "integrity": "sha512-/PrRKgCRw22G7rNPSpgN3Q+i2nIkZWuvIOAdMG4KWXC4XLp8C9jarNaWd5QEQ75amjhQSl3oUzABzkdCtkKrgg==", + "dev": true, + "requires": { + "@parcel/fs-search": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/watcher": "^2.0.7", + "@parcel/workers": "2.9.3" + } + }, + "@parcel/fs-search": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/fs-search/-/fs-search-2.9.3.tgz", + "integrity": "sha512-nsNz3bsOpwS+jphcd+XjZL3F3PDq9lik0O8HPm5f6LYkqKWT+u/kgQzA8OkAHCR3q96LGiHxUywHPEBc27vI4Q==", + "dev": true + }, + "@parcel/graph": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/graph/-/graph-2.9.3.tgz", + "integrity": "sha512-3LmRJmF8+OprAr6zJT3X2s8WAhLKkrhi6RsFlMWHifGU5ED1PFcJWFbOwJvSjcAhMQJP0fErcFIK1Ludv3Vm3g==", + "dev": true, + "requires": { + "nullthrows": "^1.1.1" + } + }, + "@parcel/hash": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/hash/-/hash-2.9.3.tgz", + "integrity": "sha512-qlH5B85XLzVAeijgKPjm1gQu35LoRYX/8igsjnN8vOlbc3O8BYAUIutU58fbHbtE8MJPbxQQUw7tkTjeoujcQQ==", + "dev": true, + "requires": { + "xxhash-wasm": "^0.4.2" + } + }, + "@parcel/logger": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/logger/-/logger-2.9.3.tgz", + "integrity": "sha512-5FNBszcV6ilGFcijEOvoNVG6IUJGsnMiaEnGQs7Fvc1dktTjEddnoQbIYhcSZL63wEmzBZOgkT5yDMajJ/41jw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3" + } + }, + "@parcel/markdown-ansi": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/markdown-ansi/-/markdown-ansi-2.9.3.tgz", + "integrity": "sha512-/Q4X8F2aN8UNjAJrQ5NfK2OmZf6shry9DqetUSEndQ0fHonk78WKt6LT0zSKEBEW/bB/bXk6mNMsCup6L8ibjQ==", + "dev": true, + "requires": { + "chalk": "^4.1.0" + } + }, + "@parcel/namer-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/namer-default/-/namer-default-2.9.3.tgz", + "integrity": "sha512-1ynFEcap48/Ngzwwn318eLYpLUwijuuZoXQPCsEQ21OOIOtfhFQJaPwXTsw6kRitshKq76P2aafE0BioGSqxcA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/node-resolver-core": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@parcel/node-resolver-core/-/node-resolver-core-3.0.3.tgz", + "integrity": "sha512-AjxNcZVHHJoNT/A99PKIdFtwvoze8PAiC3yz8E/dRggrDIOboUEodeQYV5Aq++aK76uz/iOP0tST2T8A5rhb1A==", + "dev": true, + "requires": { + "@mischnic/json-sourcemap": "^0.1.0", + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + } + }, + "@parcel/optimizer-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-css/-/optimizer-css-2.9.3.tgz", + "integrity": "sha512-RK1QwcSdWDNUsFvuLy0hgnYKtPQebzCb0vPPzqs6LhL+vqUu9utOyRycGaQffHCkHVQP6zGlN+KFssd7YtFGhA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + } + }, + "@parcel/optimizer-htmlnano": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.9.3.tgz", + "integrity": "sha512-9g/KBck3c6DokmJfvJ5zpHFBiCSolaGrcsTGx8C3YPdCTVTI9P1TDCwUxvAr4LjpcIRSa82wlLCI+nF6sSgxKA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "htmlnano": "^2.0.0", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "svgo": "^2.4.0" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "@parcel/optimizer-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-image/-/optimizer-image-2.9.3.tgz", + "integrity": "sha512-530YzthE7kmecnNhPbkAK+26yQNt69pfJrgE0Ev0BZaM1Wu2+33nki7o8qvkTkikhPrurEJLGIXt1qKmbKvCbA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3" + } + }, + "@parcel/optimizer-svgo": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-svgo/-/optimizer-svgo-2.9.3.tgz", + "integrity": "sha512-ytQS0wY5JJhWU4mL0wfhYDUuHcfuw+Gy2+JcnTm1t1AZXHlOTbU6EzRWNqBShsgXjvdrQQXizAe3B6GFFlFJVQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "svgo": "^2.4.0" + }, + "dependencies": { + "css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + } + }, + "csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "requires": { + "css-tree": "^1.1.2" + } + }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + } + } + } + }, + "@parcel/optimizer-swc": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/optimizer-swc/-/optimizer-swc-2.9.3.tgz", + "integrity": "sha512-GQINNeqtdpL1ombq/Cpwi6IBk02wKJ/JJbYbyfHtk8lxlq13soenpwOlzJ5T9D2fdG+FUhai9NxpN5Ss4lNoAg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "@swc/core": "^1.3.36", + "nullthrows": "^1.1.1" + } + }, + "@parcel/package-manager": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/package-manager/-/package-manager-2.9.3.tgz", + "integrity": "sha512-NH6omcNTEupDmW4Lm1e4NUYBjdqkURxgZ4CNESESInHJe6tblVhNB8Rpr1ar7zDar7cly9ILr8P6N3Ei7bTEjg==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/node-resolver-core": "3.0.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "semver": "^7.5.2" + } + }, + "@parcel/packager-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-css/-/packager-css-2.9.3.tgz", + "integrity": "sha512-mePiWiYZOULY6e1RdAIJyRoYqXqGci0srOaVZYaP7mnrzvJgA63kaZFFsDiEWghunQpMUuUjM2x/vQVHzxmhKQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-html": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-html/-/packager-html-2.9.3.tgz", + "integrity": "sha512-0Ex+O0EaZf9APNERRNGgGto02hFJ6f5RQEvRWBK55WAV1rXeU+kpjC0c0qZvnUaUtXfpWMsEBkevJCwDkUMeMg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5" + } + }, + "@parcel/packager-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-js/-/packager-js-2.9.3.tgz", + "integrity": "sha512-V5xwkoE3zQ3R+WqAWhA1KGQ791FvJeW6KonOlMI1q76Djjgox68hhObqcLu66AmYNhR2R/wUpkP18hP2z8dSFw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "globals": "^13.2.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/packager-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-raw/-/packager-raw-2.9.3.tgz", + "integrity": "sha512-oPQTNoYanQ2DdJyL61uPYK2py83rKOT8YVh2QWAx0zsSli6Kiy64U3+xOCYWgDVCrHw9+9NpQMuAdSiFg4cq8g==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3" + } + }, + "@parcel/packager-svg": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/packager-svg/-/packager-svg-2.9.3.tgz", + "integrity": "sha512-p/Ya6UO9DAkaCUFxfFGyeHZDp9YPAlpdnh1OChuwqSFOXFjjeXuoK4KLT+ZRalVBo2Jo8xF70oKMZw4MVvaL7Q==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "posthtml": "^0.16.4" + } + }, + "@parcel/plugin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/plugin/-/plugin-2.9.3.tgz", + "integrity": "sha512-qN85Gqr2GMuxX1dT1mnuO9hOcvlEv1lrYrCxn7CJN2nUhbwcfG+LEvcrCzCOJ6XtIHm+ZBV9h9p7FfoPLvpw+g==", + "dev": true, + "requires": { + "@parcel/types": "2.9.3" + } + }, + "@parcel/profiler": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/profiler/-/profiler-2.9.3.tgz", + "integrity": "sha512-pyHc9lw8VZDfgZoeZWZU9J0CVEv1Zw9O5+e0DJPDPHuXJYr72ZAOhbljtU3owWKAeW+++Q2AZWkbUGEOjI/e6g==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "chrome-trace-event": "^1.0.2" + } + }, + "@parcel/reporter-cli": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-cli/-/reporter-cli-2.9.3.tgz", + "integrity": "sha512-pZiEvQpuXFuQBafMHxkDmwH8CnnK9sWHwa3bSbsnt385aUahtE8dpY0LKt+K1zfB6degKoczN6aWVj9WycQuZQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "chalk": "^4.1.0", + "term-size": "^2.2.1" + } + }, + "@parcel/reporter-dev-server": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-dev-server/-/reporter-dev-server-2.9.3.tgz", + "integrity": "sha512-s6eboxdLEtRSvG52xi9IiNbcPKC0XMVmvTckieue2EqGDbDcaHQoHmmwkk0rNq0/Z/UxelGcQXoIYC/0xq3ykQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3" + } + }, + "@parcel/reporter-tracer": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/reporter-tracer/-/reporter-tracer-2.9.3.tgz", + "integrity": "sha512-9cXpKWk0m6d6d+4+TlAdOe8XIPaFEIKGWMWG+5SFAQE08u3olet4PSvd49F4+ZZo5ftRE7YI3j6xNbXvJT8KGw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "chrome-trace-event": "^1.0.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/resolver-default": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/resolver-default/-/resolver-default-2.9.3.tgz", + "integrity": "sha512-8ESJk1COKvDzkmOnppNXoDamNMlYVIvrKc2RuFPmp8nKVj47R6NwMgvwxEaatyPzvkmyTpq5RvG9I3HFc+r4Cw==", + "dev": true, + "requires": { + "@parcel/node-resolver-core": "3.0.3", + "@parcel/plugin": "2.9.3" + } + }, + "@parcel/runtime-browser-hmr": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.9.3.tgz", + "integrity": "sha512-EgiDIDrVAWpz7bOzWXqVinQkaFjLwT34wsonpXAbuI7f7r00d52vNAQC9AMu+pTijA3gyKoJ+Q4NWPMZf7ACDA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3" + } + }, + "@parcel/runtime-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-js/-/runtime-js-2.9.3.tgz", + "integrity": "sha512-EvIy+qXcKnB5qxHhe96zmJpSAViNVXHfQI5RSdZ2a7CPwORwhTI+zPNT9sb7xb/WwFw/WuTTgzT40b41DceU6Q==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/runtime-react-refresh": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.9.3.tgz", + "integrity": "sha512-XBgryZQIyCmi6JwEfMUCmINB3l1TpTp9a2iFxmYNpzHlqj4Ve0saKaqWOVRLvC945ZovWIBzcSW2IYqWKGtbAA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "react-error-overlay": "6.0.9", + "react-refresh": "^0.9.0" + } + }, + "@parcel/runtime-service-worker": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/runtime-service-worker/-/runtime-service-worker-2.9.3.tgz", + "integrity": "sha512-qLJLqv1mMdWL7gyh8aKBFFAuEiJkhUUgLKpdn6eSfH/R7kTtb76WnOwqUrhvEI9bZFUM/8Pa1bzJnPpqSOM+Sw==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/source-map": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@parcel/source-map/-/source-map-2.1.1.tgz", + "integrity": "sha512-Ejx1P/mj+kMjQb8/y5XxDUn4reGdr+WyKYloBljpppUy8gs42T+BNoEOuRYqDVdgPc6NxduzIDoJS9pOFfV5Ew==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3" + } + }, + "@parcel/transformer-babel": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-babel/-/transformer-babel-2.9.3.tgz", + "integrity": "sha512-pURtEsnsp3h6tOBDuzh9wRvVtw4PgIlqwAArIWdrG7iwqOUYv9D8ME4+ePWEu7MQWAp58hv9pTJtqWv4T+Sq8A==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "json5": "^2.2.0", + "nullthrows": "^1.1.1", + "semver": "^7.5.2" + } + }, + "@parcel/transformer-css": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-css/-/transformer-css-2.9.3.tgz", + "integrity": "sha512-duWMdbEBBPjg3fQdXF16iWIdThetDZvCs2TpUD7xOlXH6kR0V5BJy8ONFT15u1RCqIV9hSNGaS3v3I9YRNY5zQ==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "browserslist": "^4.6.6", + "lightningcss": "^1.16.1", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-html": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-html/-/transformer-html-2.9.3.tgz", + "integrity": "sha512-0NU4omcHzFXA1seqftAXA2KNZaMByoKaNdXnLgBgtCGDiYvOcL+6xGHgY6pw9LvOh5um10KI5TxSIMILoI7VtA==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2", + "srcset": "4" + } + }, + "@parcel/transformer-image": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-image/-/transformer-image-2.9.3.tgz", + "integrity": "sha512-7CEe35RaPadQzLIuxzTtIxnItvOoy46hcbXtOdDt6lmVa4omuOygZYRIya2lsGIP4JHvAaALMb5nt99a1uTwJg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@parcel/transformer-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-js/-/transformer-js-2.9.3.tgz", + "integrity": "sha512-Z2MVVg5FYcPOfxlUwxqb5l9yjTMEqE3KI3zq2MBRUme6AV07KxLmCDF23b6glzZlHWQUE8MXzYCTAkOPCcPz+Q==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/utils": "2.9.3", + "@parcel/workers": "2.9.3", + "@swc/helpers": "^0.5.0", + "browserslist": "^4.6.6", + "nullthrows": "^1.1.1", + "regenerator-runtime": "^0.13.7", + "semver": "^7.5.2" + } + }, + "@parcel/transformer-json": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-json/-/transformer-json-2.9.3.tgz", + "integrity": "sha512-yNL27dbOLhkkrjaQjiQ7Im9VOxmkfuuSNSmS0rA3gEjVcm07SLKRzWkAaPnyx44Lb6bzyOTWwVrb9aMmxgADpA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "json5": "^2.2.0" + } + }, + "@parcel/transformer-postcss": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-postcss/-/transformer-postcss-2.9.3.tgz", + "integrity": "sha512-HoDvPqKzhpmvMmHqQhDnt8F1vH61m6plpGiYaYnYv2Om4HHi5ZIq9bO+9QLBnTKfaZ7ndYSefTKOxTYElg7wyw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "clone": "^2.1.1", + "nullthrows": "^1.1.1", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.2" + } + }, + "@parcel/transformer-posthtml": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-posthtml/-/transformer-posthtml-2.9.3.tgz", + "integrity": "sha512-2fQGgrzRmaqbWf3y2/T6xhqrNjzqMMKksqJzvc8TMfK6f2kg3Ddjv158eaSW2JdkV39aY7tvAOn5f1uzo74BMA==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + } + }, + "@parcel/transformer-raw": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-raw/-/transformer-raw-2.9.3.tgz", + "integrity": "sha512-oqdPzMC9QzWRbY9J6TZEqltknjno+dY24QWqf8ondmdF2+W+/2mRDu59hhCzQrqUHgTq4FewowRZmSfpzHxwaQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3" + } + }, + "@parcel/transformer-react-refresh-wrap": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.9.3.tgz", + "integrity": "sha512-cb9NyU6oJlDblFIlzqIE8AkvRQVGl2IwJNKwD4PdE7Y6sq2okGEPG4hOw3k/Y9JVjM4/2pUORqvjSRhWwd9oVQ==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/utils": "2.9.3", + "react-refresh": "^0.9.0" + } + }, + "@parcel/transformer-sass": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-sass/-/transformer-sass-2.9.3.tgz", + "integrity": "sha512-i9abj9bKg3xCHghJyTM3rUVxIEn9n1Rl+DFdpyNAD8VZ52COfOshFDQOWNuhU1hEnJOFYCjnfcO0HRTsg3dWmg==", + "dev": true, + "requires": { + "@parcel/plugin": "2.9.3", + "@parcel/source-map": "^2.1.1", + "sass": "^1.38.0" + } + }, + "@parcel/transformer-svg": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/transformer-svg/-/transformer-svg-2.9.3.tgz", + "integrity": "sha512-ypmE+dzB09IMCdEAkOsSxq1dEIm2A3h67nAFz4qbfHbwNgXBUuy/jB3ZMwXN/cO0f7SBh/Ap8Jhq6vmGqB5tWw==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/plugin": "2.9.3", + "nullthrows": "^1.1.1", + "posthtml": "^0.16.5", + "posthtml-parser": "^0.10.1", + "posthtml-render": "^3.0.0", + "semver": "^7.5.2" + } + }, + "@parcel/types": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/types/-/types-2.9.3.tgz", + "integrity": "sha512-NSNY8sYtRhvF1SqhnIGgGvJocyWt1K8Tnw5cVepm0g38ywtX6mwkBvMkmeehXkII4mSUn+frD9wGsydTunezvA==", + "dev": true, + "requires": { + "@parcel/cache": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/source-map": "^2.1.1", + "@parcel/workers": "2.9.3", + "utility-types": "^3.10.0" + } + }, + "@parcel/utils": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/utils/-/utils-2.9.3.tgz", + "integrity": "sha512-cesanjtj/oLehW8Waq9JFPmAImhoiHX03ihc3JTWkrvJYSbD7wYKCDgPAM3JiRAqvh1LZ6P699uITrYWNoRLUg==", + "dev": true, + "requires": { + "@parcel/codeframe": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/hash": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/markdown-ansi": "2.9.3", + "@parcel/source-map": "^2.1.1", + "chalk": "^4.1.0", + "nullthrows": "^1.1.1" + } + }, + "@parcel/watcher": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.2.0.tgz", + "integrity": "sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==", + "dev": true, + "requires": { + "@parcel/watcher-android-arm64": "2.2.0", + "@parcel/watcher-darwin-arm64": "2.2.0", + "@parcel/watcher-darwin-x64": "2.2.0", + "@parcel/watcher-linux-arm-glibc": "2.2.0", + "@parcel/watcher-linux-arm64-glibc": "2.2.0", + "@parcel/watcher-linux-arm64-musl": "2.2.0", + "@parcel/watcher-linux-x64-glibc": "2.2.0", + "@parcel/watcher-linux-x64-musl": "2.2.0", + "@parcel/watcher-win32-arm64": "2.2.0", + "@parcel/watcher-win32-x64": "2.2.0", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.2.0.tgz", + "integrity": "sha512-nU2wh00CTQT9rr1TIKTjdQ9lAGYpmz6XuKw0nAwAN+S2A5YiD55BK1u+E5WMCT8YOIDe/n6gaj4o/Bi9294SSQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.2.0.tgz", + "integrity": "sha512-cJl0UZDcodciy3TDMomoK/Huxpjlkkim3SyMgWzjovHGOZKNce9guLz2dzuFwfObBFCjfznbFMIvAZ5syXotYw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.2.0.tgz", + "integrity": "sha512-QI77zxaGrCV1StKcoRYfsUfmUmvPMPfQrubkBBy5XujV2fwaLgZivQOTQMBgp5K2+E19u1ufpspKXAPqSzpbyg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.2.0.tgz", + "integrity": "sha512-I2GPBcAXazPzabCmfsa3HRRW+MGlqxYd8g8RIueJU+a4o5nyNZDz0CR1cu0INT0QSQXEZV7w6UE8Hz9CF8u3Pg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.2.0.tgz", + "integrity": "sha512-St5mlfp+2lS9AmgixUqfwJa/DwVmTCJxC1HcOubUTz6YFOKIlkHCeUa1Bxi4E/tR/HSez8+heXHL8HQkJ4Bd8g==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.2.0.tgz", + "integrity": "sha512-jS+qfhhoOBVWwMLP65MaG8xdInMK30pPW8wqTCg2AAuVJh5xepMbzkhHJ4zURqHiyY3EiIRuYu4ONJKCxt8iqA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.2.0.tgz", + "integrity": "sha512-xJvJ7R2wJdi47WZBFS691RDOWvP1j/IAs3EXaWVhDI8FFITbWrWaln7KoNcR0Y3T+ZwimFY/cfb0PNht1q895g==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.2.0.tgz", + "integrity": "sha512-D+NMpgr23a+RI5mu8ZPKWy7AqjBOkURFDgP5iIXXEf/K3hm0jJ3ogzi0Ed2237B/CdYREimCgXyeiAlE/FtwyA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.2.0.tgz", + "integrity": "sha512-z225cPn3aygJsyVUOWwfyW+fY0Tvk7N3XCOl66qUPFxpbuXeZuiuuJemmtm8vxyqa3Ur7peU/qJxrpC64aeI7Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.2.0.tgz", + "integrity": "sha512-JqGW0RJ61BkKx+yYzIURt9s53P7xMVbv0uxYPzAXLBINGaFmkIKSuUPyBVfy8TMbvp93lvF4SPBNDzVRJfvgOw==", + "dev": true, + "optional": true + }, + "@parcel/workers": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@parcel/workers/-/workers-2.9.3.tgz", + "integrity": "sha512-zRrDuZJzTevrrwElYosFztgldhqW6G9q5zOeQXfVQFkkEJCNfg36ixeiofKRU8uu2x+j+T6216mhMNB6HiuY+w==", + "dev": true, + "requires": { + "@parcel/diagnostic": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/profiler": "2.9.3", + "@parcel/types": "2.9.3", + "@parcel/utils": "2.9.3", + "nullthrows": "^1.1.1" + } + }, + "@patelka2211/dominar": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@patelka2211/dominar/-/dominar-1.2.4.tgz", + "integrity": "sha512-azlD/7yByJmn5GFLXFlQ9dEZDvrYNGA6+pAUPzrJjSh/n2ZLn6w0WGPS9mk0NZ7fQ/aBew8jQwyDnAVY0uFDGQ==" + }, + "@swc/core": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.74.tgz", + "integrity": "sha512-P+MIExOTdWlfq8Heb1/NhBAke6UTckd4cRDuJoFcFMGBRvgoCMNWhnfP3FRRXPLI7GGg27dRZS+xHiqYyQmSrA==", + "dev": true, + "requires": { + "@swc/core-darwin-arm64": "1.3.74", + "@swc/core-darwin-x64": "1.3.74", + "@swc/core-linux-arm-gnueabihf": "1.3.74", + "@swc/core-linux-arm64-gnu": "1.3.74", + "@swc/core-linux-arm64-musl": "1.3.74", + "@swc/core-linux-x64-gnu": "1.3.74", + "@swc/core-linux-x64-musl": "1.3.74", + "@swc/core-win32-arm64-msvc": "1.3.74", + "@swc/core-win32-ia32-msvc": "1.3.74", + "@swc/core-win32-x64-msvc": "1.3.74" + } + }, + "@swc/core-darwin-arm64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.74.tgz", + "integrity": "sha512-2rMV4QxM583jXcREfo0MhV3Oj5pgRSfSh/kVrB1twL2rQxOrbzkAPT/8flmygdVoL4f2F7o1EY5lKlYxEBiIKQ==", + "dev": true, + "optional": true + }, + "@swc/core-darwin-x64": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.74.tgz", + "integrity": "sha512-KKEGE1wXneYXe15fWDRM8/oekd/Q4yAuccA0vWY/7i6nOSPqWYcSDR0nRtR030ltDxWt0rk/eCTmNkrOWrKs3A==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm-gnueabihf": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.74.tgz", + "integrity": "sha512-HehH5DR6r/5fIVu7tu8ZqgrHkhSCQNewf1ztFQJgcmaQWn+H4AJERBjwkjosqh4TvUJucZv8vyRTvrFeBXaCSA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.74.tgz", + "integrity": "sha512-+xkbCRz/wczgdknoV4NwYxbRI2dD7x/qkIFcVM2buzLCq8oWLweuV8+aL4pRqu0qDh7ZSb1jcaVTUIsySCJznA==", + "dev": true, + "optional": true + }, + "@swc/core-linux-arm64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.74.tgz", + "integrity": "sha512-maKFZSCD3tQznzPV7T3V+TtiWZFEFM8YrnSS5fQNNb+K9J65sL+170uTb3M7H4cFkG+9Sm5k5yCrCIutlvV48g==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-gnu": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.74.tgz", + "integrity": "sha512-LEXpcShF6DLTWJSiBhMSYZkLQ27UvaQ24fCFhoIV/R3dhYaUpHmIyLPPBNC82T03lB3ONUFVwrRw6fxDJ/f00A==", + "dev": true, + "optional": true + }, + "@swc/core-linux-x64-musl": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.74.tgz", + "integrity": "sha512-sxsFctbFMZEFmDE7CmYljG0dMumH8XBTwwtGr8s6z0fYAzXBGNq2AFPcmEh2np9rPWkt7pE1m0ByESD+dMkbxQ==", + "dev": true, + "optional": true + }, + "@swc/core-win32-arm64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.74.tgz", + "integrity": "sha512-F7hY9/BjFCozA4YPFYFH5FGCyWwa44vIXHqG66F5cDwXDGFn8ZtBsYIsiPfUYcx0AeAo1ojnVWKPxokZhYNYqA==", + "dev": true, + "optional": true + }, + "@swc/core-win32-ia32-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.74.tgz", + "integrity": "sha512-qBAsiD1AlIdqED6wy3UNRHyAys9pWMUidX0LJ6mj24r/vfrzzTBAUrLJe5m7bzE+F1Rgi001avYJeEW1DLEJ+Q==", + "dev": true, + "optional": true + }, + "@swc/core-win32-x64-msvc": { + "version": "1.3.74", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.74.tgz", + "integrity": "sha512-S3YAvvLprTnPRwQuy9Dkwubb5SRLpVK3JJsqYDbGfgj8PGQyKHZcVJ5X3nfFsoWLy3j9B/3Os2nawprRSzeC5A==", + "dev": true, + "optional": true + }, + "@swc/helpers": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz", + "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==", + "dev": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true + }, + "abortcontroller-polyfill": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/abortcontroller-polyfill/-/abortcontroller-polyfill-1.7.5.tgz", + "integrity": "sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==", + "dev": true + }, + "acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-arraybuffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz", + "integrity": "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + } + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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" + } + }, + "chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "css-line-break": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-line-break/-/css-line-break-2.1.0.tgz", + "integrity": "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w==", + "requires": { + "utrie": "^1.0.2" + } + }, + "css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + } + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "csso": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", + "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "css-tree": "~2.2.0" + }, + "dependencies": { + "css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + } + }, + "mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", + "dev": true, + "optional": true, + "peer": true + } + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "dependencies": { + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true + }, + "dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "dynamic-colors": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/dynamic-colors/-/dynamic-colors-1.1.5.tgz", + "integrity": "sha512-NBhHG2/7CDB32u89InrXy3LAMKg/wjYRzEqQdXJKf/a6t8pBL5KOt/y9XotxF47t2XoSuMGKujLb0w5kCmkMMg==" + }, + "electron-to-chromium": { + "version": "1.4.483", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.483.tgz", + "integrity": "sha512-YLwU0iF//9R3cCEfq0wgL+pf9vglE4kwAg4S5tkVVZljUDKv7Wcz67mTY4OOj+T7YUbTGuqlbqgdl/s+7Q8KTw==", + "dev": true + }, + "entities": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-3.0.1.tgz", + "integrity": "sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.20.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", + "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "html2canvas": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/html2canvas/-/html2canvas-1.4.1.tgz", + "integrity": "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA==", + "requires": { + "css-line-break": "^2.1.0", + "text-segmentation": "^1.0.3" + } + }, + "htmlnano": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/htmlnano/-/htmlnano-2.0.4.tgz", + "integrity": "sha512-WGCkyGFwjKW1GeCBsPYacMvaMnZtFJ0zIRnC2NCddkA+IOEhTqskXrS7lep+3yYZw/nQ3dW1UAX4yA/GJyR8BA==", + "dev": true, + "requires": { + "cosmiconfig": "^8.0.0", + "posthtml": "^0.16.5", + "timsort": "^0.3.0" + } + }, + "htmlparser2": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-7.2.0.tgz", + "integrity": "sha512-H7MImA4MS6cw7nbyURtLPO1Tms7C5H602LRETv95z1MxO/7CP7rDVROehUYeYBUYEON94NXXDEPmZuq+hX4sog==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.2", + "domutils": "^2.8.0", + "entities": "^3.0.1" + } + }, + "immutable": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz", + "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-json": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-json/-/is-json-2.0.1.tgz", + "integrity": "sha512-6BEnpVn1rcf3ngfmViLM6vjUjGErbdrL4rwlv+u1NO1XO8kqT4YGL8+19Q+Z/bas8tY90BTWMk2+fW1g6hQjbA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "lightningcss": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.21.5.tgz", + "integrity": "sha512-/pEUPeih2EwIx9n4T82aOG6CInN83tl/mWlw6B5gWLf36UplQi1L+5p3FUHsdt4fXVfOkkh9KIaM3owoq7ss8A==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "lightningcss-darwin-arm64": "1.21.5", + "lightningcss-darwin-x64": "1.21.5", + "lightningcss-linux-arm-gnueabihf": "1.21.5", + "lightningcss-linux-arm64-gnu": "1.21.5", + "lightningcss-linux-arm64-musl": "1.21.5", + "lightningcss-linux-x64-gnu": "1.21.5", + "lightningcss-linux-x64-musl": "1.21.5", + "lightningcss-win32-x64-msvc": "1.21.5" + } + }, + "lightningcss-darwin-arm64": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.21.5.tgz", + "integrity": "sha512-z05hyLX85WY0UfhkFUOrWEFqD69lpVAmgl3aDzMKlIZJGygbhbegqb4PV8qfUrKKNBauut/qVNPKZglhTaDDxA==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.21.5.tgz", + "integrity": "sha512-MSJhmej/U9MrdPxDk7+FWhO8+UqVoZUHG4VvKT5RQ4RJtqtANTiWiI97LvoVNMtdMnHaKs1Pkji6wHUFxjJsHQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.21.5.tgz", + "integrity": "sha512-xN6+5/JsMrbZHL1lPl+MiNJ3Xza12ueBKPepiyDCFQzlhFRTj7D0LG+cfNTzPBTO8KcYQynLpl1iBB8LGp3Xtw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.21.5.tgz", + "integrity": "sha512-KfzFNhC4XTbmG3ma/xcTs/IhCwieW89XALIusKmnV0N618ZDXEB0XjWOYQRCXeK9mfqPdbTBpurEHV/XZtkniQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.21.5.tgz", + "integrity": "sha512-bc0GytQO5Mn9QM6szaZ+31fQHNdidgpM1sSCwzPItz8hg3wOvKl8039rU0veMJV3ZgC9z0ypNRceLrSHeRHmXw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.21.5.tgz", + "integrity": "sha512-JwMbgypPQgc2kW2av3OwzZ8cbrEuIiDiXPJdXRE6aVxu67yHauJawQLqJKTGUhiAhy6iLDG8Wg0a3/ziL+m+Kw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.21.5.tgz", + "integrity": "sha512-Ib8b6IQ/OR/VrPU6YBgy4T3QnuHY7DUa95O+nz+cwrTkMSN6fuHcTcIaz4t8TJ6HI5pl3uxUOZjmtls2pyQWow==", + "dev": true, + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.21.5", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.21.5.tgz", + "integrity": "sha512-A8cSi8lUpBeVmoF+DqqW7cd0FemDbCuKr490IXdjyeI+KL8adpSKUs8tcqO0OXPh1EoDqK7JNkD/dELmd4Iz5g==", + "dev": true, + "optional": true + }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "lmdb": { + "version": "2.7.11", + "resolved": "https://registry.npmjs.org/lmdb/-/lmdb-2.7.11.tgz", + "integrity": "sha512-x9bD4hVp7PFLUoELL8RglbNXhAMt5CYhkmss+CEau9KlNoilsTzNi9QDsPZb3KMpOGZXG6jmXhW3bBxE2XVztw==", + "dev": true, + "requires": { + "@lmdb/lmdb-darwin-arm64": "2.7.11", + "@lmdb/lmdb-darwin-x64": "2.7.11", + "@lmdb/lmdb-linux-arm": "2.7.11", + "@lmdb/lmdb-linux-arm64": "2.7.11", + "@lmdb/lmdb-linux-x64": "2.7.11", + "@lmdb/lmdb-win32-x64": "2.7.11", + "msgpackr": "1.8.5", + "node-addon-api": "^4.3.0", + "node-gyp-build-optional-packages": "5.0.6", + "ordered-binary": "^1.4.0", + "weak-lru-cache": "^1.2.2" + }, + "dependencies": { + "msgpackr": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.8.5.tgz", + "integrity": "sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==", + "dev": true, + "requires": { + "msgpackr-extract": "^3.0.1" + } + }, + "node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", + "dev": true + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.30.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.2.tgz", + "integrity": "sha512-lNZdu7pewtq/ZvWUp9Wpf/x7WzMTsR26TWV03BRZrXFsv+BI6dy8RAiKgm1uM/kyR0rCfUcqvOlXKG66KhIGug==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "optional": true, + "peer": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "msgpackr": { + "version": "1.9.6", + "resolved": "https://registry.npmjs.org/msgpackr/-/msgpackr-1.9.6.tgz", + "integrity": "sha512-50rmb6+ZWvEm0vJn8R8CwI1Eavss3h5rgtKrcdUal3EkZcpqw82+xsmc7RoHb8fYB5V4EOU2NDaOitDAdO0t+w==", + "dev": true, + "requires": { + "msgpackr-extract": "^3.0.2" + } + }, + "msgpackr-extract": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/msgpackr-extract/-/msgpackr-extract-3.0.2.tgz", + "integrity": "sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==", + "dev": true, + "optional": true, + "requires": { + "@msgpackr-extract/msgpackr-extract-darwin-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-darwin-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-arm64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-linux-x64": "3.0.2", + "@msgpackr-extract/msgpackr-extract-win32-x64": "3.0.2", + "node-gyp-build-optional-packages": "5.0.7" + }, + "dependencies": { + "node-gyp-build-optional-packages": { + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.7.tgz", + "integrity": "sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==", + "dev": true, + "optional": true + } + } + }, + "node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "dev": true + }, + "node-gyp-build-optional-packages": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/node-gyp-build-optional-packages/-/node-gyp-build-optional-packages-5.0.6.tgz", + "integrity": "sha512-2ZJErHG4du9G3/8IWl/l9Bp5BBFy63rno5GVmjQijvTuUZKsl6g8RB4KH/x3NLcV5ZBb4GsXmAuTYr6dRml3Gw==", + "dev": true + }, + "node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "dev": true + }, + "ordered-binary": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/ordered-binary/-/ordered-binary-1.4.1.tgz", + "integrity": "sha512-9LtiGlPy982CsgxZvJGNNp2/NnrgEr6EAyN3iIEP3/8vd3YLgAZQHbQ75ZrkfBRGrNg37Dk3U6tuVb+B4Xfslg==", + "dev": true + }, + "parcel": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/parcel/-/parcel-2.9.3.tgz", + "integrity": "sha512-2GTVocFkwblV/TIg9AmT7TI2fO4xdWkyN8aFUEVtiVNWt96GTR3FgQyHFValfCbcj1k9Xf962Ws2hYXYUr9k1Q==", + "dev": true, + "requires": { + "@parcel/config-default": "2.9.3", + "@parcel/core": "2.9.3", + "@parcel/diagnostic": "2.9.3", + "@parcel/events": "2.9.3", + "@parcel/fs": "2.9.3", + "@parcel/logger": "2.9.3", + "@parcel/package-manager": "2.9.3", + "@parcel/reporter-cli": "2.9.3", + "@parcel/reporter-dev-server": "2.9.3", + "@parcel/reporter-tracer": "2.9.3", + "@parcel/utils": "2.9.3", + "chalk": "^4.1.0", + "commander": "^7.0.0", + "get-port": "^4.2.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "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==", + "dev": true + }, + "posthtml": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.16.6.tgz", + "integrity": "sha512-JcEmHlyLK/o0uGAlj65vgg+7LIms0xKXe60lcDOTU7oVX/3LuEuLwrQpW3VJ7de5TaFKiW4kWkaIpJL42FEgxQ==", + "dev": true, + "requires": { + "posthtml-parser": "^0.11.0", + "posthtml-render": "^3.0.0" + }, + "dependencies": { + "posthtml-parser": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.11.0.tgz", + "integrity": "sha512-QecJtfLekJbWVo/dMAA+OSwY79wpRmbqS5TeXvXSX+f0c6pW4/SE6inzZ2qkU7oAMCPqIDkZDvd/bQsSFUnKyw==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + } + } + }, + "posthtml-parser": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.10.2.tgz", + "integrity": "sha512-PId6zZ/2lyJi9LiKfe+i2xv57oEjJgWbsHGGANwos5AvdQp98i6AtamAl8gzSVFGfQ43Glb5D614cvZf012VKg==", + "dev": true, + "requires": { + "htmlparser2": "^7.1.1" + } + }, + "posthtml-render": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-3.0.0.tgz", + "integrity": "sha512-z+16RoxK3fUPgwaIgH9NGnK1HKY9XIDpydky5eQGgAFVXTCSezalv9U2jQuNV+Z9qV1fDWNzldcw4eK0SSbqKA==", + "dev": true, + "requires": { + "is-json": "^2.0.1" + } + }, + "react-error-overlay": { + "version": "6.0.9", + "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.9.tgz", + "integrity": "sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==", + "dev": true + }, + "react-refresh": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.9.0.tgz", + "integrity": "sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==", + "dev": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "rollup": { + "version": "3.27.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.27.1.tgz", + "integrity": "sha512-tXNDFwOkN6C2w5Blj1g6ForKeFw6c1mDu5jxoeDO3/pmYjgt+8yvIFjKzH5FQUq70OKZBkOt0zzv0THXL7vwzQ==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-dts": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.1.tgz", + "integrity": "sha512-gusMi+Z4gY/JaEQeXnB0RUdU82h1kF0WYzCWgVmV4p3hWXqelaKuCvcJawfeg+EKn2T1Ie+YWF2OiN1/L8bTVg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.5", + "magic-string": "^0.30.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "sass": { + "version": "1.64.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.64.2.tgz", + "integrity": "sha512-TnDlfc+CRnUAgLO9D8cQLFu/GIjJIzJCGkE7o4ekIGQOH7T3GetiRR/PsTWJUHhkzcSPrARkPI+gNWn5alCzDg==", + "dev": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "srcset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/srcset/-/srcset-4.0.0.tgz", + "integrity": "sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==", + "dev": true + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "svgo": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", + "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^5.1.0", + "css-tree": "^2.2.1", + "csso": "^5.0.5", + "picocolors": "^1.0.0" + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "5.19.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.2.tgz", + "integrity": "sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==", + "dev": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "text-segmentation": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/text-segmentation/-/text-segmentation-1.0.3.tgz", + "integrity": "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw==", + "requires": { + "utrie": "^1.0.2" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "utility-types": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "dev": true + }, + "utrie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/utrie/-/utrie-1.0.2.tgz", + "integrity": "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw==", + "requires": { + "base64-arraybuffer": "^1.0.2" + } + }, + "weak-lru-cache": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/weak-lru-cache/-/weak-lru-cache-1.2.2.tgz", + "integrity": "sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==", + "dev": true + }, + "xxhash-wasm": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", + "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..058aa7a --- /dev/null +++ b/package.json @@ -0,0 +1,60 @@ +{ + "name": "@patelka2211/sharer", + "version": "1.0.0", + "description": "Seamlessly Share URLs and Generate SharerQR Codes!", + "main": "index.js", + "module": "index.js", + "types": "index.d.ts", + "scripts": { + "tsc-build": "tsc -p ./tsconfig.json", + "rollup-esm": "rollup -c --environment format:esm", + "rollup-iife": "rollup -c --environment format:iife", + "terser-esm": "terser ./index.js -c -m --toplevel -o ./index.js", + "terser-iife": "terser ./Sharer.js -c -m -o ./Sharer.js", + "prerelease-build": "npm run tsc-build && npm run rollup-esm && npm run rollup-iife && rm -rf ./lib/", + "utility-build": "tsc utility.ts", + "utility-minify": "terser ./utility.js -c -m -o ./utility.js", + "build": "npm run tsc-build && npm run rollup-esm && npm run rollup-iife && npm run terser-esm && npm run terser-iife && rm -rf ./lib/ && npm run utility-build && npm run utility-minify", + "test-build": "npm run tsc-build && npm run rollup-esm && tsc ./test/index.ts -t es6 && rollup ./test/index.js -o ./test/out.js && rm -rf ./lib/" + }, + "files": [ + "index.js", + "index.d.ts" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/patelka2211/sharer.git" + }, + "keywords": [ + "Sharer", + "KPVERSE", + "patelka2211", + "Website Sharing", + "JavaScript Library", + "Social Media", + "Web Development", + "Boost Traffic", + "Share URLs", + "Web App Integration", + "Simplify Sharing" + ], + "author": "Kartavya Patel ", + "license": "MIT", + "bugs": { + "url": "https://github.com/patelka2211/sharer/issues" + }, + "homepage": "https://kpverse.in/sharer/", + "dependencies": { + "@patelka2211/dominar": "^1.2.4", + "dynamic-colors": "^1.1.5", + "html2canvas": "^1.4.1" + }, + "devDependencies": { + "@parcel/transformer-sass": "^2.9.3", + "parcel": "^2.9.3", + "rollup": "^3.27.1", + "rollup-plugin-dts": "^5.3.1", + "terser": "^5.19.2", + "typescript": "^5.1.6" + } +} \ No newline at end of file diff --git a/rollup.config.mjs b/rollup.config.mjs index d03dd34..ada2558 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -1,37 +1,50 @@ -const outFormats = ["iife", "esm", "sharer_button"], - time = new Date(), +import dts from "rollup-plugin-dts"; + +const currentDate = new Date(), + options = { year: "numeric", month: "long", day: "numeric" }, + formattedDate = currentDate.toLocaleDateString("en-US", options), banner = `/** -* "Sharer by KP" -* - Sharer is a user-friendly JavaScript library that seamlessly enhances website sharing across various applications and social media platforms. Boost engagement and increase website reach with Sharer - the top-rated JavaScript library for seamless URL sharing! -* -* @author Kartavya Patel -* -* @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} -* -* @copyright Kartavya Patel ${time.getFullYear()} -* -* Includes {@link https://github.com/patelka2211/json2html JSON2HTML} and {@link https://github.com/datalog/qrcode-svg qrcode-svg}. -* -* Last updated at : ${time.toISOString()} -*/`; + * Sharer from KPVERSE + * + * v1.0.0 + * + * Updated on ${formattedDate}. + * + * Copyright © 2023-present, Kartavya Patel. All rights reserved. + * + * @author Kartavya Patel + * + * @license {@link https://github.com/patelka2211/sharer/blob/main/LICENSE MIT} + */`; -export default outFormats.map((format) => { - if (format === "sharer_button") - return { - input: `./dist/${format}/${format}.js`, - output: { - file: `./bundle/${format}.js`, - format: "iife", - banner: banner, - }, - }; - return { - input: `./dist/sharer_${format}.js`, +export default [ + process.env.format === "esm" && { + input: "./lib/index.js", + output: { + file: "index.js", + format: "es", + banner: `'use strict';`, + }, + }, + process.env.format === "esm" && { + input: "./src/index.ts", output: { - file: `./bundle/sharer.${format}.js`, - format: format, - name: "sharer", + file: "index.d.ts", + format: "es", + }, + plugins: [dts()], + }, + process.env.format === "iife" && { + input: "./build.iife.js", + output: { + file: "./Sharer.js", + format: "iife", banner: banner, + globals: { + "@patelka2211/dominar": "Dominar", + "dynamic-colors": "DynamicColors", + html2canvas: "html2canvas", + }, }, - }; -}); + }, +].filter(Boolean); diff --git a/sharer-from-kpverse.jpg b/sharer-from-kpverse.jpg new file mode 100644 index 0000000..15818b4 Binary files /dev/null and b/sharer-from-kpverse.jpg differ diff --git a/src/cdn.ts b/src/cdn.ts deleted file mode 100644 index 9917da0..0000000 --- a/src/cdn.ts +++ /dev/null @@ -1,10 +0,0 @@ -const cdn = { - url: "https://patelka2211.github.io/sharer/", - // url: "http://localhost:5500/", // For development purpose only. - getPath(path: string | string[]) { - if (typeof path === "string") return this.url + path; - return this.url + path.join("/"); - }, -}; - -export default cdn; diff --git a/src/components/applist-and-qr/_style.scss b/src/components/applist-and-qr/_style.scss new file mode 100644 index 0000000..a121a36 --- /dev/null +++ b/src/components/applist-and-qr/_style.scss @@ -0,0 +1,96 @@ +@mixin sharerApplistAndQR { + #sharer-applist-n-qr { + margin: $padding; + margin-bottom: 0; + aspect-ratio: 1; + border-radius: 6.9px; + + overflow: auto; + -ms-overflow-style: none; + scrollbar-width: none; + + &::-webkit-scrollbar { + display: none; + } + + .applist-item { + padding: $padding; + width: calc(100% - 2 * $padding); + height: calc(50px - 2 * $padding); + + display: flex; + align-items: center; + justify-content: space-between; + + border-bottom: 1px solid + rgba(var(--sharer-dc-secondaryContainer-rgb), 32%); + + &:last-child { + border-bottom: none; + } + + .applist-item-icon-container { + padding: 1px; + height: calc(100% - 2px); + aspect-ratio: 1; + background-color: rgba( + var(--sharer-dc-onSecondaryContainer-rgb), + 8% + ); + border-radius: 23%; + .applist-item-icon-image { + width: 100%; + border-radius: 23%; + } + } + + .applist-item-name { + font-size: 18px; + font-weight: 500; + width: calc(100% - 120px); + color: var(--sharer-dc-onBackground); + &:hover { + cursor: default; + } + + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + } + + .applist-item-qr-icon, + .applist-item-open-icon { + height: 100%; + aspect-ratio: 1; + border-radius: 23%; + + &:hover { + cursor: pointer; + background-color: var(--sharer-dc-secondaryContainer); + + .applist-btns-icon-svg { + path { + fill: var(--sharer-dc-onSecondaryContainer); + } + } + } + + .applist-btns-icon-svg { + path { + fill: rgba( + var(--sharer-dc-onSecondaryContainer-rgb), + 32% + ); + } + } + } + + &:hover { + background-color: rgba( + var(--sharer-dc-secondaryContainer-rgb), + 32% + ); + } + } + } +} diff --git a/src/components/applist-and-qr/applistItemImage.ts b/src/components/applist-and-qr/applistItemImage.ts new file mode 100644 index 0000000..7c63f8c --- /dev/null +++ b/src/components/applist-and-qr/applistItemImage.ts @@ -0,0 +1,11 @@ +import { tag } from "@patelka2211/dominar"; +import { cdn } from "../../helper/cdn"; + +export function getApplistItemImage(appId: string) { + return tag("img", { + attributes: { + src: cdn.get(["svgs"], `${appId}-icon.svg`), + class: "applist-item-icon-image", + }, + }); +} diff --git a/src/components/applist-and-qr/applistToQRState.ts b/src/components/applist-and-qr/applistToQRState.ts new file mode 100644 index 0000000..07de634 --- /dev/null +++ b/src/components/applist-and-qr/applistToQRState.ts @@ -0,0 +1,49 @@ +import { render, SVGParser, attachEventListeners } from "@patelka2211/dominar"; +import { sharerApplistAndQRElement } from "../../elements/sharerApplistAndQR"; +import { sharerControlButtonCenterElement } from "../../elements/sharerControlButtonCenter"; +import { sharerControlButtonRightElement } from "../../elements/sharerControlButtonRight"; +import { downloadSharerQR } from "../downloadable/downloadSharerQR"; +import { prepareURL } from "../../helper/prepareURL"; +import { createQR } from "../../helper/qrcode"; +import applistIcon from "../../svgs/applist-icon"; +import { share_url } from "../../variables/main"; +import { qrToApplistState } from "./qrToApplistState"; +import { appsItemType } from "./types"; + +export function applistToQRState(applistItem: appsItemType) { + let ApplistAndQRTag = sharerApplistAndQRElement(), + ControlButtonRight = sharerControlButtonRightElement(), + ControlButtonCenter = sharerControlButtonCenterElement(); + if ( + ApplistAndQRTag !== null && + ControlButtonRight !== null && + ControlButtonCenter !== null + ) { + render( + ApplistAndQRTag, + SVGParser(createQR(prepareURL(applistItem.url_format))) + ).then(() => { + ApplistAndQRTag?.scrollTo({ top: 0 }); + }); + + render(ControlButtonRight, SVGParser(applistIcon)).then(() => { + if (ControlButtonRight !== null) + attachEventListeners(ControlButtonRight, { + click: qrToApplistState, + }); + }); + + render(ControlButtonCenter, "Download QR").then(() => { + if (ControlButtonCenter !== null) + attachEventListeners(ControlButtonCenter, { + click() { + if (share_url !== undefined) + downloadSharerQR( + share_url.hostname, + applistItem.name + ); + }, + }); + }); + } +} diff --git a/src/components/applist-and-qr/getApplist.ts b/src/components/applist-and-qr/getApplist.ts new file mode 100644 index 0000000..1305bfb --- /dev/null +++ b/src/components/applist-and-qr/getApplist.ts @@ -0,0 +1,69 @@ +import { tag, tagList, SVGParser } from "@patelka2211/dominar"; +import { openURL } from "../../helper/openURL"; +import { prepareURL } from "../../helper/prepareURL"; +import { readRecord } from "../../storage/main"; +import openLinkIcon from "../../svgs/open-link-icon"; +import qrIcon from "../../svgs/qr-icon"; +import { getApplistItemImage } from "./applistItemImage"; +import { applistToQRState } from "./applistToQRState"; +import { appsObject } from "./main"; +import { moveItemToZerothIndex } from "./moveItemToZeroIndex"; + +export function getApplist() { + const appIds = readRecord("AppsIdList"); + + if (Array.isArray(appIds)) { + return (appIds as string[]).map((appId, index) => { + const applistItem = appsObject[appId]; + return tag("div", { + attributes: { + id: `applist-item-${applistItem.id}`, + class: "applist-item", + }, + children: tagList( + tag("div", { + attributes: { + class: "applist-item-icon-container", + }, + children: getApplistItemImage(applistItem.id), + }), + tag("span", { + attributes: { + class: "applist-item-name", + title: applistItem.name, + }, + children: applistItem.name, + }), + tag("div", { + attributes: { + class: "applist-item-qr-icon", + title: "Show QR Code", + }, + children: SVGParser(qrIcon), + attachEventListeners: { + click() { + applistToQRState(applistItem); + moveItemToZerothIndex(index); + }, + }, + }), + tag("div", { + attributes: { + class: "applist-item-open-icon", + title: `Open ${applistItem.name}`, + }, + children: SVGParser(openLinkIcon), + attachEventListeners: { + click() { + openURL(prepareURL(applistItem.url_format)); + moveItemToZerothIndex(index); + }, + }, + }) + ), + }); + }); + } + + return []; +} diff --git a/src/components/applist-and-qr/main.ts b/src/components/applist-and-qr/main.ts new file mode 100644 index 0000000..723d738 --- /dev/null +++ b/src/components/applist-and-qr/main.ts @@ -0,0 +1,62 @@ +import { appsItemType } from "./types"; + +export let appsObject: { + [id: string]: appsItemType; +} = { + gml: { + id: "gml", + name: "Email", + url_format: `mailto:?subject={%text%}&body={%url%}`, + }, + mstdn: { + id: "mstdn", + name: "Mastodon", + url_format: `https://toot.kytta.dev/?text={%text%}%0A{%url%}`, + }, + fb: { + id: "fb", + name: "Facebook", + url_format: + "https://www.facebook.com/sharer/sharer.php?t={%text%}&u={%url%}", + }, + wa: { + id: "wa", + name: "WhatsApp", + url_format: "https://api.whatsapp.com/send?text={%text%}%0A{%url%}", + }, + x: { + id: "x", + name: "X", + url_format: `https://twitter.com/intent/tweet?text={%text%}&url={%url%}`, + }, + lnkdn: { + id: "lnkdn", + name: "LinkedIn", + url_format: `https://www.linkedin.com/shareArticle?mini=true&url={%url%}&title={%text%}`, + }, + rdt: { + id: "rdt", + name: "Reddit", + url_format: `https://reddit.com/submit?title={%text%}&url={%url%}`, + }, + pntrst: { + id: "pntrst", + name: "Pinterest", + url_format: `https://www.pinterest.com/pin/create/button/?description={%text%}&url={%url%}&method=button`, + }, + snpcht: { + id: "snpcht", + name: "Snapchat", + url_format: `https://snapchat.com/scan?attachmentUrl={%url%}`, + }, + tg: { + id: "tg", + name: "Telegram", + url_format: `https://telegram.me/share/url?url={%url%}&text={%text%}`, + }, + // koo: { + // id: "koo", + // name: "Koo", + // url_format: `https://www.kooapp.com/create?title={%text%}%0A{%url%}`, + // }, +}; diff --git a/src/components/applist-and-qr/moveItemToZeroIndex.ts b/src/components/applist-and-qr/moveItemToZeroIndex.ts new file mode 100644 index 0000000..499ed7d --- /dev/null +++ b/src/components/applist-and-qr/moveItemToZeroIndex.ts @@ -0,0 +1,11 @@ +import { readRecord, updateRecord } from "../../storage/main"; + +export function moveItemToZerothIndex(index: number) { + let appIds = readRecord("AppsIdList"); + if (Array.isArray(appIds)) { + if (index >= appIds.length || index <= 0) return; + const item = appIds.splice(index, 1)[0]; + appIds.unshift(item); + updateRecord("AppsIdList", appIds); + } +} diff --git a/src/components/applist-and-qr/qrToApplistState.ts b/src/components/applist-and-qr/qrToApplistState.ts new file mode 100644 index 0000000..8414967 --- /dev/null +++ b/src/components/applist-and-qr/qrToApplistState.ts @@ -0,0 +1,40 @@ +import { + render, + tagList, + SVGParser, + attachEventListeners, +} from "@patelka2211/dominar"; +import { sharerApplistAndQRElement } from "../../elements/sharerApplistAndQR"; +import { sharerControlButtonCenterElement } from "../../elements/sharerControlButtonCenter"; +import { sharerControlButtonRightElement } from "../../elements/sharerControlButtonRight"; +import { openFeedback } from "../../helper/openFeedback"; +import { closeSharer } from "../../operations/closeSharer"; +import closeIcon from "../../svgs/close-icon"; +import { getApplist } from "./getApplist"; + +export function qrToApplistState() { + let ApplistAndQRTag = sharerApplistAndQRElement(), + ControlButtonRight = sharerControlButtonRightElement(), + ControlButtonCenter = sharerControlButtonCenterElement(); + if ( + ApplistAndQRTag !== null && + ControlButtonRight !== null && + ControlButtonCenter !== null + ) { + render(ApplistAndQRTag, tagList(...getApplist())); + + render(ControlButtonRight, SVGParser(closeIcon)).then(() => { + if (ControlButtonRight !== null) + attachEventListeners(ControlButtonRight, { + click: closeSharer, + }); + }); + + render(ControlButtonCenter, "Feedback").then(() => { + if (ControlButtonCenter !== null) + attachEventListeners(ControlButtonCenter, { + click: openFeedback, + }); + }); + } +} diff --git a/src/components/applist-and-qr/types.ts b/src/components/applist-and-qr/types.ts new file mode 100644 index 0000000..1babad4 --- /dev/null +++ b/src/components/applist-and-qr/types.ts @@ -0,0 +1,5 @@ +export type appsItemType = { + id: string; + name: string; + url_format: string; +}; diff --git a/src/components/button/_style.scss b/src/components/button/_style.scss new file mode 100644 index 0000000..76e4c30 --- /dev/null +++ b/src/components/button/_style.scss @@ -0,0 +1,69 @@ +@mixin sharerButton { + #kpverse-sharer-button { + position: fixed; + bottom: 20px; + right: 20px; + + width: 48px; + height: 48px; + + border-radius: 23%; + + box-shadow: inset 0 1px 0 transparent, 0 22px 70px 4px rgba(0, 0, 0, 0), + 0 0 0 1px rgba(0, 0, 0, 0); + + transition: all 0.4s ease; + + &.hide { + bottom: -32px; + right: 28px; + width: 32px; + height: 32px; + } + #sharer-icon-svg { + .icon-bg { + transition: all 0.4s ease; + fill: var(--sharer-dc-secondaryContainer); + } + .icon-fg { + transition: all 0.4s ease; + fill: var(--sharer-dc-onSecondaryContainer); + } + .icon-border { + transition: all 0.4s ease; + fill: rgba(var(--sharer-dc-onSecondaryContainer-rgb), 16%); + } + + .icon-stroke { + transition: all 0.4s ease; + stroke: rgba(var(--sharer-dc-onSecondaryContainer-rgb), 16%); + } + } + + &.sharer-icon-hover { + cursor: none; + width: 56px; + height: 56px; + bottom: 16px; + right: 16px; + box-shadow: inset 0 1px 0 transparent, + 0 22px 70px 4px rgba(0, 0, 0, 0.56), 0 0 0 1px rgba(0, 0, 0, 0); + + #sharer-icon-svg { + .icon-bg { + fill: var(--sharer-dc-primaryContainer); + } + .icon-fg { + fill: var(--sharer-dc-onPrimaryContainer); + } + .icon-border { + fill: rgba(var(--sharer-dc-onPrimaryContainer-rgb), 24%); + } + + .icon-stroke { + stroke: rgba(var(--sharer-dc-onPrimaryContainer-rgb), 32%); + } + } + } + } +} diff --git a/src/components/button/activate.ts b/src/components/button/activate.ts new file mode 100644 index 0000000..3cfd660 --- /dev/null +++ b/src/components/button/activate.ts @@ -0,0 +1,17 @@ +import { initializeIfNot } from "../../intialization/intializeIfNot"; +import { sharerUninitialized } from "../../intialization/main"; +import { isSharerOpen } from "../../operations/main"; +import { insertButton } from "./insertButton"; +import { isSharerButtonActive, changeSharerButtonStatus } from "./main"; + +/** + * Activates Sharer button. + * + * @returns {void} + */ +export function activate(): void { + if (isSharerButtonActive === true) return; + if (sharerUninitialized === true) initializeIfNot(); + if (isSharerButtonActive === undefined) changeSharerButtonStatus(true); + if (isSharerOpen === undefined) insertButton(); +} diff --git a/src/components/button/buttonObject.ts b/src/components/button/buttonObject.ts new file mode 100644 index 0000000..e628347 --- /dev/null +++ b/src/components/button/buttonObject.ts @@ -0,0 +1,23 @@ +import { activate } from "./activate"; +import { deactivate } from "./deactivate"; + +/** + * Sharer button is An object containing `activate` and `deactivate` methods. + */ +export const button: { + /** + * Activates the Sharer button. + * + * @returns {void} + */ + activate: () => void; + /** + * Deactivates the Sharer button. + * + * @returns {void} + */ + deactivate: () => void; +} = { + activate, + deactivate, +}; diff --git a/src/components/button/deactivate.ts b/src/components/button/deactivate.ts new file mode 100644 index 0000000..67a12e6 --- /dev/null +++ b/src/components/button/deactivate.ts @@ -0,0 +1,13 @@ +import { isSharerButtonActive, changeSharerButtonStatus } from "./main"; +import { removeButton } from "./removeButton"; + +/** + * Deactivates Sharer button. + * + * @returns {void} + */ +export function deactivate(): void { + if (isSharerButtonActive === undefined) return; + if (isSharerButtonActive === true) changeSharerButtonStatus(undefined); + removeButton(); +} diff --git a/src/components/button/insertButton.ts b/src/components/button/insertButton.ts new file mode 100644 index 0000000..7ac4306 --- /dev/null +++ b/src/components/button/insertButton.ts @@ -0,0 +1,44 @@ +import { render, tag, SVGParser } from "@patelka2211/dominar"; +import { kpverseSharerButtonElement } from "../../elements/kpverseSharerButton"; +import { getZIndex } from "../../helper/zIndex"; +import { openSharer } from "../../operations/openSharer"; +import sharerIcon from "../../svgs/sharer-icon"; + +export function insertButton() { + render( + document.body, + tag("div", { + attributes: { + id: "kpverse-sharer-button", + class: "hide", + title: "Click to Share!", + }, + children: SVGParser(sharerIcon), + attachEventListeners: { + mouseenter() { + let button = kpverseSharerButtonElement(); + button?.classList.add("sharer-icon-hover"); + }, + mouseleave() { + let button = kpverseSharerButtonElement(); + button?.classList.remove("sharer-icon-hover"); + }, + click() { + openSharer(); + }, + }, + }), + { + clearBeforeRender: false, + insertType: "prepend", + } + ).then(() => { + let tag = kpverseSharerButtonElement(); + if (tag) { + tag.style.zIndex = `${getZIndex()}`; + setTimeout(() => { + if (tag) tag.classList.remove("hide"); + }, 1); + } + }); +} diff --git a/src/components/button/main.ts b/src/components/button/main.ts new file mode 100644 index 0000000..cb35f69 --- /dev/null +++ b/src/components/button/main.ts @@ -0,0 +1,5 @@ +export let isSharerButtonActive: true | undefined = undefined; + +export function changeSharerButtonStatus(newStatus: true | undefined) { + isSharerButtonActive = newStatus; +} diff --git a/src/components/button/removeButton.ts b/src/components/button/removeButton.ts new file mode 100644 index 0000000..c910ec4 --- /dev/null +++ b/src/components/button/removeButton.ts @@ -0,0 +1,13 @@ +import { kpverseSharerButtonElement } from "../../elements/kpverseSharerButton"; + +export function removeButton() { + let button = kpverseSharerButtonElement(); + + if (button) { + button.classList.add("hide"); + button.classList.remove("sharer-icon-hover"); + setTimeout(() => { + if (button) button.remove(); + }, 400); + } +} diff --git a/src/components/control-buttons/_style.scss b/src/components/control-buttons/_style.scss new file mode 100644 index 0000000..1faa996 --- /dev/null +++ b/src/components/control-buttons/_style.scss @@ -0,0 +1,54 @@ +@mixin sharerConntrolButtonsContainer { + #sharer-cntrl-btns-container { + padding: $padding; + width: calc(100% - 2 * $padding); + height: calc(50px - 2 * $padding); + + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-between; + + .sharer-cntrl-btn-corner, + #sharer-cntrl-btn-center { + height: 100%; + border: none; + border-radius: 6.9px; + padding: 0; + + // background-color: var(--sharer-dc-secondaryContainer); + background-color: var(--sharer-dc-secondaryContainer); + &:hover { + cursor: pointer; + } + + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + } + + .sharer-cntrl-btn-corner { + aspect-ratio: 1; + .icon-svg { + path { + // fill: var(--sharer-dc-onSecondaryContainer); + fill: var(--sharer-dc-onSecondaryContainer); + } + } + } + + #sharer-cntrl-btn-center { + width: calc(100% - 8 * $padding - 8px); + font-size: 18px; + // color: var(--sharer-dc-onSecondaryContainer); + color: var(--sharer-dc-onSecondaryContainer); + padding: 4px; + height: calc(100% - 8px); + + white-space: nowrap; + overflow: hidden !important; + text-overflow: ellipsis; + } + } +} diff --git a/src/components/control-buttons/buttonCenter.ts b/src/components/control-buttons/buttonCenter.ts new file mode 100644 index 0000000..0b37f9b --- /dev/null +++ b/src/components/control-buttons/buttonCenter.ts @@ -0,0 +1,14 @@ +import { tag } from "@patelka2211/dominar"; +import { openFeedback } from "../../helper/openFeedback"; + +export function buttonCenter() { + return tag("button", { + attributes: { + id: "sharer-cntrl-btn-center", + }, + children: "Feedback", + attachEventListeners: { + click: openFeedback, + }, + }); +} diff --git a/src/components/control-buttons/buttonLeft.ts b/src/components/control-buttons/buttonLeft.ts new file mode 100644 index 0000000..ebc61ff --- /dev/null +++ b/src/components/control-buttons/buttonLeft.ts @@ -0,0 +1,22 @@ +import { tag, render } from "@patelka2211/dominar"; +import { themeCycle } from "dynamic-colors"; +import { sharerControlButtonLeftElement } from "../../elements/sharerControlButtonLeft"; +import { currentThemeIcon } from "../../helper/getCurrentThemeIcon"; +import { updateRecord } from "../../storage/main"; + +export function buttonLeft() { + return tag("button", { + attributes: { + id: "sharer-cntrl-btn-left", + class: "sharer-cntrl-btn-corner", + }, + children: currentThemeIcon(true), + attachEventListeners: { + click() { + updateRecord("Theme", themeCycle()); + let button = sharerControlButtonLeftElement(); + if (button !== null) render(button, currentThemeIcon()); + }, + }, + }); +} diff --git a/src/components/control-buttons/buttonRight.ts b/src/components/control-buttons/buttonRight.ts new file mode 100644 index 0000000..2a3f3ae --- /dev/null +++ b/src/components/control-buttons/buttonRight.ts @@ -0,0 +1,16 @@ +import { tag, SVGParser } from "@patelka2211/dominar"; +import { closeSharer } from "../../operations/closeSharer"; +import closeIcon from "../../svgs/close-icon"; + +export function buttonRight() { + return tag("button", { + attributes: { + id: "sharer-cntrl-btn-right", + class: "sharer-cntrl-btn-corner", + }, + children: SVGParser(closeIcon), + attachEventListeners: { + click: closeSharer, + }, + }); +} diff --git a/src/components/control-buttons/main.ts b/src/components/control-buttons/main.ts new file mode 100644 index 0000000..c1b9715 --- /dev/null +++ b/src/components/control-buttons/main.ts @@ -0,0 +1,13 @@ +import { tag, tagList } from "@patelka2211/dominar"; +import { buttonLeft } from "./buttonLeft"; +import { buttonRight } from "./buttonRight"; +import { buttonCenter } from "./buttonCenter"; + +export function sharerControlButtonsComponent() { + return tag("div", { + attributes: { + id: "sharer-cntrl-btns-container", + }, + children: tagList(buttonLeft(), buttonCenter(), buttonRight()), + }); +} diff --git a/src/components/downloadable/_style.scss b/src/components/downloadable/_style.scss new file mode 100644 index 0000000..d6b04e8 --- /dev/null +++ b/src/components/downloadable/_style.scss @@ -0,0 +1,44 @@ +$padding: 10px; + +@import "../applist-and-qr/style"; + +@mixin sharerDownloadableComponent { + #sharer-downloadable-component { + width: 100%; + background-color: var(--sharer-dc-background); + + .powered-by-sharer, + #sharer-applist-n-qr { + width: calc(100% - 2 * $padding); + } + + @include sharerApplistAndQR(); + + .powered-by-sharer-container { + padding: $padding; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-around; + + #powered-by-sharer-svg { + max-width: 195px; + width: calc(100% - 20px); + .svg-fonts { + fill: var(--sharer-dc-onBackground); + } + + .sharer-logo-bg { + fill: var(--sharer-dc-secondaryContainer); + } + .sharer-logo-fg { + fill: var(--sharer-dc-onSecondaryContainer); + } + + &:hover { + cursor: pointer; + } + } + } + } +} diff --git a/src/components/downloadable/downloadSharerQR.ts b/src/components/downloadable/downloadSharerQR.ts new file mode 100644 index 0000000..1ed4eb0 --- /dev/null +++ b/src/components/downloadable/downloadSharerQR.ts @@ -0,0 +1,36 @@ +import { render, tag } from "@patelka2211/dominar"; +import html2canvas from "html2canvas"; +import { sharerDownloadableComponentElement } from "../../elements/sharerDownloadable"; + +export function downloadSharerQR(website: string, platform: string) { + let element = sharerDownloadableComponentElement(); + + if (element !== null) + html2canvas(element, { + width: element.clientWidth, + height: element.clientHeight, + }).then(function (canvas) { + render( + document.body, + tag("a", { + attributes: { + id: "temporary-SharerQR", + download: `${`SharerQR ${website} ${platform}` + .replaceAll(" ", "-") + .replaceAll(".", "_")}.png`, + href: canvas.toDataURL("image/png"), + target: "_blank", + }, + }), + { + clearBeforeRender: false, + insertType: "append", + } + ).then(() => { + ((link) => { + link?.click(); + link?.remove(); + })(document.getElementById("temporary-SharerQR")); + }); + }); +} diff --git a/src/components/downloadable/main.ts b/src/components/downloadable/main.ts new file mode 100644 index 0000000..4e830ad --- /dev/null +++ b/src/components/downloadable/main.ts @@ -0,0 +1,25 @@ +import { tag, tagList, SVGParser } from "@patelka2211/dominar"; +import poweredBySharer from "../../svgs/powered-by-sharer"; +import { getApplist } from "../applist-and-qr/getApplist"; + +export function sharerDownloadableComponent() { + return tag("div", { + attributes: { + id: "sharer-downloadable-component", + }, + children: tagList( + tag("div", { + attributes: { + id: "sharer-applist-n-qr", + }, + children: tagList(...getApplist()), + }), + tag("div", { + attributes: { + class: "powered-by-sharer-container", + }, + children: SVGParser(poweredBySharer), + }) + ), + }); +} diff --git a/src/components/root/_style.scss b/src/components/root/_style.scss new file mode 100644 index 0000000..327deac --- /dev/null +++ b/src/components/root/_style.scss @@ -0,0 +1,41 @@ +@import "../window/style"; + +@mixin kpverseSharer { + #kpverse-sharer { + font-family: "Inter", sans-serif; + + transition: opacity 0.4s ease; + opacity: 1; + + box-sizing: content-box; + + position: fixed; + width: 100vw; + height: 100vh; + background-color: rgba(0, 0, 0, 32%); + backdrop-filter: blur(6px); + + display: flex; + flex-direction: row; + align-items: center; + justify-content: space-around; + + &.hide { + opacity: 0; + } + + * { + box-sizing: content-box; + } + + @include sharerWindow(); + } +} + +@mixin kpverseSharerMaxWidth434px { + #kpverse-sharer { + align-items: end; + + @include sharerWindowMaxWidth434px(); + } +} diff --git a/src/components/root/main.ts b/src/components/root/main.ts new file mode 100644 index 0000000..b5add44 --- /dev/null +++ b/src/components/root/main.ts @@ -0,0 +1,21 @@ +import { tag } from "@patelka2211/dominar"; +import { closeSharer } from "../../operations/closeSharer"; +import { continueToClose, setContinueToClose } from "../../operations/main"; +import { sharerWindow } from "../window/main"; + +export function kpverseSharer() { + return tag("div", { + attributes: { + id: "kpverse-sharer", + class: "hide", + }, + children: sharerWindow(), + attachEventListeners: { + click() { + if (continueToClose || continueToClose === undefined) + closeSharer(); + setContinueToClose(true); + }, + }, + }); +} diff --git a/src/components/window/_style.scss b/src/components/window/_style.scss new file mode 100644 index 0000000..9904b99 --- /dev/null +++ b/src/components/window/_style.scss @@ -0,0 +1,40 @@ +@import "../downloadable/style"; +@import "../control-buttons/style"; + +@mixin sharerWindow { + .sharer-window { + width: 100%; + max-width: 414px; + max-height: calc(100% - 20px); + + display: flex; + flex-direction: column; + align-items: center; + + border-radius: 16.9px; + box-shadow: inset 0 1px 0 transparent, + 0 22px 70px 4px rgba(0, 0, 0, 0.56), 0 0 0 1px rgba(0, 0, 0, 0.08); + + background-color: var(--sharer-dc-background); + + overflow: auto; + -ms-overflow-style: none; + scrollbar-width: none; + &::-webkit-scrollbar { + display: none; + } + + @include sharerDownloadableComponent(); + @include sharerConntrolButtonsContainer(); + } +} + +@mixin sharerWindowMaxWidth434px { + .sharer-window { + max-width: 100%; + box-shadow: inset 0 1px 0 transparent, + 0 -22px 70px 4px rgba(0, 0, 0, 0.28), 0 0 0 1px rgba(0, 0, 0, 0.08); + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + } +} diff --git a/src/components/window/main.ts b/src/components/window/main.ts new file mode 100644 index 0000000..db88615 --- /dev/null +++ b/src/components/window/main.ts @@ -0,0 +1,21 @@ +import { tag, tagList } from "@patelka2211/dominar"; +import { setContinueToClose } from "../../operations/main"; +import { sharerControlButtonsComponent } from "../control-buttons/main"; +import { sharerDownloadableComponent } from "../downloadable/main"; + +export function sharerWindow() { + return tag("div", { + attributes: { + class: "sharer-window", + }, + children: tagList( + sharerDownloadableComponent(), + sharerControlButtonsComponent() + ), + attachEventListeners: { + click() { + setContinueToClose(false); + }, + }, + }); +} diff --git a/src/elements/kpverseSharer.ts b/src/elements/kpverseSharer.ts new file mode 100644 index 0000000..d551882 --- /dev/null +++ b/src/elements/kpverseSharer.ts @@ -0,0 +1,3 @@ +export function kpverseSharerElement() { + return document.getElementById("kpverse-sharer"); +} diff --git a/src/elements/kpverseSharerButton.ts b/src/elements/kpverseSharerButton.ts new file mode 100644 index 0000000..cae60ab --- /dev/null +++ b/src/elements/kpverseSharerButton.ts @@ -0,0 +1,3 @@ +export function kpverseSharerButtonElement() { + return document.getElementById("kpverse-sharer-button"); +} diff --git a/src/elements/poweredBySharer.ts b/src/elements/poweredBySharer.ts new file mode 100644 index 0000000..c4d777e --- /dev/null +++ b/src/elements/poweredBySharer.ts @@ -0,0 +1,3 @@ +export function poweredBySharerElement() { + return document.getElementById("powered-by-sharer-svg"); +} diff --git a/src/elements/sharerApplistAndQR.ts b/src/elements/sharerApplistAndQR.ts new file mode 100644 index 0000000..54800c2 --- /dev/null +++ b/src/elements/sharerApplistAndQR.ts @@ -0,0 +1,3 @@ +export function sharerApplistAndQRElement() { + return document.getElementById("sharer-applist-n-qr"); +} diff --git a/src/elements/sharerControlButtonCenter.ts b/src/elements/sharerControlButtonCenter.ts new file mode 100644 index 0000000..3b0c621 --- /dev/null +++ b/src/elements/sharerControlButtonCenter.ts @@ -0,0 +1,3 @@ +export function sharerControlButtonCenterElement() { + return document.getElementById("sharer-cntrl-btn-center"); +} diff --git a/src/elements/sharerControlButtonLeft.ts b/src/elements/sharerControlButtonLeft.ts new file mode 100644 index 0000000..3c23258 --- /dev/null +++ b/src/elements/sharerControlButtonLeft.ts @@ -0,0 +1,3 @@ +export function sharerControlButtonLeftElement() { + return document.getElementById("sharer-cntrl-btn-left"); +} diff --git a/src/elements/sharerControlButtonRight.ts b/src/elements/sharerControlButtonRight.ts new file mode 100644 index 0000000..ea40df2 --- /dev/null +++ b/src/elements/sharerControlButtonRight.ts @@ -0,0 +1,3 @@ +export function sharerControlButtonRightElement() { + return document.getElementById("sharer-cntrl-btn-right"); +} diff --git a/src/elements/sharerDownloadable.ts b/src/elements/sharerDownloadable.ts new file mode 100644 index 0000000..47b604b --- /dev/null +++ b/src/elements/sharerDownloadable.ts @@ -0,0 +1,3 @@ +export function sharerDownloadableComponentElement() { + return document.getElementById("sharer-downloadable-component"); +} diff --git a/src/gui/_sharerContainer.scss b/src/gui/_sharerContainer.scss deleted file mode 100644 index d54353c..0000000 --- a/src/gui/_sharerContainer.scss +++ /dev/null @@ -1,28 +0,0 @@ -@import "./sharerWindow"; - -@mixin sharerContainer { - #sharer-container { - position: absolute; - width: calc(100vw - 12px); - height: calc(100vh - 12px); - display: flex; - flex-direction: row; - align-items: center; - justify-content: space-around; - top: 6px; - transition: top 0.6s ease; - - &.hide { - top: 100%; - } - - @include sharerWindow(); - } -} -@mixin sharerContainer_mobile { - #sharer-container { - align-items: end; - - @include sharerWindow_mobile(); - } -} diff --git a/src/gui/_sharerWindow.scss b/src/gui/_sharerWindow.scss deleted file mode 100644 index fcfd3c9..0000000 --- a/src/gui/_sharerWindow.scss +++ /dev/null @@ -1,28 +0,0 @@ -@import "./sharerHeader/sharerHeader"; -@import "./sharerContent/sharerContent"; -@import "./sharerFooter/sharerFooter"; - -@mixin sharerWindow { - #sharer-window { - background-color: white; - width: calc(100% - 42px); - max-height: calc(100% - 84px); - max-width: calc(480px - 42px); - padding: 21px; - border-radius: 30px; - display: flex; - flex-direction: column; - align-items: center; - box-shadow: 0 32px 128px 0 rgba(40, 40, 40, 0.32); - - @include sharerHeader(); - @include sharerContent(); - @include sharerFooter(); - } -} - -@mixin sharerWindow_mobile { - #sharer-window { - box-shadow: none; - } -} diff --git a/src/gui/element.ts b/src/gui/element.ts deleted file mode 100644 index e608bb5..0000000 --- a/src/gui/element.ts +++ /dev/null @@ -1,30 +0,0 @@ -const elements = { - sharer_by_KP: () => document.getElementById("sharer-by-KP") as HTMLElement, - - sharer_container: () => - document.getElementById("sharer-container") as HTMLElement, - - sharer_footer: () => - document.getElementById("sharer-footer") as HTMLElement, - - sharer_footer_text: () => - document.getElementById("sharer-footer-text") as HTMLElement, - - sharer_window: () => - document.getElementById("sharer-window") as HTMLElement, - - sharer_content: () => - document.getElementById("sharer-content-main") as HTMLElement, - - header_close_icon: () => - document.getElementById("header-close-icon") as HTMLElement, - - header_icon_container: () => - document.getElementById("header-icon-container") as HTMLElement, - - header_title: () => document.getElementById("header-title") as HTMLElement, - credits_container: () => - document.getElementById("credits-container") as HTMLElement, -}; - -export default elements; diff --git a/src/gui/resizeObserver.ts b/src/gui/resizeObserver.ts deleted file mode 100644 index 2fe8ce5..0000000 --- a/src/gui/resizeObserver.ts +++ /dev/null @@ -1,30 +0,0 @@ -import elements from "./element"; -import { isQRInterfaceStateOpen } from "./sharerContent/content.functions"; - -let resizeLock = false; - -export function resizeObserverAction() { - if (resizeLock) return; - - resizeLock = true; - setTimeout(() => { - resizeLock = false; - - elements.sharer_container().style.height = `${ - document.documentElement.clientHeight - 12 - }px`; - - if (isQRInterfaceStateOpen()) { - elements.sharer_content().style.height = `${ - elements.sharer_content().offsetWidth + 51 - }px`; - } - }, 500); -} - -export function startResizeObserver() { - window.addEventListener("resize", resizeObserverAction); -} -export function closeResizeObserver() { - window.removeEventListener("resize", resizeObserverAction); -} diff --git a/src/gui/sharerContent/_sharerContent.scss b/src/gui/sharerContent/_sharerContent.scss deleted file mode 100644 index 40db9ae..0000000 --- a/src/gui/sharerContent/_sharerContent.scss +++ /dev/null @@ -1,127 +0,0 @@ -@mixin sharerContent { - #sharer-content-main { - width: 100%; - aspect-ratio: 1; - overflow: auto; - border-radius: 18px; - - .sharer-applist-item { - width: calc(100% - 20px); - height: 30px; - padding: 10px; - border-radius: 18px; - - display: flex; - align-items: center; - justify-content: space-between; - - &:hover { - background-color: #f6f6f6; - cursor: pointer; - } - - .sharer-applist-icon-container { - height: calc(100% - 2px); - padding: 1px; - aspect-ratio: 1; - background-color: #f6f6f6; - border-radius: 7px; - - img { - height: 100%; - aspect-ratio: 1; - } - } - - .sharer-applist-app-name { - text-align: left; - font-family: "Inter", sans-serif; - width: calc(100% - 76px); - display: inline-block; - white-space: nowrap; - overflow: hidden !important; - text-overflow: ellipsis; - font-size: 18px; - } - - .sharer-applist-arrow-right-icon { - height: 100%; - aspect-ratio: 1; - - svg { - height: 100%; - aspect-ratio: 1; - } - } - } - - .sharer-qr-container { - width: calc(100% - 42px); - aspect-ratio: 1; - padding: 21px; - padding-bottom: 0; - - .sharer-qr { - width: 100%; - aspect-ratio: 1; - border-radius: 7px; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - - img { - width: 12%; - aspect-ratio: 1; - } - } - } - .sharer-credits { - height: 72px; - width: 100%; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - - #credits-container { - height: 30px; - - display: flex; - align-items: center; - - &:hover { - cursor: pointer; - } - .credits-icon-container { - height: calc(100% - 2px); - padding: 1px; - aspect-ratio: 1; - background-color: #f6f6f6; - border-radius: 7px; - - svg { - height: 100%; - aspect-ratio: 1; - } - margin-right: 8px; - } - - .credits-text { - font-family: "Inter", sans-serif; - font-size: 20px; - font-weight: 500; - text-align: center; - } - } - } - - &::-webkit-scrollbar { - display: none; - } - -ms-overflow-style: none; - scrollbar-width: none; - } -} diff --git a/src/gui/sharerContent/applist.ts b/src/gui/sharerContent/applist.ts deleted file mode 100644 index 224c14d..0000000 --- a/src/gui/sharerContent/applist.ts +++ /dev/null @@ -1,115 +0,0 @@ -export const applist: { - [_: string]: { - id: string; - name: string; - theme: { primary: string; secondary: string }; - url_format: (input_url: string, text: string) => string; - }; -} = { - wa: { - id: "wa", - name: "WhatsApp", - theme: { primary: "#25D366", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - if (text != "") text += "\n"; - - return `https://api.whatsapp.com/send?text=${encodeURIComponent( - `${text}${input_url}` - )}`; - }, - }, - fb: { - id: "fb", - name: "Facebook", - theme: { primary: "#0c87ef", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - return `https://www.facebook.com/sharer/sharer.php?t=${encodeURIComponent( - text - )}&u=${encodeURIComponent(input_url)}`; - }, - }, - tw: { - id: "tw", - name: "Twitter", - theme: { primary: "#1D9BF0", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - return `https://twitter.com/intent/tweet?text=${encodeURIComponent( - text - )}&url=${encodeURIComponent( - input_url - )}&hashtags=${encodeURIComponent("SharedUsingSharer,SharerByKP")}`; - }, - }, - eml: { - id: "eml", - name: "Email", - theme: { primary: "#EA4335", secondary: "#ffffff" }, - url_format: (body: string, subject = "") => { - return `mailto:?subject=${encodeURIComponent( - subject - )}&body=${encodeURIComponent(body)}`; - }, - }, - lnkdn: { - id: "lnkdn", - name: "LinkedIn", - theme: { primary: "#0A66C2", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - if (text != "") text += "\n"; - return `https://www.linkedin.com/cws/share?url=${encodeURIComponent( - `${text}${input_url}` - )}`; - }, - }, - pntrst: { - id: "pntrst", - name: "Pinterest", - theme: { primary: "#E60123", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - return `https://www.pinterest.com/pin/create/button/?description=${encodeURIComponent( - text - )}&url=${encodeURIComponent(input_url)}&method=button`; - }, - }, - rdt: { - id: "rdt", - name: "Reddit", - theme: { primary: "#e45b34", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - return `https://reddit.com/submit?title=${encodeURIComponent( - text - )}&url=${encodeURIComponent(input_url)}`; - }, - }, - snpcht: { - id: "snpcht", - name: "Snapchat", - theme: { primary: "#fffC00", secondary: "#000000" }, - url_format: (input_url: string, text = "") => { - return `https://snapchat.com/scan?attachmentUrl=${encodeURIComponent( - input_url - )}`; - }, - }, - koo: { - id: "koo", - name: "Koo", - theme: { primary: "#FACD00", secondary: "#383838" }, - url_format: (input_url: string, text = "") => { - if (text != "") text += "\n"; - return `https://www.kooapp.com/create?title=${encodeURIComponent( - `${text}${input_url}` - )}`; - }, - }, - tg: { - id: "tg", - name: "Telegram", - theme: { primary: "#2aa1da", secondary: "#ffffff" }, - url_format: (input_url: string, text = "") => { - return `https://t.me/share/url?url=${encodeURIComponent( - input_url - )}&text=${encodeURIComponent(text)}`; - }, - }, -}; diff --git a/src/gui/sharerContent/content.functions.ts b/src/gui/sharerContent/content.functions.ts deleted file mode 100644 index 6349ab4..0000000 --- a/src/gui/sharerContent/content.functions.ts +++ /dev/null @@ -1,165 +0,0 @@ -import j2h from "../../j2h"; -import elements from "../element"; -import { setFooterInterface } from "../sharerFooter/footer.functions"; -import { openWebsite } from "../sharerWebsite"; -import svgs from "../svgs"; -import { qr_svg } from "./QRcode"; -import { applist } from "./applist"; - -let QRInterfaceState = false; - -let default_url = window.location.href, - default_text = document.title; - -export function setSharerText(text: string) { - default_text = text; -} - -export function setSharerURL(url: string) { - default_url = url; -} - -export function setDefaultSharerURL() { - default_url = window.location.href; -} - -export function setDefaultSharerText() { - default_text = document.title; -} - -export function openQRInterfaceState() { - QRInterfaceState = true; -} -function closeQRInterfaceState() { - QRInterfaceState = false; -} -export function isQRInterfaceStateOpen() { - return QRInterfaceState; -} - -export function revertBackToRoot() { - ((element) => { - element.innerHTML = svgs.local.sharerIcon; - element.onclick = () => openWebsite(); - })(elements.header_icon_container()); - - elements.header_title().innerText = "Sharer by KP"; - - ((element) => { - element.style.height = "auto"; - element.style.aspectRatio = "1"; - })(elements.sharer_content()); - - setApplistInterface(); - closeQRInterfaceState(); -} - -function setQRInterface(appid: string) { - let sharer_content = j2h.setRoot(elements.sharer_content()), - url_to_be_shared = applist[appid].url_format(default_url, default_text); - - sharer_content - .append( - j2h.element( - "div", - { - class: "sharer-qr-container", - }, - j2h.element( - "div", - { - class: "sharer-qr", - style: `background: url(${qr_svg(url_to_be_shared)})`, - }, - svgs.cdn[appid] - ) - ) - ) - .append( - j2h.element( - "div", - { class: "sharer-credits" }, - j2h.element("div", { id: "credits-container" }, [ - j2h.element( - "div", - { class: "credits-icon-container" }, - svgs.local.sharerIcon - ), - j2h.element( - "div", - { class: "credits-text" }, - "Powered by Sharer" - ), - ]) - ) - ); - - sharer_content.render(); - - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - - elements.credits_container().onclick = () => openWebsite(); - openQRInterfaceState(); - - ((element) => { - element.innerHTML = svgs.local.arrowLeftIcon; - element.onclick = revertBackToRoot; - })(elements.header_icon_container()); - - ((app_details) => { - // elements.header_title().innerText = `Share on ${app_details.name}`; - elements.header_title().innerText = `Scan to open ${app_details.name}`; - setFooterInterface( - `Open ${app_details.name}`, - app_details.theme.secondary, - app_details.theme.primary, - () => { - openWebsite(url_to_be_shared); - } - ); - })(applist[appid]); -} - -export function setApplistInterface() { - let applist_html = j2h.setRoot(elements.sharer_content()); - - Object.keys(applist).forEach((id) => { - applist_html.append( - j2h.element( - "div", - { id: `open-${id}-qr`, class: "sharer-applist-item" }, - [ - j2h.element( - "div", - { class: "sharer-applist-icon-container" }, - svgs.cdn[id] - ), - j2h.element( - "div", - { class: "sharer-applist-app-name" }, - applist[id].name - ), - j2h.element( - "div", - { class: "sharer-applist-arrow-right-icon" }, - svgs.local.arrowRightIcon - ), - ] - ) - ); - }); - - applist_html.render(); - - Object.keys(applist).forEach((id) => { - (document.getElementById(`open-${id}-qr`) as HTMLElement).onclick = - () => { - setQRInterface(id); - }; - }); - - setFooterInterface(); - closeQRInterfaceState(); -} diff --git a/src/gui/sharerContent/sharerCard.ts b/src/gui/sharerContent/sharerCard.ts deleted file mode 100644 index fe91171..0000000 --- a/src/gui/sharerContent/sharerCard.ts +++ /dev/null @@ -1,43 +0,0 @@ -import j2h from "../../j2h"; -import elements from "../element"; -import { openWebsite } from "../sharerWebsite"; -import svgs from "../svgs"; -import { qr_svg } from "./QRcode"; - -export function setSharerCard() { - let sharer_content = j2h.setRoot(elements.sharer_content()); - - sharer_content - .append( - j2h.element("div", { - class: "sharer-qr-container", - style: `background: url(${qr_svg("Hello")})`, - }) - ) - .append( - j2h.element( - "div", - { class: "sharer-credits" }, - j2h.element("div", { id: "credits-container" }, [ - j2h.element( - "div", - { class: "credits-icon-container" }, - svgs.local.sharerIcon - ), - j2h.element( - "div", - { class: "credits-text" }, - "Powered by Sharer" - ), - ]) - ) - ); - - sharer_content.render(); - - ((element) => { - element.style.height = `${element.offsetWidth + 51}px`; - })(sharer_content.root); - - elements.credits_container().onclick = () => openWebsite(); -} diff --git a/src/gui/sharerFooter/_sharerFooter.scss b/src/gui/sharerFooter/_sharerFooter.scss deleted file mode 100644 index 1b44ac1..0000000 --- a/src/gui/sharerFooter/_sharerFooter.scss +++ /dev/null @@ -1,24 +0,0 @@ -@mixin sharerFooter { - #sharer-footer { - height: 50px; - width: 100%; - margin-top: 21px; - border-radius: 18px; - - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - text-align: center; - - &:hover { - cursor: pointer; - } - - #sharer-footer-text { - font-family: "Inter", sans-serif; - font-size: 20px; - font-weight: 600; - } - } -} diff --git a/src/gui/sharerFooter/footer.functions.ts b/src/gui/sharerFooter/footer.functions.ts deleted file mode 100644 index 4b654e7..0000000 --- a/src/gui/sharerFooter/footer.functions.ts +++ /dev/null @@ -1,19 +0,0 @@ -import elements from "../element"; -import { openWebsite } from "../sharerWebsite"; - -export function setFooterInterface( - inputText = "Powered by Sharer", - fontColor = "#5900ff", - bgColor = "#5900ff14", - actionPerform = () => openWebsite() -) { - ((element) => { - element.innerText = inputText; - element.style.color = fontColor; - })(elements.sharer_footer_text()); - - ((element) => { - element.style.backgroundColor = bgColor; - element.onclick = actionPerform; - })(elements.sharer_footer()); -} diff --git a/src/gui/sharerHeader/_sharerHeader.scss b/src/gui/sharerHeader/_sharerHeader.scss deleted file mode 100644 index 7bbd2ca..0000000 --- a/src/gui/sharerHeader/_sharerHeader.scss +++ /dev/null @@ -1,59 +0,0 @@ -@mixin sharerHeader { - .sharer-header { - width: 100%; - height: 30px; - display: flex; - align-items: center; - justify-content: space-between; - margin-bottom: 21px; - - #header-icon-container { - height: calc(100% - 2px); - padding: 1px; - aspect-ratio: 1; - background-color: #f6f6f6; - border-radius: 7px; - - &:hover { - cursor: pointer; - } - - svg { - height: 100%; - aspect-ratio: inherit; - } - } - - #header-title { - font-family: "Inter", sans-serif; - width: calc(100% - 76px); - font-weight: 500; - font-size: 20px; - text-align: left; - display: inline-block; - white-space: nowrap; - overflow: hidden !important; - text-overflow: ellipsis; - } - - #header-close-icon { - height: 100%; - aspect-ratio: 1; - background-color: #f6f6f6; - border-radius: 7px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - - &:hover { - cursor: pointer; - } - - svg { - height: 100%; - aspect-ratio: 1; - } - } - } -} diff --git a/src/gui/sharerHeader/header.functions.ts b/src/gui/sharerHeader/header.functions.ts deleted file mode 100644 index fb24bbb..0000000 --- a/src/gui/sharerHeader/header.functions.ts +++ /dev/null @@ -1,36 +0,0 @@ -import elements from "../element"; -import { closeResizeObserver } from "../resizeObserver"; - -let continue_to_close = true; - -export function setContinueToCloseFalse() { - continue_to_close = false; -} - -export function closeSharer() { - if (continue_to_close) { - try { - elements.sharer_container().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().classList.add("hide"); - setTimeout(() => { - elements.sharer_by_KP().remove(); - closeResizeObserver(); - }, 100); - }, 300); - document.body.classList.remove("sharer-opened"); - - try { - ((sharer_button) => { - sharer_button.classList.remove("hide"); - })( - document.getElementById("sharer-btn-default") as HTMLElement - ); - } catch (error) {} - } catch (error) { - console.log(error); - } - } - - continue_to_close = true; -} diff --git a/src/gui/sharerRoot.ts b/src/gui/sharerRoot.ts deleted file mode 100644 index 4b9806f..0000000 --- a/src/gui/sharerRoot.ts +++ /dev/null @@ -1,87 +0,0 @@ -import j2h from "../j2h"; -import elements from "./element"; -import { resizeObserverAction, startResizeObserver } from "./resizeObserver"; -import { setApplistInterface } from "./sharerContent/content.functions"; -import { setFooterInterface } from "./sharerFooter/footer.functions"; -import { - closeSharer, - setContinueToCloseFalse, -} from "./sharerHeader/header.functions"; -import { openWebsite } from "./sharerWebsite"; -import svgs from "./svgs"; - -function setSharerRoot() { - const Sharer_By_KP = document.createElement("div"); - - j2h.setAttribute(Sharer_By_KP, { id: "sharer-by-KP", class: "hide" }); - - const sharer_root = j2h.setRoot(Sharer_By_KP); - - sharer_root.append( - j2h.element( - "div", - { id: "sharer-container", class: "hide" }, - j2h.element("div", { id: "sharer-window" }, [ - j2h.element("div", { class: "sharer-header" }, [ - j2h.element( - "div", - { id: "header-icon-container" }, - svgs.local.sharerIcon - ), - j2h.element("div", { id: "header-title" }, "Sharer by KP"), - j2h.element( - "div", - { id: "header-close-icon" }, - svgs.local.closeIcon - ), - ]), - j2h.element("div", { id: "sharer-content-main" }), - j2h.element( - "div", - { id: "sharer-footer" }, - j2h.element("div", { id: "sharer-footer-text" }) - ), - ]) - ) - ); - - document.body.prepend(Sharer_By_KP); - sharer_root.render(); -} - -export function openSharer() { - try { - (document.getElementById("sharer-by-KP") as HTMLElement).remove(); - } catch (error) {} - try { - ((sharer_button) => { - sharer_button.classList.add("hide"); - })(document.getElementById("sharer-btn-default") as HTMLElement); - } catch (error) {} - - setSharerRoot(); - - setTimeout(() => { - elements.sharer_by_KP().classList.remove("hide"); - elements.sharer_container().classList.remove("hide"); - }, 10); - - elements.sharer_window().onclick = setContinueToCloseFalse; - - elements.sharer_container().onclick = closeSharer; - elements.header_close_icon().onclick = closeSharer; - - [elements.header_icon_container(), elements.sharer_footer()].forEach( - (element) => { - element.onclick = () => openWebsite(); - } - ); - - setApplistInterface(); - - setFooterInterface(); - - resizeObserverAction(); - startResizeObserver(); - document.body.classList.add("sharer-opened"); -} diff --git a/src/gui/sharerWebsite.ts b/src/gui/sharerWebsite.ts deleted file mode 100644 index 44f6ba4..0000000 --- a/src/gui/sharerWebsite.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function openWebsite(url = "https://patelka2211.github.io/sharer/") { - window.open(url, "_blank"); -} diff --git a/src/gui/svgs.ts b/src/gui/svgs.ts deleted file mode 100644 index a561973..0000000 --- a/src/gui/svgs.ts +++ /dev/null @@ -1,36 +0,0 @@ -import cdn from "../cdn"; -import j2h from "../j2h"; - -function getCDNsvgs(filename: string) { - return j2h.element("img", { - src: cdn.getPath(["assets", filename]), - }); -} - -const svgs = { - local: { - sharerIcon: ` `, - closeIcon: ` `, - arrowLeftIcon: ` `, - arrowRightIcon: ` `, - }, - cdn: (function (obj: { [_: string]: any }) { - [ - "wa", - "fb", - "tw", - "eml", - "lnkdn", - "pntrst", - "rdt", - "snpcht", - "koo", - "tg", - ].forEach((app) => { - obj[app] = getCDNsvgs(`${app}Icon.svg`); - }); - return obj; - })({}), -}; - -export default svgs; diff --git a/src/helper/cdn.ts b/src/helper/cdn.ts new file mode 100644 index 0000000..3c20f85 --- /dev/null +++ b/src/helper/cdn.ts @@ -0,0 +1,10 @@ +import { VERSION } from "../metadata"; + +export const cdn = { + url: `https://cdn.jsdelivr.net/gh/patelka2211/sharer@${VERSION}/`, + get: (paths: string[], fileName?: string) => { + let url = cdn.url + paths.join("/") + "/"; + if (fileName === undefined) return url; + return url + fileName; + }, +}; diff --git a/src/helper/formatURL.ts b/src/helper/formatURL.ts new file mode 100644 index 0000000..8e2e657 --- /dev/null +++ b/src/helper/formatURL.ts @@ -0,0 +1,21 @@ +export function formatURL(url: string) { + try { + const trimmedURL = url.trim(); + const hasProtocol = trimmedURL.includes("://"); + let formattedURL = trimmedURL; + + if (!hasProtocol) formattedURL = `https://${trimmedURL}`; + + const urlObj = new URL(formattedURL); + + if (!urlObj.host) { + urlObj.host = urlObj.pathname; + urlObj.pathname = "/"; + } + + return urlObj; + } catch (error) { + console.error("Invalid URL:", error); + return; + } +} diff --git a/src/helper/getCurrentThemeIcon.ts b/src/helper/getCurrentThemeIcon.ts new file mode 100644 index 0000000..87b7bb6 --- /dev/null +++ b/src/helper/getCurrentThemeIcon.ts @@ -0,0 +1,29 @@ +import { SVGParser } from "@patelka2211/dominar"; +import { + getCurrentUITheme, + setAutoTheme, + setDarkTheme, + setLightTheme, +} from "dynamic-colors"; +import autoModeIcon from "../svgs/auto-mode-icon"; +import darkModeIcon from "../svgs/dark-mode-icon"; +import lightModeIcon from "../svgs/light-mode-icon"; +import { readRecord, createRecord } from "../storage/main"; + +export function currentThemeIcon(updateTheme = false) { + let currentTheme = readRecord("Theme"); + if (currentTheme === undefined) { + currentTheme = getCurrentUITheme(); + createRecord("Theme", currentTheme); + } + + if (currentTheme === "auto") { + if (updateTheme) setAutoTheme(); + return SVGParser(autoModeIcon); + } else if (currentTheme === "dark") { + if (updateTheme) setDarkTheme(); + return SVGParser(darkModeIcon); + } + if (updateTheme) setLightTheme(); + return SVGParser(lightModeIcon); +} diff --git a/src/helper/openFeedback.ts b/src/helper/openFeedback.ts new file mode 100644 index 0000000..7cc0f9d --- /dev/null +++ b/src/helper/openFeedback.ts @@ -0,0 +1,7 @@ +import { openURL } from "./openURL"; + +export function openFeedback() { + openURL( + "https://kpverse.in/sharer/feedback?utm_source=sharer&utm_medium=feedback&utm_campaign=kpverse_sharer" + ); +} diff --git a/src/helper/openURL.ts b/src/helper/openURL.ts new file mode 100644 index 0000000..84bf793 --- /dev/null +++ b/src/helper/openURL.ts @@ -0,0 +1,9 @@ +export function openURL(url: string) { + window.open( + url, + "_blank", + `resizable=yes,width=${screen.width * 0.84},height=${ + screen.height * 0.84 + },top=${screen.height * 0.08},left=${screen.width * 0.08}` + ); +} diff --git a/src/helper/prepareURL.ts b/src/helper/prepareURL.ts new file mode 100644 index 0000000..7f67b32 --- /dev/null +++ b/src/helper/prepareURL.ts @@ -0,0 +1,10 @@ +import { share_text, share_url } from "../variables/main"; + +export function prepareURL(urlFormat: string) { + if (share_text !== undefined && share_url !== undefined) { + urlFormat = urlFormat.replace(`{%text%}`, share_text); + urlFormat = urlFormat.replace(`{%url%}`, share_url.toString()); + } + + return urlFormat; +} diff --git a/src/gui/sharerContent/QRcode.js b/src/helper/qrcode.js similarity index 96% rename from src/gui/sharerContent/QRcode.js rename to src/helper/qrcode.js index 6f60ee4..b5b2d25 100644 --- a/src/gui/sharerContent/QRcode.js +++ b/src/helper/qrcode.js @@ -1,3 +1,5 @@ +/** https://github.com/datalog/qrcode-svg under MIT license */ +"use strict"; function QRCode(r) { var n, t, @@ -459,11 +461,11 @@ function QRCode(r) { l = "", g = "string" == typeof r ? { msg: r } : r || {}, d = g.pal || ["#000"], - // p = h(g.dim) || 256, - p = "100%", C = [1, 0, 0, 1, (c = (c = h(g.pad)) > -1 ? c : 4), c], - w = n((w = d[0])) ? w : "#000", - b = n((b = d[1])) ? b : 0, + // w = n((w = d[0])) ? w : "#000", + // b = n((b = d[1])) ? b : 0, + w = d[0] !== undefined ? d[0] : "#000", + b = d[1] !== undefined ? d[1] : 0, A = g.vrb ? 0 : 1; for ( L(g.msg || "", m[g.ecl] || m.M, 0 == g.ecb ? 0 : 1, g.mtx), @@ -492,8 +494,9 @@ function QRCode(r) { return ( (o = t("svg", { viewBox: [0, 0, v, v].join(" "), - width: p, - height: p, + width: "100%", + style: "aspect-ratio: 1;", + class: "sharer-qr", fill: w, "shape-rendering": "crispEdges", xmlns: s, @@ -509,19 +512,12 @@ function QRCode(r) { })(); } -export function qr_svg(input_data) { - let svgNode = QRCode({ - msg: input_data, - // dim: 256, - pad: 0, - // pad: 40, - // mtx: 7, - // ecl: "H", - // ecb: 0, - pal: ["#000000", "#ffffff"], - // vrb: 1, - }), - _ = new XMLSerializer(); - - return `data:image/svg+xml;base64,${btoa(_.serializeToString(svgNode))}`; +export function createQR(text) { + return QRCode({ + msg: text, + pad: 0, + ecl: "H", + ecb: 1, + pal: ["var(--sharer-dc-onSecondaryContainer)"], + }).outerHTML; } diff --git a/src/helper/zIndex.ts b/src/helper/zIndex.ts new file mode 100644 index 0000000..1e1f19d --- /dev/null +++ b/src/helper/zIndex.ts @@ -0,0 +1,11 @@ +export function getZIndex() { + return Math.min( + Math.max( + ...Array.from(document.querySelectorAll("body *"), (el) => + parseFloat(window.getComputedStyle(el).zIndex) + ).filter((zIndex) => !Number.isNaN(zIndex)), + 0 + ) + 50, + 2147483647 + ); +} diff --git a/src/index.ts b/src/index.ts new file mode 100644 index 0000000..e39eec8 --- /dev/null +++ b/src/index.ts @@ -0,0 +1,21 @@ +import { initializeIfNot } from "./intialization/intializeIfNot"; + +if (document.readyState === "loading") + window.addEventListener("load", function runAfterLoad() { + initializeIfNot(); + + setTimeout(() => { + window.removeEventListener("load", runAfterLoad); + }, 1000); + }); +else initializeIfNot(); + +console.log( + "Discover the incredible sharing capabilities of Sharer from KPVERSE.\n\nFor more information about Sharer, visit https://kpverse.in/sharer?utm_source=sharer&utm_medium=browser_console&utm_campaign=kpverse_sharer." +); + +export { button } from "./components/button/buttonObject"; +export { VERSION } from "./metadata"; +export { closeSharer as close } from "./operations/closeSharer"; +export { openSharer as open } from "./operations/openSharer"; +export { setColor } from "./variables/color"; diff --git a/src/intialization/intializeIfNot.ts b/src/intialization/intializeIfNot.ts new file mode 100644 index 0000000..a475f8f --- /dev/null +++ b/src/intialization/intializeIfNot.ts @@ -0,0 +1,38 @@ +import { render, tag } from "@patelka2211/dominar"; +import { readRecord, createRecord } from "../storage/main"; +import style from "../style"; +import { sharerUninitialized, setSharerUninitialized } from "./main"; + +export function initializeIfNot() { + if (sharerUninitialized === true) { + render( + document.head, + tag("style", { + attributes: { id: "kpverse-sharer-css" }, + children: style, + }), + { + clearBeforeRender: false, + insertType: "append", + } + ).then(() => { + let appIds = readRecord("AppsIdList"); + if (appIds === undefined) { + createRecord("AppsIdList", [ + "x", + "wa", + "mstdn", + "tg", + "lnkdn", + "fb", + "gml", + "rdt", + "pntrst", + "snpcht", + ]); + } + + setSharerUninitialized(undefined); + }); + } +} diff --git a/src/intialization/main.ts b/src/intialization/main.ts new file mode 100644 index 0000000..8f59d0e --- /dev/null +++ b/src/intialization/main.ts @@ -0,0 +1,5 @@ +export let sharerUninitialized: undefined | true = true; + +export function setSharerUninitialized(newValue: undefined | true) { + sharerUninitialized = newValue; +} diff --git a/src/j2h.ts b/src/j2h.ts deleted file mode 100644 index 3564ffc..0000000 --- a/src/j2h.ts +++ /dev/null @@ -1,260 +0,0 @@ -/** - * Copyright (c) 2023 Kartavya Patel - * Repository url: https://github.com/patelka2211/json2html - */ -type BooleanAttributeName = string; -type PairedAttribute = { - [_: string]: string | number; -}; -type CompositeAttribute = [ - PairedAttribute, - BooleanAttributeName | BooleanAttributeName[] -]; -type Attributes = - | BooleanAttributeName - | BooleanAttributeName[] - | CompositeAttribute - | PairedAttribute; -type ValidValue = string | ValidPair | ValidPair[]; -type ValidPair = { - [_: string]: [Attributes, ValidValue]; -}; - -interface elements { - a: "a"; - abbr: "abbr"; - address: "address"; - area: "area"; - article: "article"; - aside: "aside"; - audio: "audio"; - b: "b"; - base: "base"; - bdi: "bdi"; - bdo: "bdo"; - blockquote: "blockquote"; - body: "body"; - br: "br"; - button: "button"; - canvas: "canvas"; - caption: "caption"; - cite: "cite"; - code: "code"; - col: "col"; - colgroup: "colgroup"; - data: "data"; - datalist: "datalist"; - dd: "dd"; - del: "del"; - details: "details"; - dfn: "dfn"; - dialog: "dialog"; - div: "div"; - dl: "dl"; - dt: "dt"; - em: "em"; - embed: "embed"; - fieldset: "fieldset"; - figcaption: "figcaption"; - figure: "figure"; - footer: "footer"; - form: "form"; - h1: "h1"; - h2: "h2"; - h3: "h3"; - h4: "h4"; - h5: "h5"; - h6: "h6"; - head: "head"; - header: "header"; - hgroup: "hgroup"; - hr: "hr"; - html: "html"; - i: "i"; - iframe: "iframe"; - img: "img"; - input: "input"; - ins: "ins"; - kbd: "kbd"; - label: "label"; - legend: "legend"; - li: "li"; - link: "link"; - main: "main"; - map: "map"; - mark: "mark"; - menu: "menu"; - meta: "meta"; - meter: "meter"; - nav: "nav"; - noscript: "noscript"; - object: "object"; - ol: "ol"; - optgroup: "optgroup"; - option: "option"; - output: "output"; - p: "p"; - picture: "picture"; - pre: "pre"; - progress: "progress"; - q: "q"; - rp: "rp"; - rt: "rt"; - ruby: "ruby"; - s: "s"; - samp: "samp"; - script: "script"; - section: "section"; - select: "select"; - slot: "slot"; - small: "small"; - source: "source"; - span: "span"; - strong: "strong"; - style: "style"; - sub: "sub"; - summary: "summary"; - sup: "sup"; - table: "table"; - tbody: "tbody"; - td: "td"; - template: "template"; - textarea: "textarea"; - tfoot: "tfoot"; - th: "th"; - thead: "thead"; - time: "time"; - title: "title"; - tr: "tr"; - track: "track"; - u: "u"; - ul: "ul"; - var: "var"; - video: "video"; - wbr: "wbr"; -} - -class json2html { - list: ValidPair[] = []; - constructor(readonly root: HTMLElement) {} - - append(input: ValidPair): this { - this.list.push(input); - return this; - } - render( - input: ValidPair[] = this.list, - root: HTMLElement = this.root, - clearRoot: boolean = true - ): void { - if (clearRoot) root.innerHTML = ""; - input.forEach((item) => { - for (const key in item) { - if (Object.prototype.hasOwnProperty.call(item, key)) { - const element = document.createElement(key); - const value = item[key]; - - j2h.setAttribute(element, value[0]); - - if (typeof value[1] == "string") { - element.innerHTML = value[1]; - } else if ( - typeof (value[1] as ValidPair | ValidPair[]) == "object" - ) { - if ((value[1] as ValidPair).length === undefined) { - this.render( - [value[1] as ValidPair], - element, - false - ); - } else if ( - (value[1] as ValidPair[]).length !== undefined - ) { - this.render( - value[1] as ValidPair[], - element, - false - ); - } - } - - root.appendChild(element); - } - } - }); - } -} - -const j2h = { - setRoot: (root: HTMLElement) => { - return new json2html(root); - }, - - element: ( - tagName: Tag, - attributes: Attributes = {}, - innerHTML: ValidValue = "" - ): ValidPair => { - return { - [tagName]: [attributes, innerHTML], - }; - }, - - setAttribute: ( - element: HTMLElement | json2html, - attributes: Attributes - ): HTMLElement => { - if (element instanceof json2html) { - element = element.root; - } - - if (typeof attributes === "string") { - element.setAttribute(attributes as string, ""); - } else if ( - typeof attributes === "object" && - attributes.length !== undefined && - typeof (attributes as string[])[0] === "string" - ) { - for ( - let index = 0; - index < (attributes as string[]).length; - index++ - ) { - const item = (attributes as string[])[index]; - element.setAttribute(item, ""); - } - } else if ((attributes as PairedAttribute).length === undefined) { - for (const key in attributes as - | CompositeAttribute - | PairedAttribute) { - element.setAttribute( - key, - (attributes as PairedAttribute)[key].toString() - ); - } - } else { - (attributes as CompositeAttribute).map((item) => { - if ((item as PairedAttribute).length === undefined) { - let pairedAttribute: PairedAttribute = - item as PairedAttribute; - for (const key in pairedAttribute) { - (element as HTMLElement).setAttribute( - key, - pairedAttribute[key].toString() - ); - } - } else if (typeof item === "object") { - (item as BooleanAttributeName[]).map((item) => { - (element as HTMLElement).setAttribute(item, ""); - }); - } else { - (element as HTMLElement).setAttribute(item, ""); - } - }); - } - - return element; - }, -}; - -export default j2h; diff --git a/src/metadata.ts b/src/metadata.ts new file mode 100644 index 0000000..6002fd2 --- /dev/null +++ b/src/metadata.ts @@ -0,0 +1,4 @@ +/** + * Sharer version + */ +export const VERSION = "1.0.0"; diff --git a/src/operations/closeSharer.ts b/src/operations/closeSharer.ts new file mode 100644 index 0000000..0b9732e --- /dev/null +++ b/src/operations/closeSharer.ts @@ -0,0 +1,38 @@ +import { kpverseSharerElement } from "../elements/kpverseSharer"; +import { stopObservation } from "../resize-observer/stop"; +import { insertButton } from "../components/button/insertButton"; +import { isSharerButtonActive } from "../components/button/main"; +import { setShareURL, setShareText } from "../variables/main"; +import { + isSharerOpen, + changeSharerOpenStatus, + setContinueToClose, +} from "./main"; + +/** + * Closes the Sharer. + * + * @returns {void} + */ +export function closeSharer(): void { + if (isSharerOpen === undefined) return; + + setShareURL(undefined); + setShareText(undefined); + + let kpverseSharer = kpverseSharerElement(); + + if (kpverseSharer !== null) { + kpverseSharer.classList.add("hide"); + setTimeout(() => { + if (kpverseSharer !== null) kpverseSharer.remove(); + setTimeout(() => { + if (isSharerButtonActive === true) insertButton(); + document.body.classList.remove("sharer-is-open"); + changeSharerOpenStatus(undefined); + setContinueToClose(undefined); + stopObservation(); + }, 1); + }, 400); + } +} diff --git a/src/operations/main.ts b/src/operations/main.ts new file mode 100644 index 0000000..772a941 --- /dev/null +++ b/src/operations/main.ts @@ -0,0 +1,11 @@ +export let continueToClose: boolean | undefined = undefined; + +export function setContinueToClose(newValue: boolean | undefined) { + continueToClose = newValue; +} + +export let isSharerOpen: true | undefined = undefined; + +export function changeSharerOpenStatus(newStatus: true | undefined) { + isSharerOpen = newStatus; +} diff --git a/src/operations/openSharer.ts b/src/operations/openSharer.ts new file mode 100644 index 0000000..511c02b --- /dev/null +++ b/src/operations/openSharer.ts @@ -0,0 +1,78 @@ +import { render, attachEventListeners } from "@patelka2211/dominar"; +import { isSharerButtonActive } from "../components/button/main"; +import { removeButton } from "../components/button/removeButton"; +import { kpverseSharer } from "../components/root/main"; +import { kpverseSharerElement } from "../elements/kpverseSharer"; +import { poweredBySharerElement } from "../elements/poweredBySharer"; +import { openURL } from "../helper/openURL"; +import { getZIndex } from "../helper/zIndex"; +import { initializeIfNot } from "../intialization/intializeIfNot"; +import { sharerUninitialized } from "../intialization/main"; +import { startObservation } from "../resize-observer/start"; +import { setShareURL, setShareText } from "../variables/main"; +import { isSharerOpen, changeSharerOpenStatus } from "./main"; + +/** + * Opens the Sharer with the specified options. + * + * @param {object} [option] - Optional configuration for the Sharer. + * @param {string} [option.url] - The URL to be shared. + * @param {string} [option.text] - The text to be shared. + * @returns {void} + */ +export function openSharer(option?: { url?: string; text?: string }): void { + if (isSharerOpen === true) return; + + if (sharerUninitialized === true) initializeIfNot(); + + if (option !== undefined) { + let { url, text } = option; + if (url !== undefined) setShareURL(url); + else setShareURL(location.href); + + if (text !== undefined) setShareText(text); + else setShareText(document.title); + } else { + setShareURL(location.href); + setShareText(document.title); + } + + let timeout = 1; + + if (isSharerButtonActive === true) { + removeButton(); + timeout = 400; + } + + setTimeout(() => { + render(document.body, kpverseSharer(), { + clearBeforeRender: false, + insertType: "prepend", + }).then(() => { + setTimeout(() => { + let kpverseSharer = kpverseSharerElement(); + + if (kpverseSharer !== null) { + kpverseSharer.style.zIndex = `${getZIndex()}`; + kpverseSharer.classList.remove("hide"); + } + + document.body.classList.add("sharer-is-open"); + + let poweredBySharer = poweredBySharerElement(); + if (poweredBySharer) + attachEventListeners(poweredBySharer, { + click() { + openURL( + "https://kpverse.in/sharer?utm_source=sharer&utm_medium=powered_by_sharer&utm_campaign=kpverse_sharer" + ); + }, + }); + + startObservation(); + + changeSharerOpenStatus(true); + }, 1); + }); + }, timeout); +} diff --git a/src/resize-observer/main.ts b/src/resize-observer/main.ts new file mode 100644 index 0000000..0c42063 --- /dev/null +++ b/src/resize-observer/main.ts @@ -0,0 +1,5 @@ +export let lock: true | undefined = undefined; + +export function setLock(newValue: true | undefined) { + lock = newValue; +} diff --git a/src/resize-observer/observer.ts b/src/resize-observer/observer.ts new file mode 100644 index 0000000..e5abc52 --- /dev/null +++ b/src/resize-observer/observer.ts @@ -0,0 +1,16 @@ +import { kpverseSharerElement } from "../elements/kpverseSharer"; +import { lock, setLock } from "./main"; + +export function observer() { + if (lock === true) return; + setLock(true); + + setTimeout(() => { + let kpverseSharer = kpverseSharerElement(); + + if (kpverseSharer !== null) + kpverseSharer.style.height = `${document.documentElement.clientHeight}px`; + + setLock(undefined); + }, 500); +} diff --git a/src/resize-observer/start.ts b/src/resize-observer/start.ts new file mode 100644 index 0000000..7ac528e --- /dev/null +++ b/src/resize-observer/start.ts @@ -0,0 +1,11 @@ +import { kpverseSharerElement } from "../elements/kpverseSharer"; +import { observer } from "./observer"; + +export function startObservation() { + let kpverseSharer = kpverseSharerElement(); + + if (kpverseSharer !== null) + kpverseSharer.style.height = `${document.documentElement.clientHeight}px`; + + addEventListener("resize", observer); +} diff --git a/src/resize-observer/stop.ts b/src/resize-observer/stop.ts new file mode 100644 index 0000000..67340e9 --- /dev/null +++ b/src/resize-observer/stop.ts @@ -0,0 +1,5 @@ +import { observer } from "./observer"; + +export function stopObservation() { + window.removeEventListener("resize", observer); +} diff --git a/src/sharerByKP.scss b/src/sharerByKP.scss deleted file mode 100644 index b313834..0000000 --- a/src/sharerByKP.scss +++ /dev/null @@ -1,51 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"); - -@import "./gui/sharerContainer"; - -body { - margin: 0; - - #sharer-by-KP { - box-sizing: content-box; - * { - box-sizing: content-box; - } - z-index: 2147483647; - font-family: "Inter", sans-serif; - position: fixed; - width: 100vw; - height: 100vh; - top: 0px; - left: 0px; - pointer-events: all; - opacity: 1; - background-color: rgba(0, 0, 0, 0.32); - backdrop-filter: blur(6px); - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - transition: opacity 0.2s ease, background-color 0.2s ease, - backdrop-filter 0.2s ease; - - &.hide { - opacity: 0; - background-color: rgba(0, 0, 0, 0); - backdrop-filter: blur(0px); - } - - @include sharerContainer(); - } - - &.sharer-opened { - overflow: hidden; - } -} - -@media (max-width: 500px) { - body { - #sharer-by-KP { - @include sharerContainer_mobile(); - } - } -} diff --git a/src/sharer_button/sharer_button.scss b/src/sharer_button/sharer_button.scss deleted file mode 100644 index ebafb12..0000000 --- a/src/sharer_button/sharer_button.scss +++ /dev/null @@ -1,31 +0,0 @@ -body { - margin: 0; - - #sharer-btn-default { - position: fixed; - bottom: 20px; - right: 20px; - width: 48px; - height: 48px; - z-index: 2147483646; - box-shadow: 0 16px 64px 0 rgba(40, 40, 40, 0.32); - border-radius: 11.8px; - opacity: 1; - transition: opacity 0.4s ease, bottom 0.4s ease, right 0.4s ease, - width 0.4s ease, height 0.4s ease, box-shadow 0.4s ease; - pointer-events: all; - &:hover { - cursor: pointer; - box-shadow: 0 16px 64px 0 rgba(40, 40, 40, 0.48); - bottom: 16px; - right: 16px; - width: 56px; - height: 56px; - } - &.hide { - opacity: 0; - bottom: -68px; - pointer-events: none; - } - } -} diff --git a/src/sharer_button/sharer_button.ts b/src/sharer_button/sharer_button.ts deleted file mode 100644 index 24d8b55..0000000 --- a/src/sharer_button/sharer_button.ts +++ /dev/null @@ -1,27 +0,0 @@ -import cdn from "../cdn"; - -function loadSharerButton() { - document.head.appendChild( - ((element) => { - element.id = "sharer_button_css_file"; - element.rel = "stylesheet"; - element.href = cdn.getPath(["bundle", "sharer_button.css"]); - return element; - })(document.createElement("link") as HTMLLinkElement) - ); - - let sharer_button = document.createElement("img"); - sharer_button.src = cdn.getPath(["assets", "sharerIcon.svg"]); - sharer_button.id = "sharer-btn-default"; - sharer_button.classList.add("hide"); - sharer_button.setAttribute( - "onclick", - `try { sharer.setDefaultURL().setDefaultText().open(); } catch { alert('It appears that the Sharer module has not been fully loaded at this time.'); }` - ); - document.body.appendChild(sharer_button); - setTimeout(() => { - sharer_button.classList.remove("hide"); - }, 400); -} - -window.addEventListener("load", loadSharerButton); diff --git a/src/sharer_esm.ts b/src/sharer_esm.ts deleted file mode 100644 index 0544299..0000000 --- a/src/sharer_esm.ts +++ /dev/null @@ -1,18 +0,0 @@ -import sharer_functions from "./sharer_functions"; - -// Destructuring all the functions -const setSharerURL = sharer_functions.setURL, - setDefaultSharerURL = sharer_functions.setDefaultURL, - setSharerText = sharer_functions.setText, - setDefaultSharerText = sharer_functions.setDefaultText, - openSharer = sharer_functions.open, - closeSharer = sharer_functions.close; - -export { - setSharerURL, - setDefaultSharerURL, - setSharerText, - setDefaultSharerText, - openSharer, - closeSharer, -}; diff --git a/src/sharer_functions.ts b/src/sharer_functions.ts deleted file mode 100644 index 58ffd4a..0000000 --- a/src/sharer_functions.ts +++ /dev/null @@ -1,48 +0,0 @@ -import cdn from "./cdn"; -import { - setDefaultSharerText, - setDefaultSharerURL, - setSharerText, - setSharerURL, -} from "./gui/sharerContent/content.functions"; -import { closeSharer } from "./gui/sharerHeader/header.functions"; -import { openSharer } from "./gui/sharerRoot"; -import j2h from "./j2h"; - -export default { - setURL: function (url: string) { - setSharerURL(url); - return this; - }, - setDefaultURL: function () { - setDefaultSharerURL(); - return this; - }, - setText: function (text: string) { - setSharerText(text); - return this; - }, - setDefaultText: function () { - setDefaultSharerText(); - return this; - }, - open: function () { - openSharer(); - }, - close: function () { - closeSharer(); - }, -}; - -// Adding Sharer css programmatically -document.head.appendChild( - j2h.setAttribute(document.createElement("link"), { - id: "sharer_css_file", - rel: "stylesheet", - href: cdn.getPath(["bundle", "sharerByKP.css"]), - }) -); - -try { - localStorage.removeItem("sharer_deployment_sha"); // To be removed after some time -} catch (error) {} diff --git a/src/sharer_iife.ts b/src/sharer_iife.ts deleted file mode 100644 index e68f325..0000000 --- a/src/sharer_iife.ts +++ /dev/null @@ -1,3 +0,0 @@ -import sharer_functions from "./sharer_functions"; - -export default sharer_functions; diff --git a/src/storage/basicDecrypt.ts b/src/storage/basicDecrypt.ts new file mode 100644 index 0000000..9b06026 --- /dev/null +++ b/src/storage/basicDecrypt.ts @@ -0,0 +1,7 @@ +export function basicDecrypt(encrypted: string) { + try { + return atob(encrypted); + } catch (error) { + return encrypted; + } +} diff --git a/src/storage/basicEncrypt.ts b/src/storage/basicEncrypt.ts new file mode 100644 index 0000000..d6dbdf8 --- /dev/null +++ b/src/storage/basicEncrypt.ts @@ -0,0 +1,7 @@ +export function basicEncrypt(plainText: string) { + try { + return btoa(plainText); + } catch (error) { + return plainText; + } +} diff --git a/src/storage/create.ts b/src/storage/create.ts new file mode 100644 index 0000000..f613fab --- /dev/null +++ b/src/storage/create.ts @@ -0,0 +1,16 @@ +import { basicEncrypt } from "./basicEncrypt"; +import { storageKeyFormat } from "./storageKeyFormat"; + +export function __storageCreate( + recordName: string, + recordValue: string | object +) { + recordName = storageKeyFormat(recordName); + if (typeof recordValue === "object") + recordValue = JSON.stringify(recordValue); + recordValue = basicEncrypt(recordValue); + localStorage.setItem(recordName, recordValue); + return { + [recordName]: recordValue, + }; +} diff --git a/src/storage/delete.ts b/src/storage/delete.ts new file mode 100644 index 0000000..9c41cd7 --- /dev/null +++ b/src/storage/delete.ts @@ -0,0 +1,6 @@ +import { storageKeyFormat } from "./storageKeyFormat"; + +export function __storageDelete(recordName: string) { + recordName = storageKeyFormat(recordName); + localStorage.removeItem(recordName); +} diff --git a/src/storage/main.ts b/src/storage/main.ts new file mode 100644 index 0000000..b6ca0c2 --- /dev/null +++ b/src/storage/main.ts @@ -0,0 +1,11 @@ +import { __storageCreate } from "./create"; +import { __storageDelete } from "./delete"; +import { __storageRead } from "./read"; +import { __storageUpdate } from "./update"; + +export { + __storageCreate as createRecord, + __storageRead as readRecord, + __storageUpdate as updateRecord, + __storageDelete as deleteRecord, +}; diff --git a/src/storage/read.ts b/src/storage/read.ts new file mode 100644 index 0000000..a4eb1b8 --- /dev/null +++ b/src/storage/read.ts @@ -0,0 +1,14 @@ +import { basicDecrypt } from "./basicDecrypt"; +import { storageKeyFormat } from "./storageKeyFormat"; + +export function __storageRead(recordName: string) { + recordName = storageKeyFormat(recordName); + let recordValue = localStorage.getItem(recordName); + if (recordValue === null) return; + recordValue = basicDecrypt(recordValue); + try { + return JSON.parse(recordValue) as object; + } catch (error) { + return recordValue; + } +} diff --git a/src/storage/storageKeyFormat.ts b/src/storage/storageKeyFormat.ts new file mode 100644 index 0000000..395ee7d --- /dev/null +++ b/src/storage/storageKeyFormat.ts @@ -0,0 +1,3 @@ +export function storageKeyFormat(param: string) { + return `kpverseSharer${param}`; +} diff --git a/src/storage/update.ts b/src/storage/update.ts new file mode 100644 index 0000000..a8a71d3 --- /dev/null +++ b/src/storage/update.ts @@ -0,0 +1,3 @@ +import { __storageCreate } from "./create"; + +export { __storageCreate as __storageUpdate }; diff --git a/src/style.scss b/src/style.scss new file mode 100644 index 0000000..ae5b68f --- /dev/null +++ b/src/style.scss @@ -0,0 +1,20 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap"); +@import "./components/button/style"; +@import "./components/root/style"; + +body { + margin: 0; + + &.sharer-is-open { + overflow: hidden; + } + + @include sharerButton(); + @include kpverseSharer(); +} + +@media (max-width: 434px) { + body { + @include kpverseSharerMaxWidth434px(); + } +} diff --git a/src/style.ts b/src/style.ts new file mode 100644 index 0000000..448cac7 --- /dev/null +++ b/src/style.ts @@ -0,0 +1 @@ +export default `@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap";body{margin:0}body.sharer-is-open{overflow:hidden}body #kpverse-sharer-button{border-radius:23%;width:48px;height:48px;transition:all .4s;position:fixed;bottom:20px;right:20px;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000,0 0 0 1px #0000}body #kpverse-sharer-button.hide{width:32px;height:32px;bottom:-32px;right:28px}body #kpverse-sharer-button #sharer-icon-svg .icon-bg{fill:var(--sharer-dc-secondaryContainer);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-fg{fill:var(--sharer-dc-onSecondaryContainer);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-border{fill:rgba(var(--sharer-dc-onSecondaryContainer-rgb),16%);transition:all .4s}body #kpverse-sharer-button #sharer-icon-svg .icon-stroke{stroke:rgba(var(--sharer-dc-onSecondaryContainer-rgb),16%);transition:all .4s}body #kpverse-sharer-button.sharer-icon-hover{cursor:none;width:56px;height:56px;bottom:16px;right:16px;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000008f,0 0 0 1px #0000}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-bg{fill:var(--sharer-dc-primaryContainer)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-fg{fill:var(--sharer-dc-onPrimaryContainer)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-border{fill:rgba(var(--sharer-dc-onPrimaryContainer-rgb),24%)}body #kpverse-sharer-button.sharer-icon-hover #sharer-icon-svg .icon-stroke{stroke:rgba(var(--sharer-dc-onPrimaryContainer-rgb),32%)}body #kpverse-sharer{opacity:1;box-sizing:content-box;backdrop-filter:blur(6px);background-color:#00000052;flex-direction:row;justify-content:space-around;align-items:center;width:100vw;height:100vh;font-family:Inter,sans-serif;transition:opacity .4s;display:flex;position:fixed}body #kpverse-sharer.hide{opacity:0}body #kpverse-sharer *{box-sizing:content-box}body #kpverse-sharer .sharer-window{background-color:var(--sharer-dc-background);-ms-overflow-style:none;scrollbar-width:none;border-radius:16.9px;flex-direction:column;align-items:center;width:100%;max-width:414px;max-height:calc(100% - 20px);display:flex;overflow:auto;box-shadow:inset 0 1px #0000,0 22px 70px 4px #0000008f,0 0 0 1px #00000014}body #kpverse-sharer .sharer-window::-webkit-scrollbar{display:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component{background-color:var(--sharer-dc-background);width:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr{width:calc(100% - 20px)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr{aspect-ratio:1;-ms-overflow-style:none;scrollbar-width:none;border-radius:6.9px;margin:10px 10px 0;overflow:auto}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr::-webkit-scrollbar{display:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item{border-bottom:1px solid rgba(var(--sharer-dc-secondaryContainer-rgb),32%);justify-content:space-between;align-items:center;width:calc(100% - 20px);height:30px;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item:last-child{border-bottom:none}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-icon-container{aspect-ratio:1;background-color:rgba(var(--sharer-dc-onSecondaryContainer-rgb),8%);border-radius:23%;height:calc(100% - 2px);padding:1px}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-icon-container .applist-item-icon-image{border-radius:23%;width:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-name{color:var(--sharer-dc-onBackground);white-space:nowrap;text-overflow:ellipsis;width:calc(100% - 120px);font-size:18px;font-weight:500;overflow:hidden!important}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-name:hover{cursor:default}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon{aspect-ratio:1;border-radius:23%;height:100%}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon:hover,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon:hover{cursor:pointer;background-color:var(--sharer-dc-secondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon:hover .applist-btns-icon-svg path,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon:hover .applist-btns-icon-svg path{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-qr-icon .applist-btns-icon-svg path,body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item .applist-item-open-icon .applist-btns-icon-svg path{fill:rgba(var(--sharer-dc-onSecondaryContainer-rgb),32%)}body #kpverse-sharer .sharer-window #sharer-downloadable-component #sharer-applist-n-qr .applist-item:hover{background-color:rgba(var(--sharer-dc-secondaryContainer-rgb),32%)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container{flex-direction:column;justify-content:space-around;align-items:center;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg{width:calc(100% - 20px);max-width:195px}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .svg-fonts{fill:var(--sharer-dc-onBackground)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .sharer-logo-bg{fill:var(--sharer-dc-secondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg .sharer-logo-fg{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-downloadable-component .powered-by-sharer-container #powered-by-sharer-svg:hover{cursor:pointer}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container{flex-direction:row;justify-content:space-between;align-items:center;width:calc(100% - 20px);height:30px;padding:10px;display:flex}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner,body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center{background-color:var(--sharer-dc-secondaryContainer);border:none;border-radius:6.9px;flex-direction:column;justify-content:space-around;align-items:center;height:100%;padding:0;display:flex}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner:hover,body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center:hover{cursor:pointer}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner{aspect-ratio:1}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container .sharer-cntrl-btn-corner .icon-svg path{fill:var(--sharer-dc-onSecondaryContainer)}body #kpverse-sharer .sharer-window #sharer-cntrl-btns-container #sharer-cntrl-btn-center{color:var(--sharer-dc-onSecondaryContainer);white-space:nowrap;text-overflow:ellipsis;width:calc(100% - 88px);height:calc(100% - 8px);padding:4px;font-size:18px;overflow:hidden!important}@media (width<=434px){body #kpverse-sharer{align-items:end}body #kpverse-sharer .sharer-window{border-bottom-right-radius:0;border-bottom-left-radius:0;max-width:100%;box-shadow:inset 0 1px #0000,0 -22px 70px 4px #00000047,0 0 0 1px #00000014}}`; diff --git a/src/svgs/applist-icon.ts b/src/svgs/applist-icon.ts new file mode 100644 index 0000000..214a070 --- /dev/null +++ b/src/svgs/applist-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/auto-mode-icon.ts b/src/svgs/auto-mode-icon.ts new file mode 100644 index 0000000..5130aea --- /dev/null +++ b/src/svgs/auto-mode-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/close-icon.ts b/src/svgs/close-icon.ts new file mode 100644 index 0000000..a1e7364 --- /dev/null +++ b/src/svgs/close-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/dark-mode-icon.ts b/src/svgs/dark-mode-icon.ts new file mode 100644 index 0000000..1da1155 --- /dev/null +++ b/src/svgs/dark-mode-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/light-mode-icon.ts b/src/svgs/light-mode-icon.ts new file mode 100644 index 0000000..ed1d129 --- /dev/null +++ b/src/svgs/light-mode-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/open-link-icon.ts b/src/svgs/open-link-icon.ts new file mode 100644 index 0000000..810c2ea --- /dev/null +++ b/src/svgs/open-link-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/powered-by-sharer.ts b/src/svgs/powered-by-sharer.ts new file mode 100644 index 0000000..f724452 --- /dev/null +++ b/src/svgs/powered-by-sharer.ts @@ -0,0 +1 @@ +export default ` Sharer from KPVERSE `; diff --git a/src/svgs/qr-icon.ts b/src/svgs/qr-icon.ts new file mode 100644 index 0000000..120ab07 --- /dev/null +++ b/src/svgs/qr-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/svgs/sharer-icon.ts b/src/svgs/sharer-icon.ts new file mode 100644 index 0000000..b953d63 --- /dev/null +++ b/src/svgs/sharer-icon.ts @@ -0,0 +1 @@ +export default ` `; diff --git a/src/variables/color.ts b/src/variables/color.ts new file mode 100644 index 0000000..feb7b55 --- /dev/null +++ b/src/variables/color.ts @@ -0,0 +1,31 @@ +import { closeSharer } from "../operations/closeSharer"; +import { openSharer } from "../operations/openSharer"; +import { updateRecord } from "../storage/main"; +import { sharerDynamicColors } from "./main"; + +/** + * Sets Sharer color. + * + * @param {string | undefined} newColor - The new color value. + * @returns {object} An object containing open and close functions. + * @property {function} open - The function to open the Sharer. + * @property {function} close - The function to close the Sharer. + */ +export function setColor(newColor?: string): object { + const output = { + open: openSharer, + close: closeSharer, + }; + + if (sharerDynamicColors) { + try { + sharerDynamicColors.setColor(newColor || "#2596D1"); + } catch (error) { + console.warn(error); + } + + updateRecord("Color", newColor || "#2596D1"); + } else console.warn(`"sharerDynamicColors" is not defined.`); + + return output; +} diff --git a/src/variables/main.ts b/src/variables/main.ts new file mode 100644 index 0000000..5ab9901 --- /dev/null +++ b/src/variables/main.ts @@ -0,0 +1,71 @@ +import { render } from "@patelka2211/dominar"; +import { DynamicColorsType, create, getInstanceByName } from "dynamic-colors"; +import { sharerControlButtonLeftElement } from "../elements/sharerControlButtonLeft"; +import { formatURL } from "../helper/formatURL"; +import { currentThemeIcon } from "../helper/getCurrentThemeIcon"; +import { isSharerOpen } from "../operations/main"; +import { basicDecrypt } from "../storage/basicDecrypt"; +import { readRecord, createRecord } from "../storage/main"; +import { storageKeyFormat } from "../storage/storageKeyFormat"; + +export let share_url: URL | undefined = undefined; + +export function setShareURL(newURL: string | undefined) { + if (newURL !== undefined) + try { + let temp_url = formatURL(newURL); + if (temp_url !== undefined) share_url = temp_url; + else share_url = new URL(location.href); + } catch (error) { + console.log(error); + share_url = new URL(location.href); + } + else share_url = newURL; +} + +export let share_text: string | undefined = undefined; + +export function setShareText(newText: string | undefined) { + share_text = newText; +} + +export let sharerDynamicColors: DynamicColorsType | undefined = undefined; + +let color = readRecord("Color"); +if (typeof color !== "string") { + color = "#2596D1"; + createRecord("Color", color); +} + +try { + sharerDynamicColors = create("sharer", color); +} catch (error) { + sharerDynamicColors = getInstanceByName("sharer"); + sharerDynamicColors?.setColor(color); +} + +sharerDynamicColors?.restrictRemove(); + +currentThemeIcon(true); + +addEventListener("storage", (ev) => { + ev.preventDefault(); + if (ev.key === storageKeyFormat("Color")) { + let { newValue } = ev; + if (newValue) + try { + sharerDynamicColors?.setColor(basicDecrypt(newValue)); + } catch (error) { + console.log(error); + } + } else if (ev.key === storageKeyFormat("Theme")) { + let { newValue } = ev; + if (newValue) { + let themeIcon = currentThemeIcon(true); + if (isSharerOpen) { + let button = sharerControlButtonLeftElement(); + if (button) render(button, themeIcon); + } + } + } +}); diff --git a/svgs/fb-icon.svg b/svgs/fb-icon.svg new file mode 100644 index 0000000..199eedb --- /dev/null +++ b/svgs/fb-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/gml-icon.svg b/svgs/gml-icon.svg new file mode 100644 index 0000000..03e4610 --- /dev/null +++ b/svgs/gml-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/koo-icon.svg b/svgs/koo-icon.svg new file mode 100644 index 0000000..153944b --- /dev/null +++ b/svgs/koo-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/lnkdn-icon.svg b/svgs/lnkdn-icon.svg new file mode 100644 index 0000000..c4c1ce2 --- /dev/null +++ b/svgs/lnkdn-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/mstdn-icon.svg b/svgs/mstdn-icon.svg new file mode 100644 index 0000000..69407df --- /dev/null +++ b/svgs/mstdn-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/pntrst-icon.svg b/svgs/pntrst-icon.svg new file mode 100644 index 0000000..ca8321c --- /dev/null +++ b/svgs/pntrst-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/rdt-icon.svg b/svgs/rdt-icon.svg new file mode 100644 index 0000000..e89df3c --- /dev/null +++ b/svgs/rdt-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/snpcht-icon.svg b/svgs/snpcht-icon.svg new file mode 100644 index 0000000..ac75825 --- /dev/null +++ b/svgs/snpcht-icon.svg @@ -0,0 +1 @@ + diff --git a/svgs/tg-icon.svg b/svgs/tg-icon.svg new file mode 100644 index 0000000..4bd4df1 --- /dev/null +++ b/svgs/tg-icon.svg @@ -0,0 +1 @@ + diff --git a/svgs/wa-icon.svg b/svgs/wa-icon.svg new file mode 100644 index 0000000..131c514 --- /dev/null +++ b/svgs/wa-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/svgs/x-icon.svg b/svgs/x-icon.svg new file mode 100644 index 0000000..14a5070 --- /dev/null +++ b/svgs/x-icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b72b436..32ce3d8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,14 +1,14 @@ { "compilerOptions": { - "target": "es2016", - "module": "ES2015", + "target": "ES5", + "lib": ["ES2021", "DOM"], + "module": "ESNext", "rootDir": "./src", - "outDir": "./dist", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, + "allowJs": true, + "outDir": "./lib", "strict": true, - "skipLibCheck": true, - "allowJs": true + "moduleResolution": "Bundler" }, - "include": ["src"] + "include": ["src"], + "exclude": ["node_modules", "test"] } diff --git a/utility.js b/utility.js new file mode 100644 index 0000000..d5e4cc3 --- /dev/null +++ b/utility.js @@ -0,0 +1 @@ +!function(){var e=function(e){return"Sharer utility script tag doesn't have ".concat(e,".")},t="sharer-utility-js";if(window.Sharer)if(document.body){var r=document.getElementById(t);if(r)r.classList.forEach((function(e){if("activate-button"===e)try{window.Sharer.button.activate()}catch(e){console.warn(e)}else if(0===e.indexOf("set-color-")){var t=e.replace("set-color-","#");try{window.Sharer.setColor(t)}catch(e){console.warn(e)}}}));else console.warn(e('id="'.concat(t,'"')))}else console.warn(e('"defer" attribute'));else console.warn("Sharer is not defined. Get it today from https://kpverse.in/sharer/.")}(); \ No newline at end of file diff --git a/utility.ts b/utility.ts new file mode 100644 index 0000000..70a6f35 --- /dev/null +++ b/utility.ts @@ -0,0 +1,44 @@ +(function () { + const SHARER_UTILITY_PROBLEM_FORMAT = function (problem: string) { + return `Sharer utility script tag doesn't have ${problem}.`; + }, + SHARER_NOT_DEFINED = + "Sharer is not defined. Get it today from https://kpverse.in/sharer/.", + SCRIPT_TAG_ID = "sharer-utility-js"; + + if (!(window as any).Sharer) { + console.warn(SHARER_NOT_DEFINED); + return; + } + + if (!document.body) { + console.warn(SHARER_UTILITY_PROBLEM_FORMAT(`"defer" attribute`)); + return; + } + + let script = document.getElementById(SCRIPT_TAG_ID); + + if (!script) { + console.warn(SHARER_UTILITY_PROBLEM_FORMAT(`id="${SCRIPT_TAG_ID}"`)); + return; + } + + let classesList = script.classList; + + classesList.forEach(function (className) { + if (className === "activate-button") { + try { + (window as any).Sharer.button.activate(); + } catch (error) { + console.warn(error); + } + } else if (className.indexOf("set-color-") === 0) { + let color = className.replace("set-color-", "#"); + try { + (window as any).Sharer.setColor(color); + } catch (error) { + console.warn(error); + } + } + }); +})(); diff --git a/website-stuff/script.js b/website-stuff/script.js deleted file mode 100644 index 55bd33c..0000000 --- a/website-stuff/script.js +++ /dev/null @@ -1,27 +0,0 @@ -window.addEventListener("load", () => { - document.getElementById(`${"iife"}-copy-btn`).onclick = function () { - (async (element) => { - element.select(); - try { - await navigator.clipboard.writeText(element.value); - this.innerHTML = ` `; - setTimeout(() => { - this.innerHTML = ` `; - }, 1600); - } catch (error) { - alert(`Failed to copy: ${error}`); - } - })(document.getElementById(`${"iife"}-url-input`)); - }; - ((element) => { - element.addEventListener( - "keyup", - ((temporary_function) => { - temporary_function(); - return temporary_function; - })(function () { - element.value = ``; - }) - ); - })(document.getElementById(`${"iife"}-url-input`)); -}); diff --git a/website-stuff/style.css b/website-stuff/style.css deleted file mode 100644 index 3e8ee70..0000000 --- a/website-stuff/style.css +++ /dev/null @@ -1 +0,0 @@ -@import"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap";body{font-family:"Inter",sans-serif;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:space-around;min-width:100vw;min-height:100vh}body #main-container{width:80%;max-width:460px;padding:20px;display:flex;flex-direction:column;align-items:center}body #main-container #icon-n-title{display:flex;align-items:center;margin-bottom:24px}body #main-container #icon-n-title #sharer-icon{width:48px;aspect-ratio:1;box-shadow:0 8px 32px 0 rgba(89,0,255,.16);border-radius:12px;margin-right:16px}body #main-container #icon-n-title #sharer-title{margin:0;padding:0;font-size:32px;font-weight:600;text-align:center}body #main-container #sharer-preview-img{width:84%;margin-bottom:32px}body #main-container #sharer-description{margin:0;margin-bottom:16px;padding:0;color:#5f5f5f;text-align:center}body #main-container #notion-link{margin:0;padding:0;text-align:center;color:#5900ff;margin-bottom:16px;text-decoration:none}body #main-container .js-files{width:calc(100% - 20px);margin-bottom:10px;padding:10px;display:flex;flex-direction:column;align-items:center;border-radius:16px;background-color:#f6f6f6}body #main-container .js-files .file-info{margin:0;text-align:center}body #main-container .js-files .file-info .highlight{text-decoration:none;color:#5900ff}body #main-container .js-files .content-for-copy{width:100%;display:flex;margin-top:10px;flex-direction:row;align-items:center}body #main-container .js-files .content-for-copy .file-location{border:none;width:calc(100% - 32px);height:15px;outline:0;padding:0;border-radius:0;border-bottom-left-radius:8px;border-top-left-radius:8px;color:#5900ff;font-size:18px;border:1px solid rgba(89,0,255,.08);padding:6px}body #main-container .js-files .content-for-copy .file-location:focus{border:1px solid rgba(89,0,255,.32)}body #main-container .js-files .content-for-copy .copy-btn{padding:0;border:none;width:30px;aspect-ratio:1;background-color:rgba(89,0,255,.08);border-radius:0;border-top-right-radius:8px;border-bottom-right-radius:8px;display:flex;flex-direction:column;align-items:center;justify-content:space-around}body #main-container .js-files .content-for-copy .copy-btn:hover{cursor:pointer}body #main-container #sharer-in-action{width:100%;height:50px;font-size:20px;margin-bottom:16px;border:none;border-radius:16px;background-color:rgba(89,0,255,.08);color:#5900ff;font-weight:500}body #main-container #sharer-in-action:hover{cursor:pointer}body #main-container #special-thanks{margin:0;padding:0;margin-bottom:16px;text-align:center;color:#8d8d8d}body #main-container #special-thanks .highlight{color:#5900ff;text-decoration:none}body #main-container #developer-credits{display:flex;flex-direction:row;align-items:center;text-decoration:none}body #main-container #developer-credits #kp-img{width:30px;aspect-ratio:1;margin-right:8px;border-radius:15px}body #main-container #developer-credits #developed-by-kp{color:#8d8d8d;margin:0;padding:0;text-align:center} \ No newline at end of file diff --git a/website-stuff/style.scss b/website-stuff/style.scss deleted file mode 100644 index 9293019..0000000 --- a/website-stuff/style.scss +++ /dev/null @@ -1,178 +0,0 @@ -@import "https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"; -body { - font-family: "Inter", sans-serif; - margin: 0; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - min-width: 100vw; - min-height: 100vh; - - #main-container { - width: 80%; - max-width: 460px; - padding: 20px; - display: flex; - flex-direction: column; - align-items: center; - - #icon-n-title { - display: flex; - align-items: center; - margin-bottom: 24px; - #sharer-icon { - width: 48px; - aspect-ratio: 1; - box-shadow: 0 8px 32px 0 rgba(89, 0, 255, 0.16); - border-radius: 12px; - margin-right: 16px; - } - #sharer-title { - margin: 0; - padding: 0; - font-size: 32px; - font-weight: 600; - text-align: center; - } - } - - #sharer-preview-img { - width: 84%; - margin-bottom: 32px; - } - - #sharer-description { - margin: 0; - margin-bottom: 16px; - padding: 0; - color: #5f5f5f; - text-align: center; - } - - #notion-link { - margin: 0; - padding: 0; - text-align: center; - color: #5900ff; - margin-bottom: 16px; - text-decoration: none; - } - - .js-files { - width: calc(100% - 20px); - margin-bottom: 10px; - padding: 10px; - display: flex; - flex-direction: column; - align-items: center; - border-radius: 16px; - background-color: #f6f6f6; - - .file-info { - margin: 0; - text-align: center; - .highlight { - text-decoration: none; - color: #5900ff; - } - } - - .content-for-copy { - width: 100%; - display: flex; - margin-top: 10px; - flex-direction: row; - align-items: center; - - .file-location { - border: none; - width: calc(100% - 32px); - height: 15px; - outline: 0; - padding: 0; - border-radius: 0; - border-bottom-left-radius: 8px; - border-top-left-radius: 8px; - color: rgba(89, 0, 255); - font-size: 18px; - border: 1px solid rgba(89, 0, 255, 0.08); - padding: 6px; - - &:focus { - border: 1px solid rgba(89, 0, 255, 0.32); - } - } - - .copy-btn { - padding: 0; - border: none; - width: 30px; - aspect-ratio: 1; - background-color: rgba(89, 0, 255, 0.08); - border-radius: 0; - border-top-right-radius: 8px; - border-bottom-right-radius: 8px; - display: flex; - flex-direction: column; - align-items: center; - justify-content: space-around; - - &:hover { - cursor: pointer; - } - } - } - } - - #sharer-in-action { - width: 100%; - height: 50px; - font-size: 20px; - margin-bottom: 16px; - border: none; - border-radius: 16px; - background-color: rgba(89, 0, 255, 0.08); - color: #5900ff; - font-weight: 500; - - &:hover { - cursor: pointer; - } - } - - #special-thanks { - margin: 0; - padding: 0; - margin-bottom: 16px; - text-align: center; - color: #8d8d8d; - - .highlight { - color: #5900ff; - text-decoration: none; - } - } - - #developer-credits { - display: flex; - flex-direction: row; - align-items: center; - text-decoration: none; - - #kp-img { - width: 30px; - aspect-ratio: 1; - margin-right: 8px; - border-radius: 15px; - } - - #developed-by-kp { - color: #8d8d8d; - margin: 0; - padding: 0; - text-align: center; - } - } - } -}