diff --git a/.gitattributes b/.gitattributes index cc4f7d5..e9b9e29 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ -packs/** binary \ No newline at end of file +packs/** binary +node_modules/ diff --git a/README.md b/README.md index 005d16c..7b16d84 100644 --- a/README.md +++ b/README.md @@ -1 +1,14 @@ # Vermine 2047 System + + +##TODO + +- [ ] envoyer les spécialités utilisables au rollDialog +- [X] refacto des template chat de roll +- [X] gérer les dés de totems humains et adapté : couleur différente/double succès +update actor +- [X] gérer les rerolls depuis chat(cf noc) +- [X] gérer les rerolls après le jet en fonction du score d'effort et de la carac +- [ ] repasser sur les différents itemTypes et sheets +- [ ] update des reserves de sang-froids lors de jets +- [ ] gérer les rolls d'items +- [ ] ajout des domaines de prédilections \ No newline at end of file diff --git a/assets/images/archives/2-removebg-preview.png b/assets/images/archives/2-removebg-preview.png deleted file mode 100644 index aeb45c5..0000000 Binary files a/assets/images/archives/2-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png b/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png deleted file mode 100644 index 143e7f5..0000000 Binary files a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395034_copie-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png b/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png deleted file mode 100644 index 0aa433f..0000000 Binary files a/assets/images/archives/2047_KitDeSurvie_WIP_01-90_1-90_1476395041_copie-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334-removebg-preview.png b/assets/images/archives/2334-removebg-preview.png deleted file mode 100644 index c6302c8..0000000 Binary files a/assets/images/archives/2334-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/233456-removebg-preview.png b/assets/images/archives/233456-removebg-preview.png deleted file mode 100644 index a3c9e08..0000000 Binary files a/assets/images/archives/233456-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334567-removebg-preview.png b/assets/images/archives/2334567-removebg-preview.png deleted file mode 100644 index c4a30fa..0000000 Binary files a/assets/images/archives/2334567-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/23345678-removebg-preview.png b/assets/images/archives/23345678-removebg-preview.png deleted file mode 100644 index 51640eb..0000000 Binary files a/assets/images/archives/23345678-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/233456789-removebg-preview.png b/assets/images/archives/233456789-removebg-preview.png deleted file mode 100644 index 1b07920..0000000 Binary files a/assets/images/archives/233456789-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/2334567891-removebg-preview.png b/assets/images/archives/2334567891-removebg-preview.png deleted file mode 100644 index 02fe95d..0000000 Binary files a/assets/images/archives/2334567891-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/COMP_RARETER-removebg-preview.png b/assets/images/archives/COMP_RARETER-removebg-preview.png deleted file mode 100644 index cad31fd..0000000 Binary files a/assets/images/archives/COMP_RARETER-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/CONFIDENTIEL-removebg-preview.png b/assets/images/archives/CONFIDENTIEL-removebg-preview.png deleted file mode 100644 index f88ca6e..0000000 Binary files a/assets/images/archives/CONFIDENTIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/DIFF-removebg-preview.png b/assets/images/archives/DIFF-removebg-preview.png deleted file mode 100644 index 7f56f27..0000000 Binary files a/assets/images/archives/DIFF-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png b/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png deleted file mode 100644 index f866a90..0000000 Binary files a/assets/images/archives/DOMMAGES__MATERIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/IMPORTANTS.png b/assets/images/archives/IMPORTANTS.png deleted file mode 100644 index b78415a..0000000 Binary files a/assets/images/archives/IMPORTANTS.png and /dev/null differ diff --git a/assets/images/archives/INSTINCT.png b/assets/images/archives/INSTINCT.png deleted file mode 100644 index a5442f5..0000000 Binary files a/assets/images/archives/INSTINCT.png and /dev/null differ diff --git a/assets/images/archives/LES REUSSITES.png b/assets/images/archives/LES REUSSITES.png deleted file mode 100644 index e6b1afd..0000000 Binary files a/assets/images/archives/LES REUSSITES.png and /dev/null differ diff --git a/assets/images/archives/MATERIEL-removebg-preview.png b/assets/images/archives/MATERIEL-removebg-preview.png deleted file mode 100644 index 97dae9a..0000000 Binary files a/assets/images/archives/MATERIEL-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/OBJECTIFS.png b/assets/images/archives/OBJECTIFS.png deleted file mode 100644 index f5d6344..0000000 Binary files a/assets/images/archives/OBJECTIFS.png and /dev/null differ diff --git a/assets/images/archives/REACTION-removebg-preview.png b/assets/images/archives/REACTION-removebg-preview.png deleted file mode 100644 index 099d4e9..0000000 Binary files a/assets/images/archives/REACTION-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/RESERVES_EPUISER-removebg-preview.png b/assets/images/archives/RESERVES_EPUISER-removebg-preview.png deleted file mode 100644 index 14962ca..0000000 Binary files a/assets/images/archives/RESERVES_EPUISER-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/Sans_titre23-removebg-preview.png b/assets/images/archives/Sans_titre23-removebg-preview.png deleted file mode 100644 index a12e576..0000000 Binary files a/assets/images/archives/Sans_titre23-removebg-preview.png and /dev/null differ diff --git a/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg b/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg deleted file mode 100644 index ad7cf06..0000000 Binary files a/assets/images/archives/vermine2047_logo_jdr_roleplayinggame_02.jpg and /dev/null differ diff --git a/assets/images/archives/vide-removebg-preview.png b/assets/images/archives/vide-removebg-preview.png deleted file mode 100644 index 6707f1f..0000000 Binary files a/assets/images/archives/vide-removebg-preview.png and /dev/null differ diff --git a/css/style.css b/css/style.css deleted file mode 100644 index 3a9bb09..0000000 --- a/css/style.css +++ /dev/null @@ -1,458 +0,0 @@ -@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"); -/* Global styles */ -.window-app { - font-family: "Roboto", sans-serif; -} - -.rollable:hover, .rollable:focus { - color: #000; - text-shadow: 0 0 10px red; - cursor: pointer; -} - -.grid, -.grid-2col { - display: grid; - grid-column: span 2/span 2; - grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 10px; - margin: 10px 0; - padding: 0; -} - -.grid-3col { - grid-column: span 3/span 3; - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.grid-4col { - grid-column: span 4/span 4; - grid-template-columns: repeat(4, minmax(0, 1fr)); -} - -.grid-5col { - grid-column: span 5/span 5; - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.grid-6col { - grid-column: span 6/span 6; - grid-template-columns: repeat(6, minmax(0, 1fr)); -} - -.grid-7col { - grid-column: span 7/span 7; - grid-template-columns: repeat(7, minmax(0, 1fr)); -} - -.grid-8col { - grid-column: span 8/span 8; - grid-template-columns: repeat(8, minmax(0, 1fr)); -} - -.grid-9col { - grid-column: span 9/span 9; - grid-template-columns: repeat(9, minmax(0, 1fr)); -} - -.grid-10col { - grid-column: span 10/span 10; - grid-template-columns: repeat(10, minmax(0, 1fr)); -} - -.grid-11col { - grid-column: span 11/span 11; - grid-template-columns: repeat(11, minmax(0, 1fr)); -} - -.grid-12col { - grid-column: span 12/span 12; - grid-template-columns: repeat(12, minmax(0, 1fr)); -} - -.grid-start-2 { - grid-column-start: 2; -} - -.grid-start-3 { - grid-column-start: 3; -} - -.grid-start-4 { - grid-column-start: 4; -} - -.grid-start-5 { - grid-column-start: 5; -} - -.grid-start-6 { - grid-column-start: 6; -} - -.grid-start-7 { - grid-column-start: 7; -} - -.grid-start-8 { - grid-column-start: 8; -} - -.grid-start-9 { - grid-column-start: 9; -} - -.grid-start-10 { - grid-column-start: 10; -} - -.grid-start-11 { - grid-column-start: 11; -} - -.grid-start-12 { - grid-column-start: 12; -} - -.grid-span-2 { - grid-column-end: span 2; -} - -.grid-span-3 { - grid-column-end: span 3; -} - -.grid-span-4 { - grid-column-end: span 4; -} - -.grid-span-5 { - grid-column-end: span 5; -} - -.grid-span-6 { - grid-column-end: span 6; -} - -.grid-span-7 { - grid-column-end: span 7; -} - -.grid-span-8 { - grid-column-end: span 8; -} - -.grid-span-9 { - grid-column-end: span 9; -} - -.grid-span-10 { - grid-column-end: span 10; -} - -.grid-span-11 { - grid-column-end: span 11; -} - -.grid-span-12 { - grid-column-end: span 12; -} - -.flex-group-center, -.flex-group-left, -.flex-group-right { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - text-align: center; -} - -.flex-group-left { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - text-align: left; -} - -.flex-group-right { - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - text-align: right; -} - -.flex-align-left { - align-items: flex-start; -} - -.flex-align-right { - align-items: flex-end; -} - -.gap-xs { gap: 2px; } -.gap-sm { gap: 4px; } -.gap-md { gap: 8px; } -.gap-lg { gap: 16px; } - -.flexshrink { - -webkit-box-flex: 0; - -ms-flex: 0; - flex: 0; -} - -.flex-between { - -webkit-box-pack: justify; - -ms-flex-pack: justify; - justify-content: space-between; -} - -.flexlarge { - -webkit-box-flex: 2; - -ms-flex: 2; - flex: 2; -} - -.align-left { - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - text-align: left; -} - -.align-right { - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; - text-align: right; -} - -.align-center { - -webkit-box-pack: center; - -ms-flex-pack: center; - justify-content: center; - text-align: center; -} - -/* Styles limited to vermine2047 sheets */ -.system-vermine2047 { - /* ----------------------------------------- */ - /* Items Lists */ - /* ----------------------------------------- */ - /* Example style for Vermine 2047 (can be removed if not needed) */ -} -.system-vermine2047 .item-form { - font-family: "Roboto", sans-serif; -} -.system-vermine2047 .sheet-header { - -webkit-box-flex: 0; - -ms-flex: 0 auto; - flex: 0 auto; - overflow: hidden; - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-orient: horizontal; - -webkit-box-direction: normal; - -ms-flex-direction: row; - flex-direction: row; - -ms-flex-wrap: wrap; - flex-wrap: wrap; - -webkit-box-pack: start; - -ms-flex-pack: start; - justify-content: flex-start; - margin-bottom: 10px; -} -.system-vermine2047 .sheet-header .profile-img { - -webkit-box-flex: 0; - -ms-flex: 0 0 100px; - flex: 0 0 100px; - height: 100px; - margin-right: 10px; -} -.system-vermine2047 .sheet-header .header-fields { - -webkit-box-flex: 1; - -ms-flex: 1; - flex: 1; -} -.system-vermine2047 .sheet-header h1.charname { - height: 50px; - padding: 0px; - margin: 5px 0; - border-bottom: 0; -} -.system-vermine2047 .sheet-header h1.charname input { - width: 100%; - height: 100%; - margin: 0; -} -.system-vermine2047 .sheet-tabs { - -webkit-box-flex: 0; - -ms-flex: 0; - flex: 0; -} -.system-vermine2047 .sheet-body, -.system-vermine2047 .sheet-body .tab, -.system-vermine2047 .sheet-body .tab .editor { - height: 100%; - -} -.system-vermine2047 .sheet-body .editor { - min-height:75px; - margin-bottom:1rem; -} - -.system-vermine2047 editor:hover .editor-edit { - display: block; -} -.system-vermine2047 .tox { - min-height:25vh; -} -.system-vermine2047 .tox .tox-editor-container { - background: #fff; -} -.system-vermine2047 .tox .tox-edit-area { - padding: 0 8px; -} -.system-vermine2047 .resource-label { - font-weight: bold; -} -.system-vermine2047 .items-header { - height: 28px; - margin: 2px 0; - padding: 0; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - background: rgba(0, 0, 0, 0.05); - border: 2px groove #eeede0; - font-weight: bold; -} -.system-vermine2047 .items-header > * { - font-size: 14px; - text-align: center; -} -.system-vermine2047 .items-header .item-name { - font-weight: bold; - padding-left: 5px; - text-align: left; - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.system-vermine2047 .items-list { - list-style: none; - margin: 0; - padding: 0; - overflow-y: auto; - scrollbar-width: thin; - color: #444; -} -.system-vermine2047 .items-list .item-list { - list-style: none; - margin: 0; - padding: 0; -} - -.system-vermine2047 .items-list .item-name { - -webkit-box-flex: 2; - -ms-flex: 2; - flex: 2; - margin: 0; - overflow: hidden; - font-size: 13px; - text-align: left; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - display: -webkit-box; - display: -ms-flexbox; - display: flex; -} -.system-vermine2047 .items-list .item-name h3, .system-vermine2047 .items-list .item-name h4 { - margin: 0; - white-space: nowrap; - overflow-x: hidden; -} -.system-vermine2047 .items-list .item-controls { - display: -webkit-box; - display: -ms-flexbox; - display: flex; - -webkit-box-flex: 0; - -webkit-box-pack: end; - -ms-flex-pack: end; - justify-content: flex-end; -} -.system-vermine2047 .items-list .item-controls a { - font-size: 12px; - text-align: center; - margin: 0 6px; -} -.system-vermine2047 .items-list .item { - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - padding: 0 2px; - border-bottom: 1px solid #c9c7b8; -} -.system-vermine2047 .items-list .item:last-child { - border-bottom: none; -} -.system-vermine2047 .items-list .item .item-name { - color: #191813; -} -.system-vermine2047 .items-list .item .item-name .item-image { - -webkit-box-flex: 0; - -ms-flex: 0 0 30px; - flex: 0 0 30px; - height: 30px; - background-size: 30px; - border: none; - margin-right: 5px; -} -.system-vermine2047 .items-list .item-prop { - text-align: center; - border-left: 1px solid #c9c7b8; - border-right: 1px solid #c9c7b8; - font-size: 12px; -} -.system-vermine2047 .items-list .items-header { - height: 28px; - margin: 2px 0; - padding: 0; - -webkit-box-align: center; - -ms-flex-align: center; - align-items: center; - background: rgba(0, 0, 0, 0.05); - border: 2px groove #eeede0; - font-weight: bold; -} -.system-vermine2047 .items-list .items-header > * { - font-size: 12px; - text-align: center; -} -.system-vermine2047 .items-list .items-header .item-name { - padding-left: 5px; - text-align: left; -} -.system-vermine2047 .item-formula { - -webkit-box-flex: 0; - -ms-flex: 0 0 200px; - flex: 0 0 200px; - padding: 0 8px; -} -.system-vermine2047 .effects .item .effect-source, -.system-vermine2047 .effects .item .effect-duration, -.system-vermine2047 .effects .item .effect-controls { - text-align: center; - border-left: 1px solid #c9c7b8; - border-right: 1px solid #c9c7b8; - font-size: 12px; -} -.system-vermine2047 .effects .item .effect-controls { - border: none; -} - -/*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImJvaWxlcnBsYXRlLnNjc3MiLCJnbG9iYWwvX3dpbmRvdy5zY3NzIiwidXRpbHMvX3R5cG9ncmFwaHkuc2NzcyIsImJvaWxlcnBsYXRlLmNzcyIsImdsb2JhbC9fZ3JpZC5zY3NzIiwiZ2xvYmFsL19mbGV4LnNjc3MiLCJjb21wb25lbnRzL19pdGVtcy5zY3NzIiwiY29tcG9uZW50cy9fZm9ybXMuc2NzcyIsInV0aWxzL19jb2xvcnMuc2NzcyIsImNvbXBvbmVudHMvX3Jlc291cmNlLnNjc3MiLCJ1dGlscy9fdmFyaWFibGVzLnNjc3MiLCJjb21wb25lbnRzL19lZmZlY3RzLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ1Esd0ZBQUE7QUFRUixrQkFBQTtBQ1RBO0VBQ0UsaUNDRGE7QUNJZjs7QUZDRTtFQUVFLFdBQUE7RUFDQSx5QkFBQTtFQUNBLGVBQUE7QUVDSjs7QUNUQTs7RUFFRSxhQUFBO0VBQ0EsMEJBQUE7RUFDQSxnREFBQTtFQUNBLFNBQUE7RUFDQSxjQUFBO0VBQ0EsVUFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsMEJBQUE7RUFDQSxnREFBQTtBRFlGOztBQ1RBO0VBQ0UsNEJBQUE7RUFDQSxpREFBQTtBRFlGOztBQ1RBO0VBQ0UsNEJBQUE7RUFDQSxpREFBQTtBRFlGOztBQ1RBO0VBQ0UsNEJBQUE7RUFDQSxpREFBQTtBRFlGOztBQ1JBO0VBQWdCLG9CQUFBO0FEWWhCOztBQ1hBO0VBQWdCLG9CQUFBO0FEZWhCOztBQ2RBO0VBQWdCLG9CQUFBO0FEa0JoQjs7QUNqQkE7RUFBZ0Isb0JBQUE7QURxQmhCOztBQ3BCQTtFQUFnQixvQkFBQTtBRHdCaEI7O0FDdkJBO0VBQWdCLG9CQUFBO0FEMkJoQjs7QUMxQkE7RUFBZ0Isb0JBQUE7QUQ4QmhCOztBQzdCQTtFQUFnQixvQkFBQTtBRGlDaEI7O0FDaENBO0VBQWlCLHFCQUFBO0FEb0NqQjs7QUNuQ0E7RUFBaUIscUJBQUE7QUR1Q2pCOztBQ3RDQTtFQUFpQixxQkFBQTtBRDBDakI7O0FDeENBO0VBQWUsdUJBQUE7QUQ0Q2Y7O0FDM0NBO0VBQWUsdUJBQUE7QUQrQ2Y7O0FDOUNBO0VBQWUsdUJBQUE7QURrRGY7O0FDakRBO0VBQWUsdUJBQUE7QURxRGY7O0FDcERBO0VBQWUsdUJBQUE7QUR3RGY7O0FDdkRBO0VBQWUsdUJBQUE7QUQyRGY7O0FDMURBO0VBQWUsdUJBQUE7QUQ4RGY7O0FDN0RBO0VBQWUsdUJBQUE7QURpRWY7O0FDaEVBO0VBQWdCLHdCQUFBO0FEb0VoQjs7QUNuRUE7RUFBZ0Isd0JBQUE7QUR1RWhCOztBQ3RFQTtFQUFnQix3QkFBQTtBRDBFaEI7O0FFN0pBOzs7RUFHRSx3QkFBQTtFQUFBLHFCQUFBO0VBQUEsdUJBQUE7RUFDQSx5QkFBQTtFQUFBLHNCQUFBO0VBQUEsbUJBQUE7RUFDQSxrQkFBQTtBRmdLRjs7QUU3SkE7RUFDRSx1QkFBQTtFQUFBLG9CQUFBO0VBQUEsMkJBQUE7RUFDQSxnQkFBQTtBRmdLRjs7QUU3SkE7RUFDRSxxQkFBQTtFQUFBLGtCQUFBO0VBQUEseUJBQUE7RUFDQSxpQkFBQTtBRmdLRjs7QUU3SkE7RUFDRSxtQkFBQTtFQUFBLFdBQUE7RUFBQSxPQUFBO0FGZ0tGOztBRTdKQTtFQUNFLHlCQUFBO0VBQUEsc0JBQUE7RUFBQSw4QkFBQTtBRmdLRjs7QUU3SkE7RUFDRSxtQkFBQTtFQUFBLFdBQUE7RUFBQSxPQUFBO0FGZ0tGOztBRTVKQTtFQUNFLHVCQUFBO0VBQUEsb0JBQUE7RUFBQSwyQkFBQTtFQUNBLGdCQUFBO0FGK0pGOztBRTVKQTtFQUNFLHFCQUFBO0VBQUEsa0JBQUE7RUFBQSx5QkFBQTtFQUNBLGlCQUFBO0FGK0pGOztBRTVKQTtFQUNFLHdCQUFBO0VBQUEscUJBQUE7RUFBQSx1QkFBQTtFQUNBLGtCQUFBO0FGK0pGOztBSDdMQSx5Q0FBQTtBQUNBO0VNT0EsOENBQUE7RUFDQSw4Q0FBQTtFQUNBLDhDQUFBO0VBMkZBLGlFQUFBO0FIZ0dBO0FJbk5BO0VBQ0UsaUNMRGE7QUNzTmY7QUlsTkE7RUFDRSxtQkFBQTtFQUFBLGdCQUFBO0VBQUEsWUFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGFBQUE7RUFDQSw4QkFBQTtFQUFBLDZCQUFBO0VBQUEsdUJBQUE7RUFBQSxtQkFBQTtFQUNBLG1CQUFBO0VBQUEsZUFBQTtFQUNBLHVCQUFBO0VBQUEsb0JBQUE7RUFBQSwyQkFBQTtFQUNBLG1CQUFBO0FKb05GO0FJbE5FO0VBQ0UsbUJBQUE7RUFBQSxtQkFBQTtFQUFBLGVBQUE7RUFDQSxhQUFBO0VBQ0Esa0JBQUE7QUpvTko7QUlqTkU7RUFDRSxtQkFBQTtFQUFBLFdBQUE7RUFBQSxPQUFBO0FKbU5KO0FJaE5FO0VBQ0UsWUFBQTtFQUNBLFlBQUE7RUFDQSxhQUFBO0VBQ0EsZ0JBQUE7QUprTko7QUlqTkk7RUFDRSxXQUFBO0VBQ0EsWUFBQTtFQUNBLFNBQUE7QUptTk47QUk5TUE7RUFDRSxtQkFBQTtFQUFBLFdBQUE7RUFBQSxPQUFBO0FKZ05GO0FJN01BOzs7RUFHRSxZQUFBO0FKK01GO0FJM01FO0VBQ0UsZ0JDaERNO0FMNlBWO0FJMU1FO0VBQ0UsY0FBQTtBSjRNSjtBTWhRQTtFQUNFLGlCQUFBO0FOa1FGO0FHbFFBO0VBQ0UsWUFBQTtFQUNBLGFBQUE7RUFDQSxVQUFBO0VBQ0EseUJBQUE7RUFBQSxzQkFBQTtFQUFBLG1CQUFBO0VBQ0EsK0JBQUE7RUFDQSwwQklIYztFSklkLGlCQUFBO0FIb1FGO0FHblFFO0VBQ0UsZUFBQTtFQUNBLGtCQUFBO0FIcVFKO0FHblFFO0VBQ0UsaUJBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0VBQ0Esb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGFBQUE7QUhxUUo7QUc1UEE7RUFDRSxnQkFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0VBQ0EsZ0JBQUE7RUFDQSxxQkFBQTtFQUNBLFdFMUJNO0FMd1JSO0FHM1BFO0VBQ0UsZ0JBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtBSDZQSjtBR3pQRTtFQUNFLG1CQUFBO0VBQUEsV0FBQTtFQUFBLE9BQUE7RUFDQSxTQUFBO0VBQ0EsZ0JBQUE7RUFDQSxlQUFBO0VBQ0EsZ0JBQUE7RUFDQSx5QkFBQTtFQUFBLHNCQUFBO0VBQUEsbUJBQUE7RUFDQSxvQkFBQTtFQUFBLG9CQUFBO0VBQUEsYUFBQTtBSDJQSjtBRzFQSTtFQUNFLFNBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0FINFBOO0FHdlBFO0VBQ0Usb0JBQUE7RUFBQSxvQkFBQTtFQUFBLGFBQUE7RUFDQSxtQkFBQTtFQUFBLG1CQUFBO0VBQUEsZUFBQTtFQUNBLHFCQUFBO0VBQUEsa0JBQUE7RUFBQSx5QkFBQTtBSHlQSjtBR3hQSTtFQUNFLGVBQUE7RUFDQSxrQkFBQTtFQUNBLGFBQUE7QUgwUE47QUdyUEU7RUFDRSx5QkFBQTtFQUFBLHNCQUFBO0VBQUEsbUJBQUE7RUFDQSxjQUFBO0VBQ0EsZ0NBQUE7QUh1UEo7QUd0UEk7RUFBZSxtQkFBQTtBSHlQbkI7QUd4UEk7RUFDRSxjRXpFRztBTG1VVDtBR3pQTTtFQUNFLG1CQUFBO0VBQUEsa0JBQUE7RUFBQSxjQUFBO0VBQ0EsWUFBQTtFQUNBLHFCQUFBO0VBQ0EsWUFBQTtFQUNBLGlCQUFBO0FIMlBSO0FHdFBFO0VBQ0Usa0JBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZUFBQTtBSHdQSjtBR3BQRTtFQUNFLFlBQUE7RUFDQSxhQUFBO0VBQ0EsVUFBQTtFQUNBLHlCQUFBO0VBQUEsc0JBQUE7RUFBQSxtQkFBQTtFQUNBLCtCQUFBO0VBQ0EsMEJJakdZO0VKa0daLGlCQUFBO0FIc1BKO0FHclBJO0VBQ0UsZUFBQTtFQUNBLGtCQUFBO0FIdVBOO0FHclBJO0VBQ0UsaUJBQUE7RUFDQSxnQkFBQTtBSHVQTjtBR2hQQTtFQUNFLG1CQUFBO0VBQUEsbUJBQUE7RUFBQSxlQUFBO0VBQ0EsY0FBQTtBSGtQRjtBUXZXRTs7O0VBR0Usa0JBQUE7RUFDQSw4QkFBQTtFQUNBLCtCQUFBO0VBQ0EsZUFBQTtBUnlXSjtBUXRXRTtFQUNFLFlBQUE7QVJ3V0oiLCJmaWxlIjoiYm9pbGVycGxhdGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQWRkIGN1c3RvbSBmb250cyBieSB2aXNpdGluZyBhbmQgc2VhcmNoIGh0dHBzOi8vZm9udHMuZ29vZ2xlLmNvbVxuQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzMj9mYW1pbHk9Um9ib3RvOndnaHRANDAwOzcwMCZkaXNwbGF5PXN3YXAnKTtcblxuLy8gSW1wb3J0IHV0aWxpdGllcy5cbkBpbXBvcnQgJ3V0aWxzL3R5cG9ncmFwaHknO1xuQGltcG9ydCAndXRpbHMvY29sb3JzJztcbkBpbXBvcnQgJ3V0aWxzL21peGlucyc7XG5AaW1wb3J0ICd1dGlscy92YXJpYWJsZXMnO1xuXG4vKiBHbG9iYWwgc3R5bGVzICovXG5AaW1wb3J0ICdnbG9iYWwvd2luZG93JztcbkBpbXBvcnQgJ2dsb2JhbC9ncmlkJztcbkBpbXBvcnQgJ2dsb2JhbC9mbGV4JztcblxuLyogU3R5bGVzIGxpbWl0ZWQgdG8gYm9pbGVycGxhdGUgc2hlZXRzICovXG4uYm9pbGVycGxhdGUge1xuICBAaW1wb3J0ICdjb21wb25lbnRzL2Zvcm1zJztcbiAgQGltcG9ydCAnY29tcG9uZW50cy9yZXNvdXJjZSc7XG4gIEBpbXBvcnQgJ2NvbXBvbmVudHMvaXRlbXMnO1xuICBAaW1wb3J0ICdjb21wb25lbnRzL2VmZmVjdHMnO1xufVxuIiwiLndpbmRvdy1hcHAge1xuICBmb250LWZhbWlseTogJGZvbnQtcHJpbWFyeTtcbn1cblxuLnJvbGxhYmxlIHtcbiAgJjpob3ZlcixcbiAgJjpmb2N1cyB7XG4gICAgY29sb3I6ICMwMDA7XG4gICAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4IHJlZDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gIH1cbn0iLCIkZm9udC1wcmltYXJ5OiAnUm9ib3RvJywgc2Fucy1zZXJpZjtcbiRmb250LXNlY29uZGFyeTogJ1JvYm90bycsIHNhbnMtc2VyaWY7IiwiQGltcG9ydCB1cmwoXCJodHRwczovL2ZvbnRzLmdvb2dsZWFwaXMuY29tL2NzczI/ZmFtaWx5PVJvYm90bzp3Z2h0QDQwMDs3MDAmZGlzcGxheT1zd2FwXCIpO1xuLyogR2xvYmFsIHN0eWxlcyAqL1xuLndpbmRvdy1hcHAge1xuICBmb250LWZhbWlseTogXCJSb2JvdG9cIiwgc2Fucy1zZXJpZjtcbn1cblxuLnJvbGxhYmxlOmhvdmVyLCAucm9sbGFibGU6Zm9jdXMge1xuICBjb2xvcjogIzAwMDtcbiAgdGV4dC1zaGFkb3c6IDAgMCAxMHB4IHJlZDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZ3JpZCxcbi5ncmlkLTJjb2wge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWNvbHVtbjogc3BhbiAyL3NwYW4gMjtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xuICBnYXA6IDEwcHg7XG4gIG1hcmdpbjogMTBweCAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4uZ3JpZC0zY29sIHtcbiAgZ3JpZC1jb2x1bW46IHNwYW4gMy9zcGFuIDM7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIG1pbm1heCgwLCAxZnIpKTtcbn1cblxuLmdyaWQtNGNvbCB7XG4gIGdyaWQtY29sdW1uOiBzcGFuIDQvc3BhbiA0O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTVjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA1L3NwYW4gNTtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNSwgbWlubWF4KDAsIDFmcikpO1xufVxuXG4uZ3JpZC02Y29sIHtcbiAgZ3JpZC1jb2x1bW46IHNwYW4gNi9zcGFuIDY7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDYsIG1pbm1heCgwLCAxZnIpKTtcbn1cblxuLmdyaWQtN2NvbCB7XG4gIGdyaWQtY29sdW1uOiBzcGFuIDcvc3BhbiA3O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLThjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA4L3NwYW4gODtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoOCwgbWlubWF4KDAsIDFmcikpO1xufVxuXG4uZ3JpZC05Y29sIHtcbiAgZ3JpZC1jb2x1bW46IHNwYW4gOS9zcGFuIDk7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDksIG1pbm1heCgwLCAxZnIpKTtcbn1cblxuLmdyaWQtMTBjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiAxMC9zcGFuIDEwO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMCwgbWlubWF4KDAsIDFmcikpO1xufVxuXG4uZ3JpZC0xMWNvbCB7XG4gIGdyaWQtY29sdW1uOiBzcGFuIDExL3NwYW4gMTE7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDExLCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTEyY29sIHtcbiAgZ3JpZC1jb2x1bW46IHNwYW4gMTIvc3BhbiAxMjtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTIsIG1pbm1heCgwLCAxZnIpKTtcbn1cblxuLmdyaWQtc3RhcnQtMiB7XG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAyO1xufVxuXG4uZ3JpZC1zdGFydC0zIHtcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDM7XG59XG5cbi5ncmlkLXN0YXJ0LTQge1xuICBncmlkLWNvbHVtbi1zdGFydDogNDtcbn1cblxuLmdyaWQtc3RhcnQtNSB7XG4gIGdyaWQtY29sdW1uLXN0YXJ0OiA1O1xufVxuXG4uZ3JpZC1zdGFydC02IHtcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDY7XG59XG5cbi5ncmlkLXN0YXJ0LTcge1xuICBncmlkLWNvbHVtbi1zdGFydDogNztcbn1cblxuLmdyaWQtc3RhcnQtOCB7XG4gIGdyaWQtY29sdW1uLXN0YXJ0OiA4O1xufVxuXG4uZ3JpZC1zdGFydC05IHtcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDk7XG59XG5cbi5ncmlkLXN0YXJ0LTEwIHtcbiAgZ3JpZC1jb2x1bW4tc3RhcnQ6IDEwO1xufVxuXG4uZ3JpZC1zdGFydC0xMSB7XG4gIGdyaWQtY29sdW1uLXN0YXJ0OiAxMTtcbn1cblxuLmdyaWQtc3RhcnQtMTIge1xuICBncmlkLWNvbHVtbi1zdGFydDogMTI7XG59XG5cbi5ncmlkLXNwYW4tMiB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAyO1xufVxuXG4uZ3JpZC1zcGFuLTMge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gMztcbn1cblxuLmdyaWQtc3Bhbi00IHtcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDQ7XG59XG5cbi5ncmlkLXNwYW4tNSB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA1O1xufVxuXG4uZ3JpZC1zcGFuLTYge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gNjtcbn1cblxuLmdyaWQtc3Bhbi03IHtcbiAgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDc7XG59XG5cbi5ncmlkLXNwYW4tOCB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiA4O1xufVxuXG4uZ3JpZC1zcGFuLTkge1xuICBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gOTtcbn1cblxuLmdyaWQtc3Bhbi0xMCB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxMDtcbn1cblxuLmdyaWQtc3Bhbi0xMSB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxMTtcbn1cblxuLmdyaWQtc3Bhbi0xMiB7XG4gIGdyaWQtY29sdW1uLWVuZDogc3BhbiAxMjtcbn1cblxuLmZsZXgtZ3JvdXAtY2VudGVyLFxuLmZsZXgtZ3JvdXAtbGVmdCxcbi5mbGV4LWdyb3VwLXJpZ2h0IHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmZsZXgtZ3JvdXAtbGVmdCB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmZsZXgtZ3JvdXAtcmlnaHQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLmZsZXhzaHJpbmsge1xuICBmbGV4OiAwO1xufVxuXG4uZmxleC1iZXR3ZWVuIHtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4uZmxleGxhcmdlIHtcbiAgZmxleDogMjtcbn1cblxuLmFsaWduLWxlZnQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5hbGlnbi1yaWdodCB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uYWxpZ24tY2VudGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLyogU3R5bGVzIGxpbWl0ZWQgdG8gYm9pbGVycGxhdGUgc2hlZXRzICovXG4uYm9pbGVycGxhdGUge1xuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAvKiAgSXRlbXMgTGlzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuICAvKiBFeGFtcGxlIHN0eWxlIGZvciBCb2lsZXJwbGF0ZSAoY2FuIGJlIHJlbW92ZWQgaWYgbm90IG5lZWRlZCkgKi9cbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbS1mb3JtIHtcbiAgZm9udC1mYW1pbHk6IFwiUm9ib3RvXCIsIHNhbnMtc2VyaWY7XG59XG4uYm9pbGVycGxhdGUgLnNoZWV0LWhlYWRlciB7XG4gIGZsZXg6IDAgYXV0bztcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleC13cmFwOiB3cmFwO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG4uYm9pbGVycGxhdGUgLnNoZWV0LWhlYWRlciAucHJvZmlsZS1pbWcge1xuICBmbGV4OiAwIDAgMTAwcHg7XG4gIGhlaWdodDogMTAwcHg7XG4gIG1hcmdpbi1yaWdodDogMTBweDtcbn1cbi5ib2lsZXJwbGF0ZSAuc2hlZXQtaGVhZGVyIC5oZWFkZXItZmllbGRzIHtcbiAgZmxleDogMTtcbn1cbi5ib2lsZXJwbGF0ZSAuc2hlZXQtaGVhZGVyIGgxLmNoYXJuYW1lIHtcbiAgaGVpZ2h0OiA1MHB4O1xuICBwYWRkaW5nOiAwcHg7XG4gIG1hcmdpbjogNXB4IDA7XG4gIGJvcmRlci1ib3R0b206IDA7XG59XG4uYm9pbGVycGxhdGUgLnNoZWV0LWhlYWRlciBoMS5jaGFybmFtZSBpbnB1dCB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIG1hcmdpbjogMDtcbn1cbi5ib2lsZXJwbGF0ZSAuc2hlZXQtdGFicyB7XG4gIGZsZXg6IDA7XG59XG4uYm9pbGVycGxhdGUgLnNoZWV0LWJvZHksXG4uYm9pbGVycGxhdGUgLnNoZWV0LWJvZHkgLnRhYixcbi5ib2lsZXJwbGF0ZSAuc2hlZXQtYm9keSAudGFiIC5lZGl0b3Ige1xuICBoZWlnaHQ6IDEwMCU7XG59XG4uYm9pbGVycGxhdGUgLnRveCAudG94LWVkaXRvci1jb250YWluZXIge1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xufVxuLmJvaWxlcnBsYXRlIC50b3ggLnRveC1lZGl0LWFyZWEge1xuICBwYWRkaW5nOiAwIDhweDtcbn1cbi5ib2lsZXJwbGF0ZSAucmVzb3VyY2UtbGFiZWwge1xuICBmb250LXdlaWdodDogYm9sZDtcbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbXMtaGVhZGVyIHtcbiAgaGVpZ2h0OiAyOHB4O1xuICBtYXJnaW46IDJweCAwO1xuICBwYWRkaW5nOiAwO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICBib3JkZXI6IDJweCBncm9vdmUgI2VlZWRlMDtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWhlYWRlciA+ICoge1xuICBmb250LXNpemU6IDE0cHg7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbXMtaGVhZGVyIC5pdGVtLW5hbWUge1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3Qge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgY29sb3I6ICM0NDQ7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW0tbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbXMtbGlzdCAuaXRlbS1uYW1lIHtcbiAgZmxleDogMjtcbiAgbWFyZ2luOiAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBmb250LXNpemU6IDEzcHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW0tbmFtZSBoMywgLmJvaWxlcnBsYXRlIC5pdGVtcy1saXN0IC5pdGVtLW5hbWUgaDQge1xuICBtYXJnaW46IDA7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIG92ZXJmbG93LXg6IGhpZGRlbjtcbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbXMtbGlzdCAuaXRlbS1jb250cm9scyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IDAgMCAxMDBweDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbn1cbi5ib2lsZXJwbGF0ZSAuaXRlbXMtbGlzdCAuaXRlbS1jb250cm9scyBhIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG1hcmdpbjogMCA2cHg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW0ge1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAwIDJweDtcbiAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjOWM3Yjg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW06bGFzdC1jaGlsZCB7XG4gIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW0gLml0ZW0tbmFtZSB7XG4gIGNvbG9yOiAjMTkxODEzO1xufVxuLmJvaWxlcnBsYXRlIC5pdGVtcy1saXN0IC5pdGVtIC5pdGVtLW5hbWUgLml0ZW0taW1hZ2Uge1xuICBmbGV4OiAwIDAgMzBweDtcbiAgaGVpZ2h0OiAzMHB4O1xuICBiYWNrZ3JvdW5kLXNpemU6IDMwcHg7XG4gIGJvcmRlcjogbm9uZTtcbiAgbWFyZ2luLXJpZ2h0OiA1cHg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW0tcHJvcCB7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzljN2I4O1xuICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYzljN2I4O1xuICBmb250LXNpemU6IDEycHg7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW1zLWhlYWRlciB7XG4gIGhlaWdodDogMjhweDtcbiAgbWFyZ2luOiAycHggMDtcbiAgcGFkZGluZzogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyOiAycHggZ3Jvb3ZlICNlZWVkZTA7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmJvaWxlcnBsYXRlIC5pdGVtcy1saXN0IC5pdGVtcy1oZWFkZXIgPiAqIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uYm9pbGVycGxhdGUgLml0ZW1zLWxpc3QgLml0ZW1zLWhlYWRlciAuaXRlbS1uYW1lIHtcbiAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG4uYm9pbGVycGxhdGUgLml0ZW0tZm9ybXVsYSB7XG4gIGZsZXg6IDAgMCAyMDBweDtcbiAgcGFkZGluZzogMCA4cHg7XG59XG4uYm9pbGVycGxhdGUgLmVmZmVjdHMgLml0ZW0gLmVmZmVjdC1zb3VyY2UsXG4uYm9pbGVycGxhdGUgLmVmZmVjdHMgLml0ZW0gLmVmZmVjdC1kdXJhdGlvbixcbi5ib2lsZXJwbGF0ZSAuZWZmZWN0cyAuaXRlbSAuZWZmZWN0LWNvbnRyb2xzIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjOWM3Yjg7XG4gIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjOWM3Yjg7XG4gIGZvbnQtc2l6ZTogMTJweDtcbn1cbi5ib2lsZXJwbGF0ZSAuZWZmZWN0cyAuaXRlbSAuZWZmZWN0LWNvbnRyb2xzIHtcbiAgYm9yZGVyOiBub25lO1xufSIsIi8vIEdyaWQuXG4uZ3JpZCxcbi5ncmlkLTJjb2wge1xuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLWNvbHVtbjogc3BhbiAyIC8gc3BhbiAyO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCBtaW5tYXgoMCwgMWZyKSk7XG4gIGdhcDogMTBweDtcbiAgbWFyZ2luOiAxMHB4IDA7XG4gIHBhZGRpbmc6IDA7XG59XG5cbi5ncmlkLTNjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiAzIC8gc3BhbiAzO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgzLCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTRjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA0IC8gc3BhbiA0O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg0LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTVjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA1IC8gc3BhbiA1O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg1LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTZjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA2IC8gc3BhbiA2O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg2LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTdjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA3IC8gc3BhbiA3O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLThjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA4IC8gc3BhbiA4O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg4LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTljb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiA5IC8gc3BhbiA5O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg5LCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi5ncmlkLTEwY29sIHtcbiAgZ3JpZC1jb2x1bW46IHNwYW4gMTAgLyBzcGFuIDEwO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgxMCwgbWlubWF4KDAsIDFmcikpO1xufVxuXG4uZ3JpZC0xMWNvbCB7XG4gIGdyaWQtY29sdW1uOiBzcGFuIDExIC8gc3BhbiAxMTtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMTEsIG1pbm1heCgwLCAxZnIpKTtcbn1cblxuLmdyaWQtMTJjb2wge1xuICBncmlkLWNvbHVtbjogc3BhbiAxMiAvIHNwYW4gMTI7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDEyLCBtaW5tYXgoMCwgMWZyKSk7XG59XG5cbi8vIEdyaWQgb2Zmc2V0LlxuLmdyaWQtc3RhcnQtMiB7IGdyaWQtY29sdW1uLXN0YXJ0OiAyIH1cbi5ncmlkLXN0YXJ0LTMgeyBncmlkLWNvbHVtbi1zdGFydDogMyB9XG4uZ3JpZC1zdGFydC00IHsgZ3JpZC1jb2x1bW4tc3RhcnQ6IDQgfVxuLmdyaWQtc3RhcnQtNSB7IGdyaWQtY29sdW1uLXN0YXJ0OiA1IH1cbi5ncmlkLXN0YXJ0LTYgeyBncmlkLWNvbHVtbi1zdGFydDogNiB9XG4uZ3JpZC1zdGFydC03IHsgZ3JpZC1jb2x1bW4tc3RhcnQ6IDcgfVxuLmdyaWQtc3RhcnQtOCB7IGdyaWQtY29sdW1uLXN0YXJ0OiA4IH1cbi5ncmlkLXN0YXJ0LTkgeyBncmlkLWNvbHVtbi1zdGFydDogOSB9XG4uZ3JpZC1zdGFydC0xMCB7IGdyaWQtY29sdW1uLXN0YXJ0OiAxMCB9XG4uZ3JpZC1zdGFydC0xMSB7IGdyaWQtY29sdW1uLXN0YXJ0OiAxMSB9XG4uZ3JpZC1zdGFydC0xMiB7IGdyaWQtY29sdW1uLXN0YXJ0OiAxMiB9XG5cbi5ncmlkLXNwYW4tMiB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiAyIH1cbi5ncmlkLXNwYW4tMyB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiAzIH1cbi5ncmlkLXNwYW4tNCB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA0IH1cbi5ncmlkLXNwYW4tNSB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA1IH1cbi5ncmlkLXNwYW4tNiB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA2IH1cbi5ncmlkLXNwYW4tNyB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA3IH1cbi5ncmlkLXNwYW4tOCB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA4IH1cbi5ncmlkLXNwYW4tOSB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiA5IH1cbi5ncmlkLXNwYW4tMTAgeyBncmlkLWNvbHVtbi1lbmQ6IHNwYW4gMTAgfVxuLmdyaWQtc3Bhbi0xMSB7IGdyaWQtY29sdW1uLWVuZDogc3BhbiAxMSB9XG4uZ3JpZC1zcGFuLTEyIHsgZ3JpZC1jb2x1bW4tZW5kOiBzcGFuIDEyIH1cbiIsIi8vIEZsZXhib3guXG4uZmxleC1ncm91cC1jZW50ZXIsXG4uZmxleC1ncm91cC1sZWZ0LFxuLmZsZXgtZ3JvdXAtcmlnaHQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uZmxleC1ncm91cC1sZWZ0IHtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xufVxuXG4uZmxleC1ncm91cC1yaWdodCB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uZmxleHNocmluayB7XG4gIGZsZXg6IDA7XG59XG5cbi5mbGV4LWJldHdlZW4ge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5cbi5mbGV4bGFyZ2Uge1xuICBmbGV4OiAyO1xufVxuXG4vLyBBbGlnbm1lbnQgc3R5bGVzLlxuLmFsaWduLWxlZnQge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi5hbGlnbi1yaWdodCB7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIHRleHQtYWxpZ246IHJpZ2h0O1xufVxuXG4uYWxpZ24tY2VudGVyIHtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn0iLCIvLyBTZWN0aW9uIEhlYWRlclxuLml0ZW1zLWhlYWRlciB7XG4gIGhlaWdodDogMjhweDtcbiAgbWFyZ2luOiAycHggMDtcbiAgcGFkZGluZzogMDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjA1KTtcbiAgYm9yZGVyOiAkYm9yZGVyLWdyb292ZTtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gID4gKiB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuICAuaXRlbS1uYW1lIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLy8gZm9udC1zaXplOiAxNnB4O1xuICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiAgSXRlbXMgTGlzdHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLml0ZW1zLWxpc3Qge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDA7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHNjcm9sbGJhci13aWR0aDogdGhpbjtcbiAgY29sb3I6ICRjLXRhbjtcblxuICAvLyBDaGlsZCBsaXN0c1xuICAuaXRlbS1saXN0IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLy8gSXRlbSBOYW1lXG4gIC5pdGVtLW5hbWUge1xuICAgIGZsZXg6IDI7XG4gICAgbWFyZ2luOiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGgzLCBoNCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIH1cbiAgfVxuXG4gIC8vIENvbnRyb2wgQnV0dG9uc1xuICAuaXRlbS1jb250cm9scyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiAwIDAgMTAwcHg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIG1hcmdpbjogMCA2cHg7XG4gICAgfVxuICB9XG5cbiAgLy8gSW5kaXZpZHVhbCBJdGVtXG4gIC5pdGVtIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDAgMnB4OyAvLyB0byBhbGlnbiB3aXRoIHRoZSBoZWFkZXIgYm9yZGVyXG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICRjLWZhaW50O1xuICAgICY6bGFzdC1jaGlsZCB7IGJvcmRlci1ib3R0b206IG5vbmU7IH1cbiAgICAuaXRlbS1uYW1lIHtcbiAgICAgIGNvbG9yOiAkYy1kYXJrO1xuICAgICAgLml0ZW0taW1hZ2Uge1xuICAgICAgICBmbGV4OiAwIDAgMzBweDtcbiAgICAgICAgaGVpZ2h0OiAzMHB4O1xuICAgICAgICBiYWNrZ3JvdW5kLXNpemU6IDMwcHg7XG4gICAgICAgIGJvcmRlcjogbm9uZTtcbiAgICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLml0ZW0tcHJvcCB7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2M5YzdiODtcbiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjYzljN2I4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgfVxuXG4gIC8vIFNlY3Rpb24gSGVhZGVyXG4gIC5pdGVtcy1oZWFkZXIge1xuICAgIGhlaWdodDogMjhweDtcbiAgICBtYXJnaW46IDJweCAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMDUpO1xuICAgIGJvcmRlcjogJGJvcmRlci1ncm9vdmU7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgPiAqIHtcbiAgICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB9XG4gICAgLml0ZW0tbmFtZSB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDVweDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAvLyBmb250LXNpemU6IDE2cHg7XG4gICAgfVxuICB9XG59XG5cbi8qIEV4YW1wbGUgc3R5bGUgZm9yIEJvaWxlcnBsYXRlIChjYW4gYmUgcmVtb3ZlZCBpZiBub3QgbmVlZGVkKSAqL1xuLml0ZW0tZm9ybXVsYSB7XG4gIGZsZXg6IDAgMCAyMDBweDtcbiAgcGFkZGluZzogMCA4cHg7XG59IiwiLml0ZW0tZm9ybSB7XG4gIGZvbnQtZmFtaWx5OiAkZm9udC1wcmltYXJ5O1xufVxuXG4uc2hlZXQtaGVhZGVyIHtcbiAgZmxleDogMCBhdXRvO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcblxuICAucHJvZmlsZS1pbWcge1xuICAgIGZsZXg6IDAgMCAxMDBweDtcbiAgICBoZWlnaHQ6IDEwMHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgfVxuXG4gIC5oZWFkZXItZmllbGRzIHtcbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgaDEuY2hhcm5hbWUge1xuICAgIGhlaWdodDogNTBweDtcbiAgICBwYWRkaW5nOiAwcHg7XG4gICAgbWFyZ2luOiA1cHggMDtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICAgIGlucHV0IHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgICAgbWFyZ2luOiAwO1xuICAgIH1cbiAgfVxufVxuXG4uc2hlZXQtdGFicyB7XG4gIGZsZXg6IDA7XG59XG5cbi5zaGVldC1ib2R5LFxuLnNoZWV0LWJvZHkgLnRhYixcbi5zaGVldC1ib2R5IC50YWIgLmVkaXRvciB7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLnRveCB7XG4gIC50b3gtZWRpdG9yLWNvbnRhaW5lciB7XG4gICAgYmFja2dyb3VuZDogJGMtd2hpdGU7XG4gIH1cblxuICAudG94LWVkaXQtYXJlYSB7XG4gICAgcGFkZGluZzogMCA4cHg7XG4gIH1cbn0iLCIkYy13aGl0ZTogI2ZmZjtcbiRjLWJsYWNrOiAjMDAwO1xuXG4kYy1kYXJrOiAjMTkxODEzO1xuJGMtZmFpbnQ6ICNjOWM3Yjg7XG4kYy1iZWlnZTogI2I1YjNhNDtcbiRjLXRhbjogIzQ0NDsiLCIucmVzb3VyY2UtbGFiZWwge1xuICBmb250LXdlaWdodDogYm9sZDtcbn0iLCIkcGFkZGluZy1zbTogNXB4O1xuJHBhZGRpbmctbWQ6IDEwcHg7XG4kcGFkZGluZy1sZzogMjBweDtcblxuJGJvcmRlci1ncm9vdmU6IDJweCBncm9vdmUgI2VlZWRlMDsiLCIuZWZmZWN0cyAuaXRlbSB7XG4gIC5lZmZlY3Qtc291cmNlLFxuICAuZWZmZWN0LWR1cmF0aW9uLFxuICAuZWZmZWN0LWNvbnRyb2xzIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjYzljN2I4O1xuICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICNjOWM3Yjg7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICB9XG5cbiAgLmVmZmVjdC1jb250cm9scyB7XG4gICAgYm9yZGVyOiBub25lO1xuICB9XG59XG4iXX0= */ diff --git a/css/vermine2047.css b/css/vermine2047.css index a8731cd..cc2f59c 100644 --- a/css/vermine2047.css +++ b/css/vermine2047.css @@ -1,388 +1 @@ -@font-face { - font-family: "DistressBlack"; - src: url("../assets/fonts/dcc_sharp_distress_black_by_dccanim.otf"); -} - -.sans-font { - font-family: "DistressBlack", sans-serif; -} - -/* Change shadow colors and Foundry general font color!! */ -.app { - box-shadow: 0 0 20px #7e4444; /* Change the color code here for a nice shadow color! */ - color: #dfdfdf; /* Text color for window titles and menu all across Foundry */ -} - -/* Character and Item Name Titles Text style! */ -.sheet .charname input { - color: #191813; - font-family: "DistressBlack", sans-serif; - font-size: 30px; - font-style: normal; -} - -/* custom styles */ -body.system-vermine2047 img#logo { - content: url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp"); - height:auto; -} - -/* Customize the chat roll area! */ -#chat-form textarea { - background: url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat; - /*font-family: monospace; - font-size: 14px; - color: black; */ -} - -/* Customize the chat history area! */ -#chat-log .message { - background: url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat; - /*color: #191813; */ -} - -img { - border:none; -} - -ul.unstyled { - list-style-type: none; - padding:0; - margin:0; -} -ul.unstyled li { - padding:0; - margin:0; -} - -.padding-with-frieze { - margin-left:18% !important; - margin-right:10% !important; -} - -.padding-with-frieze li { - max-width:100%; -} - -.w-full { - width:100%; -} - -.mx-auto { - margin-left: auto; - margin-right:auto; -} - -/* ----------------------------------------- */ -/* Sheet Structure */ -/* ----------------------------------------- */ -.system-vermine2047 .sheet .window-content { - background: url(/systems/vermine2047/assets/images/ui/box_background.webp); - padding: 0; - overflow-y: hidden; -} - -.system-vermine2047 .dialog .window-content { - background: url(/systems/vermine2047/assets/images/ui/fond_chat_box.webp); - padding: 0.5rem; - overflow-y: hidden; -} - -.window-content .row.smb { - margin-bottom:0.25rem; -} -.window-content .row.mdb { - margin-bottom:0.5rem; -} -.window-content .row.lgb { - margin-bottom:1rem; -} - -.actor.sheet form .form { - display: grid; - /*grid: - "sidebar header" 75px - "sidebar nav" minmax(min-content, max-content) - "sidebar content" 1fr/230px 1fr;*/ - grid-template-columns: minmax(230px,1fr) 3fr; - grid-template-rows: 1fr; - align-items: flex-start; - height: 100%; -} - -.actor.sheet .form aside { - grid-row: span 1 / span 1; - background-image: url(/systems/vermine2047/assets/images/ui/barre_laterale.webp); - background-repeat: no-repeat; - background-position: bottom center; - height: 100%; -} - -.actor.sheet .form main { - grid-row: span 1 / span 1; -} - -.actor.sheet .form aside .image-wrapper { - margin: 1rem auto 3rem; - text-align: center; -} -.actor.sheet .form aside .image-wrapper img { - width:170px; - height:145px; -} -.actor.sheet .form aside .paper { - margin-top: 1rem; - height: 350px; -} -.actor.sheet .form aside .second-paper { - margin-top: 4rem; - height: 150px; -} - -.actor.sheet .form h3 { - font-family: "DistressBlack", sans-serif; - text-align: center; - text-transform: uppercase; - color:#bec2bd; - font-size: 1.25em; - border-bottom: none; -} -.actor.sheet .form h4, -.item.sheet .form h4 { - font-family: "DistressBlack", sans-serif; - font-size: 2em; - text-transform: uppercase; - -} - -.actor.sheet .form .characteristics h4 { - font-size:1.25rem; -} - -.actor.sheet .form .tab.totem h4, -.actor.sheet .form .tab.equipment h4, -.actor.sheet .form .tab.stories h4 { - margin-top:0.875rem; -} - -.system-vermine2047 .char-header { - font-family: "DistressBlack", sans-serif; -} -.system-vermine2047 .char-header section { - display:flex; - flex-direction: column; - align-items: flex-start; - justify-content: flex-start; - -} - -.system-vermine2047 .char-header h1.char-name, -.system-vermine2047 .char-vermine2047 { - border-bottom: none; - line-height: 2rem; -} - -.system-vermine2047 .char-vermine2047 { - font-size:1.5rem; -} - -.system-vermine2047 .sheet.actor .sheet-body { - height: calc(100% - 35px); - overflow-y: auto; - overflow-x: hidden; - display: flex; - flex-direction: column; - flex-wrap: nowrap; - max-height: 688px; - padding-bottom:1rem; -} -.system-vermine2047 .sheet.actor form { - width: 100%; - height: 100%; - overflow: hidden; -} -.system-vermine2047 .sheet.actor form input[type=text], .system-vermine2047 .sheet.actor form input[type=number] { - width: calc(100% - 2px); - height: calc(100% - 2px); - background: none; - padding: 0; - margin: 1px 0; - color: #333; - border: 1px solid transparent; -} -.system-vermine2047 .sheet.actor form input[type=text]:hover:not(:disabled), .system-vermine2047 .sheet.actor form input[type=text]:focus, .system-vermine2047 .sheet.actor form input[type=number]:hover:not(:disabled), .system-vermine2047 .sheet.actor form input[type=number]:focus { - border: 1px solid black; - box-shadow: 0 0 10px #00005a; -} -.system-vermine2047 .sheet.actor form select { - font-size: var(--font-size-10); - height: 18px; - background: rgba(255, 255, 255, 0.5); -} -.system-vermine2047 .sheet.actor form label { - display: block; -} -.system-vermine2047 .sheet.actor form .mce-panel span { - display: inherit; -} -.system-vermine2047 .sheet.actor form.editable .rollable:hover { - color: #000; - text-shadow: 0 0 10px #00005a; - cursor: pointer; -} -.system-vermine2047 .sheet.actor form .sheet-tabs { - font-weight: 500; - height: 30px; -} -.system-vermine2047 .sheet.actor form .sheet-tabs > .list-row { - line-height: 24px; - padding-top: 3px; - font-size: var(--font-size-12); - text-align: center; -} -.system-vermine2047 .sheet.actor form .sheet-tabs > .list-row:last-of-type { - padding-right: 4px; -} -.system-vermine2047 .sheet.actor form .sheet-tabs > .list-row.active { - color: #000; - font-weight: 700; -} -.system-vermine2047 .sheet.actor form .tab { - flex: 1; - overflow: hidden; -} -.system-vermine2047 .sheet.actor form .tag-legacy { - float: left; - margin: 0 2px 2px 0; - padding: 0 3px; - font-size: var(--font-size-10); - line-height: 16px; - border: 1px solid #999; - border-radius: 3px; - white-space: normal; - font-weight: 500; -} - -/* ---------------------------------------- */ -/* Actor Sheet */ -/* ---------------------------------------- */ -.system-vermine2047 .sheet.actor .window-resizable-handle { - bottom:-30px; -} - -.system-vermine2047 .sheet.actor, -.system-vermine2047 .sheet.actor .window-content { - min-width: 690px; - min-height: 800px; -} -.system-vermine2047 .sheet.actor .sidebar { - width: 230px; - min-height:518px; -} - -.system-vermine2047 .sheet.actor .floatright { - float: right; -} -.system-vermine2047 .sheet.actor .sheet-upper { - height: 268px; -} -.system-vermine2047 .sheet.actor .sheet-upper .sheet-header { - height: 48px; -} -.system-vermine2047 .sheet.actor .sheet-upper .sheet-profile, .system-vermine2047 .sheet.actor .sheet-upper .sheet-showcase { - height: 220px; -} - -.system-vermine2047 .sheet.actor .sheet-content { - padding:4px; -} -.system-vermine2047 .sheet.actor .sheet-sidebar { - height: calc(100% - 48px); - display: flex; - flex-direction: column; - flex-wrap: nowrap; - overflow-x: hidden; - overflow-y: auto; -} -.system-vermine2047 .sheet.actor .sheet-sidebar > * { - flex: 1; -} -.system-vermine2047 .sheet.actor .sheet-sidebar .sidebar-summary { - overflow-y: hidden; -} -.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper { - height: 220px; -} -.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper .sheet-showcase { - height: 172px; -} -.system-vermine2047 .sheet.actor.npc-sheet .sheet-lower { - height: calc(100% - 220px - 32px); -} -.system-vermine2047 .sheet.actor.npc-sheet section.sheet-body { - height: calc(100% - 48px); -} -.system-vermine2047 .sheet.actor .sheet-navigation { - border-top: 1px solid var(--secondary-background); - border-bottom: 1px solid var(--primary-background); -} -.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs > .list-row { - border-radius: 5px 5px 0 0; -} -.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs > .list-row.active { - border: 1px solid #666; - border-bottom: none; - /* box-shadow: 0 0 10px inset #ff6400; - */ - background: var(--primary-background); - color: #fff; - text-shadow: none; -} - - -.actor.sheet nav.sheet-navigation { - display: inline-flex; - justify-content: flex-end; - align-items: center; - height: 54px; - background: var(--secondary); - background: url(../assets/images/ui/barre_haut.webp) no-repeat right top; - width:100%; - position: relative; - padding-right:4rem; -} - -.actor.sheet nav.sheet-navigation .item { - line-height: 54px; - width: 24px; - display: inline-block; - border-radius: 50%; - z-index: 1; - transition: all 0.1s ease-out; -} - -.system-vermine2047 .sheet.actor form nav.sheet-navigation.sheet-tabs { - height:54px; -} - -.system-vermine2047 .sheet.actor .ability .die { - display:flex; - width:0.875rem; - height:1rem; - background-image:url(../../../../icons/svg/d10-grey.svg); - background-size: contain; - background-repeat: no-repeat; - background-position: center; - font-size:xx-small; - font-weight: bold; - align-items: center; - justify-content: center; -} - -.system-vermine2047 .sheet.actor .ability .die.pool { - filter: sepia(0.5) hue-rotate(60deg); -} - -.system-vermine2047 .sheet.actor .ability .die.reroll { - filter: sepia(0.5) hue-rotate(-60deg); -} +@import"https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap";@font-face{font-family:"DistressBlack";src:url("../assets/fonts/dcc_sharp_distress_black_by_dccanim.otf")}.sans-font{font-family:"DistressBlack",sans-serif}.app{box-shadow:0 0 20px #7e4444;color:#dfdfdf}.sheet .charname input{color:#191813;font-family:"DistressBlack",sans-serif;font-size:30px;font-style:normal}body.system-vermine2047 img#logo{content:url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp");height:auto}#chat-form textarea{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}#chat-log .message{background:url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat}img{border:none}ul.unstyled{list-style-type:none;padding:0;margin:0}ul.unstyled li{padding:0;margin:0}.padding-with-frieze{margin-left:18% !important;margin-right:10% !important}.padding-with-frieze li{max-width:100%}.w-full{width:100%}.mx-auto{margin-left:auto;margin-right:auto}.system-vermine2047 .sheet .window-content{background:url(/systems/vermine2047/assets/images/ui/box_background.webp);padding:0;overflow-y:hidden}.system-vermine2047 .dialog .window-content{background:url(/systems/vermine2047/assets/images/ui/fond_chat_box.webp);padding:.5rem;overflow-y:hidden}.window-content .row.smb{margin-bottom:.25rem}.window-content .row.mdb{margin-bottom:.5rem}.window-content .row.lgb{margin-bottom:1rem}.actor.sheet form .form{display:grid;grid-template-columns:minmax(230px, 1fr) 3fr;grid-template-rows:1fr;align-items:flex-start;height:100%;overflow:auto}.actor.sheet .form aside{grid-row:span 1/span 1;background-image:url(/systems/vermine2047/assets/images/ui/barre_laterale.webp);background-repeat:no-repeat;background-size:cover;height:100%;width:240px;padding:0 .3rem;box-shadow:-20px 0px 100px rgba(0,0,0,.7098039216) inset}.actor.sheet .form aside .major-totem{position:relative}.actor.sheet .form aside .major-totem h4{position:absolute;transform:rotate(-8deg);opacity:.7;transition:.2s}.actor.sheet .form aside .major-totem:hover h4{opacity:1}.actor.sheet .form main{box-shadow:10px 0px 100px rgba(0,0,0,.7098039216) inset;padding-left:1rem;grid-row:span 1/span 1;height:100%}.actor.sheet .form aside .image-wrapper{text-align:center}.actor.sheet .form aside .image-wrapper img{width:170px;height:145px}.actor.sheet .form aside .paper{margin-top:1rem;height:350px}.actor.sheet .form aside .second-paper{margin-top:4rem;height:150px}.actor.sheet .form h3{font-family:"DistressBlack",sans-serif;text-align:center;text-transform:uppercase;color:#4e564c;font-size:1.7rem;border-bottom:none;margin:0}.actor.sheet .form h4,.item.sheet .form h4{font-family:"DistressBlack",sans-serif;font-size:1.4em;text-transform:uppercase;margin:0 0 .2rem}.actor.sheet .form .characteristics h4{font-size:1.25rem;margin-top:0 .1rem}.actor.sheet .form .tab.totem h4,.actor.sheet .form .tab.equipment h4,.actor.sheet .form .tab.stories h4{margin-top:.875rem}.system-vermine2047 .char-header{font-family:"DistressBlack",sans-serif}.system-vermine2047 .char-header section{display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start}.system-vermine2047 .char-header h1.char-name,.system-vermine2047 .char-vermine2047{border-bottom:none;line-height:2rem}.system-vermine2047 .char-vermine2047{font-size:1.5rem}.system-vermine2047 .sheet.actor form{width:100%;height:100%;overflow:hidden}.system-vermine2047 .sheet.actor form div.hexa{clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);height:unset;max-width:1.5rem;aspect-ratio:1/1;color:#000;transform:rotate(90deg);transition:.2s;margin:.2rem}.system-vermine2047 .sheet.actor form div.hexa:hover{background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa input{opacity:1;min-width:100%;min-height:100%;opacity:0}.system-vermine2047 .sheet.actor form div.hexa.checked{background:radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa.checked:hover{background:radial-gradient(circle, rgb(43, 43, 43) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor form div.hexa.unavailable{background:radial-gradient(circle, rgba(66, 15, 15, 0.664) 0%, rgba(131, 70, 70, 0.432) 100%)}.system-vermine2047 .sheet.actor div.minor-totems{position:relative;background-color:rgba(146,156,111,.5215686275)}.system-vermine2047 .sheet.actor div.minor-totems h5{position:absolute;top:0}.system-vermine2047 .sheet.actor div.minor-totems h5 img{max-width:2rem;position:absolute;bottom:-2rem}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .human-dice,.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice{display:flex;flex-direction:row;margin-left:2rem}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .human-dice i,.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice i{padding-top:.5rem;color:#064930}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice{justify-content:flex-end;margin-left:0;margin-right:2rem;transform:rotate(180deg)}.system-vermine2047 .sheet.actor div.minor-totems .totem-dice .adapted-dice i{transform:rotate(180deg);padding-top:.5rem;color:#553402}.system-vermine2047 .sheet.actor div.minor-totems .human{left:0}.system-vermine2047 .sheet.actor div.minor-totems .human img{left:0}.system-vermine2047 .sheet.actor div.minor-totems .adapted{right:0}.system-vermine2047 .sheet.actor div.minor-totems .adapted img{right:0}.system-vermine2047 .sheet.actor form input[type=text],.system-vermine2047 .sheet.actor form input[type=number]{width:calc(100% - 2px);height:calc(100% - 2px);background:none;padding:0;margin:1px 0;color:#333;border:1px solid rgba(0,0,0,0)}.system-vermine2047 .sheet.actor form input[type=text].hexa,.system-vermine2047 .sheet.actor form input[type=number].hexa{clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);height:unset;max-width:1.5rem;aspect-ratio:1/1;color:#000}.system-vermine2047 .sheet.actor form input[type=text]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=text]:focus,.system-vermine2047 .sheet.actor form select:hover:not(:disabled),.system-vermine2047 .sheet.actor form select:focus,.system-vermine2047 .sheet.actor form input[type=number]:hover:not(:disabled),.system-vermine2047 .sheet.actor form input[type=number]:focus,.system-vermine2047 .sheet.actor form textarea:hover:not(:disabled),.system-vermine2047 .sheet.actor form textarea:focus{box-shadow:0 0 10px #005a3c inset}.system-vermine2047 .sheet.actor form select{font-size:.6rem;border:none;appearance:none;min-width:fit-content;max-width:fit-content;padding:0 .2rem;margin:0 .2rem;cursor:help}.system-vermine2047 .sheet.actor form label{display:block}.system-vermine2047 .sheet.actor form .mce-panel span{display:inherit}.system-vermine2047 .sheet.actor form.editable .rollable:hover,.system-vermine2047 .sheet.actor form.editable a:hover{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.system-vermine2047 .sheet.actor form .sheet-tabs{font-weight:500;height:30px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row{line-height:24px;padding-top:3px;font-size:2rem;text-align:center}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row:last-of-type{padding-right:4px}.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row.active{color:#000;font-weight:700}.system-vermine2047 .sheet.actor form .tab{flex:1;overflow:hidden}.system-vermine2047 .sheet.actor form .tag-legacy{float:left;margin:0 2px 2px 0;padding:0 3px;font-size:var(--font-size-10);line-height:16px;border:1px solid #999;border-radius:3px;white-space:normal;font-weight:500}.system-vermine2047 .sheet.actor,.system-vermine2047 .sheet.actor .window-content{min-width:690px}.system-vermine2047 .sheet.actor .sidebar{width:230px;min-height:518px}.system-vermine2047 .sheet.actor .floatright{float:right}.system-vermine2047 .sheet.actor .sheet-upper{height:268px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-header{height:48px}.system-vermine2047 .sheet.actor .sheet-upper .sheet-profile,.system-vermine2047 .sheet.actor .sheet-upper .sheet-showcase{height:220px}.system-vermine2047 .sheet.actor .sheet-content{padding:4px}.system-vermine2047 .sheet.actor .sheet-sidebar{height:calc(100% - 48px);display:flex;flex-direction:column;flex-wrap:nowrap;overflow-x:hidden;overflow-y:auto}.system-vermine2047 .sheet.actor .sheet-sidebar>*{flex:1}.system-vermine2047 .sheet.actor .sheet-sidebar .sidebar-summary{overflow-y:hidden}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper{height:220px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper .sheet-showcase{height:172px}.system-vermine2047 .sheet.actor.npc-sheet .sheet-lower{height:calc(100% - 220px - 32px)}.system-vermine2047 .sheet.actor .sheet-navigation{border-top:1px solid var(--secondary-background);border-bottom:1px solid var(--primary-background)}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row{border-radius:5px 5px 0 0}.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row.active{border:1px solid #666;border-bottom:none;background:var(--primary-background);color:#fff;text-shadow:none;color:#000;text-shadow:0 0 10px #00005a;cursor:pointer}.actor.sheet nav.sheet-navigation{display:inline-flex;justify-content:space-around;align-items:center;height:54px;background:url(../assets/images/ui/barre_haut.webp) no-repeat right top;background-size:100% 100%;width:100%;position:relative;padding-right:4rem;font-size:1.4rem}.actor.sheet nav.sheet-navigation.tabs .item{height:2.4rem;display:inline-block;z-index:1;transition:all .1s ease-out;color:#606060;box-shadow:0px 0px 0px rgba(0,0,0,.404)}.actor.sheet nav.sheet-navigation.tabs .item:hover,.actor.sheet nav.sheet-navigation.tabs .item.active{color:#000;text-shadow:0 5px 5px #1fa832;cursor:pointer}.actor.sheet nav.sheet-navigation.tabs .item:hover{text-shadow:0 5px 5px rgba(30,82,37,.6039215686)}.system-vermine2047 .sheet.actor form nav.sheet-navigation.sheet-tabs{height:54px}.system-vermine2047 .sheet.actor .ability{padding-right:.6rem;font-size:.8rem;border-bottom:1px solid rgba(170,170,152,.664);box-shadow:0px 0px 15px rgba(128,128,128,0) inset;transition:.2s;position:relative}.system-vermine2047 .sheet.actor .ability:hover{box-shadow:0px 0px 15px gray inset}.system-vermine2047 .sheet.actor .ability label{min-width:fit-content}.system-vermine2047 .sheet.actor .ability span{max-width:fit-content;margin:0 1rem;flex:.5}.system-vermine2047 .sheet.actor .ability .hexa{text-align:center;clip-path:polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%);background:radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%);max-height:1.2rem;max-width:1.2rem;aspect-ratio:1/1;color:#000;vertical-align:center}.system-vermine2047 .sheet.actor .ability .hexa.checked{background:radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%)}.system-vermine2047 .sheet.actor .ability div.specialties{position:absolute;bottom:0;font-size:.7rem}.system-vermine2047 .sheet.actor .ability .skill-dots{height:100%;align-self:center;flex:1.5}.system-vermine2047 .sheet.actor .ability .skill-dots>div{max-width:.7rem;height:.7rem;aspect-ratio:1/1;border-radius:50%;font-weight:700;text-align:center;padding-bottom:.2rem;font-style:oblique;align-self:flex-start}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-pool-dot{background:radial-gradient(circle, rgb(94, 90, 77) 25%, rgb(0, 0, 0) 100%);max-width:.7rem;aspect-ratio:1/1;border-radius:50%}.system-vermine2047 .sheet.actor .ability .skill-dots>div.dice-reroll-dot{background:radial-gradient(circle, rgb(187, 182, 165) 25%, rgb(0, 0, 0) 100%)}.vermine2047.sheet.actor input[type=radio]::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(217, 214, 204) 0%, rgb(217, 214, 204) 40%, rgb(85, 85, 85) 60%);border-radius:50%}.vermine2047.sheet.actor input[type=radio].checked::after{content:" ";display:block;width:.8rem;height:.8rem;background:radial-gradient(circle, rgb(75, 74, 74) 0%, rgb(27, 39, 28) 60%);border-radius:50%}.window-app{font-family:"Roboto",sans-serif;box-shadow:0px 0px 30px #454e2c}.rollable:hover,.rollable:focus{color:#000;text-shadow:0 0 10px red;cursor:pointer}.grid,.grid-2col{display:grid;grid-column:span 2/span 2;grid-template-columns:repeat(2, minmax(0, 1fr));gap:10px;margin:5px 0;padding:0}.grid-3col{grid-column:span 3/span 3;grid-template-columns:repeat(3, minmax(0, 1fr))}.grid-4col{grid-column:span 4/span 4;grid-template-columns:repeat(4, minmax(0, 1fr))}.grid-5col{grid-column:span 5/span 5;grid-template-columns:repeat(5, minmax(0, 1fr))}.grid-6col{grid-column:span 6/span 6;grid-template-columns:repeat(6, minmax(0, 1fr))}.grid-7col{grid-column:span 7/span 7;grid-template-columns:repeat(7, minmax(0, 1fr))}.grid-8col{grid-column:span 8/span 8;grid-template-columns:repeat(8, minmax(0, 1fr))}.grid-9col{grid-column:span 9/span 9;grid-template-columns:repeat(9, minmax(0, 1fr))}.grid-10col{grid-column:span 10/span 10;grid-template-columns:repeat(10, minmax(0, 1fr))}.grid-11col{grid-column:span 11/span 11;grid-template-columns:repeat(11, minmax(0, 1fr))}.grid-12col{grid-column:span 12/span 12;grid-template-columns:repeat(12, minmax(0, 1fr))}.grid-start-2{grid-column-start:2}.grid-start-3{grid-column-start:3}.grid-start-4{grid-column-start:4}.grid-start-5{grid-column-start:5}.grid-start-6{grid-column-start:6}.grid-start-7{grid-column-start:7}.grid-start-8{grid-column-start:8}.grid-start-9{grid-column-start:9}.grid-start-10{grid-column-start:10}.grid-start-11{grid-column-start:11}.grid-start-12{grid-column-start:12}.grid-span-2{grid-column-end:span 2}.grid-span-3{grid-column-end:span 3}.grid-span-4{grid-column-end:span 4}.grid-span-5{grid-column-end:span 5}.grid-span-6{grid-column-end:span 6}.grid-span-7{grid-column-end:span 7}.grid-span-8{grid-column-end:span 8}.grid-span-9{grid-column-end:span 9}.grid-span-10{grid-column-end:span 10}.grid-span-11{grid-column-end:span 11}.grid-span-12{grid-column-end:span 12}.flex-group-center,.flex-group-left,.flex-group-right{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;text-align:center}.flex-group-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.flex-group-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.flex-align-left{align-items:flex-start}.flex-align-right{align-items:flex-end}.gap-xs{gap:2px}.gap-sm{gap:4px}.gap-md{gap:8px}.gap-lg{gap:16px}.flexshrink{-webkit-box-flex:0;-ms-flex:0;flex:0}.flex-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.flexlarge{-webkit-box-flex:2;-ms-flex:2;flex:2}.align-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;text-align:left}.align-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;text-align:right}.align-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;text-align:center}.system-vermine2047 .item-form{font-family:"Roboto",sans-serif}.system-vermine2047 .sheet-header{-webkit-box-flex:0;-ms-flex:0 auto;flex:0 auto;overflow:hidden;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start;margin-bottom:10px}.system-vermine2047 .sheet-header .profile-img{-webkit-box-flex:0;-ms-flex:0 0 100px;flex:0 0 100px;height:100px;margin-right:10px}.system-vermine2047 .sheet-header .header-fields{-webkit-box-flex:1;-ms-flex:1;flex:1}.system-vermine2047 .sheet-header h1.charname{height:50px;padding:0px;margin:5px 0;border-bottom:0}.system-vermine2047 .sheet-header h1.charname input{width:100%;height:100%;margin:0}.system-vermine2047 .sheet-tabs{-webkit-box-flex:0;-ms-flex:0;flex:0}.system-vermine2047 .sheet-body .tab,.system-vermine2047 .sheet-body .tab .editor{height:100%;min-width:100%}.system-vermine2047 .sheet-body .tab .editor{min-height:75px;margin-bottom:1rem;min-width:100%}.system-vermine2047 .sheet-body .tab .editor .editor-content{min-width:100%;min-height:3rem}.system-vermine2047 editor:hover .editor-edit{display:block}.system-vermine2047 .tox{min-height:25vh}.system-vermine2047 .tox .tox-editor-container{background:#fff}.system-vermine2047 .tox .tox-edit-area{padding:0 8px}.system-vermine2047 .resource-label{font-weight:bold}.system-vermine2047 .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-header>*{font-size:14px;text-align:center}.system-vermine2047 .items-header .item-name{font-weight:bold;padding-left:5px;text-align:left;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list{list-style:none;margin:0;padding:0;overflow-y:auto;scrollbar-width:thin;color:#444}.system-vermine2047 .items-list .item-list{list-style:none;margin:0;padding:0}.system-vermine2047 .items-list .item-name{-webkit-box-flex:2;-ms-flex:2;flex:2;margin:0;overflow:hidden;font-size:13px;text-align:left;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex}.system-vermine2047 .items-list .item-name h3,.system-vermine2047 .items-list .item-name h4{margin:0;white-space:nowrap;overflow-x:hidden}.system-vermine2047 .items-list .item-controls{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:0;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.system-vermine2047 .items-list .item-controls a{font-size:12px;text-align:center;margin:0 6px}.system-vermine2047 .items-list .item{-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0 2px;border-bottom:1px solid #c9c7b8}.system-vermine2047 .items-list .item:last-child{border-bottom:none}.system-vermine2047 .items-list .item .item-name{color:#191813}.system-vermine2047 .items-list .item .item-name .item-image{-webkit-box-flex:0;-ms-flex:0 0 30px;flex:0 0 30px;height:30px;background-size:30px;border:none;margin-right:5px}.system-vermine2047 .items-list .item-prop{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .items-list .items-header{height:28px;margin:2px 0;padding:0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:rgba(0,0,0,.05);border:2px groove #eeede0;font-weight:bold}.system-vermine2047 .items-list .items-header>*{font-size:12px;text-align:center}.system-vermine2047 .items-list .items-header .item-name{padding-left:5px;text-align:left}.system-vermine2047 .item-formula{-webkit-box-flex:0;-ms-flex:0 0 200px;flex:0 0 200px;padding:0 8px}.system-vermine2047 .effects .item .effect-source,.system-vermine2047 .effects .item .effect-duration,.system-vermine2047 .effects .item .effect-controls{text-align:center;border-left:1px solid #c9c7b8;border-right:1px solid #c9c7b8;font-size:12px}.system-vermine2047 .effects .item .effect-controls{border:none}.chat-message .message-header{line-height:20px;color:#fff;text-shadow:0px 0px 5px #000;background:rgba(25,24,19,.368627451)}span.game-mode{font-family:"DistressBlack",sans-serif;position:absolute;margin-left:auto;color:rgba(0,0,0,0);top:1rem;z-index:900;width:55%;text-align:center;text-transform:uppercase;font-weight:900;background:linear-gradient(180deg, rgba(255, 255, 255, 0.767) 0%, rgba(0, 0, 0, 0.61) 17%, rgba(0, 0, 0, 0.548) 19%, rgba(222, 255, 221, 0.575) 24%, rgba(255, 255, 255, 0.637) 43%, rgba(0, 0, 0, 0.486) 47%, rgba(254, 255, 254, 0.466) 50%, rgba(0, 0, 0, 0.699) 63%, rgba(134, 160, 137, 0.479) 64%, rgba(213, 248, 210, 0.493) 100%);background-clip:text}span.game-mode#game-mode-1{color:rgba(235,218,143,.8)}span.game-mode#game-mode-2{color:#83f883}span.game-mode#game-mode-3{color:rgba(245,124,124,.8)}ol#chat-log header.message-header{background-color:#000;padding:0 1rem}ol#chat-log .vermine-roll-message{overflow:hidden;box-shadow:0px 0px 30px #fff inset;padding:0;position:relative}ol#chat-log .vermine-roll-message .flexrow{align-items:center;box-shadow:0px 5px 10px 0px #000}ol#chat-log .vermine-roll-message h3,ol#chat-log .vermine-roll-message h4{text-transform:uppercase;font-family:"DistressBlack";margin-top:1rem;border-bottom:none;font-weight:900;font-weight:900;background:50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message h3+span,ol#chat-log .vermine-roll-message h4+span{font-family:"DistressBlack";font-size:large;text-transform:unset;padding-left:2rem;background:-100% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message h3+span#allowed_reroll,ol#chat-log .vermine-roll-message h4+span#allowed_reroll{font-size:large}ol#chat-log .vermine-roll-message h3{background:url(/systems/vermine2047/assets/images/ui/scotch.webp);background-position:center;background-size:200%}ol#chat-log .vermine-roll-message h4{text-align:end}ol#chat-log .vermine-roll-message div.roll-total{transform:rotate(-3deg) scale(1.3) translateX(2rem) translateY(0.5rem);background:url(/systems/vermine2047/assets/images/ui/scotch.webp);background-position:center;background-size:200%;margin-bottom:2rem;padding:0;z-index:1}ol#chat-log .vermine-roll-message div.reroll{padding:0 2rem;padding-bottom:2rem;justify-content:end;text-align:center}ol#chat-log .vermine-roll-message div.reroll button{text-transform:uppercase;font-family:"DistressBlack";margin-top:1rem;box-shadow:0px 0px 3px #000;background:50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp)}ol#chat-log .vermine-roll-message ul.roll-results{list-style:none}ol#chat-log .vermine-roll-message ul.roll-results li.die{position:relative;max-width:3rem;line-height:3rem;float:left;margin:.2rem;background-image:url(/icons/dice/d10black.svg);background-position:center;background-repeat:no-repeat;background-size:contain;font-weight:800;font-size:1rem;color:#fff;text-align:center;transition:.3s;border-bottom:5px solid red;border-radius:2rem}ol#chat-log .vermine-roll-message ul.roll-results li.die::after{content:"";position:absolute;top:-1rem;text-wrap:nowrap;color:#000;font-weight:100;font-size:smaller;text-align:center;opacity:0}ol#chat-log .vermine-roll-message ul.roll-results li.die:hover::after{opacity:1}ol#chat-log .vermine-roll-message ul.roll-results li.die.human,ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted{border-top:5px solid #ffd900}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerollable{cursor:pointer}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerollable:hover{transform:translateY(0.5rem)}ol#chat-log .vermine-roll-message ul.roll-results li.die.success{border-bottom:5px solid #008f07}ol#chat-log .vermine-roll-message ul.roll-results li.die.adapted::after{content:"adapté"}ol#chat-log .vermine-roll-message ul.roll-results li.die.human::after{content:"humain"}ol#chat-log .vermine-roll-message ul.roll-results li.die.rerolled{transform:translateY(0rem)}ol#chat-log .vermine-roll-message ul.roll-results li.die span{text-align:center;font-size:larger;text-shadow:0px 0px 8px #000} \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..3266472 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,40 @@ +'use strict'; + +const gulp = require('gulp'); +const sass = require('gulp-sass')(require('sass')); +var browserSync = require('browser-sync').create(); + +function buildStyles() { + return gulp.src('./scss/vermine2047.scss') + .pipe(sass({ outputStyle: 'compressed' }).on('error', sass.logError)) + .pipe(gulp.dest('./css')) + .pipe(browserSync.stream()); + + +}; +function reloadTemplatesHTML() { + + return browserSync.reload("templates/**/*.html") +} + +function reloadTemplatesHBS() { + + return browserSync.reload("templates/**/*.hbs") +} +exports.buildStyles = buildStyles; +exports.watch = function () { + browserSync.init( + { + server: false, + proxy: { + target: "https://localhost:443/", + ws: true, + } + + } + ); + gulp.watch("./templates/**/*.html").on('change', reloadTemplatesHTML); + gulp.watch("./templates/**/*.hbs").on('change', reloadTemplatesHBS); + gulp.watch(['./scss/**/*.scss', './scss/*.scss'], buildStyles); + +}; diff --git a/lang/en.json b/lang/en.json index d80f472..a36710c 100644 --- a/lang/en.json +++ b/lang/en.json @@ -2,396 +2,506 @@ "SETTINGS": { "world": { "game_mode": { - "name":"Choix du mode de jeu", - "hint":"À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers." + "name": "Game Mode Selection", + "hint": "Just like some video games offer different modes, Vermine 2047 lets players choose their Game Mode and set the degree of realism, supernatural and dangerosity of the universe themselves." }, "first_run": { - "name":"Affichage du tour d'accueil", - "hint":"Pour aider les débutantEs à bien commencer avec le système Vermine 2047." + "name": "First Run Display", + "hint": "To help beginners get started with the Vermine 2047 system." } } }, - "VERMINE.WorldSettings.GameMode.Name":"Choix du mode de jeu", - "VERMINE.WorldSettings.GameMode.Hint":"À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers.", + "VERMINE.WorldSettings.GameMode.Name": "Game Mode Selection", + "VERMINE.WorldSettings.GameMode.Hint": "Just like some video games offer different modes, Vermine 2047 lets players choose their Game Mode and set the degree of realism, supernatural and dangerosity of the universe themselves.", "GAME_MODES": { - "heroic": { "name": "Héroique"}, - "epic": { "name": "Epique"}, - "legendary": { "name": "Légendaire"} + "heroic": { + "name": "Heroic" + }, + "epic": { + "name": "Epic" + }, + "legendary": { + "name": "Legendary" + } }, "ROLLS": { - "tool": "Lanceur de dés", - "roll_dice": "Jeter les dés" - }, + "tool": "Dice Roller", + "roll_dice": "Roll the dice" + }, "TOURS": { - "ChatMessage": "

Bienvenue dans Vermine!

Si vous utilisez ce système pour la première fois, notre shaman va vous guider vers votre rite d'initiation

", + "ChatMessage": "

Welcome to Vermine!

If you're using this system for the first time, our shaman will guide you to your initiation rite

", "Welcome": { - "Title": "Bienvenue dans Vermine", - "Description": "Aperçu du système Vermine", - "WelcomeTitle": "Bienvenue", - "WelcomeContent": "

Bienvenue dans Vermine, survivantE ! Faire le tour de notre zone d'action te permettre de retrouver tes marques, même si c'est ton premier jour parmi nous.

En haut de la colonne de droite, tu as tout ce que tu as le droit de faire chez nous : parler, voir les autres tronches de ta commu, gérer ton matos et celui de tes potes, étudier les cartes, lire les journaux des clamsés, aller nous chercher de la bouffe à coups de surin. Entrons dans le vif du sujet.

", - "ActorTabTitle": "Peupler son univers", - "ActorTabContent": "

Bien installéE, survivantE ? Tournons pas au tour du pot, si tu veux rester avec nous, va falloir nous dire qui tu es, d'où tu viens, et à qui tu fais confiance. Une fois que t'es prêtE pour ca, clique donc sur le bouton \"Créer un acteur\"

", - "CharacterCreateTitle": "Créer un groupe", - "CharacterCreateContent": "

Ce bouton crée une fiche de groupe, parce que c'est par là qu'on commence, dans ce trou ! Ta tronche viendra ensuite, quand tu créeras ta fiche de personnage. Au fur et à mesure que tu progresses, tu voudras peut-être rajouter des infos sur ce que tu vois trainer autour du camp.

", - "CompendiumTitle": "Cartes", - "CompendiumContent": "

Vous aurez probablement besoin d'une carte des Terres de Fer ou d'un secteur de la Forge. Vous pouvez créer votre propre scène pour cela, ou vous pouvez utiliser l'une des nôtres. Ouvrez l'un de ces compendiums et faites glisser une carte dans votre zone de scènes (l'onglet qui ressemble à une carte pliée).

", + "Title": "Welcome to Vermine", + "Description": "Overview of the Vermine system", + "WelcomeTitle": "Welcome", + "WelcomeContent": "

Welcome to Vermine, survivor! Take a tour of our action zone to find your bearings, even if it's your first day among us.

At the top of the right column, you have everything you're allowed to do here: talk, see other tronches of your commu, manage your matos and that of your potes, study the maps, read the journals of the clamsés, go get us some food with your surin. Let's get into the thick of it.

", + "ActorTabTitle": "Populate your universe", + "ActorTabContent": "

Well installed, survivor? Let's not turn around the pot, if you want to stay with us, you'll have to tell us who you are, where you come from, and who you trust. Once you're ready for that, click on the \"Create an actor\" button

", + "CharacterCreateTitle": "Create a group", + "CharacterCreateContent": "

This button creates a group file, because that's where we start, in this trou! Your tronche will come later, when you create your character file. As you progress, you might want to add some info on what you see around the camp.

", + "CompendiumTitle": "Maps", + "CompendiumContent": "

You will probably need a map of the Iron Lands or a sector of the Forge. You can create your own scene for that, or you can use one of ours. Open one of these compendiums and drag a map into your scene tab (the tab that looks like a folded map).

", "OracleToolTitle": "Totem", - "OracleToolContent": "

Aucune partie d'Vermine ou Starforged ne serait complète sans oracles. Ce bouton fera apparaître une fenêtre avec tous les oracles du jeu choisi. Les oracles sont également disponibles depuis la fiche de personnage.

", - "ToursTitle": "Prochaines étapes", - "ToursContent": "

Tu t'en sors pas si mal ! Moi je vais te laisser là, mais si tu as d'autres questions, tu peux venir me trouver. Si ca concerne la mécanique, inscris-toi dans notre groupe de parole, par là Totem Foundry Discord. Sinon, tu peux rejoindre la place centrale par ici Vermine Discord

Enjoy!

" + "OracleToolContent": "

No game of Vermine or Starforged would be complete without oracles. This button will open a window with all the oracles of the chosen game. The oracles are also available from the character sheet.

", + "ToursTitle": "Next steps", + "ToursContent": "

You're not doing too badly! I'll leave you there, but if you have any questions, you can come find me. If it's about the mechanics, sign up for our group of speech, over there Totem Foundry Discord. Otherwise, you can join the central place over here Vermine Discord

Enjoy!

" } }, "DIFFICULTY_LEVELS": { - "obvious": "Evidente", - "easy": "Facile", - "hard": "Difficile", - "very_hard": "Très difficile", + "obvious": "Obvious", + "easy": "Easy", + "hard": "Hard", + "very_hard": "Very hard", "impossible": "Impossible" }, "ATTITUDES": { - "offensive": { "name": "Offensif"}, - "active": { "name": "Actif"}, - "passive": { "name": "Passif"} + "offensive": { + "name": "Offensive" + }, + "active": { + "name": "Active" + }, + "passive": { + "name": "Passive" + } }, "AGE_TYPES": { - "young": "Jeune", - "adult": "Adulte", - "old": "Vieux" + "young": "Young", + "adult": "Adult", + "old": "Old" }, "IDENTITY": { - "name": "Nom", - "height": "Taille", - "weight": "Poids", + "name": "Name", + "height": "Height", + "weight": "Weight", "totem": "Totem", "age": "Age", - "gender": "Sexe", - "profile": "Profil", - "origin": "Origine", + "gender": "Gender", + "profile": "Profile", + "origin": "Origin", "theme": "Concept", "instincts": "Instincts", - "prohibits": "Interdits", - "objectives": "Objectifs", + "prohibits": "Prohibits", + "objectives": "Objectives", "relations": "Relations", - "morale":"Moral", - "morale_level": "Niveau de moral", + "morale": "Morale", + "morale_level": "Morale level", "notes": "Notes" }, "ADVERSITY": { - "threat": "Menace", - "experience": "Expérience", - "role": "Rôle", - "attack": "Attaque", - "damage": "Dommages", - "weapon": "Arme", - "vigor": "Vigueur", - "wounds": "Blessures", + "threat": "Threat", + "experience": "Experience", + "role": "Role", + "attack": "Attack", + "damage": "Damage", + "weapon": "Weapon", + "vigor": "Vigor", + "wounds": "Wounds", "action": "Action", - "specialties": "Spécialité", - "rerolls": "Relances", + "specialties": "Specialty", + "rerolls": "Rerolls", "contact": "Contact", - "reaction": "Réaction", - "pools":"Réserves", - "gear": "Matériel", + "reaction": "Reaction", + "pools": "Reserves", + "gear": "Gear", "protection": "Protection", - "skills": "Compétences", - "pattern": "Gabarit", - "size": "Taille", - "pack": "Groupe" + "skills": "Skills", + "pattern": "Pattern", + "size": "Size", + "pack": "Group" }, - "VERMINE": { "name": "Vermine", - "stats": "Statistiques", - "level": "Niveau", - "experience": "Expérience", - "reputation": "Réputation", - "pool": "Réserve", - "pools": "Réserves", - "self_control": "Sang-Froid", + "stats": "Statistics", + "level": "Level", + "experience": "Experience", + "reputation": "Reputation", + "pool": "Reserve", + "pools": "Reserves", + "self_control": "Self-control", "effort": "Effort", - "group": "Groupe", - "abilities":"Caractéristiques", - "ability":"Caractéristique", - "skills_title":"Compétences", - "skill_title":"Compétence", - "skill_mastery":"Maîtrise", - "bonus":"Bonus", - "penalty":"Malus", - "reroll":"Relance", - "equipment":"Equipement", - "specialty":"Spécialité", - "technique":"Technique", - "techniques":"Techniques", - "difficulty":"Difficulté", - "help":"Entraide", - "tooling":"Equipement", - "quantity": "Quantité", - "qty": "Qté", - "weight": "Poids", + "group": "Group", + "abilities": "Characteristics", + "ability": "Characteristic", + "skills_title": "Skills", + "skill_title": "Skill", + "skill_mastery": "Mastery", + "bonus": "Bonus", + "penalty": "Penalty", + "reroll": "Reroll", + "equipment": "Equipment", + "specialty": "Specialty", + "technique": "Technique", + "techniques": "Techniques", + "difficulty": "Difficulty", + "help": "Help", + "tooling": "Equipment", + "quantity": "Quantity", + "qty": "Qty", + "weight": "Weight", "dmg": "Dmg", - "damage": "Dommage", - "damages": "Dommages", - "range": "Portée", - "ranges": "Portées", - "mobility": "Mobilité", - "rarity": "Rareté", + "damage": "Damage", + "damages": "Damages", + "range": "Range", + "ranges": "Ranges", + "mobility": "Mobility", + "rarity": "Rarity", "rarity_sm": "Rar.", - "reliability": "Fiabilité", + "reliability": "Reliability", "reliability_sm": "Fiab.", - "wounds":{ - "name":"Blessures", - "threshold": "Seuil", - "light":"Légère", - "heavy": "Grave", - "deadly": "Mortelle", - "light_wounds":"Blessure légère", - "heavy_wounds":"Blessure grave", - "deadly_wounds":"Blessure mortelle" + "wounds": { + "name": "Wounds", + "threshold": "Threshold", + "light": "Light", + "heavy": "Heavy", + "deadly": "Deadly", + "light_wounds": "Light wounds", + "heavy_wounds": "Heavy wounds", + "deadly_wounds": "Deadly wounds" }, - "ammo": "Munitions", + "ammo": "Ammo", "ammo_sm": "Mun", "trait": "Trait", "traits": "Traits", - "clew": "Indice", + "clew": "Clue", "combat": "Combat", - "stories": "Histoires", - "gear": "Matériel", - "information": "Informations", - "boost": "boost", - "group_abilities": "Capacités de groupe", - "totem_abilities": "Capacités de totem", - "type_group": "Groupe", - "type_character": "Personnage", - "type_npc": "PNJ", - "type_creature": "Créature", + "stories": "Stories", + "gear": "Gear", + "information": "Information", + "boost": "Boost", + "group_abilities": "Group abilities", + "totem_abilities": "Totem abilities", + "type_group": "Group", + "type_character": "Character", + "type_npc": "NPC", + "type_creature": "Creature", "type": "Type", - "group_members": "Membres", - "encounters": "Rencontres", - "road": "La Route", - "totem_picker": "Sélecteur de totem", - "actor_picker": "Sélecteur de personnage" + "group_members": "Members", + "encounters": "Encounters", + "road": "The Road", + "totem_picker": "Totem picker", + "actor_picker": "Actor picker" }, "UI": { - "add": "Ajouter", - "source":"Source", - "duration":"Durée", - "effect_toggle":"Basculer un effet", - "effect_edit":"Modifier un effet", - "effect_delete":"Détruire un effet", - "effect_create":"Créer un effet", + "add": "Add", + "source": "Source", + "duration": "Duration", + "effect_toggle": "Toggle effect", + "effect_edit": "Edit effect", + "effect_delete": "Delete effect", + "effect_create": "Create effect", "effects": { - "name": "Effets", - "temporary": "Effets temporaires", - "passive": "Effets passifs", - "inactive": "Effets inactifs" + "name": "Effects", + "temporary": "Temporary effects", + "passive": "Passive effects", + "inactive": "Inactive effects" } }, "ITEMS": { "defense": "Protection", "defenses": "Protections", - "new_defense": "Nouvelle protection", - "weapon": "Arme", - "new_weapon": "Nouvelle arme", - "weapons": "Armes", - "new_background": "Nouvel historique", - "backgrounds": "Historiques", - "new_trauma": "Nouveau traumatisme", - "traumas": "Traumatismes", - "rumor": "Rumeur", - "new_rumor": "Nouvelle rumeur", - "rumors": "Rumeurs", - "ability": "Capacité", - "new_ability": "Nouvelle capacité", - "abilities": "Capacités", - "specialties": "Spécialités", - "new_specialty": "Nouvelle spécialité", + "new_defense": "New protection", + "weapon": "Weapon", + "new_weapon": "New weapon", + "weapons": "Weapons", + "new_background": "New background", + "backgrounds": "Backgrounds", + "new_trauma": "New trauma", + "traumas": "Traumas", + "rumor": "Rumor", + "new_rumor": "New rumor", + "rumors": "Rumors", + "ability": "Ability", + "new_ability": "New ability", + "abilities": "Abilities", + "specialties": "Specialties", + "new_specialty": "New specialty", "evolution": "Adaptation", - "new_evolution": "Nouvelle adaptation", + "new_evolution": "New adaptation", "evolutions": "Adaptations", - "new_vehicle": "Nouveau véhicule", - "vehicles": "Véhicules", - "new_objective": "Nouvel objectif", - "learning": "Apprentissage", - "cost": "Coût", - "rituel": "Rituel", - "transe": "Transe", - "effects": "Effets", - "details": "Détails" + "new_vehicle": "New vehicle", + "vehicles": "Vehicles", + "new_objective": "New objective", + "learning": "Learning", + "cost": "Cost", + "rituel": "Ritual", + "transe": "Trance", + "effects": "Effects", + "details": "Details" }, "ABILITIES": { - "vigor": { "name": "Vigueur"}, - "health": { "name": "Santé"}, - "precision":{ "name": "Précision"}, - "reflexes":{ "name": "Réflexes"}, - "knowledge":{ "name": "Savoir"}, - "perception":{ "name": "Perception"}, - "will":{ "name": "Volonté"}, - "empathy":{ "name": "Empathie"} + "vigor": { + "name": "Vigor" + }, + "health": { + "name": "Health" + }, + "precision": { + "name": "Precision" + }, + "reflexes": { + "name": "Reflexes" + }, + "knowledge": { + "name": "Knowledge" + }, + "perception": { + "name": "Perception" + }, + "will": { + "name": "Will" + }, + "empathy": { + "name": "Empathy" + } }, "SKILL_LEVELS": { - "beginner": "Débutant", - "proficient": "Confirmé", - "expert":"Expert", - "master":"Maître", - "legend":"Légende" + "incompetent": "Incompetent", + "beginner": "Beginner", + "proficient": "Proficient", + "expert": "Expert", + "master": "Master", + "legend": "Legend" }, "THREAT_LEVELS": { - "minor": "Mineure", - "serious": "Sérieuse", - "major":"Majeure", - "deadly":"Mortelle" + "minor": "Minor", + "serious": "Serious", + "major": "Major", + "deadly": "Deadly" }, "ROLE_LEVELS": { - "minor": "Mineur", - "secondary": "Secondaire", - "important":"Important", - "major":"Majeur" + "minor": "Minor", + "secondary": "Secondary", + "important": "Important", + "major": "Major" }, "PATTERN_LEVELS": { - "insect": "Insecte", + "insect": "Insect", "rat": "Rat", - "dog":"Chien", - "bear":"Ours" + "dog": "Dog", + "bear": "Bear" }, "TOTEMS": { - "human": { - "name": "L'Humain", - "number":1, - "description":"", - "instincts" : "", - "bans" : "", + "human": { + "name": "Human", + "number": 1, + "description": "", + "instincts": "", + "bans": "", "opposite": "adapted" }, - "predator": { - "name": "Le prédateur", - "number":2, - "description":"Totem emblématique, le Prédateur a toujours été l’un des plus répandus dans le règne animal, et il reste de loin celui qui influence le plus grand nombre d’espèces aujourd’hui. On l’observe aussi bien chez les mammifères que chez de minuscules insectes, en meute comme en solitaire. Il inspire les comportements de traque, de chasse et d’affrontement essentiels à l’alimentation, mais il ne prône qu’une violence justifiée, nécessaire et vitale. Selon les peuples et les cultures, il a longtemps été symbolisé par le lion, l’aigle ou le chasseur, et ses valeurs guerrières ont toujours revêtu une certaine forme de noblesse. Un prédateur ne tue pas : il triomphe. Un prédateur ne fuit pas : il perd, ou il meurt", - "instincts" : "Triompher, relever un défi, prendre l’initiative, atteindre un objectif.", - "bans" : "Fuir, abandonner, renoncer,faire preuve de lâcheté.", - "behaviour" : "Déterminé, implacable,courageux, dominant.", + "predator": { + "name": "Predator", + "number": 2, + "description": "Totem emblematic, the Predator has always been one of the most widespread in the animal kingdom, and it remains by far the one that influences the greatest number of species today. It is observed as well in mammals as in tiny insects, in packs as in solitaries. It inspires hunting, chasing and fighting behaviors essential to feeding, but it only preaches a justified, necessary and vital violence. Depending on peoples and cultures, it has long been symbolized by the lion, the eagle or the hunter, and its warrior values have always taken a certain form of nobility. A predator does not kill: it triumphs. A predator does not flee: it loses, or it dies", + "instincts": "Triumph, overcome a challenge, take the initiative, achieve a goal.", + "bans": "Flee, abandon, renounce, show cowardice.", + "behaviour": "Determined, implacable,courageous, dominant.", "opposite": "scavenger" }, - "scavenger": { - "name": "Le Charognard", - "number":3, - "description":"Dans un écosystème dominé par la loi du plus fort, certains ont pris le parti d’attendre que la mort fasse son œuvre, quitte à se contenter des restes. Poissons de fond, plantes carnivores, pillards, insectes nécrophages, vautours ou meutes de loups trop faibles pour s’attaquer seuls aux proies de grande taille : le Charognard inspire toutes les espèces qui ont fait de la patience une de leurs rares vertus, et misent sur la faiblesse, la blessure, la fatigue ou l’opportunité pour se nourrir. Il règne sur les régions hostiles où le soleil, la chaleur ou le froid font son jeu, et se développe souvent dans l’ombre du Prédateur, avec qui il entretient une relation quasi symbiotique", - "instincts" : "Achever, saboter, affaiblir, s’en prendre au plus faible.", - "bans" : "Affronter, s’exposer, agir de façon compulsive, s’apitoyer.", - "behaviour" : "Sournois, calculateur, impitoyable", + "scavenger": { + "name": "Scavenger", + "number": 3, + "description": "In an ecosystem dominated by the law of the strongest, some have taken the party to wait for death to do its work, even if it means settling for the remains. Fish from the bottom, carnivorous plants, scavengers, necrophagous insects, vultures or packs of wolves too weak to attack the prey alone: the Scavenger inspires all the species that have made patience one of their rare virtues, and bet on weakness, injury, fatigue or opportunity to feed. It reigns over hostile regions where the sun, the heat or the cold make its game, and often develops in the shadow of the Predator, with which it maintains a quasi symbiotic relationship", + "instincts": "Finish, sabotage, weaken, attack the weakest.", + "bans": "Face, expose, act compulsively, pity.", + "behaviour": "Sly, calculating, pitiless", "opposite": "predator" }, - "symbiote": { - "name": "Le Symbiote", - "number":4, - "description":"Symbole d’entraide, d’équilibre et d’harmonie, le Symbiote se définit par la relation d’échange et de réciprocité où chaque partie profite de ce que l’autre apporte, quels que soient ses besoins ou ses motivations. Très courante dans le règne végétal, où de nombreuses fleurs et plantes l’ont instaurée avec les pollinisateurs, cette relation de symbiose s’observe également chez les insectes, les mammifères et les êtres humains. Elle peut être ponctuelle, issue des liens du sang, liée à un territoire ou un projet commun, et rien ne l’empêche d’être motivée par le profit ou l’intérêt, tant qu’elle est réciproque – ce qui distingue le Symbiote du Parasite.", - "instincts" : "Partager, transmettre, équilibrer, trouver un compromis", - "bans" : "Exploiter, abuser, profiter de la faiblesse, mettre en danger", - "behaviour" : "Bienveillant, responsable, diplomate, modéré.", + "symbiote": { + "name": "Symbiote", + "number": 4, + "description": "Symbol of mutual aid, balance and harmony, the Symbiote is defined by the relationship of exchange and reciprocity where each party benefits from what the other brings, whatever its needs or motivations. Very common in the plant kingdom, where many flowers and plants have established it with pollinators, this symbiotic relationship is also observed in insects, mammals and human beings. It can be punctual, stemming from blood ties, linked to a territory or a common project, and nothing prevents it from being motivated by profit or interest, as long as it is reciprocal – which distinguishes the Symbiote from the Parasite.", + "instincts": "Share, transmit, balance, find a compromise", + "bans": "Exploit, abuse, profit from weakness, put in danger", + "behaviour": "Well-intentioned, responsible, diplomatic, moderate.", "opposite": "parasite" }, - "parasite": { - "name": "Le Parasite", - "number":5, - "description":"Totem des infections, des basses œuvres et des épidémies, le Parasite a toujours joué un rôle funeste dans le destin de l’humanité, jusqu’à en devenir le fléau. Symbolisé par les moustiques, il s’observe également chez de nombreux champignons, végétaux et insectes incapables de survivre, de se nourrir ou de se reproduire sans un hôte, et toujours à ses dépens. Le Parasite exploite, profite, abuse sans états d’âme, mu par la seule démarche de prendre ce qu’un autre possède et dont il a besoin. Avec le Prédateur, c’est l’un des Totems les plus présents et les plus redoutés, tant les comportements qu’il inspire peuvent ruiner tout espoir de survie.", - "instincts" : "Profiter, manipuler, voler, exploiter.", - "bans" : "Partager, contribuer, tenir une promesse, prendre par la force", - "behaviour" : "Manipulateur, menteur, égoïste, profiteur", + "parasite": { + "name": "The Parasite", + "number": 5, + "description": "Totem of infections, low works and epidemics, the Parasite has always played a sinister role in the destiny of humanity, until becoming its scourge. Symbolized by mosquitoes, it is also observed in many fungi, plants and insects unable to survive, feed or reproduce without a host, and always at its expense. The Parasite exploits, profits, abuses without remorse, driven by the sole approach of taking what another possesses and needs. Along with the Predator, it is one of the most present and most feared Totems, as the behaviors it inspires can ruin all hope of survival.", + "instincts": "Profit, manipulate, steal, exploit.", + "bans": "Share, contribute, keep a promise, take by force", + "behaviour": "Manipulator, liar, selfish, profiteer", "opposite": "symbiote" }, - "builder": { - "name": "Le Bâtisseur", - "number":6, - "description":"Souvent confondu avec la Ruche en raison des constructions géantes typiques de certaines espèces sociales, le Bâtisseur n’est pas le Totem de la communauté, mais celui de la fondation. À l’image des termites, des castors, de la plupart des oiseaux ou de certaines espèces d’araignées, il se caractérise par l’acte de construction, de création ou de modification, et s’observe aussi bien chez des groupes que chez des individus. Avec la Ruche, le Symbiote et la Horde, c’est l’un des Totems les plus courants chez les communautés humaines, dont il inspire les édifices, les inventions et les réparations.", - "instincts" : "Fonder, créer, s’installer durablement, nouer des liens.", - "bans" : "Détruire, saboter, quitter une communauté, provoquer le chaos", - "behaviour" : "Réfléchi, organisé, pragmatique, constant.", + "builder": { + "name": "The Builder", + "number": 6, + "description": "Often confused with the Hive due to the giant constructions typical of certain social species, the Builder is not the Totem of the community, but that of the foundation. In the image of termites, beavers, most birds or certain species of spiders, it is characterized by the act of construction, creation or modification, and is observed as well in groups as in individuals. Along with the Hive, the Symbiote and the Horde, it is one of the most common Totems among human communities, which it inspires with buildings, inventions and repairs.", + "instincts": "Found, create, settle permanently, forge links.", + "bans": "Destroy, sabotage, leave a community, provoke chaos", + "behaviour": "Reflective, organized, pragmatic, constant.", "opposite": "horde" }, - "horde": { - "name": "La Horde", - "number":7, - "description":"Fléau des cultures depuis la nuit des temps, la Horde est à l’image des nuées de criquets, des meutes de carnivores ou des tribus de nomades qui la représentent : imprévisible, impitoyable et sans visage. Au-delà de ses aspects collectifs, ce Totem redoutable se caractérise surtout par sa violence et sa méthode d’action. Là où le Prédateur tue, la Horde brûle, pille, dévaste pour parvenir à ses fins sans le moindre état d’âme. Elle inspire ceux qui prennent par la force, qui détruisent, qui ravagent et qui refusent toute forme de compromis, quelles que soient leur démarche ou leurs motivations.", - "instincts" : "Piller, détruire, prendre par la force, miser sur le nombre", - "bans" : "Négocier, épargner, faire des réserves, planifier à long terme.", - "behaviour" : "Violent, imprévisible, destructeur, radical.", + "horde": { + "name": "The Horde", + "number": 7, + "description": "Scourge of cultures since time immemorial, the Horde is in the image of swarms of locusts, packs of carnivores or nomadic tribes that represent it: unpredictable, pitiless and faceless. Beyond its collective aspects, this formidable Totem is characterized above all by its violence and method of action. Where the Predator kills, the Horde burns, plunders, devastates to achieve its ends without the slightest remorse. It inspires those who take by force, who destroy, who ravage and who refuse any form of compromise, whatever their approach or motivations.", + "instincts": "Pillage, destroy, take by force, rely on numbers", + "bans": "Negotiate, spare, make reserves, plan in the long term.", + "behaviour": "Violent, unpredictable, destructive, radical.", "opposite": "builder" }, - "hive": { - "name": "La Ruche", - "number":8, - "description":"Fourmis, abeilles, termites, factions aux règles strictes : la Ruche est le Totem des créatures sociales et des communautés humaines par excellence. Des cellules familiales aux multinationales, des meutes organisées aux super-colonies de plusieurs milliards d’individus, la Ruche est caractérisée par l’organisation, la hiérarchie, le dévouement et la conscience aigüe du rôle que chacun doit jouer dans l’intérêt commun, plus que par la notion de communauté elle-même. Elle s’appuie bien souvent sur un ensemble de règles, des tâches attribuées, des rôles identifiés – une philosophie qui proscrit tout individualisme et condamne toute désobéissance.", - "instincts" : "Organiser, œuvrer pour la communauté, respecter la hiérarchie, privilégier l’intérêt collectif", - "bans" : "trahir, désobéir, mettre sa communauté en danger, faire preuve d’individualisme.", - "behaviour" : "Méthodique, autoritaire, consciencieux, rigide", + "hive": { + "name": "The Hive", + "number": 8, + "description": "Ants, bees, termites, factions with strict rules: the Hive is the Totem of social creatures and human communities par excellence. From family cells to multinationals, from organized packs to super-colonies of several billion individuals, the Hive is characterized by organization, hierarchy, dedication and a keen awareness of the role that each must play in the common interest, more than by the notion of community itself. It often relies on a set of rules, assigned tasks, identified roles - a philosophy that proscribes individualism and condemns disobedience.", + "instincts": "Organize, work for the community, respect the hierarchy, prioritize the collective interest", + "bans": "Betray, disobey, put one's community in danger, show individualism.", + "behaviour": "Methodical, authoritarian, conscientious, rigid", "opposite": "loner" }, - "loner": { - "name": "Le solitaire", - "number":9, - "description":"Survivre, quoi qu’il en coûte. Sans cruauté, sans états d’âme, mais à tout prix. À l’inverse de la Ruche qui loue le sacrifice s’il est accompli dans l’intérêt du groupe, le Solitaire incarne le plus fondamental des réflexes : celui de la survie. Ni individualiste, ni franchement égoïste, il fait seulement passer ses propres intérêts, ses urgences et ses nécessités avant tout, quitte à trahir, à décevoir, à quitter ou à tuer. Rien n’empêche un Solitaire de trouver une place durable dans un groupe, d’y jouer un rôle précis ou même de suivre des règles établies, tant qu’elles ne heurtent pas ses propres convictions et qu’elles ne mettent pas en péril son bien le plus précieux : sa vie.", - "instincts" : "Survivre, anticiper, s’adapter, faire passer sa vie avant tout", - "bans" : "Se sacrifier, risquer sa vie, dépendre de quelqu’un, se résigner.", - "behaviour" : "Indépendant, lucide, autonome, réactif.", + "loner": { + "name": "The Loner", + "number": 9, + "description": "Survive, whatever the cost. Without cruelty, without remorse, but at all costs. Unlike the Hive, which praises sacrifice if it is accomplished in the interest of the group, the Loner embodies the most fundamental of reflexes: that of survival. Neither individualistic nor frankly selfish, it simply puts its own interests, urgencies and necessities first, even if it means betraying, disappointing, leaving or killing. Nothing prevents a Loner from finding a lasting place in a group, playing a precise role or even following established rules, as long as they do not conflict with its own convictions and do not put its most precious asset in danger: its life.", + "instincts": "Survive, anticipate, adapt, put one's life first", + "bans": "Sacrifice oneself, risk one's life, depend on someone, resign.", + "behaviour": "Independent, lucid, autonomous, reactive.", "opposite": "hive" }, - "adapted": { - "name": "L'adapté", - "number":10, - "description":"Évoluer ou mourir. Changer ou disparaître. L’Adapté est le Totem de la nécessité, de la survie et de l’évolution. Ni positif, ni négatif, il est présent partout. Il est cette dynamique, ce principe fondamental qui rythme les mutations des espèces et qui rappelle que l’Homme est la seule forme de vie à tenter de contrôler sa propre évolution. L’Adapté ne possède ni Interdit, ni Instinct spécifique. Aucun comportement n’est inapproprié, s’il permet de faire face et de survivre, et les Instincts de tous les autres Totems le renforcent. Seul l’Humain lutte contre son influence…", - "instincts" : "Tous ceux des huit Totems majeurs", - "bans" : "Aucun…", + "adapted": { + "name": "The Adapted", + "number": 10, + "description": "Evolve or die. Change or disappear. The Adapted is the Totem of necessity, survival and evolution. Neither positive nor negative, it is present everywhere. It is this dynamic, this fundamental principle that rhythm the mutations of species and reminds us that Man is the only form of life trying to control its own evolution. The Adapted has no Forbidden, no Specific Instinct. No behavior is inappropriate, if it allows to cope and survive, and the Instincts of all other Totems reinforce it. Only Man fights against its influence...", + "instincts": "All those of the eight major Totems", + "bans": "None...", "opposite": "human" } }, "ABILITY_CATEGORIES": { - "physical": { "name": "Physique"}, - "manual": { "name": "Manuel"}, - "mental": { "name": "Mental"}, - "social": { "name": "Social"} + "physical": { + "name": "Physical" + }, + "manual": { + "name": "Manual" + }, + "mental": { + "name": "Mental" + }, + "social": { + "name": "Social" + } }, "SKILLS_CATEGORIES": { - "man": { "name": "L'Homme" }, - "animal": { "name": "L'Animal" }, - "tool": { "name": "L'Outil" }, - "weapon": { "name": "L'Arme" }, - "survival": { "name": "La Survie" }, - "world": { "name": "La Terre" } + "man": { + "name": "Man" + }, + "animal": { + "name": "Animal" + }, + "tool": { + "name": "Tool" + }, + "weapon": { + "name": "Weapon" + }, + "survival": { + "name": "Survival" + }, + "world": { + "name": "World" + } }, "SKILLS": { - "arts": { "name": "Arts"}, - "civilization": { "name": "Civilisations"}, - "psychology": { "name": "Psychologie"}, - "rumors": { "name": "Rumeurs"}, - "healing": { "name": "Soins"}, - "animalism": { "name": "Animalisme"}, - "dissection": { "name": "Dissection"}, - "wildlife": { "name": "Faune"}, - "repulsion": { "name": "Répulsion"}, - "tracks": { "name": "Traces"}, - "crafting": { "name": "Artisanat"}, - "diy": { "name": "Bricolage"}, - "mecanical": { "name": "Mécanique"}, - "piloting": { "name": "Pilotage"}, - "technology": { "name": "Technologie"}, - "firearms": { "name": "Armes à feu"}, - "armory": { "name": "Armurerie"}, - "shield": { "name": "Bouclier"}, - "close": { "name": "Corps-à-corps"}, - "archery": { "name": "Armes de tir"}, - "throwing": { "name": "Lancer"}, - "melee": { "name": "Mêlée"}, - "atletics": { "name": "Atlétisme"}, - "stealth": { "name": "Discrétion"}, - "alertness": { "name": "Vigilance"}, - "flora": { "name": "Flore"}, - "food": { "name": "Alimentation"}, - "environment": { "name": "Environnement"}, - "road": { "name": "Route"}, - "toxics": { "name": "Toxiques"}, - "ruins": { "name": "Vestiges"} + "arts": { + "name": "Arts" + }, + "civilization": { + "name": "Civilizations" + }, + "psychology": { + "name": "Psychology" + }, + "rumors": { + "name": "Rumors" + }, + "healing": { + "name": "Healing" + }, + "animalism": { + "name": "Animalism" + }, + "dissection": { + "name": "Dissection" + }, + "wildlife": { + "name": "Wildlife" + }, + "repulsion": { + "name": "Repulsion" + }, + "tracks": { + "name": "Tracks" + }, + "crafting": { + "name": "Crafting" + }, + "diy": { + "name": "DIY" + }, + "mecanical": { + "name": "Mechanical" + }, + "piloting": { + "name": "Piloting" + }, + "technology": { + "name": "Technology" + }, + "firearms": { + "name": "Firearms" + }, + "armory": { + "name": "Armory" + }, + "shield": { + "name": "Shield" + }, + "close": { + "name": "Melee" + }, + "archery": { + "name": "Ranged" + }, + "throwing": { + "name": "Throwing" + }, + "melee": { + "name": "Melee" + }, + "atletics": { + "name": "Athletics" + }, + "stealth": { + "name": "Stealth" + }, + "alertness": { + "name": "Alertness" + }, + "flora": { + "name": "Flora" + }, + "food": { + "name": "Food" + }, + "environment": { + "name": "Environment" + }, + "road": { + "name": "Road" + }, + "toxics": { + "name": "Toxics" + }, + "ruins": { + "name": "Ruins" + } }, "SEXES": { - "male": "Masculin", - "female":"Féminin" + "male": "Masculine", + "female": "Feminine" } } \ No newline at end of file diff --git a/lang/fr.json b/lang/fr.json new file mode 100644 index 0000000..67c8008 --- /dev/null +++ b/lang/fr.json @@ -0,0 +1,514 @@ +{ + "SETTINGS": { + "world": { + "game_mode": { + "name": "Choix du mode de jeu", + "hint": "À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers." + }, + "first_run": { + "name": "Affichage du tour d'accueil", + "hint": "Pour aider les débutantEs à bien commencer avec le système Vermine 2047." + } + } + }, + "VERMINE.WorldSettings.GameMode.Name": "Choix du mode de jeu", + "VERMINE.WorldSettings.GameMode.Hint": "À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers.", + "GAME_MODES": { + "heroic": { + "name": "Héroique" + }, + "epic": { + "name": "Epique" + }, + "legendary": { + "name": "Légendaire" + } + }, + "ROLLS": { + "tool": "Lanceur de dés", + "roll_dice": "Jeter les dés" + }, + "TOURS": { + "ChatMessage": "

Bienvenue dans Vermine!

Si vous utilisez ce système pour la première fois, notre shaman va vous guider vers votre rite d'initiation

", + "Welcome": { + "Title": "Bienvenue dans Vermine", + "Description": "Aperçu du système Vermine", + "WelcomeTitle": "Bienvenue", + "WelcomeContent": "

Bienvenue dans Vermine, survivantE ! Faire le tour de notre zone d'action te permettre de retrouver tes marques, même si c'est ton premier jour parmi nous.

En haut de la colonne de droite, tu as tout ce que tu as le droit de faire chez nous : parler, voir les autres tronches de ta commu, gérer ton matos et celui de tes potes, étudier les cartes, lire les journaux des clamsés, aller nous chercher de la bouffe à coups de surin. Entrons dans le vif du sujet.

", + "ActorTabTitle": "Peupler son univers", + "ActorTabContent": "

Bien installéE, survivantE ? Tournons pas au tour du pot, si tu veux rester avec nous, va falloir nous dire qui tu es, d'où tu viens, et à qui tu fais confiance. Une fois que t'es prêtE pour ca, clique donc sur le bouton \"Créer un acteur\"

", + "CharacterCreateTitle": "Créer un groupe", + "CharacterCreateContent": "

Ce bouton crée une fiche de groupe, parce que c'est par là qu'on commence, dans ce trou ! Ta tronche viendra ensuite, quand tu créeras ta fiche de personnage. Au fur et à mesure que tu progresses, tu voudras peut-être rajouter des infos sur ce que tu vois trainer autour du camp.

", + "CompendiumTitle": "Cartes", + "CompendiumContent": "

Vous aurez probablement besoin d'une carte des Terres de Fer ou d'un secteur de la Forge. Vous pouvez créer votre propre scène pour cela, ou vous pouvez utiliser l'une des nôtres. Ouvrez l'un de ces compendiums et faites glisser une carte dans votre zone de scènes (l'onglet qui ressemble à une carte pliée).

", + "OracleToolTitle": "Totem", + "OracleToolContent": "

Aucune partie d'Vermine ou Starforged ne serait complète sans oracles. Ce bouton fera apparaître une fenêtre avec tous les oracles du jeu choisi. Les oracles sont également disponibles depuis la fiche de personnage.

", + "ToursTitle": "Prochaines étapes", + "ToursContent": "

Tu t'en sors pas si mal ! Moi je vais te laisser là, mais si tu as d'autres questions, tu peux venir me trouver. Si ca concerne la mécanique, inscris-toi dans notre groupe de parole, par là Totem Foundry Discord. Sinon, tu peux rejoindre la place centrale par ici Vermine Discord

Enjoy!

" + } + }, + "DIFFICULTY_LEVELS": { + "obvious": "Evidente", + "easy": "Facile", + "hard": "Difficile", + "very_hard": "Très difficile", + "impossible": "Impossible" + }, + "ATTITUDES": { + "offensive": { + "name": "Offensif" + }, + "active": { + "name": "Actif" + }, + "passive": { + "name": "Passif" + } + }, + "AGE_TYPES": { + "young": "Jeune", + "adult": "Adulte", + "old": "Vieux" + }, + "IDENTITY": { + "name": "Nom", + "height": "Taille", + "weight": "Poids", + "totem": "Totem", + "age": "Age", + "gender": "Sexe", + "profile": "Profil", + "origin": "Origine", + "theme": "Concept", + "instincts": "Instincts", + "prohibits": "Interdits", + "objectives": "Objectifs", + "relations": "Relations", + "morale": "Moral", + "morale_level": "Niveau de moral", + "notes": "Notes" + }, + "ADVERSITY": { + "threat": "Menace", + "experience": "Expérience", + "role": "Rôle", + "attack": "Attaque", + "damage": "Dommages", + "weapon": "Arme", + "vigor": "Vigueur", + "wounds": "Blessures", + "action": "Action", + "specialties": "Spécialité", + "rerolls": "Relances", + "contact": "Contact", + "reaction": "Réaction", + "pools": "Réserves", + "gear": "Matériel", + "protection": "Protection", + "skills": "Compétences", + "pattern": "Gabarit", + "size": "Taille", + "pack": "Groupe" + }, + "VERMINE": { + "name": "Vermine", + "stats": "Statistiques", + "level": "Niveau", + "experience": "Expérience", + "reputation": "Réputation", + "pool": "Réserve", + "pools": "Réserves", + "self_control": "Sang-Froid", + "effort": "Effort", + "group": "Groupe", + "abilities": "Caractéristiques", + "ability": "Caractéristique", + "skills_title": "Compétences", + "skill_title": "Compétence", + "skill_mastery": "Maîtrise", + "bonus": "Bonus", + "penalty": "Malus", + "reroll": "Relance", + "equipment": "Equipement", + "specialty": "Spécialité", + "technique": "Technique", + "techniques": "Techniques", + "difficulty": "Difficulté", + "help": "Entraide", + "tooling": "Equipement", + "quantity": "Quantité", + "qty": "Qté", + "weight": "Poids", + "dmg": "Dmg", + "damage": "Dommage", + "damages": "Dommages", + "range": "Portée", + "ranges": "Portées", + "mobility": "Mobilité", + "rarity": "Rareté", + "rarity_sm": "Rar.", + "reliability": "Fiabilité", + "reliability_sm": "Fiab.", + "wounds": { + "name": "Blessures", + "threshold": "Seuil", + "light": "Légère", + "heavy": "Grave", + "deadly": "Mortelle", + "light_wounds": "Blessure légère", + "heavy_wounds": "Blessure grave", + "deadly_wounds": "Blessure mortelle" + }, + "tabs": { + "abilities": "Caractéristiques et compétences", + "totem": "Totem et ajustements", + "combat": "Combat et reserves", + "equipment": "Matériel", + "stories": "Histoire" + }, + "ammo": "Munitions", + "ammo_sm": "Mun", + "trait": "Trait", + "traits": "Traits", + "clew": "Indice", + "combat": "Combat", + "stories": "Histoires", + "gear": "Matériel", + "information": "Informations", + "boost": "boost", + "group_abilities": "Capacités de groupe", + "totem_abilities": "Capacités de totem", + "type_group": "Groupe", + "type_character": "Personnage", + "type_npc": "PNJ", + "type_creature": "Créature", + "type": "Type", + "group_members": "Membres", + "encounters": "Rencontres", + "road": "La Route", + "totem_picker": "Sélecteur de totem", + "actor_picker": "Sélecteur de personnage" + }, + "UI": { + "add": "Ajouter", + "source": "Source", + "duration": "Durée", + "effect_toggle": "Basculer un effet", + "effect_edit": "Modifier un effet", + "effect_delete": "Détruire un effet", + "effect_create": "Créer un effet", + "effects": { + "name": "Effets", + "temporary": "Effets temporaires", + "passive": "Effets passifs", + "inactive": "Effets inactifs" + } + }, + "ITEMS": { + "defense": "Protection", + "defenses": "Protections", + "new_defense": "Nouvelle protection", + "weapon": "Arme", + "new_weapon": "Nouvelle arme", + "weapons": "Armes", + "new_background": "Nouvel historique", + "backgrounds": "Historiques", + "new_trauma": "Nouveau traumatisme", + "traumas": "Traumatismes", + "rumor": "Rumeur", + "new_rumor": "Nouvelle rumeur", + "rumors": "Rumeurs", + "ability": "Capacité", + "new_ability": "Nouvelle capacité", + "abilities": "Capacités", + "specialties": "Spécialités", + "new_specialty": "Nouvelle spécialité", + "evolution": "Adaptation", + "new_evolution": "Nouvelle adaptation", + "evolutions": "Adaptations", + "new_vehicle": "Nouveau véhicule", + "vehicles": "Véhicules", + "new_objective": "Nouvel objectif", + "learning": "Apprentissage", + "cost": "Coût", + "rituel": "Rituel", + "transe": "Transe", + "effects": "Effets", + "details": "Détails" + }, + "ABILITIES": { + "vigor": { + "name": "Vigueur" + }, + "health": { + "name": "Santé" + }, + "precision": { + "name": "Précision" + }, + "reflexes": { + "name": "Réflexes" + }, + "knowledge": { + "name": "Savoir" + }, + "perception": { + "name": "Perception" + }, + "will": { + "name": "Volonté" + }, + "empathy": { + "name": "Empathie" + } + }, + "SKILL_LEVELS": { + "incompetent": "Incompétent", + "beginner": "Débutant", + "proficient": "Confirmé", + "expert": "Expert", + "master": "Maître", + "legend": "Légende" + }, + "THREAT_LEVELS": { + "minor": "Mineure", + "serious": "Sérieuse", + "major": "Majeure", + "deadly": "Mortelle" + }, + "ROLE_LEVELS": { + "minor": "Mineur", + "secondary": "Secondaire", + "important": "Important", + "major": "Majeur" + }, + "PATTERN_LEVELS": { + "insect": "Insecte", + "rat": "Rat", + "dog": "Chien", + "bear": "Ours" + }, + "TOTEMS": { + "human": { + "name": "L'Humain", + "number": 1, + "description": "", + "instincts": "", + "bans": "", + "opposite": "adapted" + }, + "predator": { + "name": "Le prédateur", + "number": 2, + "description": "Totem emblématique, le Prédateur a toujours été l’un des plus répandus dans le règne animal, et il reste de loin celui qui influence le plus grand nombre d’espèces aujourd’hui. On l’observe aussi bien chez les mammifères que chez de minuscules insectes, en meute comme en solitaire. Il inspire les comportements de traque, de chasse et d’affrontement essentiels à l’alimentation, mais il ne prône qu’une violence justifiée, nécessaire et vitale. Selon les peuples et les cultures, il a longtemps été symbolisé par le lion, l’aigle ou le chasseur, et ses valeurs guerrières ont toujours revêtu une certaine forme de noblesse. Un prédateur ne tue pas : il triomphe. Un prédateur ne fuit pas : il perd, ou il meurt", + "instincts": "Triompher, relever un défi, prendre l’initiative, atteindre un objectif.", + "bans": "Fuir, abandonner, renoncer,faire preuve de lâcheté.", + "behaviour": "Déterminé, implacable,courageux, dominant.", + "opposite": "scavenger" + }, + "scavenger": { + "name": "Le Charognard", + "number": 3, + "description": "Dans un écosystème dominé par la loi du plus fort, certains ont pris le parti d’attendre que la mort fasse son œuvre, quitte à se contenter des restes. Poissons de fond, plantes carnivores, pillards, insectes nécrophages, vautours ou meutes de loups trop faibles pour s’attaquer seuls aux proies de grande taille : le Charognard inspire toutes les espèces qui ont fait de la patience une de leurs rares vertus, et misent sur la faiblesse, la blessure, la fatigue ou l’opportunité pour se nourrir. Il règne sur les régions hostiles où le soleil, la chaleur ou le froid font son jeu, et se développe souvent dans l’ombre du Prédateur, avec qui il entretient une relation quasi symbiotique", + "instincts": "Achever, saboter, affaiblir, s’en prendre au plus faible.", + "bans": "Affronter, s’exposer, agir de façon compulsive, s’apitoyer.", + "behaviour": "Sournois, calculateur, impitoyable", + "opposite": "predator" + }, + "symbiote": { + "name": "Le Symbiote", + "number": 4, + "description": "Symbole d’entraide, d’équilibre et d’harmonie, le Symbiote se définit par la relation d’échange et de réciprocité où chaque partie profite de ce que l’autre apporte, quels que soient ses besoins ou ses motivations. Très courante dans le règne végétal, où de nombreuses fleurs et plantes l’ont instaurée avec les pollinisateurs, cette relation de symbiose s’observe également chez les insectes, les mammifères et les êtres humains. Elle peut être ponctuelle, issue des liens du sang, liée à un territoire ou un projet commun, et rien ne l’empêche d’être motivée par le profit ou l’intérêt, tant qu’elle est réciproque – ce qui distingue le Symbiote du Parasite.", + "instincts": "Partager, transmettre, équilibrer, trouver un compromis", + "bans": "Exploiter, abuser, profiter de la faiblesse, mettre en danger", + "behaviour": "Bienveillant, responsable, diplomate, modéré.", + "opposite": "parasite" + }, + "parasite": { + "name": "Le Parasite", + "number": 5, + "description": "Totem des infections, des basses œuvres et des épidémies, le Parasite a toujours joué un rôle funeste dans le destin de l’humanité, jusqu’à en devenir le fléau. Symbolisé par les moustiques, il s’observe également chez de nombreux champignons, végétaux et insectes incapables de survivre, de se nourrir ou de se reproduire sans un hôte, et toujours à ses dépens. Le Parasite exploite, profite, abuse sans états d’âme, mu par la seule démarche de prendre ce qu’un autre possède et dont il a besoin. Avec le Prédateur, c’est l’un des Totems les plus présents et les plus redoutés, tant les comportements qu’il inspire peuvent ruiner tout espoir de survie.", + "instincts": "Profiter, manipuler, voler, exploiter.", + "bans": "Partager, contribuer, tenir une promesse, prendre par la force", + "behaviour": "Manipulateur, menteur, égoïste, profiteur", + "opposite": "symbiote" + }, + "builder": { + "name": "Le Bâtisseur", + "number": 6, + "description": "Souvent confondu avec la Ruche en raison des constructions géantes typiques de certaines espèces sociales, le Bâtisseur n’est pas le Totem de la communauté, mais celui de la fondation. À l’image des termites, des castors, de la plupart des oiseaux ou de certaines espèces d’araignées, il se caractérise par l’acte de construction, de création ou de modification, et s’observe aussi bien chez des groupes que chez des individus. Avec la Ruche, le Symbiote et la Horde, c’est l’un des Totems les plus courants chez les communautés humaines, dont il inspire les édifices, les inventions et les réparations.", + "instincts": "Fonder, créer, s’installer durablement, nouer des liens.", + "bans": "Détruire, saboter, quitter une communauté, provoquer le chaos", + "behaviour": "Réfléchi, organisé, pragmatique, constant.", + "opposite": "horde" + }, + "horde": { + "name": "La Horde", + "number": 7, + "description": "Fléau des cultures depuis la nuit des temps, la Horde est à l’image des nuées de criquets, des meutes de carnivores ou des tribus de nomades qui la représentent : imprévisible, impitoyable et sans visage. Au-delà de ses aspects collectifs, ce Totem redoutable se caractérise surtout par sa violence et sa méthode d’action. Là où le Prédateur tue, la Horde brûle, pille, dévaste pour parvenir à ses fins sans le moindre état d’âme. Elle inspire ceux qui prennent par la force, qui détruisent, qui ravagent et qui refusent toute forme de compromis, quelles que soient leur démarche ou leurs motivations.", + "instincts": "Piller, détruire, prendre par la force, miser sur le nombre", + "bans": "Négocier, épargner, faire des réserves, planifier à long terme.", + "behaviour": "Violent, imprévisible, destructeur, radical.", + "opposite": "builder" + }, + "hive": { + "name": "La Ruche", + "number": 8, + "description": "Fourmis, abeilles, termites, factions aux règles strictes : la Ruche est le Totem des créatures sociales et des communautés humaines par excellence. Des cellules familiales aux multinationales, des meutes organisées aux super-colonies de plusieurs milliards d’individus, la Ruche est caractérisée par l’organisation, la hiérarchie, le dévouement et la conscience aigüe du rôle que chacun doit jouer dans l’intérêt commun, plus que par la notion de communauté elle-même. Elle s’appuie bien souvent sur un ensemble de règles, des tâches attribuées, des rôles identifiés – une philosophie qui proscrit tout individualisme et condamne toute désobéissance.", + "instincts": "Organiser, œuvrer pour la communauté, respecter la hiérarchie, privilégier l’intérêt collectif", + "bans": "trahir, désobéir, mettre sa communauté en danger, faire preuve d’individualisme.", + "behaviour": "Méthodique, autoritaire, consciencieux, rigide", + "opposite": "loner" + }, + "loner": { + "name": "Le solitaire", + "number": 9, + "description": "Survivre, quoi qu’il en coûte. Sans cruauté, sans états d’âme, mais à tout prix. À l’inverse de la Ruche qui loue le sacrifice s’il est accompli dans l’intérêt du groupe, le Solitaire incarne le plus fondamental des réflexes : celui de la survie. Ni individualiste, ni franchement égoïste, il fait seulement passer ses propres intérêts, ses urgences et ses nécessités avant tout, quitte à trahir, à décevoir, à quitter ou à tuer. Rien n’empêche un Solitaire de trouver une place durable dans un groupe, d’y jouer un rôle précis ou même de suivre des règles établies, tant qu’elles ne heurtent pas ses propres convictions et qu’elles ne mettent pas en péril son bien le plus précieux : sa vie.", + "instincts": "Survivre, anticiper, s’adapter, faire passer sa vie avant tout", + "bans": "Se sacrifier, risquer sa vie, dépendre de quelqu’un, se résigner.", + "behaviour": "Indépendant, lucide, autonome, réactif.", + "opposite": "hive" + }, + "adapted": { + "name": "L'adapté", + "number": 10, + "description": "Évoluer ou mourir. Changer ou disparaître. L’Adapté est le Totem de la nécessité, de la survie et de l’évolution. Ni positif, ni négatif, il est présent partout. Il est cette dynamique, ce principe fondamental qui rythme les mutations des espèces et qui rappelle que l’Homme est la seule forme de vie à tenter de contrôler sa propre évolution. L’Adapté ne possède ni Interdit, ni Instinct spécifique. Aucun comportement n’est inapproprié, s’il permet de faire face et de survivre, et les Instincts de tous les autres Totems le renforcent. Seul l’Humain lutte contre son influence…", + "instincts": "Tous ceux des huit Totems majeurs", + "bans": "Aucun…", + "opposite": "human" + } + }, + "ABILITY_CATEGORIES": { + "physical": { + "name": "Physique" + }, + "manual": { + "name": "Manuel" + }, + "mental": { + "name": "Mental" + }, + "social": { + "name": "Social" + } + }, + "SKILLS_CATEGORIES": { + "man": { + "name": "L'Homme" + }, + "animal": { + "name": "L'Animal" + }, + "tool": { + "name": "L'Outil" + }, + "weapon": { + "name": "L'Arme" + }, + "survival": { + "name": "La Survie" + }, + "world": { + "name": "La Terre" + } + }, + "SKILLS": { + "arts": { + "name": "Arts" + }, + "civilization": { + "name": "Civilisations" + }, + "psychology": { + "name": "Psychologie" + }, + "rumors": { + "name": "Rumeurs" + }, + "healing": { + "name": "Soins" + }, + "animalism": { + "name": "Animalisme" + }, + "dissection": { + "name": "Dissection" + }, + "wildlife": { + "name": "Faune" + }, + "repulsion": { + "name": "Répulsion" + }, + "tracks": { + "name": "Traces" + }, + "crafting": { + "name": "Artisanat" + }, + "diy": { + "name": "Bricolage" + }, + "mecanical": { + "name": "Mécanique" + }, + "piloting": { + "name": "Pilotage" + }, + "technology": { + "name": "Technologie" + }, + "firearms": { + "name": "Armes à feu" + }, + "armory": { + "name": "Armurerie" + }, + "shield": { + "name": "Bouclier" + }, + "close": { + "name": "Corps-à-corps" + }, + "archery": { + "name": "Armes de tir" + }, + "throwing": { + "name": "Lancer" + }, + "melee": { + "name": "Mêlée" + }, + "atletics": { + "name": "Atlétisme" + }, + "stealth": { + "name": "Discrétion" + }, + "alertness": { + "name": "Vigilance" + }, + "flora": { + "name": "Flore" + }, + "food": { + "name": "Alimentation" + }, + "environment": { + "name": "Environnement" + }, + "road": { + "name": "Route" + }, + "toxics": { + "name": "Toxiques" + }, + "ruins": { + "name": "Vestiges" + } + }, + "SEXES": { + "male": "Masculin", + "female": "Féminin" + } +} \ No newline at end of file diff --git a/module/sheets/actor-sheet.mjs b/module/sheets/actor-sheet.mjs index eda2f88..f3e6f73 100644 --- a/module/sheets/actor-sheet.mjs +++ b/module/sheets/actor-sheet.mjs @@ -1,4 +1,4 @@ -import {onManageActiveEffect, prepareActiveEffectCategories} from "../system/effects.mjs"; +import { onManageActiveEffect, prepareActiveEffectCategories } from "../system/effects.mjs"; /** * Extend the basic ActorSheet with some very simple modifications @@ -40,7 +40,7 @@ export class VermineActorSheet extends ActorSheet { context.system = actorData.system; context.flags = actorData.flags; context.config = CONFIG.VERMINE; - + // Add roll data for TinyMCE editors. context.rollData = context.actor.getRollData(); @@ -56,7 +56,7 @@ export class VermineActorSheet extends ActorSheet { // Render the item sheet for viewing/editing prior to the editable check. html.find('.item-edit').click(ev => { - const li = $(ev.currentTarget).parents(".item"); + const li = $(ev.currentTarget).parents(".item"); const item = this.actor.items.get(li.data("itemId")); item.sheet.render(true); }); @@ -79,7 +79,7 @@ export class VermineActorSheet extends ActorSheet { // Active Effect management html.find(".effect-control").click(ev => onManageActiveEffect(ev, this.actor)); - + // Drag events for macros. if (this.actor.isOwner) { let handler = ev => this._onDragStart(ev); @@ -90,8 +90,21 @@ export class VermineActorSheet extends ActorSheet { }); } + //click on wound radio + html.find('.hexa [type="radio"]').click(ev => { + this._onClickRadioHexa(ev) + }) + + } + _onClickRadioHexa(ev) { + if (!ev.currentTarget.checked) { return } + let prop = ev.currentTarget.name; + let update = {}; + update[prop] = ev.currentTarget.value - 1 + + this.actor.update(update) + } - async _onItemCreate(event) { event.preventDefault(); const header = event.currentTarget; @@ -113,6 +126,6 @@ export class VermineActorSheet extends ActorSheet { delete itemData.system["type"]; // Finally, create the item! - return await Item.create(itemData, {parent: this.actor}); + return await Item.create(itemData, { parent: this.actor }); } } diff --git a/module/sheets/character-sheet.mjs b/module/sheets/character-sheet.mjs index b32901d..190b42b 100644 --- a/module/sheets/character-sheet.mjs +++ b/module/sheets/character-sheet.mjs @@ -1,6 +1,6 @@ -import {onManageActiveEffect, prepareActiveEffectCategories} from "../system/effects.mjs"; +import { onManageActiveEffect, prepareActiveEffectCategories } from "../system/effects.mjs"; import { VermineActorSheet } from "./actor-sheet.mjs"; -import { getRollBox } from "../system/dialogs.mjs"; +import { RollDialog } from "../system/dialogs.mjs"; import { TotemPicker } from "../system/applications.mjs"; /** @@ -14,8 +14,7 @@ export class VermineCharacterSheet extends VermineActorSheet { return mergeObject(super.defaultOptions, { classes: ["vermine2047", "sheet", "character", "actor"], template: "systems/vermine2047/templates/actor/actor-sheet.hbs", - width: 600, - height: 600, + tabs: [{ navSelector: ".sheet-tabs", contentSelector: ".sheet-body", initial: "features" }] }); } @@ -42,7 +41,7 @@ export class VermineCharacterSheet extends VermineActorSheet { context.system = actorData.system; context.flags = actorData.flags; context.config = CONFIG.VERMINE; - + // Prepare character data and items. if (actorData.type == 'character') { this._prepareItems(context); @@ -53,7 +52,6 @@ export class VermineCharacterSheet extends VermineActorSheet { if (actorData.type == 'npc') { this._prepareItems(context); } - // Add roll data for TinyMCE editors. context.rollData = context.actor.getRollData(); @@ -102,18 +100,38 @@ export class VermineCharacterSheet extends VermineActorSheet { /** @override */ activateListeners(html) { super.activateListeners(html); - // Choose Totem + // Choose Totem html.find('.chooseTotem').click(this._onTotemButton.bind(this)); + html.find('.ability .rollable').click(this._onRoll.bind(this)); + html.find('[data-totem-name]').click(this._onClickTotemDice.bind(this)) } + async _onClickTotemDice(ev) { + let el = ev.currentTarget; + let totem = el.dataset.totemName; + let value = parseInt(el.dataset.totemValue); + let oldValue = this.actor.system.adaptation.totems[totem].value; + if (value === oldValue) { value-- }; + let updates = {}; + updates[`system.adaptation.totems.${totem}.value`] = value; + let totems = this.actor.system.adaptation.totems; + let sumTotems = Object.keys(totems).reduce(function (previous, key) { + return previous + totems[key].value; + }, 0); + if (sumTotems >5) { + ui.notifications.warn('vous ne pouvez pas avoir plus de 5 dés totems') + } + console.log(sumTotems, updates) + await this.actor.update(updates); + } /** * Handle clickable rolls. * @param {Event} event The originating click event * @private */ - _onRoll(event) { + async _onRoll(event) { event.preventDefault(); const element = event.currentTarget; const dataset = element.dataset; @@ -130,27 +148,18 @@ export class VermineCharacterSheet extends VermineActorSheet { // Handle rolls that supply the formula directly. if (dataset.label) { dataset.rollType = dataset.type; - /*const label = game.i18n.localize(dataset.label) ? `[ability] ${game.i18n.localize(dataset.label)}` : ''; - console.log($(element).attr('for')); - const NoD = this.actor.system.skills[$(element).attr('for').split('.')[2]]?.value || 0 - return game.vermine2047.VermineRoll.roll(this.actor.id, label, NoD, 0, {});*/ - let data = { - actorId: this.actor.id, - abilities: this.actor.system.abilities, - skills: this.actor.system.skills, - rollType: dataset.rollType, - labelKey: dataset.label, - abilityScore: 0, - skillScore: 0, - label: game.i18n.localize(dataset.label) - }; - if (dataset.type == 'ability'){ - data.abilityScore = this.actor.system.abilities[dataset.label].value; - } else if (dataset.type == 'skill'){ - data.skillScore = this.actor.system.skills[dataset.label].value; - } - getRollBox(data); - return true; + + let data = { + actorId: this.actor.id, + rollType: dataset.rollType, + labelKey: dataset.label, + + label: game.i18n.localize(dataset.label) + }; + + let dial = await RollDialog.create(data); + dial.render(true) + return true; } } @@ -163,7 +172,7 @@ export class VermineCharacterSheet extends VermineActorSheet { event.preventDefault(); const el = event.currentTarget; // const dataset = el.dataset; - + const totemPicker = new TotemPicker(el, this.actor); totemPicker.render(true); } diff --git a/module/sheets/creature-sheet.mjs b/module/sheets/creature-sheet.mjs index 674dafe..693c16a 100644 --- a/module/sheets/creature-sheet.mjs +++ b/module/sheets/creature-sheet.mjs @@ -1,11 +1,11 @@ -import {onManageActiveEffect, prepareActiveEffectCategories} from "../system/effects.mjs"; +import { onManageActiveEffect, prepareActiveEffectCategories } from "../system/effects.mjs"; import { VermineActorSheet } from "./actor-sheet.mjs"; /** * Extend the basic ActorSheet with some very simple modifications * @extends {ActorSheet} */ -export class VermineCreatureSheet extends ActorSheet { +export class VermineCreatureSheet extends VermineActorSheet { /** @override */ static get defaultOptions() { @@ -40,7 +40,7 @@ export class VermineCreatureSheet extends ActorSheet { context.system = actorData.system; context.flags = actorData.flags; context.config = CONFIG.VERMINE; - + // Prepare character data and items. if (actorData.type == 'character') { this._prepareItems(context); @@ -94,7 +94,7 @@ export class VermineCreatureSheet extends ActorSheet { super.activateListeners(html); html.find('.item-create').click(this._onItemCreate.bind(this)); - } + } async _onItemCreate(event) { event.preventDefault(); @@ -118,7 +118,7 @@ export class VermineCreatureSheet extends ActorSheet { delete itemData.system["type"]; // Finally, create the item! - return await Item.create(itemData, {parent: this.actor}); + return await Item.create(itemData, { parent: this.actor }); } } diff --git a/module/system/config.mjs b/module/system/config.mjs index 16754fd..8d599d0 100644 --- a/module/system/config.mjs +++ b/module/system/config.mjs @@ -6,79 +6,80 @@ export const VERMINE = {}; */ VERMINE.AgeTypes = { - 1:{ "name":"AGE_TYPES.young", "beginning": 0 }, - 2:{ "name":"AGE_TYPES.adult", "beginning": 18 }, - 3:{ "name":"AGE_TYPES.old", "beginning": 47 } + 1: { "name": "AGE_TYPES.young", "beginning": 0 }, + 2: { "name": "AGE_TYPES.adult", "beginning": 18 }, + 3: { "name": "AGE_TYPES.old", "beginning": 47 } } VERMINE.SkillLevels = { - 1:{ "label":"SKILL_LEVELS.beginner", "dicePool":1, "reroll":0}, - 2:{ "label":"SKILL_LEVELS.proficient", "dicePool":1, "reroll":1}, - 3:{ "label":"SKILL_LEVELS.expert", "dicePool":2, "reroll":1}, - 4:{ "label":"SKILL_LEVELS.master", "dicePool":2, "reroll":2}, - 5:{ "label":"SKILL_LEVELS.legend", "dicePool":3, "reroll":2} + 0: { "label": "SKILL_LEVELS.incompetent", "dicePool": 0, "reroll": 0 }, + 1: { "label": "SKILL_LEVELS.beginner", "dicePool": 1, "reroll": 0 }, + 2: { "label": "SKILL_LEVELS.proficient", "dicePool": 1, "reroll": 1 }, + 3: { "label": "SKILL_LEVELS.expert", "dicePool": 2, "reroll": 1 }, + 4: { "label": "SKILL_LEVELS.master", "dicePool": 2, "reroll": 2 }, + 5: { "label": "SKILL_LEVELS.legend", "dicePool": 3, "reroll": 2 } } VERMINE.DifficultyLevels = { - 1:{ "label":"DIFFICULTY_LEVELS.obvious", "difficulty":3}, - 2:{ "label":"DIFFICULTY_LEVELS.easy", "difficulty":5}, - 3:{ "label":"DIFFICULTY_LEVELS.hard", "difficulty":7}, - 4:{ "label":"DIFFICULTY_LEVELS.very_hard", "difficulty":9}, - 5:{ "label":"DIFFICULTY_LEVELS.impossible", "difficulty":10} + 1: { "label": "DIFFICULTY_LEVELS.obvious", "difficulty": 3 }, + 2: { "label": "DIFFICULTY_LEVELS.easy", "difficulty": 5 }, + 3: { "label": "DIFFICULTY_LEVELS.hard", "difficulty": 7 }, + 4: { "label": "DIFFICULTY_LEVELS.very_hard", "difficulty": 9 }, + 5: { "label": "DIFFICULTY_LEVELS.impossible", "difficulty": 10 } }, -VERMINE.ThreatLevels = { - 1:{ "label":"THREAT_LEVELS.minor", "attack":3, "vigor":1, "minorWound":1, "majorWound":1, "deadlyWound":1}, - 2:{ "label":"THREAT_LEVELS.serious", "attack":4, "vigor":2, "minorWound":2, "majorWound":1, "deadlyWound":1}, - 3:{ "label":"THREAT_LEVELS.major", "attack":5, "vigor":3, "minorWound":2, "majorWound":1, "deadlyWound":1}, - 4:{ "label":"THREAT_LEVELS.deadly", "attack":6, "vigor":4, "minorWound":2, "majorWound":2, "deadlyWound":2}, -} + VERMINE.ThreatLevels = { + 1: { "label": "THREAT_LEVELS.minor", "attack": 3, "vigor": 1, "minorWound": 1, "majorWound": 1, "deadlyWound": 1 }, + 2: { "label": "THREAT_LEVELS.serious", "attack": 4, "vigor": 2, "minorWound": 2, "majorWound": 1, "deadlyWound": 1 }, + 3: { "label": "THREAT_LEVELS.major", "attack": 5, "vigor": 3, "minorWound": 2, "majorWound": 1, "deadlyWound": 1 }, + 4: { "label": "THREAT_LEVELS.deadly", "attack": 6, "vigor": 4, "minorWound": 2, "majorWound": 2, "deadlyWound": 2 }, + } VERMINE.ExperienceLevels = { - 1:{ "label":"SKILL_LEVELS.beginner", "action":3, "specialties":4, "rerolls":0, "contact":"7"}, - 2:{ "label":"SKILL_LEVELS.proficient", "action":3, "specialties":5, "rerolls":0, "contact":"5 ou 7"}, - 3:{ "label":"SKILL_LEVELS.expert", "action":4, "specialties":6, "rerolls":1, "contact":"5,7 ou 9"}, - 4:{ "label":"SKILL_LEVELS.master", "action":4, "specialties":6, "rerolls":2, "contact":"3,5,7 ou 9"}, + 1: { "label": "SKILL_LEVELS.beginner", "action": 3, "specialties": 4, "rerolls": 0, "contact": "7" }, + 2: { "label": "SKILL_LEVELS.proficient", "action": 3, "specialties": 5, "rerolls": 0, "contact": "5 ou 7" }, + 3: { "label": "SKILL_LEVELS.expert", "action": 4, "specialties": 6, "rerolls": 1, "contact": "5,7 ou 9" }, + 4: { "label": "SKILL_LEVELS.master", "action": 4, "specialties": 6, "rerolls": 2, "contact": "3,5,7 ou 9" }, } VERMINE.RoleLevels = { - 1:{ "label":"ROLE_LEVELS.minor", "reaction":3, "reaction_bonus":0, "pools":0, "gear":9, "gear_hindrance":0, "protection":1}, - 2:{ "label":"ROLE_LEVELS.secondary", "reaction":3,"reaction_bonus":1, "pools":1, "gear":9,"gear_hindrance":1, "protection":2}, - 3:{ "label":"ROLE_LEVELS.important", "reaction":3, "reaction_bonus":2, "pools":2, "gear":9,"gear_hindrance":2, "protection":3}, - 4:{ "label":"ROLE_LEVELS.major", "reaction":4, "reaction_bonus":2, "pools":4, "gear":10, "gear_hindrance":2, "protection":3}, + 1: { "label": "ROLE_LEVELS.minor", "reaction": 3, "reaction_bonus": 0, "pools": 0, "gear": 9, "gear_hindrance": 0, "protection": 1 }, + 2: { "label": "ROLE_LEVELS.secondary", "reaction": 3, "reaction_bonus": 1, "pools": 1, "gear": 9, "gear_hindrance": 1, "protection": 2 }, + 3: { "label": "ROLE_LEVELS.important", "reaction": 3, "reaction_bonus": 2, "pools": 2, "gear": 9, "gear_hindrance": 2, "protection": 3 }, + 4: { "label": "ROLE_LEVELS.major", "reaction": 4, "reaction_bonus": 2, "pools": 4, "gear": 10, "gear_hindrance": 2, "protection": 3 }, } VERMINE.PatternLevels = { - 1:{ "label":"PATTERN_LEVELS.insect", "attack":2, "damage":0, "minorWound":0, "majorWound":0, "deadlyWound":1}, - 2:{ "label":"PATTERN_LEVELS.rat", "attack":3, "damage":1, "minorWound":0, "majorWound":1, "deadlyWound":1}, - 3:{ "label":"PATTERN_LEVELS.dog", "attack":4, "damage":3, "minorWound":1, "majorWound":1, "deadlyWound":1}, - 4:{ "label":"PATTERN_LEVELS.bear", "attack":6, "damage":6, "minorWound":2, "majorWound":2, "deadlyWound":2}, + 1: { "label": "PATTERN_LEVELS.insect", "attack": 2, "damage": 0, "minorWound": 0, "majorWound": 0, "deadlyWound": 1 }, + 2: { "label": "PATTERN_LEVELS.rat", "attack": 3, "damage": 1, "minorWound": 0, "majorWound": 1, "deadlyWound": 1 }, + 3: { "label": "PATTERN_LEVELS.dog", "attack": 4, "damage": 3, "minorWound": 1, "majorWound": 1, "deadlyWound": 1 }, + 4: { "label": "PATTERN_LEVELS.bear", "attack": 6, "damage": 6, "minorWound": 2, "majorWound": 2, "deadlyWound": 2 }, } VERMINE.SizeLevels = { - 1:{ "attack":2, "vigor":1, "minorWound":0, "majorWound":0, "deadlyWound":1}, - 2:{ "attack":3, "vigor":2, "minorWound":0, "majorWound":1, "deadlyWound":1}, - 3:{ "attack":4, "vigor":3, "minorWound":1, "majorWound":1, "deadlyWound":1} + 1: { "attack": 2, "vigor": 1, "minorWound": 0, "majorWound": 0, "deadlyWound": 1 }, + 2: { "attack": 3, "vigor": 2, "minorWound": 0, "majorWound": 1, "deadlyWound": 1 }, + 3: { "attack": 4, "vigor": 3, "minorWound": 1, "majorWound": 1, "deadlyWound": 1 } } VERMINE.PackLevels = { - 1:{ "attack":1, "damage":1, "minorWound":0, "majorWound":0, "deadlyWound":1}, - 2:{ "attack":2, "damage":2, "minorWound":2, "majorWound":2, "deadlyWound":2}, - 3:{ "attack":5, "damage":5, "minorWound":3, "majorWound":3, "deadlyWound":3} + 1: { "attack": 1, "damage": 1, "minorWound": 0, "majorWound": 0, "deadlyWound": 1 }, + 2: { "attack": 2, "damage": 2, "minorWound": 2, "majorWound": 2, "deadlyWound": 2 }, + 3: { "attack": 5, "damage": 5, "minorWound": 3, "majorWound": 3, "deadlyWound": 3 } } VERMINE.abilityCategories = { "physical": { - "label":"VERMINE.ability_category.physical" + "label": "VERMINE.ability_category.physical" }, "manual": { - "label":"VERMINE.ability_category.manual" + "label": "VERMINE.ability_category.manual" }, "mental": { - "label":"VERMINE.ability_category.mental" + "label": "VERMINE.ability_category.mental" }, "social": { - "label":"VERMINE.ability_category.social" + "label": "VERMINE.ability_category.social" } } @@ -95,64 +96,66 @@ VERMINE.abilities = { VERMINE.skillCategories = { "man": { - "label":"VERMINE.skill_category.man" + "label": "VERMINE.skill_category.man" }, "animal": { - "label":"VERMINE.skill_category.animal" + "label": "VERMINE.skill_category.animal" }, "tool": { - "label":"VERMINE.skill_category.tool" + "label": "VERMINE.skill_category.tool" }, "weapon": { - "label":"VERMINE.skill_category.weapon" + "label": "VERMINE.skill_category.weapon" }, "survival": { - "label":"VERMINE.skill_category.survival" + "label": "VERMINE.skill_category.survival" }, "world": { - "label":"VERMINE.skill_category.world" + "label": "VERMINE.skill_category.world" } } -VERMINE.sexes = {"male": "VERMINE.sexes.male", "female": "VERMINE.sexes.female"}; +VERMINE.sexes = { "male": "VERMINE.sexes.male", "female": "VERMINE.sexes.female" }; VERMINE.totems = { - "human":"TOTEMS.human.name", - "predator": "TOTEMS.predator.name" , - "scavenger": "TOTEMS.scavenger.name" , - "symbiote": "TOTEMS.symbiote.name" , - "parasite": "TOTEMS.parasite.name" , - "builder": "TOTEMS.builder.name" , - "horde": "TOTEMS.horde.name" , - "hive": "TOTEMS.hive.name" , + "human": "TOTEMS.human.name", + "predator": "TOTEMS.predator.name", + "scavenger": "TOTEMS.scavenger.name", + "symbiote": "TOTEMS.symbiote.name", + "parasite": "TOTEMS.parasite.name", + "builder": "TOTEMS.builder.name", + "horde": "TOTEMS.horde.name", + "hive": "TOTEMS.hive.name", "loner": "TOTEMS.loner.name", - "adapted": "TOTEMS.adapted.name" + "adapted": "TOTEMS.adapted.name" } VERMINE.totem_opposites = { - "human":"TOTEMS.adapted.name", - "predator": "TOTEMS.scavenger.name" , - "scavenger": "TOTEMS.predator.name" , - "symbiote": "TOTEMS.parasite.name" , - "parasite": "TOTEMS.symbiote.name" , - "builder": "TOTEMS.horde.name" , - "horde": "TOTEMS.builder.name" , - "hive": "TOTEMS.loner.name" , + "human": "TOTEMS.adapted.name", + "predator": "TOTEMS.scavenger.name", + "scavenger": "TOTEMS.predator.name", + "symbiote": "TOTEMS.parasite.name", + "parasite": "TOTEMS.symbiote.name", + "builder": "TOTEMS.horde.name", + "horde": "TOTEMS.builder.name", + "hive": "TOTEMS.loner.name", "loner": "TOTEMS.hive.name", - "adapted": "TOTEMS.human.name" + "adapted": "TOTEMS.human.name" } -VERMINE.origins = {"aon":"Aon", -"avhorae": "Avhorae" , -"babel": "Babel", -"soleil_noir": "Empire du Soleil Noir", -"fakhar": "Fakhar", -"horde": "Horde", -"khashan": "Khashan", -"ool": "Ool", -"shattered_kingdoms": "Royaumes divisés", -"saeth": "Saeth", -"tegee": "Tégée (Thalos)", -"tuuhle": "Tuuhle", -"vaelor": "Vaelor", -"valdheim": "Valdheim" +VERMINE.origins = { + "aon": "Aon", + "avhorae": "Avhorae", + "babel": "Babel", + "soleil_noir": "Empire du Soleil Noir", + "fakhar": "Fakhar", + "horde": "Horde", + "khashan": "Khashan", + "ool": "Ool", + "shattered_kingdoms": "Royaumes divisés", + "saeth": "Saeth", + "tegee": "Tégée (Thalos)", + "tuuhle": "Tuuhle", + "vaelor": "Vaelor", + "valdheim": "Valdheim" } + diff --git a/module/system/dialogs.mjs b/module/system/dialogs.mjs index 48b6542..341190c 100644 --- a/module/system/dialogs.mjs +++ b/module/system/dialogs.mjs @@ -1,129 +1,192 @@ +import { VermineUtils } from "./roll.mjs"; +export class CombatResultDialog extends Dialog { - export class CombatResultDialog extends Dialog { - - constructor(dialogData, options) { - /*let options = { classes: ["combat", "result"], ...options }; - let conf = { - title: "Résultat de la confrontation", - content: dialogData.content - }; - super(conf, options); - this.dialogData = dialogData;*/ - } - - /* -------------------------------------------- */ - activateListeners(html) { - /*super.activateListeners(html); - this.html = html; - this.setEphemere(this.dialogData.signe.system.ephemere); - html.find(".signe-aleatoire").click(event => this.setSigneAleatoire()); - html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked)); - html.find(".signe-xp-sort").change((event) => this.onValeurXpSort(event)); - html.find("input.select-actor").change((event) => this.onSelectActor(event)); - html.find("input.select-tmr").change((event) => this.onSelectTmr(event));*/ - } - - - async onSelectActor(event) { - /*const actorId = this.html.find(event.currentTarget)?.data("actor-id"); - const actor = this.dialogData.actors.find(it => it.id == actorId); - if (actor) { - actor.selected = event.currentTarget.checked; - }*/ - } - - + constructor(dialogData, options) { + /*let options = { classes: ["combat", "result"], ...options }; + let conf = { + title: "Résultat de la confrontation", + content: dialogData.content + }; + super(conf, options); + this.dialogData = dialogData;*/ } - export const getRollBox = async function(data) { - let html = await renderTemplate('systems/vermine2047/templates/roll.hbs', data); - let ui = new Dialog({ - title: game.i18n.localize("ROLLS.tool"), + /* -------------------------------------------- */ + activateListeners(html) { + /*super.activateListeners(html); + this.html = html; + this.setEphemere(this.dialogData.signe.system.ephemere); + html.find(".signe-aleatoire").click(event => this.setSigneAleatoire()); + html.find("[name='signe.system.ephemere']").change((event) => this.setEphemere(event.currentTarget.checked)); + html.find(".signe-xp-sort").change((event) => this.onValeurXpSort(event)); + html.find("input.select-actor").change((event) => this.onSelectActor(event)); + html.find("input.select-tmr").change((event) => this.onSelectTmr(event));*/ + } + + + async onSelectActor(event) { + /*const actorId = this.html.find(event.currentTarget)?.data("actor-id"); + const actor = this.dialogData.actors.find(it => it.id == actorId); + if (actor) { + actor.selected = event.currentTarget.checked; + }*/ + } + + +} +export class RollDialog extends Dialog { + + static async create(data = { + label: null, + rolltype: null, + NoD: 1, + Reroll: false, + actorId: game.user.character.id + }) { + data.actor = await game.actors.get(data.actorId); + data.config = CONFIG.VERMINE; + let options = { classes: ["nocDialog"], width: 420, height: 'fit-content', 'z-index': 99999 }; + let html = await renderTemplate('systems/vermine2047/templates/roll-dialog.hbs', data); + + return new RollDialog(data, html, options); + } + static get defaultOptions() { + return foundry.utils.mergeObject(super.defaultOptions, { + focus: true, + classes: ["dialog vermine-roll"], + + }); + } + /* -------------------------------------------- */ + constructor(data, html, options, close = undefined) { + let conf = { + title: "jet de dés", content: html, buttons: { roll: { - label: game.i18n.localize('ROLLS.roll_dice'), - callback: (html) => { - let form = html.find('#dice-pool-form'); - if (!form[0].checkValidity()) { - throw "Invalid Data"; - } - let formData = {}; - form.serializeArray().map(item => { - formData[item.name] = item.value; - }); - // console.log("roll form data", formData); - let NoD = parseInt(formData.abilityScore,10); - let Reroll = 0; - // difficulty - data.difficulty = (formData.difficulty != undefined) ? formData.difficulty : 7; - // maîtrise bonus - if (formData.rollType == 'skill'){ - NoD += CONFIG.VERMINE.SkillLevels[formData.skillScore].dicePool || 0; - Reroll += CONFIG.VERMINE.SkillLevels[formData.skillScore].reroll || 0; - } - console.log('reroll', Reroll); - - // réserves - if (formData.self_control > 0){ - NoD += parseInt(formData.self_control,10); - } - if (formData.group > 0){ - NoD += parseInt(formData.group,10); - } - // checks - if (formData.usingSpecialization !== undefined && formData.usingSpecialization == 1){ - NoD += 1; - } - if (formData.usingTools !== undefined && formData.usingTools == 1){ - NoD += 1; - } - if (formData.helped !== undefined && formData.helped == 1){ - NoD += 1; - } - if (formData.abilityScore == 0){ - ui.notifications.notify(`veuillez saisir une caractéristique`); - } else return game.vermine2047.VermineRoll.roll(data.actorId, data.label, NoD, Reroll, data); + icon: '', + label: "Lancer !", + callback: () => { + this.roll() } }, - close: { - label: game.i18n.localize('Close'), - callback: () => { } - } - }, - render: function (h) { - if( h.find('input[name="abilityScore"]').val()== 0 && data.rollType == 'ability'){ - h.find('input[name="abilityScore"]').val(data.abilities[data.label].value); + cancel: { + icon: '', + label: "Annuler", + callback: () => { this.close() } } + }, + close: close, + } - h.find('select[name="ability"]').change((event) => { - if (event.target.value != undefined){ - const abilityScore = data.abilities[event.target.value].value; - console.log('ability', abilityScore); - // on enregistre la valeur de la caractéristique - h.find('input[name="abilityScore"]').val(abilityScore); - } - }); + return super({ ...conf, ...data }, options); - h.find('select[name="skill"]').change((event) => { - if (data.rollType == 'skill' && event.target.value != undefined){ - const skillScore = data.skills[event.target.value].value; - // on enregistre la valeur de la compétence - h.find('input[name="skillScore"]').val(skillScore); - // on met à jour les infos de niveaux de compétence - const skillLevel = CONFIG.VERMINE.SkillLevels[skillScore]; - if (skillLevel != undefined){ - h.find('#skillLevel').text(game.i18n.localize(skillLevel.label)); - h.find('#skillDicePool').text(skillLevel.dicePool); - h.find('#skillReroll').text(skillLevel.reroll); - } else { - h.find('#skillLevel').text('Inconnu'); - h.find('#skillDicePool').text(0); - h.find('#skillReroll').text(0); - } - } - }); + + + }; + getData() { + let context = super.getData(); + context.data = this.data; + context.config = CONFIG.VERMINE; + return context; + } + async activateListeners(html) { + super.activateListeners(html); + this.getRollData(); + let rollInputs = html.find('[data-roll'); + for (let inp of rollInputs) { + inp.addEventListener('change', await this.getRollData.bind(this)) + }; + let selectAbil = html.find('#ability')[0]; + html.find("#self_control")[0].max = selectAbil.value; + selectAbil.addEventListener('change', this._onChangeAbility.bind(this)); + let selfControl = html.find('#self_control')[0] + selfControl.addEventListener('change', this._onChangeSelfControl.bind(this)); + }; + async getRollData(ev) { + console.log(this) + this.rollData = { + actor: this.data.actor, + NoD: this.getDicePool(), + Reroll: this.getReroll(), + difficulty: this.getDifficulty(), + rollLabel: this.data.labelKey, + totems: this.getTotems(), + self_control: this.getSelfControl(), + max_effort: this.getMaxEffort() + } + console.log('____________________________________calculating roll', this.rollData); + + }; + _onChangeSelfControl(ev) { + let html = this.element[0]; + html.querySelector('#self_control_value').innerText = ev.currentTarget.value; + + + }; + getSelfControl() { + let html = this.element[0]; + let selfControl = parseInt(html.querySelector('#self_control').value) + return selfControl + } + getMaxEffort() { + let html = this.element[0]; + return parseInt(html.querySelector('#ability').value); + } + getTotems() { + let html = this.element[0]; + let totems = { + human: html.querySelector('#human-totem').checked, + adapted: html.querySelector('#adapted-totem').checked, + } + return totems + } + _onChangeAbility(ev) { + let html = this.element[0]; + let score = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value; + + if (!typeof score == "number") { + score = 0 + } + html.querySelector('#abilityScore').value = score; + html.querySelector('#self_control').max = score; + + + } + getDicePool() { + let html = this.element[0]; + let abilValue = html.querySelector('#ability').options[html.querySelector('#ability').selectedIndex].value || 0; + let skillValue = html.querySelector('#skill').options[html.querySelector('#skill').selectedIndex].dataset.pool || 0; + let selfControl = html.querySelector('#self_control').value; + let bonuses = + (html.querySelector('#usingSpecialization').checked ? 1 : 0) + + (html.querySelector('#helped').checked ? 1 : 0) + + (html.querySelector('#usingTools').checked ? 1 : 0); + let total = parseInt(abilValue) + parseInt(selfControl) + parseInt(skillValue) + bonuses; + + return total || 0; + + } + getReroll() { + let html = this.element[0]; + let selected = html.querySelector('#skill').selectedIndex; + let reroll = html.querySelector('#skill').options[selected].dataset.reroll || 0; + return parseInt(reroll) || 0; + + } + getDifficulty() { + let html = this.element[0]; + let selected = html.querySelector('#difficulty').selectedIndex; + let diff = html.querySelector('#difficulty').options[selected].value || 0; + return parseInt(diff) || 0; + } + roll() { + if (this.rollData.self_control > 0) { + if (this.rollData.actor.system.attributes.self_control.value < this.rollData.self_control) { + return ui.notifications.warn('vous navez pas assez de sang-froid') } - }); - ui.render(true); - } \ No newline at end of file + } + return VermineUtils.roll({ ...this.rollData }) + } + +} \ No newline at end of file diff --git a/module/system/dice3d.mjs b/module/system/dice3d.mjs new file mode 100644 index 0000000..f6f34bc --- /dev/null +++ b/module/system/dice3d.mjs @@ -0,0 +1,54 @@ +export async function initUserDice(dice3d) { + let baseColor = game.user.color; + dice3d.addColorset({ + name: 'regular_' + game.user.name, + description: "regular dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: baseColor, + outline: 'black', + texture: 'none', + material: 'plastic', + visibility: 'visible' + }); + dice3d.addColorset({ + name: 'human_' + game.user.name, + description: "human totem dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: lightenColor(baseColor, 40), + outline: 'black', + material: 'plastic', + visibility: 'visible' + }); + dice3d.addColorset({ + name: 'adapted_' + game.user.name, + description: "adapted totem dice for " + game.user.name, + category: "vermine 2047", + foreground: '#9F8003', + background: darkenColor(baseColor, 40), + outline: 'black', + material: 'plastic', + visibility: 'visible' + }); + + await game.user.setFlag("world", "diceInit", true); +} + +export function darkenColor(color, percent) { + const num = parseInt(color.replace('#', ''), 16); + const amt = Math.round(2.55 * percent); + const R = (num >> 16) + amt; + const G = ((num >> 8) & 0x00FF) + amt; + const B = (num & 0x0000FF) + amt; + return '#' + (0x1000000 + (R < 255 ? R < 1 ? 0 : R : 255) * 0x10000 + (G < 255 ? G < 1 ? 0 : G : 255) * 0x100 + (B < 255 ? B < 1 ? 0 : B : 255)).toString(16).slice(1); +} + +export function lightenColor(color, percent) { + const num = parseInt(color.replace('#', ''), 16); + const amt = Math.round(2.55 * percent); + const R = (num >> 16) - amt; + const G = ((num >> 8) & 0x00FF) - amt; + const B = (num & 0x0000FF) - amt; + return '#' + (0x1000000 + (R < 0 ? 0 : R > 255 ? 255 : R) * 0x10000 + (G < 0 ? 0 : G > 255 ? 255 : G) * 0x100 + (B < 0 ? 0 : B > 255 ? 255 : B)).toString(16).slice(1); +} \ No newline at end of file diff --git a/module/system/fight.mjs b/module/system/fight.mjs index 9b4ec44..35d42c7 100644 --- a/module/system/fight.mjs +++ b/module/system/fight.mjs @@ -1,30 +1,30 @@ import { VERMINE } from "./config.mjs"; -import { getActorSkillScore,updateActorSkillScore } from "./functions.mjs"; +import { getActorSkillScore, updateActorSkillScore } from "./functions.mjs"; export class VermineFight { async performTest(enemyAchievement, enemyConservation, skillKey, skill, params, actor) { const dicePool = (params.spleen != undefined || params.purpose != undefined) ? '5' : '4'; - const r = new Roll(dicePool +`d6`); + const r = new Roll(dicePool + `d6`); let diceString = ''; let dicePoolHint = ''; - let discardedRoll = false; + let discardedRoll = false; let bonus = 0; let bonusText = '/+'; let currentSkillScore = skill; r.roll(); // dice are rolled - if (params.usure != undefined){ + if (params.usure != undefined) { currentSkillScore += params.usure; bonus += params.usure; } - if (params.specialization != undefined){ + if (params.specialization != undefined) { currentSkillScore += 2; } - if (params.trait != undefined){ + if (params.trait != undefined) { currentSkillScore += params.trait; bonus += params.trait; } @@ -32,28 +32,28 @@ export class VermineFight { bonusText += bonus; let targetText = game.i18n.format('VERMINE.Selected') + ' : ' + game.i18n.format(skillKey) + " " + skill + bonusText; - if (params.specialization != undefined){ - targetText += " (S)"; + if (params.specialization != undefined) { + targetText += " (S)"; } // tri par ordre croissant - r.terms[0].results.sort((a,b) => a.result - b.result ); - - if (params.purpose != undefined){ + r.terms[0].results.sort((a, b) => a.result - b.result); + + if (params.purpose != undefined) { discardedRoll = r.terms[0].results.shift(); dicePoolHint = ' - ' + game.i18n.format('VERMINE.PurposeTrait'); - } else if (params.spleen != undefined){ + } else if (params.spleen != undefined) { discardedRoll = r.terms[0].results.pop(); dicePoolHint = ' - ' + game.i18n.format('VERMINE.SpleenTrait'); - } + } const discardedRollText = (discardedRoll.result != undefined) ? '
' + discardedRoll.result + '
' : ""; for (let i = 0; i < r.terms[0].results.length; i++) { let result = r.terms[0].results[i].result; - diceString += '
  • ' + result + '
  • '; + diceString += '
  • ' + result + '
  • '; } let hintText = game.i18n.format('VERMINE.ConfrontationHint'); - + // Build a dynamic html using the variables from above. const html = `
    @@ -73,7 +73,7 @@ export class VermineFight {
    ` + - `

    ` + hintText + `

    + `

    ` + hintText + `

    ` + game.i18n.format('VERMINE.Achievement') + ` ` + game.i18n.format('VERMINE.Conservation') + ` @@ -109,10 +109,10 @@ export class VermineFight { if (actor) conf.speaker = ChatMessage.getSpeaker({ actor: actor }); - // Send's Chat Message to foundry, if items are missing they will appear as false or undefined and this not be rendered. - ChatMessage.create(conf).then((msg) => { + // Send's Chat Message to foundry, if items are missing they will appear as false or undefined and this not be rendered. + ChatMessage.create(conf).then((msg) => { return msg; - }); + }); } static instance = null; @@ -123,7 +123,7 @@ export class VermineFight { return VermineFight.instance; } - + // data injected to char data static previousValues = { dicePool: 4, @@ -136,34 +136,34 @@ export class VermineFight { static rollerTemplate = 'systems/vermine2047/templates/fight.html'; static CombatResultTemplate = 'systems/vermine2047/templates/fight-result.html'; - + static async chatMessageHandler(message, html, data) { // console.log("accès au fin du fin", message._id); // sélection du dé actif html.on("click", '.confrontation .die.d6', event => { - const diceResult = parseInt($(event.target).html(),10); + const diceResult = parseInt($(event.target).html(), 10); html.find('.confrontation .die.d6').removeClass('active'); $(event.target).addClass('active'); }); // sélection des dés d'accomplissement html.on("click", '.confrontation .add-to-achievement', event => { - const diceResult = parseInt(html.find('.confrontation .die.d6.active').html(),10); + const diceResult = parseInt(html.find('.confrontation .die.d6.active').html(), 10); html.find('.confrontation .die.d6.active').removeClass('min').addClass('max'); }); // sélection des dés de conservation html.on("click", '.confrontation .add-to-conservation', event => { - const diceResult = parseInt(html.find('.confrontation .die.d6.active').html(),10); + const diceResult = parseInt(html.find('.confrontation .die.d6.active').html(), 10); html.find('.confrontation .die.d6.active').removeClass('max').addClass('min'); }); // reset de la sélection des pools html.on("click", '.confrontation .reset', event => { html.find('.confrontation .die.d6') - .removeClass('max') - .removeClass('min'); + .removeClass('max') + .removeClass('min'); }); // résolution de la confrontation @@ -172,10 +172,10 @@ export class VermineFight { let conservationDice = 0; let achievementBasis = 0; let conservationBasis = 0; - html.find('.confrontation .die.d6.max').each(function(index){ + html.find('.confrontation .die.d6.max').each(function (index) { achievementDice += parseInt($(this).html(), 10); }); - html.find('.confrontation .die.d6.min').each(function(index){ + html.find('.confrontation .die.d6.min').each(function (index) { conservationDice += parseInt($(this).html(), 10); }); @@ -189,8 +189,8 @@ export class VermineFight { html.find('td.conservation-result').html(conservationBasis + conservationDice); // calcul des marges - const achievementMargin = achievementBasis + achievementDice - parseInt(html.find('td.adv-achievement-result').html(),10); - const conservationMargin = conservationBasis + conservationDice - parseInt(html.find('td.adv-conservation-result').html(),10); + const achievementMargin = achievementBasis + achievementDice - parseInt(html.find('td.adv-achievement-result').html(), 10); + const conservationMargin = conservationBasis + conservationDice - parseInt(html.find('td.adv-conservation-result').html(), 10); html.find('td.achievement-margin').html(achievementMargin); html.find('td.conservation-margin').html(conservationMargin); @@ -206,7 +206,7 @@ export class VermineFight { // supprime le masquage des résultats du dé html.off("click", ".dice-roll"); } - + /** * main class function * @returns @@ -217,30 +217,30 @@ export class VermineFight { // get the actor try { actor = game.user.character; - } catch(e){ - throw("Aucun personnage défini !"); + } catch (e) { + throw ("Aucun personnage défini !"); } - if (actor == null && externalData.speakerId != undefined && externalData.speakerId != null){ + if (actor == null && externalData.speakerId != undefined && externalData.speakerId != null) { // on récupère le speakerId, et de là l'objet actor - actor = game.actors.get(externalData.speakerId); + actor = game.actors.get(externalData.speakerId); VermineFight.previousValues['speakerName'] = actor.name; - VermineFight.previousValues['speakerImg'] = actor.img; + VermineFight.previousValues['speakerImg'] = actor.img; } else { VermineFight.previousValues['speakerName'] = "Anonyme"; } // get the data let charData = (externalData) => { - let o = Object.assign({ _template: VermineFight.rollerTemplate }, {...VermineFight.previousValues, ...externalData}); + let o = Object.assign({ _template: VermineFight.rollerTemplate }, { ...VermineFight.previousValues, ...externalData }); return o; }; - let data = charData(externalData); - console.log(data); + let data = charData(externalData); + console.log(data); // render template let html = await renderTemplate(data._template, data); - + let ui = new Dialog({ title: game.i18n.localize("VERMINE.FightTool"), content: html, @@ -257,7 +257,7 @@ export class VermineFight { switch (e.name) { case "skill": case "cephalic": - if (e.value !== ''){ + if (e.value !== '') { skillKey = e.value; } break; @@ -270,31 +270,31 @@ export class VermineFight { case "usure": params.usure = +e.value; break; - case "trait": - params.trait = +e.value; - break; - case "purpose": + case "trait": + params.trait = +e.value; + break; + case "purpose": params.purpose = true; break; case "spleen": params.spleen = true; - break; + break; case "adv-skill": - enemySkill = +e.value; - break; - case "achievement": + enemySkill = +e.value; + break; + case "achievement": enemyAchievement = +e.value; break; case "conservation": - enemyConservation = +e.value; - break; - } + enemyConservation = +e.value; + break; + } }); // prise en compte de l'usure sur la feuille de perso - if (params.usure != undefined){ - const newSpentScore = getActorSkillScore(actor, skillKey, 'spent') + params.usure; - console.log(newSpentScore); - updateActorSkillScore(actor, skillKey, 'spent', newSpentScore); + if (params.usure != undefined) { + const newSpentScore = getActorSkillScore(actor, skillKey, 'spent') + params.usure; + console.log(newSpentScore); + updateActorSkillScore(actor, skillKey, 'spent', newSpentScore); } return VermineFight.get().performTest(enemyAchievement + enemySkill, enemyConservation + enemySkill, skillKey, skill, params, actor); @@ -309,10 +309,10 @@ export class VermineFight { h.on("change", 'select[name="skill"]', event => { const skillLabel = $(event.target).val(); const currentSkillScore = getActorSkillScore(actor, skillLabel) - getActorSkillScore(actor, skillLabel, 'spent'); - if (parseInt(currentSkillScore,10) >= 0){ + if (parseInt(currentSkillScore, 10) >= 0) { h.find('input#skillScore').val(currentSkillScore); } - }); + }); } }, { width: 601, height: 'fit-content' }); ui.render(true); @@ -321,7 +321,7 @@ export class VermineFight { } export class VermineCombat extends Combat { - _encounterCheck(){ + _encounterCheck() { console.log('encounter combat object', this); } @@ -338,7 +338,7 @@ export class VermineCombat extends Combat { }*/ const combatant = this.combatants.get(ids[0]); let token = canvas.scene.tokens.get(combatant.tokenId); - combatant.type = game.actors.get( combatant.actorId)?.type; + combatant.type = game.actors.get(combatant.actorId)?.type; combatant.disposition = token.disposition; let enemies = []; @@ -346,7 +346,7 @@ export class VermineCombat extends Combat { let token = canvas.scene.tokens.get(cbt.tokenId); let enemy = token.actor; const isEnemy = (token.disposition == -1) ? true : false; - if (isEnemy){ + if (isEnemy) { enemies.push({ id: enemy.id, name: enemy.name, @@ -363,12 +363,12 @@ export class VermineCombat extends Combat { return (token.disposition == 1 && cbt.id != combatant.id) ? true : false; }); - if (combatant.type != 'character'){ - let warningDialogHTML = await renderTemplate('systems/vermine2047/templates/dialogs/warning.html', { + if (combatant.type != 'character') { + let warningDialogHTML = await renderTemplate('systems/vermine2047/templates/dialogs/warning.html', { warningText: "Seuls les PJs peuvent initier des confrontations. Relancer l'opération au tour du PJ actif." }); - Dialog.prompt({ - title: "Avertissement", + Dialog.prompt({ + title: "Avertissement", content: warningDialogHTML, label: 'Okay !', callback: () => { @@ -378,10 +378,10 @@ export class VermineCombat extends Combat { } else { // étape 2 : on envoie les infos let fightingActor = game.actors.get(combatant.actorId); - VermineFight.ui({ - speakerId: combatant.actorId, + VermineFight.ui({ + speakerId: combatant.actorId, speakerWeapons: fightingActor.items.filter(item => item.type == 'weapon'), - speakerExperience:fightingActor.system.attributes.experience.value, + speakerExperience: fightingActor.system.attributes.experience.value, speakerEffects: token.actor.effects, adversaries: enemies, allies: allies @@ -409,7 +409,7 @@ export class VermineCombat extends Combat { return super.startCombat(); } - + /************************************************************************************/ _onDelete() { /*let combatants = this.combatants.contents @@ -425,30 +425,10 @@ export class VermineCombat extends Combat { export class VermineCombatTracker extends CombatTracker { get template() { - return "systems/vermine2047/templates/combat-tracker.hbs"; + return "systems/vermine2047/templates/combat-tracker.hbs"; } async getData(options) { - const context = await super.getData(options); - - if (!context.hasCombat) { - return context; - } - - for (let [i, combatant] of context.combat.turns.entries()) { - context.turns[i].hasActed = combatant.getFlag("world", "hasActed"); - context.turns[i].isPlayer = combatant.actor.type == "player"; - context.turns[i].isNpc = combatant.actor.type == "npc"; - } - return context; - } - - /* -------------------------------------------- */ - get template() { - return "systems/gods-system/templates/combat/tracker.hbs"; -} - -async getData(options) { const context = await super.getData(options); if (!context.hasCombat) { @@ -456,39 +436,58 @@ async getData(options) { } for (let [i, combatant] of context.combat.turns.entries()) { - context.turns[i].attitude = combatant.getFlag("world", "attitude"); - context.turns[i].isPlayer = combatant.actor.type == "character"; - context.turns[i].isNpc = combatant.actor.type == "npc"; - context.turns[i].isCreature = combatant.actor.type == "creature"; + context.turns[i].hasActed = combatant.getFlag("world", "hasActed"); + context.turns[i].isPlayer = combatant.actor.type == "player"; + context.turns[i].isNpc = combatant.actor.type == "npc"; } return context; -} + } -activateListeners(html) { + /* -------------------------------------------- */ + get template() { + return "systems/vermine2047/templates/combat-tracker.hbs"; + } + + async getData(options) { + const context = await super.getData(options); + + if (!context.hasCombat) { + return context; + } + + for (let [i, combatant] of context.combat.turns.entries()) { + context.turns[i].attitude = combatant.getFlag("world", "attitude"); + context.turns[i].isPlayer = combatant.actor.type == "character"; + context.turns[i].isNpc = combatant.actor.type == "npc"; + context.turns[i].isCreature = combatant.actor.type == "creature"; + } + return context; + } + + activateListeners(html) { super.activateListeners(html); - html.find(".status").click(this._setStatut.bind(this)); -} + html.find("[data-attitude]").click(this._setStatut.bind(this)); + } -/** - * @description Use to put an attitude to an actor - * @param {*} event - */ -async _setStatut(event) { + /** + * @description Use to put an attitude to an actor + * @param {*} event + */ + async _setStatut(event) { event.preventDefault(); event.stopPropagation(); const btn = event.currentTarget; + const attitude = btn.dataset.attitude; const li = btn.closest(".combatant"); const combat = this.viewed; const combatant = combat.combatants.get(li.dataset.combatantId); - - if ($(btn).hasClass('offensive')) - await combatant.setFlag("world", "attitude", "offensive"); - else if ($(btn).hasClass('active')) - await combatant.setFlag("world", "attitude", "active"); - else if ($(btn).hasClass('passive')) - await combatant.setFlag("world", "attitude", "passive"); - else - await combatant.setFlag("world", "attitude", null); -} + let flag = combatant.getFlag("world", "attitude"); + if (flag == attitude) { + return await combatant.setFlag("world", "attitude", null); + } else { + return await combatant.setFlag("world", "attitude", attitude); + } + + } } \ No newline at end of file diff --git a/module/system/handlebars-manager.mjs b/module/system/handlebars-manager.mjs index 3febad6..4d6eb12 100644 --- a/module/system/handlebars-manager.mjs +++ b/module/system/handlebars-manager.mjs @@ -3,7 +3,7 @@ * Pre-loaded templates are compiled and cached for fast access when rendering * @return {Promise} */ - export const preloadHandlebarsTemplates = async function() { +export const preloadHandlebarsTemplates = async function () { return loadTemplates([ @@ -36,7 +36,7 @@ "systems/vermine2047/templates/actor/creature/creature-combat.hbs", // additional templates - "systems/vermine2047/templates/roll.hbs", + "systems/vermine2047/templates/roll-dialog.hbs", ]); }; @@ -57,16 +57,16 @@ function range(start, end, step) { step = step == null ? 1 : Number(step); if (end == null) { - end = start; - start = 0; + end = start; + start = 0; } var length = Math.max(Math.ceil((end - start) / (step || 1)), 0); var result = new Array(length); for (var i = 0; i < length; i += 1) { - result[i] = start; - start += step; + result[i] = start; + start += step; } return result; @@ -76,162 +76,192 @@ export const registerHandlebarsHelpers = function () { Handlebars.registerHelper('concat', (...args) => args.slice(0, -1).join('')); Handlebars.registerHelper('lower', e => e.toLocaleLowerCase()); - Handlebars.registerHelper('toLowerCase', function(str) { - return str.toLowerCase(); + Handlebars.registerHelper('toLowerCase', function (str) { + return str.toLowerCase(); }); // search translation with variables - Handlebars.registerHelper('smarttl', function (arrayLabel,objectLabel, options) { - return game.i18n.localize(arrayLabel +"."+objectLabel+".name"); + Handlebars.registerHelper('smarttl', function (arrayLabel, objectLabel, options) { + return game.i18n.localize(arrayLabel + "." + objectLabel + ".name"); }); - Handlebars.registerHelper('smarttlk', function (arrayLabel,objectLabel, key) { - return game.i18n.localize(arrayLabel +"."+objectLabel+"."+key); + Handlebars.registerHelper('smarttlk', function (arrayLabel, objectLabel, key) { + return game.i18n.localize(arrayLabel + "." + objectLabel + "." + key); }); Handlebars.registerHelper('smartcfg', function (configLabel, objectLabel) { let text = ""; text = game.i18n.localize(CONFIG.VERMINE[configLabel][objectLabel]); - if (text == null){ + if (text == null) { text = CONFIG.VERMINE[configLabel][objectLabel]; } return text; - + }); - // return threat level information - Handlebars.registerHelper('threatLevel', function (property, level, options) { - if (level < 1 || level > 4) - return ""; - let levelData = CONFIG.VERMINE.ThreatLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - }); - - // return experience level information - Handlebars.registerHelper('experienceLevel', function (property, level, options) { - if (level < 1 || level > 4) - return ""; - let levelData = CONFIG.VERMINE.ExperienceLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - }); - - // return role level information - Handlebars.registerHelper('roleLevel', function (property, level, options) { - if (level < 1 || level > 4) - return ""; - let levelData = CONFIG.VERMINE.RoleLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - }); - - // return pattern level information - Handlebars.registerHelper('patternLevel', function (property, level, options) { - if (level < 1 || level > 4) - return ""; - let levelData = CONFIG.VERMINE.PatternLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - }); - - // return size level information - Handlebars.registerHelper('sizeLevel', function (property, level, options) { - if (level < 1 || level > 4) + // return threat level information + Handlebars.registerHelper('threatLevel', function (property, level, options) { + if (level < 1 || level > 4) return ""; - let levelData = CONFIG.VERMINE.SizeLevels[level]; - if (property == 'label'){ + let levelData = CONFIG.VERMINE.ThreatLevels[level]; + if (property == 'label') { return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; } else { return (levelData !== undefined) ? levelData[property] : ""; } }); - // return pack level information - Handlebars.registerHelper('packLevel', function (property, level, options) { - if (level < 0 || level > 3) - return ""; - let levelData = CONFIG.VERMINE.PackLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - }); + // return experience level information + Handlebars.registerHelper('experienceLevel', function (property, level, options) { + if (level < 1 || level > 4) + return ""; + let levelData = CONFIG.VERMINE.ExperienceLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } + }); + + // return role level information + Handlebars.registerHelper('roleLevel', function (property, level, options) { + if (level < 1 || level > 4) + return ""; + let levelData = CONFIG.VERMINE.RoleLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } + }); + + // return pattern level information + Handlebars.registerHelper('patternLevel', function (property, level, options) { + if (level < 1 || level > 4) + return ""; + let levelData = CONFIG.VERMINE.PatternLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } + }); + + // return size level information + Handlebars.registerHelper('sizeLevel', function (property, level, options) { + if (level < 1 || level > 4) + return ""; + let levelData = CONFIG.VERMINE.SizeLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } + }); + + // return pack level information + Handlebars.registerHelper('packLevel', function (property, level, options) { + if (level < 0 || level > 3) + return ""; + let levelData = CONFIG.VERMINE.PackLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } + }); // return skill level information Handlebars.registerHelper('skillLevel', function (property, level, options) { - if (level < 1 || level > 5) + if (level < 1 || level > 5) return ""; - let levelData = CONFIG.VERMINE.SkillLevels[level]; - if (property == 'label'){ + level = parseInt(level); + let levelData = CONFIG.VERMINE.SkillLevels[level]; + if (property == 'label') { return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; } else { return (levelData !== undefined) ? levelData[property] : ""; } }); - // return diff level information - Handlebars.registerHelper('diffLevel', function (property, level, options) { - if (level < 1 || level > 5) - return ""; - let levelData = CONFIG.VERMINE.DifficultyLevels[level]; - if (property == 'label'){ - return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; - } else { - return (levelData !== undefined) ? levelData[property] : ""; - } - - }); + // return diff level information + Handlebars.registerHelper('diffLevel', function (property, level, options) { + if (level < 1 || level > 5) + return ""; + let levelData = CONFIG.VERMINE.DifficultyLevels[level]; + if (property == 'label') { + return (levelData !== undefined) ? game.i18n.localize(levelData[property]) : ""; + } else { + return (levelData !== undefined) ? levelData[property] : ""; + } - // return age type information - Handlebars.registerHelper('ageType', function (property, level, options) { - if (level < 1 || level > 3) - return ""; - let ageData = CONFIG.VERMINE.AgeTypes[level]; - if (property == 'name'){ - return (ageData !== undefined) ? game.i18n.localize(ageData[property]) : ""; - } else { - return (ageData !== undefined) ? ageData[property] : ""; - } - - }); - - - Handlebars.registerHelper('getCombatTrackerColor', function (isPlayer, isNpc) { - if (isPlayer) return "player"; - if (isNpc) return "npc"; }); - - Handlebars.registerHelper('range', function() { + // return age type information + Handlebars.registerHelper('ageType', function (property, level, options) { + if (level < 1 || level > 3) + return ""; + let ageData = CONFIG.VERMINE.AgeTypes[level]; + if (property == 'name') { + return (ageData !== undefined) ? game.i18n.localize(ageData[property]) : ""; + } else { + return (ageData !== undefined) ? ageData[property] : ""; + } + + }); + + + Handlebars.registerHelper('getCombatTrackerColor', function (isPlayer, isNpc) { + if (isPlayer) return "player"; + if (isNpc) return "npc"; + }); + + + Handlebars.registerHelper('range', function () { var args = Array.prototype.slice.call(arguments), - rangeArgs = args.slice(0, -1), - options = args[args.length - 1]; + rangeArgs = args.slice(0, -1), + options = args[args.length - 1]; return range.apply(null, rangeArgs) - .map(function(num) { return options.fn(num); }) - .join(''); + .map(function (num) { return options.fn(num); }) + .join(''); + }); + + // return age type information + Handlebars.registerHelper('ife', function (arg1, arg2, options) { + return (arg1 == arg2) ? options.fn(this) : options.inverse(this); + }); + Handlebars.registerHelper('ifgt', function (a, b, options) { + if (a > b) { return options.fn(this); } + return options.inverse(this); + }); + Handlebars.registerHelper('iflt', function (a, b, options) { + if (a < b) { return options.fn(this); } + return options.inverse(this); + }); + Handlebars.registerHelper('ifgteq', function (a, b, options) { + if (a >= b) { return options.fn(this); } + return options.inverse(this); + }); + Handlebars.registerHelper('iflteq', function (a, b, options) { + if (a <= b) { return options.fn(this); } + return options.inverse(this); + }); + Handlebars.registerHelper('ifincludes', function (arg1, arg2, options) { + return (arg1.includes(arg2)) ? options.fn(this) : options.inverse(this); + }); + + Handlebars.registerHelper('repeat', function (times, start, block) { + var accum = ''; + if (!start) { start = 0; } + for (var i = start; i < times + start; ++i) { + block.data.index = i; + block.data.first = i === start; + block.data.last = i === (times + start - 1); + accum += block.fn(this); + } + return accum; }); - // return age type information - Handlebars.registerHelper('ife', function(arg1, arg2, options) { - return (arg1 == arg2) ? options.fn(this) : options.inverse(this); - }); - - - } \ No newline at end of file diff --git a/module/system/hooks.mjs b/module/system/hooks.mjs index 813de80..d2036d9 100644 --- a/module/system/hooks.mjs +++ b/module/system/hooks.mjs @@ -1,20 +1,62 @@ +import { RollDialog } from "./dialogs.mjs"; +import { initUserDice } from "./dice3d.mjs"; +import { VermineUtils } from "./roll.mjs"; import { registerTours } from "./tour.mjs"; export const registerHooks = function () { /** * Ready hook loads tables, and override's foundry's entity link functions to provide extension to pseudo entities */ + CONFIG.debug.hooks = true; + Hooks.once('diceSoNiceReady', async (dice3d) => { + dice3d.addSystem({ id: "Vermine2047", name: "Vermine 2047" }, "preferred"); + dice3d.addDicePreset({ + type: "d10", + labels: [ + "systems/vermine2047/assets/images/die/d10-1.webp", + "systems/vermine2047/assets/images/die/d10-2.webp", + "systems/vermine2047/assets/images/die/d10-3.webp", + "systems/vermine2047/assets/images/die/d10-4.webp", + "systems/vermine2047/assets/images/die/d10-5.webp", + "systems/vermine2047/assets/images/die/d10-6.webp", + "systems/vermine2047/assets/images/die/d10-7.webp", + "systems/vermine2047/assets/images/die/d10-8.webp", + "systems/vermine2047/assets/images/die/d10-9.webp", + "systems/vermine2047/assets/images/die/d10-0.webp", + ], + + system: "Vermine2047" + }); + + + await initUserDice(dice3d); + + }); + + Hooks.on('renderChatMessage', async (message, html, data) => { + if (message.user._id != game.user._id) { return } + await VermineUtils.chatListenners(html) + }) + + + Hooks.on('updateUser', async () => { + if (game.dice3d) { + initUserDice(game.dice3d) + + } + }) Hooks.once("ready", async () => { console.info("Vermine 2047 | System Initialized."); await registerTours(); + }); // changement de la pause Hooks.on("renderPause", async function () { if ($("#pause").attr("class") !== "paused") return; $(".paused img").attr("src", 'systems/vermine2047/assets/images/ui/vermine_pause.webp'); - $(".paused img").css({ "opacity": 1}); + $(".paused img").css({ "opacity": 1 }); $("#pause.paused figcaption").text("Communauté endormie..."); }); @@ -34,16 +76,17 @@ export const registerHooks = function () { return false; }); - Hooks.on('getSceneControlButtons', (controls) => { - /*controls.find((c) => c.name === 'token').tools.push({ - name: 'Dice Roller', - title: game.i18n.localize("VERMINE.RollTool"), - icon: 'fas fa-dice-d6', - button: true, - onClick() { - VermineRoll.ui(); - } - });*/ + Hooks.on('getSceneControlButtons', async (controls) => { + console.log; + controls.find((c) => c.name === 'token').tools.push({ + name: 'Dice Roller', + title: game.i18n.localize("VERMINE.RollTool"), + icon: 'fas fa-dice-d10', + button: true, + onClick() { + RollDialog.create().then(d => d.render(true)); + } + }); }); /* -------------------------------------------- */ @@ -53,17 +96,17 @@ export const registerHooks = function () { Hooks.on("preCreateActor", function (actor) { console.log('pre create actor', actor.img); if (actor.img == "icons/svg/mystery-man.svg") { - actor.updateSource({"img": `systems/vermine2047/assets/icons/actors/${actor.type}.webp`}); + actor.updateSource({ "img": `systems/vermine2047/assets/icons/actors/${actor.type}.webp` }); } }); - + Hooks.on("preCreateItem", function (item) { if (item.img == "icons/svg/item-bag.svg") { - item.updateSource({"img": `systems/vermine2047/assets/icons/items/${item.type}.webp`}); - // item.updateSource({"img": `systems/vermine2047/icons/competence.webp`}); + item.updateSource({ "img": `systems/vermine2047/assets/icons/items/${item.type}.webp` }); + // item.updateSource({"img": `systems/vermine2047/icons/competence.webp`}); } }); - + /* -------------------------------------------- */ /* Combat Hooks */ /* -------------------------------------------- */ @@ -79,29 +122,29 @@ export const registerHooks = function () { Hooks.on("updateCombat", function () { if (game.user.isGM) { - let combatant = (game.combat.combatant) ? game.combat.combatant.actor : ""; - - console.log('update combat', game.combat); - - /*if (combatant.type == "marker" && combatant.system.settings.general.isCounter == true) { - let step = (!combatant.system.settings.general.counting) ? -1 : combatant.system.settings.general.counting; - let newQuantity = combatant.system.pools.quantity.value + step; - combatant.update({"system.pools.quantity.value": newQuantity}); - }*/ + let combatant = (game.combat.combatant) ? game.combat.combatant.actor : ""; + + console.log('update combat', game.combat); + + /*if (combatant.type == "marker" && combatant.system.settings.general.isCounter == true) { + let step = (!combatant.system.settings.general.counting) ? -1 : combatant.system.settings.general.counting; + let newQuantity = combatant.system.pools.quantity.value + step; + combatant.update({"system.pools.quantity.value": newQuantity}); + }*/ } }); - /* Hooks.on("chatCommandsReady", function (chatCommands) { - chatCommands.registerCommand(chatCommands.createCommandFromData({ - commandKey: "/dr", - invokeOnCommand: (chatlog, messageText, chatdata) => { - Roll.get().parse(messageText); - }, - shouldDisplayToChat: false, - iconClass: "fa-dice-d6", - description: "Roll Vermine 2047 check" - })); - });*/ - - + /* Hooks.on("chatCommandsReady", function (chatCommands) { + chatCommands.registerCommand(chatCommands.createCommandFromData({ + commandKey: "/dr", + invokeOnCommand: (chatlog, messageText, chatdata) => { + Roll.get().parse(messageText); + }, + shouldDisplayToChat: false, + iconClass: "fa-dice-d6", + description: "Roll Vermine 2047 check" + })); + });*/ + + } diff --git a/module/system/roll.mjs b/module/system/roll.mjs index e7992cd..396e3d7 100644 --- a/module/system/roll.mjs +++ b/module/system/roll.mjs @@ -1,20 +1,233 @@ -export class VermineRoll { +export class VermineUtils { + /** + * Méthode pour effectuer un jet de dés avec différentes options + * @param {Object} options - Les options du jet de dés + * @returns {Roll} - Le résultat du jet de dés + */ + static async roll({ actor, NoD, Reroll = 0, difficulty = 7, self_control = 0, rollLabel = "jet custom", totems = { human: false, adapted: false }, max_effort = 0 }) { + // Déclaration des variables + let formula = ""; + let modFormula = null; - static roll(actorId, label, NoD, Reroll = 0, params = {}){ - const actor = game.actors.get(actorId); - let formula = '' + (parseInt(NoD,10) + parseInt(Reroll,10)) + "d10"; - if (Reroll > 0 && params.difficulty != undefined){ - formula += 'kh' + NoD; + // Vérification des totems humains + if (totems.human) { + NoD--; + modFormula = "(1D10cs>=" + difficulty + `[human_${game.user.name}]*2)`; + await actor.update({ + "system.adaptation.totems.human.value": actor.system.adaptation.totems.human.value - 1 + }) + } + // Vérification des totems adaptés + if (totems.adapted) { + NoD--; + // Construction de la formule modifiée + if (modFormula != null) { + modFormula = modFormula + "+(1D10cs>=" + difficulty + `[adapted_${game.user.name}]*2)`; + } else { + modFormula = "(1D10cs>=" + difficulty + `[adapted_${game.user.name}]*2)`; + } + await actor.update({ + "system.adaptation.totems.adapted.value": actor.system.adaptation.totems.adapted.value - 1 + }) + }; + + // Construction de la formule de base + let baseFormula = '' + NoD + "d10"; + baseFormula += (difficulty != undefined) ? "cs>=" + difficulty : "cs>=7"; + baseFormula += `[regular_${game.user.name}]` + + // Construction de la formule finale + if (modFormula != null) { + formula = baseFormula + "+" + modFormula; + } else { formula = baseFormula } + + // Création du jet de dés + let roll = new Roll(formula, actor.getRollData()); + await roll.evaluate(); + await VermineUtils.showDiceSoNice(roll); + VermineUtils.diplayChatRoll(roll, ...arguments); + return roll; + } + + /** + * Méthode pour gérer les événements de relance de dés + * @param {Object} message - Le message contenant l'événement de relance + * @param {Object} ev - L'événement de relance + */ + static async _onRerollSelect(message, ev) { + // Vérification de l'utilisateur + if (game.user._id != message.user._id) { + ui.notifications.warn('vous ne pouvez pas relancer un dés sur ce jet') + return false + } + + // Récupération du nombre de relances autorisé + let rerollCount = ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll')?.innerText; + // Vérification du nombre de relances restantes + if (!rerollCount || parseInt(rerollCount) < 1) { + console.log('no reroll') + ui.notifications.warn("plus de relance possible"); + let rerollables = ev.currentTarget.closest('ul').querySelectorAll('.rerollable'); + rerollables.forEach(el => el.classList.remove('rerollable')); + + // Mise à jour du nombre de relances restantes + ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll').innerText = rerollCount - 1; + + let content = ev.currentTarget.closest('div.message-content').outerHTML; + + await message.update({ + content: content + }) + return false + } + ev.currentTarget.classList.add('rerolled'); + + // Mise en place de la relance + await message.setFlag("world", "reroll", true); + + // Récupération de la difficulté et du type de dé + let difficulty = ev.currentTarget.closest('ul').dataset.difficulty; + let diceType = ev.currentTarget.dataset.diceType; + + // Mise à jour du nombre de relances restantes + ev.currentTarget.closest('div.vermine-roll-message').querySelector('#allowed_reroll').innerText = rerollCount - 1; + + // Construction de la formule de relance + let formula = `1d10cs>=${difficulty}`; + console.log(diceType) + switch (diceType.trim()) { + case 'human': + formula = `(1d10cs>=${difficulty}[human_${game.user.name}])*2` + break; + case 'adapted': + formula = `(1d10cs>=${difficulty}[adapted_${game.user.name}])*2` + break; + default: + formula += `[regular_${game.user.name}]` + break; + }; + + // Création et évaluation du jet de dés de relance + let reroll = await new Roll(formula); + await reroll.evaluate(); + await VermineUtils.showDiceSoNice(reroll); + // mise à jour de l'affichage du dés + console.log(reroll) + let result = reroll.dice[0].results[0].result; + ev.currentTarget.querySelector('span').innerText = result; + //mise à jour du total + let success = reroll.dice[0].results[0].success; + if (success) { + ev.currentTarget.classList.add('success') + let total = parseInt(ev.currentTarget.closest('.vermine-roll-message').querySelector('#total').innerText) + reroll.total + ev.currentTarget.closest('.vermine-roll-message').querySelector('#total').innerText = total + } + // Mise à jour de l'affichagedu message + ev.currentTarget.classList.remove("rerollable") + let content = ev.currentTarget.closest('div.message-content').outerHTML; + console.log(reroll, message); + + await message.update({ + content: content + }) + } + + /** + * Méthode pour gérer les événements de chat + * @param {HTMLElement} html - L'élément HTML contenant les événements de chat + */ + static async chatListenners(html) { + let reroll = html.find('#allowed_reroll')[0]?.innerText; + if (!reroll || parseInt(reroll) < 1) { + for (let die of html.find('.die')) { + die.classList.remove("rerollable") + }; + } else { + for (let die of html.find('.die')) { + die.classList.add("rerollable") + }; + } + html.find('.rerollable').click(async (ev) => { + ev.preventDefault(); + let msgId = ev.currentTarget.closest("li.message").dataset.messageId; + let message = await game.messages.get(msgId); + await VermineUtils._onRerollSelect(message, ev); + }); + + html.find("#effort-reroll").change(ev => { + let label = html.find("#granted-reroll")[0] + label.innerText = ev.currentTarget.value + }); + html.find("button.grant-reroll").click(async (ev) => { + html.find("#allowed_reroll")[0].innerText = html.find('#granted-reroll')[0].innerText + let mesEl = ev.currentTarget.closest('[data-message-id]') + let messageId = mesEl.dataset.messageId; + ev.currentTarget.closest('.reroll-from-effort').style.display="none" + let content = ev.currentTarget.closest(".vermine-roll-message").outerHTML; + let message = await game.messages.get(messageId); + await message.update({ content: content }); + }); + + } + + /** + * Méthode pour afficher les résultats des dés de manière graphique + * @param {Roll} roll - Le jet de dés à afficher + * @param {string} rollMode - Le mode d'affichage du jet de dés + */ + static async showDiceSoNice(roll, rollMode) { + if (game.modules.get("dice-so-nice")?.active) { + if (game.dice3d) { + let whisper = null; + let blind = false; + rollMode = rollMode ?? game.settings.get("core", "rollMode"); + switch (rollMode) { + case "blindroll": //GM only + blind = true; + case "gmroll": //GM + rolling player + whisper = this.getUsers(user => user.isGM); + break; + case "roll": //everybody + whisper = this.getUsers(user => user.active); + break; + case "selfroll": + whisper = [game.user.id]; + break; } - formula += (params.difficulty != undefined) ? "cs>" + params.difficulty : "cs>7"; - let roll = new Roll(formula, actor.getRollData()); - roll.toMessage({ - speaker: ChatMessage.getSpeaker({ actor: actor }), - flavor: label, - rollMode: game.settings.get('core', 'rollMode'), - }); - return roll; - } + await game.dice3d.showForRoll(roll, game.user, true, whisper, blind); + } + } + } + + /** + * Méthode pour récupérer un jet de dés à partir d'un message + * @param {string} messageId - L'identifiant du message contenant le jet de dés + */ + static async getRollFromMessage(messageId) { + let message = await game.messages.get(messageId); + + } + + + /** + * Méthode pour afficher un jet de dés dans le chat + * @param {Roll} roll - Le jet de dés à afficher + * @param {Object} param - Les paramètres du jet de dés + * @returns {ChatMessage} - Le message affichant le jet de dés + */ + static async diplayChatRoll(roll, param) { + let content = await renderTemplate("systems/vermine2047/templates/roll-message.hbs", { roll, param }) + let chatData = { + user: game.user._id, + speaker: ChatMessage.getSpeaker(), + content: content, + roll: roll + }; + let msg = await ChatMessage.create(chatData); + await msg.setFlag('world', 'roll', roll); + return msg + } + } diff --git a/module/system/settings.mjs b/module/system/settings.mjs index dd781fd..1572020 100644 --- a/module/system/settings.mjs +++ b/module/system/settings.mjs @@ -6,13 +6,26 @@ export const registerSettings = function () { config: true, type: String, choices: { - "1": "Survie", - "2": "Cauchemar", - "3": "Apocalypse" + "1": "Survie", + "2": "Cauchemar", + "3": "Apocalypse" }, default: 'e', onChange: value => { - // console.log(value); + let el = document.querySelector('.game-mode'); + el.id = 'game-mode-' + game.settings.get('vermine2047', 'game-mode') + switch (game.settings.get('vermine2047', 'game-mode')) { + case '1': + el.innerText = 'mode survie'; + + break; + case '2': + el.innerText = 'mode cauchemard' + break; + case '3': + el.innerText = 'mode apocalypse' + break; + } } }); diff --git a/module/vermine2047.mjs b/module/vermine2047.mjs index bd9f96e..3beab7f 100644 --- a/module/vermine2047.mjs +++ b/module/vermine2047.mjs @@ -12,31 +12,32 @@ import { VermineCreatureSheet } from "./sheets/creature-sheet.mjs"; import { VermineItem } from "./documents/item.mjs"; import { VermineItemSheet } from "./sheets/item-sheet.mjs"; -import { VermineRoll } from "./system/roll.mjs"; +import { VermineUtils } from "./system/roll.mjs"; import { VermineCombat, VermineCombatTracker } from "./system/fight.mjs"; // Import helper/utility classes and constants. import { preloadHandlebarsTemplates, registerHandlebarsHelpers } from "./system/handlebars-manager.mjs"; import { VERMINE } from "./system/config.mjs"; +import { initUserDice } from "./system/dice3d.mjs"; /* -------------------------------------------- */ /* Init Hook */ /* -------------------------------------------- */ -Hooks.once('init', async function() { +Hooks.once('init', async function () { // Add utility classes to the global game object so that they're more easily // accessible in global contexts. game.vermine2047 = { VermineActor, VermineItem, - VermineRoll, + VermineUtils, VermineCombat }; // Add custom constants for configuration. CONFIG.VERMINE = VERMINE; - + CONFIG.VERMINE.model = game.system.model /** * Set an initiative formula for the system * @type {String} @@ -54,24 +55,24 @@ Hooks.once('init', async function() { // Register sheet application classes Actors.unregisterSheet("core", ActorSheet); Actors.registerSheet('vermine2047', VermineCharacterSheet, { - types: ['character'], - makeDefault: true, - }); + types: ['character'], + makeDefault: true, + }); Actors.registerSheet('vermine2047', VermineNpcSheet, { - types: ['npc'], - makeDefault: true, - }); + types: ['npc'], + makeDefault: true, + }); Actors.registerSheet('vermine2047', VermineCreatureSheet, { types: ['creature'], makeDefault: true, - }); + }); Actors.registerSheet('vermine2047', VermineGroupSheet, { types: ['group'], makeDefault: true, - }); + }); Items.unregisterSheet("core", ItemSheet); Items.registerSheet("vermine2047", VermineItemSheet, { makeDefault: true }); @@ -79,6 +80,27 @@ Hooks.once('init', async function() { registerHooks(); // register Hooks registerSettings(); // register Vermine Settings + //afficher le mode de jeu + let mode = game.settings.get('vermine2047', 'game-mode'); + let el = document.createElement('SPAN'); + switch (mode) { + case '1': + el.innerText = 'mode survie'; + break; + case '2': + el.innerText = 'mode cauchemard'; + break; + case '3': + el.innerText = 'mode apocalypse'; + break; + } + el.classList.add('game-mode'); + el.id = 'game-mode-' + mode; + document.querySelector('#ui-left').prepend(el); + + + // Preload Handlebars templates. return preloadHandlebarsTemplates(); + }); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..b77cf9e --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5887 @@ +{ + "name": "rolenplay-core", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rolenplay-core", + "version": "1.0.0", + "license": "ISC", + "devDependencies": { + "@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0", + "browser-sync": "^2.27.11", + "gulp": "^4.0.2", + "gulp-sass": "^5.1.0", + "sass": "^1.55.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.1.tgz", + "integrity": "sha512-dzJtaDAAoXx4GCOJpbB2eG/Qj8VDpdwkLsWGzGm+0L7E8/434RyMbAHmk9ubXWVAb9nXmc44jUf8GKqVDiKezg==", + "dev": true + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@typhonjs-fvtt/eslint-config-foundry.js": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@typhonjs-fvtt/eslint-config-foundry.js/-/eslint-config-foundry.js-0.8.0.tgz", + "integrity": "sha512-Fu1XDS747exX5zVwty4VSwlOwkuzdnnN15C5w66uG4hOpJnPCZU/jcyEOCf9bazRPp06Smimn+mKd9OjrCvuuw==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-colors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", + "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "dev": true, + "dependencies": { + "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==", + "dev": true, + "dependencies": { + "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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/append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==", + "dev": true, + "dependencies": { + "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-filter": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", + "integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", + "integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==", + "dev": true, + "dependencies": { + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", + "integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==", + "dev": true, + "dependencies": { + "array-slice": "^1.0.0", + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", + "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-slice": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", + "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-sort": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", + "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "dev": true, + "dependencies": { + "default-compare": "^1.0.0", + "get-value": "^2.0.6", + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-done": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", + "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.2", + "process-nextick-args": "^2.0.0", + "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/async-each": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", + "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/async-each-series": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/async-each-series/-/async-each-series-0.1.1.tgz", + "integrity": "sha512-p4jj6Fws4Iy2m0iCmI2am2ZNZCgbdgE+P8F/8csmn2vx7ixXrO2zGcuNsD46X5uZSVecmkEy/M06X2vG8KD6dQ==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/async-settle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", + "integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==", + "dev": true, + "dependencies": { + "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dev": true, + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/bach": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", + "integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==", + "dev": true, + "dependencies": { + "arr-filter": "^1.1.1", + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "array-each": "^1.0.0", + "array-initial": "^1.0.0", + "array-last": "^1.1.1", + "async-done": "^1.2.2", + "async-settle": "^1.0.0", + "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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/browser-sync": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync/-/browser-sync-2.29.3.tgz", + "integrity": "sha512-NiM38O6XU84+MN+gzspVmXV2fTOoe+jBqIBx3IBdhZrdeURr6ZgznJr/p+hQ+KzkKEiGH/GcC4SQFSL0jV49bg==", + "dev": true, + "dependencies": { + "browser-sync-client": "^2.29.3", + "browser-sync-ui": "^2.29.3", + "bs-recipes": "1.3.4", + "chalk": "4.1.2", + "chokidar": "^3.5.1", + "connect": "3.6.6", + "connect-history-api-fallback": "^1", + "dev-ip": "^1.0.1", + "easy-extender": "^2.3.4", + "eazy-logger": "^4.0.1", + "etag": "^1.8.1", + "fresh": "^0.5.2", + "fs-extra": "3.0.1", + "http-proxy": "^1.18.1", + "immutable": "^3", + "localtunnel": "^2.0.1", + "micromatch": "^4.0.2", + "opn": "5.3.0", + "portscanner": "2.2.0", + "raw-body": "^2.3.2", + "resp-modifier": "6.0.2", + "rx": "4.1.0", + "send": "0.16.2", + "serve-index": "1.9.1", + "serve-static": "1.13.2", + "server-destroy": "1.0.1", + "socket.io": "^4.4.1", + "ua-parser-js": "^1.0.33", + "yargs": "^17.3.1" + }, + "bin": { + "browser-sync": "dist/bin.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/browser-sync-client": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-client/-/browser-sync-client-2.29.3.tgz", + "integrity": "sha512-4tK5JKCl7v/3aLbmCBMzpufiYLsB1+UI+7tUXCCp5qF0AllHy/jAqYu6k7hUF3hYtlClKpxExWaR+rH+ny07wQ==", + "dev": true, + "dependencies": { + "etag": "1.8.1", + "fresh": "0.5.2", + "mitt": "^1.1.3" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/browser-sync-ui": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/browser-sync-ui/-/browser-sync-ui-2.29.3.tgz", + "integrity": "sha512-kBYOIQjU/D/3kYtUIJtj82e797Egk1FB2broqItkr3i4eF1qiHbFCG6srksu9gWhfmuM/TNG76jMfzAdxEPakg==", + "dev": true, + "dependencies": { + "async-each-series": "0.1.1", + "chalk": "4.1.2", + "connect-history-api-fallback": "^1", + "immutable": "^3", + "server-destroy": "1.0.1", + "socket.io-client": "^4.4.1", + "stream-throttle": "^0.1.3" + } + }, + "node_modules/bs-recipes": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/bs-recipes/-/bs-recipes-1.3.4.tgz", + "integrity": "sha512-BXvDkqhDNxXEjeGM8LFkSbR+jzmP/CYpCiVKYn+soB1dDldeU15EBNDkwVXndKuX35wnNUaPd0qSoQEAkmQtMw==", + "dev": true + }, + "node_modules/buffer-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz", + "integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==", + "dev": true, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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/clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", + "dev": true + }, + "node_modules/cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-map": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", + "integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==", + "dev": true, + "dependencies": { + "arr-map": "^2.0.2", + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "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/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "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/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha512-OO7axMmPpu/2XuX1+2Yrg0ddju31B6xLZMWkJ5rYBu4YRmRVlOjvlY6kw2FJKiAzyxGwnrDUAG4s1Pf0sbBMCQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "~1.3.2", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-props": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "dev": true, + "dependencies": { + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/default-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", + "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "dev": true, + "dependencies": { + "kind-of": "^5.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-resolution": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", + "integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dev-ip": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dev-ip/-/dev-ip-1.0.1.tgz", + "integrity": "sha512-LmVkry/oDShEgSZPNgqCIp2/TlqtExeGmymru3uCELnfyjY11IzpAproLYs+1X88fXO6DBoYP3ul2Xo2yz2j6A==", + "dev": true, + "bin": { + "dev-ip": "lib/dev-ip.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/each-props": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", + "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.1", + "object.defaults": "^1.1.0" + } + }, + "node_modules/each-props/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/easy-extender": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/easy-extender/-/easy-extender-2.3.4.tgz", + "integrity": "sha512-8cAwm6md1YTiPpOvDULYJL4ZS6WfM5/cTeVVh4JsvyYZAoqlRVUpHL9Gr5Fy7HA6xcSZicUia3DeAgO3Us8E+Q==", + "dev": true, + "dependencies": { + "lodash": "^4.17.10" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/eazy-logger": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eazy-logger/-/eazy-logger-4.0.1.tgz", + "integrity": "sha512-2GSFtnnC6U4IEKhEI7+PvdxrmjJ04mdsj3wHZTFiw0tUtG4HCWzTr13ZYTk8XOGnA1xQMaDljoBOYlk3D/MMSw==", + "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/engine.io": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", + "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-client": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.3.tgz", + "integrity": "sha512-9Z0qLB0NIisTRt1DZ/8U2k12RJn8yls/nXMZLn+/N8hANT3TcYjKFKcwbw5zFQiN4NTde3TSY9zb79e1ij6j9Q==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.11.0", + "xmlhttprequest-ssl": "~2.0.0" + } + }, + "node_modules/engine.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/engine.io-parser": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", + "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/engine.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "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/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-tilde": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-log": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", + "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "dev": true, + "dependencies": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "parse-node-version": "^1.0.0", + "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fast-levenshtein": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", + "integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==", + "dev": true + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "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/finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha512-ejnvM9ZXYzp6PUPUyQBMBf0Co5VX2gr5H2VQe2Ui2jWXNlxv+PYZo8wpAymJNJdLsG1R4p+M4aynF8KuoUEwRw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.1", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", + "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^4.0.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/findup-sync/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/findup-sync/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fined": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", + "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fined/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flagged-respawn": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", + "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha512-V3Z3WZWVUYd8hoCL5xfXJCaHWYzmtwW5XWYSlLgERi8PWd8bx1kUHUk8L1BT57e49oKnDDD180mjfrHc1yA9rg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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/glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-stream/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-stream/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", + "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-done": "^1.2.0", + "chokidar": "^2.0.0", + "is-negated-glob": "^1.0.0", + "just-debounce": "^1.0.0", + "normalize-path": "^3.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/glob-watcher/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/glob-watcher/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/micromatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/glob-watcher/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-modules": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", + "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "dev": true, + "dependencies": { + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glogg": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", + "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "dev": true, + "dependencies": { + "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gulp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", + "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "dev": true, + "dependencies": { + "glob-watcher": "^5.0.3", + "gulp-cli": "^2.2.0", + "undertaker": "^1.2.1", + "vinyl-fs": "^3.0.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/gulp-cli/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + } + }, + "node_modules/gulp-cli/node_modules/get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", + "dev": true, + "dependencies": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-cli/node_modules/y18n": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/yargs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.1" + } + }, + "node_modules/gulp-cli/node_modules/yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "dependencies": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" + } + }, + "node_modules/gulp-sass": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz", + "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==", + "dev": true, + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "picocolors": "^1.0.0", + "plugin-error": "^1.0.1", + "replace-ext": "^2.0.0", + "strip-ansi": "^6.0.1", + "vinyl-sourcemaps-apply": "^0.2.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==", + "dev": true, + "dependencies": { + "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/homedir-polyfill": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "dev": true, + "dependencies": { + "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", + "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "dependencies": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "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-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "dependencies": { + "lodash.isfinite": "^3.3.2" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "dependencies": { + "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "dependencies": { + "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha512-oBko6ZHlubVB5mRFkur5vgYR1UyqX+S6Y/oCfLhqNdcc2fYFlDpIoNc7AfKS1KOGcnNAkvsr0grLck9ANM815w==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/just-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", + "dev": true + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/last-run": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", + "integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==", + "dev": true, + "dependencies": { + "default-resolution": "^2.0.0", + "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", + "dev": true, + "dependencies": { + "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==", + "dev": true, + "dependencies": { + "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/liftoff": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", + "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "dev": true, + "dependencies": { + "extend": "^3.0.0", + "findup-sync": "^3.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==", + "dev": true + }, + "node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/localtunnel": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/localtunnel/-/localtunnel-2.0.2.tgz", + "integrity": "sha512-n418Cn5ynvJd7m/N1d9WVJISLJF/ellZnfsLnx8WBWGzxv/ntNcFkJ1o6se5quUhCplfLGBNL5tYHiq5WF3Nug==", + "dev": true, + "dependencies": { + "axios": "0.21.4", + "debug": "4.3.2", + "openurl": "1.1.1", + "yargs": "17.1.1" + }, + "bin": { + "lt": "bin/lt.js" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/localtunnel/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/localtunnel/node_modules/debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/localtunnel/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/localtunnel/node_modules/yargs": { + "version": "17.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.1.1.tgz", + "integrity": "sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/localtunnel/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "dev": true + }, + "node_modules/lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha512-7FGG40uhC8Mm633uKW1r58aElFlBlxCrg9JfSi3P6aYiWmfiWF0PgMd86ZUsxE5GwWPdHoS2+48bwTh2VPkIQA==", + "dev": true + }, + "node_modules/make-iterator": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", + "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/make-iterator/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", + "integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==", + "dev": true, + "dependencies": { + "findup-sync": "^2.0.0", + "micromatch": "^3.0.4", + "resolve": "^1.4.0", + "stack-trace": "0.0.10" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==", + "dev": true, + "dependencies": { + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matchdep/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true, + "bin": { + "mime": "cli.js" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mitt": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-1.2.0.tgz", + "integrity": "sha512-r6lj77KlwqLhIUku9UWYes7KJtsczvolZkzp8hbaDPPaE24OmWl5s539Mytlj22siEQKosZ26qCBgda2PKwoJw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/mute-stdout": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", + "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/nan": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.19.0.tgz", + "integrity": "sha512-nO1xXxfh/RWNxfd/XPfbIfFk5vgLsAxUR9y5O0cHMJu/AW9U95JLXqthYHjEp+8gQ5p96K9jUp8nbVOxCdRbtw==", + "dev": true, + "optional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "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/now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "dependencies": { + "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.defaults": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", + "dev": true, + "dependencies": { + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", + "integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.reduce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", + "integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==", + "dev": true, + "dependencies": { + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/openurl": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/openurl/-/openurl-1.1.1.tgz", + "integrity": "sha512-d/gTkTb1i1GKz5k3XE3XFV/PxQ1k45zDqGP2OA7YhgsaLoqm6qRvARAZOFer1fcXritWlGBRCu/UgeS4HAnXAA==", + "dev": true + }, + "node_modules/opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", + "dev": true, + "dependencies": { + "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-passwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "dev": true + }, + "node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", + "dev": true, + "dependencies": { + "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/plugin-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", + "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "dev": true, + "dependencies": { + "ansi-colors": "^1.0.1", + "arr-diff": "^4.0.0", + "arr-union": "^3.1.0", + "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dev": true, + "dependencies": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "engines": { + "node": ">=0.4", + "npm": ">=1.0.0" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "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/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==", + "dev": true, + "dependencies": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/replace-homedir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", + "integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1", + "is-absolute": "^1.0.0", + "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", + "dev": true + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-dir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", + "dev": true, + "dependencies": { + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==", + "dev": true, + "dependencies": { + "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/resp-modifier": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/resp-modifier/-/resp-modifier-6.0.2.tgz", + "integrity": "sha512-U1+0kWC/+4ncRFYqQWTx/3qkfE6a4B/h3XXgmXypfa0SPZ3t7cbbaFk297PjQS/yov24R18h6OZe6iZwj3NSLw==", + "dev": true, + "dependencies": { + "debug": "^2.2.0", + "minimatch": "^3.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/rx": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", + "integrity": "sha512-CiaiuN6gapkdl+cZUr67W6I8jquN4lkak3vtIsIWCl4XIPP8ffsoyN6/+PuGXnQy8Cu8W2y9Xxh31Rq4M6wUug==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", + "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/sass/node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-greatest-satisfied-range": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", + "integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==", + "dev": true, + "dependencies": { + "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/send/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/send/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socket.io": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", + "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.5.2", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", + "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-adapter/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io-client": { + "version": "4.7.5", + "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz", + "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.2", + "engine.io-client": "~6.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-client/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-client/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io-parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socket.io/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/sparkles": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", + "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha512-wuTCPGlJONk/a1kqZ4fQM2+908lC7fa7nPYpTC1EhnvqLX/IICbeP1OZGDtA374trpSq68YubKUMo8oRhN46yg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stream-exhaust": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", + "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "dev": true + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, + "node_modules/stream-throttle": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/stream-throttle/-/stream-throttle-0.1.3.tgz", + "integrity": "sha512-889+B9vN9dq7/vLbGyuHeZ6/ctf5sNuGWsDy89uNxkFTAgzy0eK7+w5fL3KLNRTkLle7EgZGvHUphZW0Q26MnQ==", + "dev": true, + "dependencies": { + "commander": "^2.2.0", + "limiter": "^1.0.5" + }, + "bin": { + "throttleproxy": "bin/throttleproxy.js" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver-compat": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", + "integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==", + "dev": true, + "dependencies": { + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2-filter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.1.0.tgz", + "integrity": "sha512-VhZsTsfrIJjyUi6GeecnwcOJlmoqgIdGFDjqnV5ape+F1DN8GejfPO66XyIhoinxmxGImiUTrq9RwpTN5yszGA==", + "dev": true, + "dependencies": { + "through2": "^4.0.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/through2-filter/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/through2-filter/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==", + "dev": true, + "dependencies": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==", + "dev": true, + "dependencies": { + "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/undertaker": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", + "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1", + "arr-map": "^2.0.0", + "bach": "^1.0.0", + "collection-map": "^1.0.0", + "es6-weak-map": "^2.0.1", + "fast-levenshtein": "^1.0.0", + "last-run": "^1.1.0", + "object.defaults": "^1.0.0", + "object.reduce": "^1.0.0", + "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undertaker-registry": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", + "integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "dependencies": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8flags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", + "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "dev": true, + "dependencies": { + "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "dependencies": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "dependencies": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==", + "dev": true, + "dependencies": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==", + "dev": true, + "dependencies": { + "source-map": "^0.5.1" + } + }, + "node_modules/vinyl/node_modules/replace-ext": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest-ssl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz", + "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..c3c6b95 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "vermine2047", + "version": "1.0.0", + "description": "vermine 2047 for foundry", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "launch window Foundry11": "cd C:/Program Files/Foundry Virtual Tabletop_V11/resources/app && node main.js", + "watch": "gulp watch", + "buildStyle": "gulp buildStyles" + }, + "author": "", + "devDependencies": { + "@typhonjs-fvtt/eslint-config-foundry.js": "^0.8.0", + "browser-sync": "^2.27.11", + "gulp": "^4.0.2", + "gulp-sass": "^5.1.0", + "sass": "^1.55.0" + } +} diff --git a/packs/adaptationsmutations/000128.log b/packs/adaptationsmutations/000128.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/adaptationsmutations/CURRENT b/packs/adaptationsmutations/CURRENT index 224d52a..0e27482 100644 --- a/packs/adaptationsmutations/CURRENT +++ b/packs/adaptationsmutations/CURRENT @@ -1 +1 @@ -MANIFEST-000127 +MANIFEST-000177 diff --git a/packs/adaptationsmutations/LOG.old b/packs/adaptationsmutations/LOG.old index d295399..903198e 100644 --- a/packs/adaptationsmutations/LOG.old +++ b/packs/adaptationsmutations/LOG.old @@ -1,7 +1,3 @@ -2023/09/07-17:42:45.351570 7f3e00bf0640 Recovering log #121 -2023/09/07-17:42:45.359683 7f3e00bf0640 Delete type=0 #121 -2023/09/07-17:42:45.359723 7f3e00bf0640 Delete type=3 #119 -2023/09/07-17:43:21.919681 7f3df7cfb640 Level-0 table #126: started -2023/09/07-17:43:21.919705 7f3df7cfb640 Level-0 table #126: 0 bytes OK -2023/09/07-17:43:21.925140 7f3df7cfb640 Delete type=0 #124 -2023/09/07-17:43:21.932544 7f3df7cfb640 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.076 b5c Recovering log #174 +2024/04/26-22:48:34.079 b5c Delete type=0 #174 +2024/04/26-22:48:34.081 b5c Delete type=3 #173 diff --git a/packs/adaptationsmutations/MANIFEST-000127 b/packs/adaptationsmutations/MANIFEST-000127 deleted file mode 100644 index 92f6afb..0000000 Binary files a/packs/adaptationsmutations/MANIFEST-000127 and /dev/null differ diff --git a/packs/deck-creatures/000128.log b/packs/deck-creatures/000128.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/deck-creatures/CURRENT b/packs/deck-creatures/CURRENT index 224d52a..0e27482 100644 --- a/packs/deck-creatures/CURRENT +++ b/packs/deck-creatures/CURRENT @@ -1 +1 @@ -MANIFEST-000127 +MANIFEST-000177 diff --git a/packs/deck-creatures/LOG.old b/packs/deck-creatures/LOG.old index 6816f5c..9cabe3c 100644 --- a/packs/deck-creatures/LOG.old +++ b/packs/deck-creatures/LOG.old @@ -1,7 +1,3 @@ -2023/09/07-17:42:45.379151 7f3e01bf2640 Recovering log #121 -2023/09/07-17:42:45.393418 7f3e01bf2640 Delete type=0 #121 -2023/09/07-17:42:45.393457 7f3e01bf2640 Delete type=3 #119 -2023/09/07-17:43:21.937228 7f3df7cfb640 Level-0 table #126: started -2023/09/07-17:43:21.937306 7f3df7cfb640 Level-0 table #126: 0 bytes OK -2023/09/07-17:43:21.941263 7f3df7cfb640 Delete type=0 #124 -2023/09/07-17:43:21.945982 7f3df7cfb640 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.179 b5c Recovering log #174 +2024/04/26-22:48:34.188 b5c Delete type=0 #174 +2024/04/26-22:48:34.188 b5c Delete type=3 #173 diff --git a/packs/deck-creatures/MANIFEST-000127 b/packs/deck-creatures/MANIFEST-000127 deleted file mode 100644 index 92f6afb..0000000 Binary files a/packs/deck-creatures/MANIFEST-000127 and /dev/null differ diff --git a/packs/historiques/000112.log b/packs/historiques/000112.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/historiques/CURRENT b/packs/historiques/CURRENT index 0e66324..c1ddd5c 100644 --- a/packs/historiques/CURRENT +++ b/packs/historiques/CURRENT @@ -1 +1 @@ -MANIFEST-000111 +MANIFEST-000161 diff --git a/packs/historiques/LOG.old b/packs/historiques/LOG.old index c0a08e0..e170284 100644 --- a/packs/historiques/LOG.old +++ b/packs/historiques/LOG.old @@ -1,7 +1,3 @@ -2023/09/07-17:42:45.361812 7f3e023f3640 Recovering log #105 -2023/09/07-17:42:45.375049 7f3e023f3640 Delete type=3 #103 -2023/09/07-17:42:45.375081 7f3e023f3640 Delete type=0 #105 -2023/09/07-17:43:21.928733 7f3df7cfb640 Level-0 table #110: started -2023/09/07-17:43:21.928798 7f3df7cfb640 Level-0 table #110: 0 bytes OK -2023/09/07-17:43:21.932413 7f3df7cfb640 Delete type=0 #108 -2023/09/07-17:43:21.932652 7f3df7cfb640 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.099 b5c Recovering log #158 +2024/04/26-22:48:34.107 b5c Delete type=0 #158 +2024/04/26-22:48:34.107 b5c Delete type=3 #157 diff --git a/packs/historiques/MANIFEST-000111 b/packs/historiques/MANIFEST-000111 deleted file mode 100644 index c45b641..0000000 Binary files a/packs/historiques/MANIFEST-000111 and /dev/null differ diff --git a/packs/pretires/000126.log b/packs/pretires/000126.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/pretires/CURRENT b/packs/pretires/CURRENT index 70936fe..fb6ed1a 100644 --- a/packs/pretires/CURRENT +++ b/packs/pretires/CURRENT @@ -1 +1 @@ -MANIFEST-000125 +MANIFEST-000175 diff --git a/packs/pretires/LOG.old b/packs/pretires/LOG.old index c064dd4..f2a6229 100644 --- a/packs/pretires/LOG.old +++ b/packs/pretires/LOG.old @@ -1,7 +1,3 @@ -2023/09/07-17:42:45.376908 7f3e013f1640 Recovering log #119 -2023/09/07-17:42:45.390868 7f3e013f1640 Delete type=0 #119 -2023/09/07-17:42:45.390911 7f3e013f1640 Delete type=3 #117 -2023/09/07-17:43:21.941413 7f3df7cfb640 Level-0 table #124: started -2023/09/07-17:43:21.941481 7f3df7cfb640 Level-0 table #124: 0 bytes OK -2023/09/07-17:43:21.945682 7f3df7cfb640 Delete type=0 #122 -2023/09/07-17:43:21.946023 7f3df7cfb640 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.159 1544 Recovering log #172 +2024/04/26-22:48:34.165 1544 Delete type=0 #172 +2024/04/26-22:48:34.166 1544 Delete type=3 #171 diff --git a/packs/pretires/MANIFEST-000125 b/packs/pretires/MANIFEST-000125 deleted file mode 100644 index dd0249f..0000000 Binary files a/packs/pretires/MANIFEST-000125 and /dev/null differ diff --git a/packs/rites/000005.ldb b/packs/rites/000005.ldb deleted file mode 100644 index 9a7d791..0000000 Binary files a/packs/rites/000005.ldb and /dev/null differ diff --git a/packs/rites/000019.log b/packs/rites/000019.log deleted file mode 100644 index e2c0aae..0000000 Binary files a/packs/rites/000019.log and /dev/null differ diff --git a/packs/rites/CURRENT b/packs/rites/CURRENT index e417a51..be93edb 100644 --- a/packs/rites/CURRENT +++ b/packs/rites/CURRENT @@ -1 +1 @@ -MANIFEST-000018 +MANIFEST-000071 diff --git a/packs/rites/LOG.old b/packs/rites/LOG.old index 68dd0da..3fe863d 100644 --- a/packs/rites/LOG.old +++ b/packs/rites/LOG.old @@ -1,8 +1,3 @@ -2023/09/07-17:42:45.340397 7f3e013f1640 Recovering log #12 -2023/09/07-17:42:45.348853 7f3e013f1640 Delete type=0 #12 -2023/09/07-17:42:45.348874 7f3e013f1640 Delete type=3 #10 -2023/09/07-17:43:21.915992 7f3df7cfb640 Level-0 table #17: started -2023/09/07-17:43:21.916004 7f3df7cfb640 Level-0 table #17: 0 bytes OK -2023/09/07-17:43:21.919638 7f3df7cfb640 Delete type=0 #15 -2023/09/07-17:43:21.925330 7f3df7cfb640 Manual compaction at level-0 from '!items!10vhNURxl8FOwfy0' @ 72057594037927935 : 1 .. '!items!vX832Z4LpasxLIIx' @ 0 : 0; will stop at (end) -2023/09/07-17:43:21.932584 7f3df7cfb640 Manual compaction at level-1 from '!items!10vhNURxl8FOwfy0' @ 72057594037927935 : 1 .. '!items!vX832Z4LpasxLIIx' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.121 1544 Recovering log #68 +2024/04/26-22:48:34.127 1544 Delete type=0 #68 +2024/04/26-22:48:34.127 1544 Delete type=3 #67 diff --git a/packs/rites/MANIFEST-000018 b/packs/rites/MANIFEST-000018 deleted file mode 100644 index e0bc394..0000000 Binary files a/packs/rites/MANIFEST-000018 and /dev/null differ diff --git a/packs/tables/000019.log b/packs/tables/000019.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/tables/CURRENT b/packs/tables/CURRENT index e417a51..284d53f 100644 --- a/packs/tables/CURRENT +++ b/packs/tables/CURRENT @@ -1 +1 @@ -MANIFEST-000018 +MANIFEST-000068 diff --git a/packs/tables/LOG.old b/packs/tables/LOG.old index ff1707b..6cdef0e 100644 --- a/packs/tables/LOG.old +++ b/packs/tables/LOG.old @@ -1,8 +1,3 @@ -2023/09/07-17:42:45.340398 7f3e01bf2640 Recovering log #12 -2023/09/07-17:42:45.348853 7f3e01bf2640 Delete type=0 #12 -2023/09/07-17:42:45.348878 7f3e01bf2640 Delete type=3 #10 -2023/09/07-17:43:21.901412 7f3df7cfb640 Level-0 table #17: started -2023/09/07-17:43:21.901429 7f3df7cfb640 Level-0 table #17: 0 bytes OK -2023/09/07-17:43:21.905137 7f3df7cfb640 Delete type=0 #15 -2023/09/07-17:43:21.915980 7f3df7cfb640 Manual compaction at level-0 from '!tables!UxgGMRs0kTplpTbe' @ 72057594037927935 : 1 .. '!tables.results!dXo0EN9ieo1tSnRY.ymnitiW2yAuk75M3' @ 0 : 0; will stop at (end) -2023/09/07-17:43:21.919676 7f3df7cfb640 Manual compaction at level-1 from '!tables!UxgGMRs0kTplpTbe' @ 72057594037927935 : 1 .. '!tables.results!dXo0EN9ieo1tSnRY.ymnitiW2yAuk75M3' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.142 b5c Recovering log #65 +2024/04/26-22:48:34.148 b5c Delete type=0 #65 +2024/04/26-22:48:34.148 b5c Delete type=3 #64 diff --git a/packs/tables/MANIFEST-000018 b/packs/tables/MANIFEST-000018 deleted file mode 100644 index 343cf9a..0000000 Binary files a/packs/tables/MANIFEST-000018 and /dev/null differ diff --git a/packs/traumatismes/000126.log b/packs/traumatismes/000126.log deleted file mode 100644 index e69de29..0000000 diff --git a/packs/traumatismes/CURRENT b/packs/traumatismes/CURRENT index 70936fe..fb6ed1a 100644 --- a/packs/traumatismes/CURRENT +++ b/packs/traumatismes/CURRENT @@ -1 +1 @@ -MANIFEST-000125 +MANIFEST-000175 diff --git a/packs/traumatismes/LOG.old b/packs/traumatismes/LOG.old index d40eba6..7b447f7 100644 --- a/packs/traumatismes/LOG.old +++ b/packs/traumatismes/LOG.old @@ -1,7 +1,3 @@ -2023/09/07-17:42:45.351565 7f3e023f3640 Recovering log #119 -2023/09/07-17:42:45.359682 7f3e023f3640 Delete type=0 #119 -2023/09/07-17:42:45.359722 7f3e023f3640 Delete type=3 #117 -2023/09/07-17:43:21.925366 7f3df7cfb640 Level-0 table #124: started -2023/09/07-17:43:21.925434 7f3df7cfb640 Level-0 table #124: 0 bytes OK -2023/09/07-17:43:21.928599 7f3df7cfb640 Delete type=0 #122 -2023/09/07-17:43:21.932611 7f3df7cfb640 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2024/04/26-22:48:34.087 1544 Recovering log #172 +2024/04/26-22:48:34.091 1544 Delete type=0 #172 +2024/04/26-22:48:34.092 1544 Delete type=3 #171 diff --git a/packs/traumatismes/MANIFEST-000125 b/packs/traumatismes/MANIFEST-000125 deleted file mode 100644 index dd0249f..0000000 Binary files a/packs/traumatismes/MANIFEST-000125 and /dev/null differ diff --git a/scss/base_work.scss b/scss/base_work.scss new file mode 100644 index 0000000..7c17990 --- /dev/null +++ b/scss/base_work.scss @@ -0,0 +1,668 @@ +@font-face { + font-family: "DistressBlack"; + src: url("../assets/fonts/dcc_sharp_distress_black_by_dccanim.otf"); +} + +.sans-font { + font-family: "DistressBlack", sans-serif; +} + +/* Change shadow colors and Foundry general font color!! */ +.app { + box-shadow: 0 0 20px #7e4444; + /* Change the color code here for a nice shadow color! */ + color: #dfdfdf; + /* Text color for window titles and menu all across Foundry */ +} + +/* Character and Item Name Titles Text style! */ +.sheet .charname input { + color: #191813; + font-family: "DistressBlack", sans-serif; + font-size: 30px; + font-style: normal; +} + +/* custom styles */ +body.system-vermine2047 img#logo { + content: url("/systems/vermine2047/assets/images/ui/logo_vermine_foundry.webp"); + height: auto; +} + +/* Customize the chat roll area! */ +#chat-form textarea { + background: url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat; + /*font-family: monospace; + font-size: 14px; + color: black; */ +} + +/* Customize the chat history area! */ +#chat-log .message { + background: url(/systems/vermine2047/assets/images/ui/box_background.webp) repeat; + /*color: #191813; */ +} + +img { + border: none; +} + +ul.unstyled { + list-style-type: none; + padding: 0; + margin: 0; +} + +ul.unstyled li { + padding: 0; + margin: 0; +} + +.padding-with-frieze { + margin-left: 18% !important; + margin-right: 10% !important; +} + +.padding-with-frieze li { + max-width: 100%; +} + +.w-full { + width: 100%; +} + +.mx-auto { + margin-left: auto; + margin-right: auto; +} + +/* ----------------------------------------- */ +/* Sheet Structure */ +/* ----------------------------------------- */ +.system-vermine2047 .sheet .window-content { + background: url(/systems/vermine2047/assets/images/ui/box_background.webp); + padding: 0; + overflow-y: hidden; +} + +.system-vermine2047 .dialog .window-content { + background: url(/systems/vermine2047/assets/images/ui/fond_chat_box.webp); + padding: 0.5rem; + overflow-y: hidden; +} + +.window-content .row.smb { + margin-bottom: 0.25rem; +} + +.window-content .row.mdb { + margin-bottom: 0.5rem; +} + +.window-content .row.lgb { + margin-bottom: 1rem; +} + +.actor.sheet form .form { + display: grid; + + grid-template-columns: minmax(230px, 1fr) 3fr; + grid-template-rows: 1fr; + align-items: flex-start; + height: 100%; + overflow: auto; +} + +.actor.sheet .form aside { + grid-row: span 1 / span 1; + background-image: url(/systems/vermine2047/assets/images/ui/barre_laterale.webp); + background-repeat: no-repeat; + background-size: cover; + height: 100%; + width: 240px; + padding: 0 0.3rem; + box-shadow: -20px 0px 100px #000000b5 inset; + + + .major-totem { + position: relative; + + h4 { + position: absolute; + transform: rotate(-8deg); + opacity: 0.7; + transition: 0.2s; + + } + + &:hover h4 { + opacity: 1; + } + } +} + +.actor.sheet .form main { + box-shadow: 10px 0px 100px #000000b5 inset; + padding-left: 1rem; + grid-row: span 1 / span 1; + height: 100%; +} + +.actor.sheet .form aside .image-wrapper { + text-align: center; +} + +.actor.sheet .form aside .image-wrapper img { + width: 170px; + height: 145px; +} + +.actor.sheet .form aside .paper { + margin-top: 1rem; + height: 350px; +} + +.actor.sheet .form aside .second-paper { + margin-top: 4rem; + height: 150px; +} + +.actor.sheet .form h3 { + font-family: "DistressBlack", sans-serif; + text-align: center; + text-transform: uppercase; + color: #4e564c; + font-size: 1.7rem; + border-bottom: none; + margin: 0; + +} + +.actor.sheet .form h4, +.item.sheet .form h4 { + font-family: "DistressBlack", sans-serif; + font-size: 1.4em; + text-transform: uppercase; + margin: 0 0 0.2rem; +} + +.actor.sheet .form .characteristics h4 { + font-size: 1.25rem; + margin-top: 0 0.1rem; +} + +.actor.sheet .form .tab.totem h4, +.actor.sheet .form .tab.equipment h4, +.actor.sheet .form .tab.stories h4 { + margin-top: 0.875rem; +} + +.system-vermine2047 .char-header { + font-family: "DistressBlack", sans-serif; +} + +.system-vermine2047 .char-header section { + display: flex; + flex-direction: column; + align-items: flex-start; + justify-content: flex-start; + +} + +.system-vermine2047 .char-header h1.char-name, +.system-vermine2047 .char-vermine2047 { + border-bottom: none; + line-height: 2rem; +} + +.system-vermine2047 .char-vermine2047 { + font-size: 1.5rem; +} + +.system-vermine2047 .sheet.actor form { + width: 100%; + height: 100%; + overflow: hidden; +} + +.system-vermine2047 .sheet.actor form div.hexa { + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + height: unset; + max-width: 1.5rem; + aspect-ratio: 1/1; + color: black; + transform: rotate(90deg); + transition: 0.2s; + margin: 0.2rem; + + &:hover { + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + + } + + input { + opacity: 1; + min-width: 100%; + min-height: 100%; + opacity: 0 + } + + &.checked { + &:hover { + background: radial-gradient(circle, rgb(43, 43, 43) 0%, rgba(0, 0, 0, 0.288) 100%); + + } + + background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); + } + + &.unavailable { + background: radial-gradient(circle, rgba(66, 15, 15, 0.664) 0%, rgba(131, 70, 70, 0.432) 100%); + + } +} + +.system-vermine2047 .sheet.actor div.minor-totems { + position: relative; + background-color: #929c6f85; + + h5 { + position: absolute; + top: 0; + + img { + max-width: 2rem; + position: absolute; + bottom: -2rem; + + } + } + + .totem-dice { + + .human-dice, + .adapted-dice { + display: flex; + flex-direction: row; + margin-left: 2rem; + + + i { + padding-top: 0.5rem; + color: #064930; + } + } + + + + + + .adapted-dice { + justify-content: flex-end; + margin-left: 0; + margin-right: 2rem; + transform: rotate(180deg); + + i { + transform: rotate(180deg); + padding-top: 0.5rem; + color: rgb(85, 52, 2); + } + } + } + + .human { + left: 0; + + img { + left: 0; + + } + } + + .adapted { + right: 0; + + img { + right: 0 + } + } +} + +.system-vermine2047 .sheet.actor form input[type=text], +.system-vermine2047 .sheet.actor form input[type=number] { + width: calc(100% - 2px); + height: calc(100% - 2px); + background: none; + padding: 0; + margin: 1px 0; + color: #333; + border: 1px solid transparent; + + &.hexa { + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + height: unset; + max-width: 1.5rem; + aspect-ratio: 1/1; + color: black + } + +} + +.system-vermine2047 .sheet.actor form input[type=text]:hover:not(:disabled), +.system-vermine2047 .sheet.actor form input[type=text]:focus, +.system-vermine2047 .sheet.actor form select:hover:not(:disabled), +.system-vermine2047 .sheet.actor form select:focus, +.system-vermine2047 .sheet.actor form input[type=number]:hover:not(:disabled), +.system-vermine2047 .sheet.actor form input[type=number]:focus, +.system-vermine2047 .sheet.actor form textarea:hover:not(:disabled), +.system-vermine2047 .sheet.actor form textarea:focus { + box-shadow: 0 0 10px #005a3c inset; +} + +.system-vermine2047 .sheet.actor form select { + font-size: 0.6rem; + border: none; + appearance: none; + min-width: fit-content; + max-width: fit-content; + padding: 0 0.2rem; + margin: 0 0.2rem; + cursor: help; + +} + +.system-vermine2047 .sheet.actor form label { + display: block; +} + +.system-vermine2047 .sheet.actor form .mce-panel span { + display: inherit; +} + +.system-vermine2047 .sheet.actor form.editable .rollable:hover, +.system-vermine2047 .sheet.actor form.editable a:hover { + color: #000; + text-shadow: 0 5px 5px #1fa832; + cursor: pointer; +} + +.system-vermine2047 .sheet.actor form .sheet-tabs { + font-weight: 500; + height: 30px; +} + +.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row { + line-height: 24px; + padding-top: 3px; + font-size: 2rem; + text-align: center; +} + +.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row:last-of-type { + padding-right: 4px; +} + +.system-vermine2047 .sheet.actor form .sheet-tabs>.list-row.active { + color: #000; + font-weight: 700; +} + +.system-vermine2047 .sheet.actor form .tab { + flex: 1; + overflow: hidden; +} + +.system-vermine2047 .sheet.actor form .tag-legacy { + float: left; + margin: 0 2px 2px 0; + padding: 0 3px; + font-size: var(--font-size-10); + line-height: 16px; + border: 1px solid #999; + border-radius: 3px; + white-space: normal; + font-weight: 500; +} + +/* ---------------------------------------- */ +/* Actor Sheet */ +/* ---------------------------------------- */ + + +.system-vermine2047 .sheet.actor, +.system-vermine2047 .sheet.actor .window-content { + min-width: 690px; + + +} + +.system-vermine2047 .sheet.actor .sidebar { + width: 230px; + min-height: 518px; +} + +.system-vermine2047 .sheet.actor .floatright { + float: right; +} + +.system-vermine2047 .sheet.actor .sheet-upper { + height: 268px; +} + +.system-vermine2047 .sheet.actor .sheet-upper .sheet-header { + height: 48px; +} + +.system-vermine2047 .sheet.actor .sheet-upper .sheet-profile, +.system-vermine2047 .sheet.actor .sheet-upper .sheet-showcase { + height: 220px; +} + +.system-vermine2047 .sheet.actor .sheet-content { + padding: 4px; +} + +.system-vermine2047 .sheet.actor .sheet-sidebar { + height: calc(100% - 48px); + display: flex; + flex-direction: column; + flex-wrap: nowrap; + overflow-x: hidden; + overflow-y: auto; +} + +.system-vermine2047 .sheet.actor .sheet-sidebar>* { + flex: 1; +} + +.system-vermine2047 .sheet.actor .sheet-sidebar .sidebar-summary { + overflow-y: hidden; +} + +.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper { + height: 220px; +} + +.system-vermine2047 .sheet.actor.npc-sheet .sheet-upper .sheet-showcase { + height: 172px; +} + +.system-vermine2047 .sheet.actor.npc-sheet .sheet-lower { + height: calc(100% - 220px - 32px); +} + +.system-vermine2047 .sheet.actor .sheet-navigation { + border-top: 1px solid var(--secondary-background); + border-bottom: 1px solid var(--primary-background); +} + +.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row { + border-radius: 5px 5px 0 0; +} + +.system-vermine2047 .sheet.actor .sheet-navigation .sheet-tabs>.list-row.active { + border: 1px solid #666; + border-bottom: none; + /* box-shadow: 0 0 10px inset #ff6400; + */ + background: var(--primary-background); + color: #fff; + text-shadow: none; + + color: #000; + text-shadow: 0 0 10px #00005a; + cursor: pointer; + +} + + +.actor.sheet nav.sheet-navigation { + display: inline-flex; + justify-content: space-around; + align-items: center; + height: 54px; + background: url(../assets/images/ui/barre_haut.webp) no-repeat right top; + background-size: 100% 100%; + width: 100%; + position: relative; + padding-right: 4rem; + font-size: 1.4rem; +} + +.actor.sheet nav.sheet-navigation.tabs .item { + height: 2.4rem; + display: inline-block; + z-index: 1; + transition: all 0.1s ease-out; + color: #606060; + box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.404); +} + +.actor.sheet nav.sheet-navigation.tabs .item:hover, +.actor.sheet nav.sheet-navigation.tabs .item.active { + color: #000; + text-shadow: 0 5px 5px #1fa832; + cursor: pointer; + +} + +.actor.sheet nav.sheet-navigation.tabs .item:hover { + text-shadow: 0 5px 5px #1e52259a; + +} + + +.system-vermine2047 .sheet.actor form nav.sheet-navigation.sheet-tabs { + height: 54px; +} + +.system-vermine2047 .sheet.actor .ability { + padding-right: 0.6rem; + font-size: 0.8rem; + border-bottom: 1px solid rgba(170, 170, 152, 0.664); + box-shadow: 0px 0px 15px rgba(128, 128, 128, 0) inset; + transition: 0.2s; + position: relative; + + &:hover { + box-shadow: 0px 0px 15px gray inset; + } + + label { + min-width: fit-content; + + } + + span { + max-width: fit-content; + margin: 0 1rem; + + flex: 0.5; + } + + .hexa { + text-align: center; + clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0% 50%); + background: radial-gradient(circle, rgba(255, 255, 255, 0.425) 0%, rgba(0, 0, 0, 0.288) 100%); + max-height: 1.2rem; + max-width: 1.2rem; + aspect-ratio: 1/1; + color: black; + vertical-align: center; + + &.checked { + background: radial-gradient(circle, rgb(0, 0, 0) 0%, rgba(0, 0, 0, 0.288) 100%); + } + + } + + div.specialties { + position: absolute; + bottom: 0; + font-size: 0.7rem; + } + + + + .skill-dots { + height: 100%; + align-self: center; + flex: 1.5; + + &>div { + + max-width: 0.7rem; + height: 0.7rem; + aspect-ratio: 1/1; + border-radius: 50%; + font-weight: 700; + text-align: center; + padding-bottom: 0.2rem; + font-style: oblique; + align-self: flex-start; + + + &.dice-pool-dot { + background: radial-gradient(circle, rgba(94, 90, 77, 1) 25%, rgba(0, 0, 0, 1) 100%); + max-width: 0.7rem; + aspect-ratio: 1/1; + border-radius: 50%; + } + + &.dice-reroll-dot { + background: radial-gradient(circle, rgb(187, 182, 165) 25%, rgba(0, 0, 0, 1) 100%); + + } + } + } +} + +.vermine2047.sheet.actor input[type="radio"] { + &::after { + content: " "; + display: block; + width: 0.8rem; + height: 0.8rem; + background: radial-gradient(circle, rgba(217, 214, 204, 1) 0%, rgba(217, 214, 204, 1) 40%, rgb(85, 85, 85) 60%); + border-radius: 50%; + ; + + } + + &.checked { + &::after { + content: " "; + display: block; + width: 0.8rem; + height: 0.8rem; + background: radial-gradient(circle, rgb(75, 74, 74) 0%, rgb(27, 39, 28) 60%); + border-radius: 50%; + ; + + } + + } +} \ No newline at end of file diff --git a/scss/roll.scss b/scss/roll.scss new file mode 100644 index 0000000..748568d --- /dev/null +++ b/scss/roll.scss @@ -0,0 +1,178 @@ +ol#chat-log { + header.message-header { + background-color: black; + padding: 0 1rem; + } + + .vermine-roll-message { + overflow: hidden; + box-shadow: 0px 0px 30px white inset; + padding: 0; + position: relative; + + + .flexrow { + align-items: center; + box-shadow: 0px 5px 10px 0px black; + } + + h3, + h4 { + text-transform: uppercase; + font-family: "DistressBlack"; + margin-top: 1rem; + border-bottom: none; + font-weight: 900; + font-weight: 900; + background: 50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + &+span { + font-family: "DistressBlack"; + font-size: large; + text-transform: unset; + + padding-left: 2rem; + background: -100% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + &#allowed_reroll { + font-size: large; + + } + } + } + + h3 { + background: url(/systems/vermine2047/assets/images/ui/scotch.webp); + background-position: center; + background-size: 200%; + } + + h4 { + text-align: end; + } + + div.roll-total { + transform: rotate(-3deg) scale(1.3) translateX(2rem) translateY(0.5rem); + background: url(/systems/vermine2047/assets/images/ui/scotch.webp); + background-position: center; + background-size: 200%; + margin-bottom: 2rem; + padding: 0; + z-index: +1; + } + + div.reroll { + button { + text-transform: uppercase; + font-family: "DistressBlack"; + margin-top: 1rem; + box-shadow: 0px 0px 3px black; + background: 50% 0%/cover no-repeat url(/systems/vermine2047/assets/images/ui/scotch.webp); + + } + + padding: 0 2rem; + padding-bottom: 2rem; + justify-content: end; + text-align: center; + + + + + } + + ul.roll-results { + list-style: none; + + li.die { + position: relative; + max-width: 3rem; + line-height: 3rem; + float: left; + margin: 0.2rem; + background-image: url(/icons/dice/d10black.svg); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + font-weight: 800; + font-size: 1rem; + color: #ffffff; + text-align: center; + transition: 0.3s; + border-bottom: 5px solid rgb(255, 0, 0); + border-radius: 2rem; + + + + + &::after { + content: ""; + position: absolute; + top: -1rem; + text-wrap: nowrap; + color: black; + font-weight: 100; + font-size: smaller; + text-align: center; + opacity: 0; + + + + } + + &:hover::after { + opacity: 1 + } + + + &.human, + &.adapted { + border-top: 5px solid rgb(255, 217, 0); + } + + &.rerollable { + cursor: pointer; + + &:hover { + transform: translateY(0.5rem) + } + } + + &.success { + border-bottom: 5px solid rgb(0, 143, 7); + } + + &.adapted { + + &::after { + content: "adapté" + } + + + + } + + &.human { + &::after { + + content: "humain" + } + } + + &.rerolled { + transform: translateY(-0rem); + } + + span { + text-align: center; + font-size: larger; + text-shadow: 0px 0px 8px black; + } + + + + } + } + } + +} \ No newline at end of file diff --git a/scss/style.scss b/scss/style.scss new file mode 100644 index 0000000..5615f84 --- /dev/null +++ b/scss/style.scss @@ -0,0 +1,539 @@ +@import url("https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap"); + +/* Global styles */ +.window-app { + font-family: "Roboto", sans-serif; + box-shadow: 0px 0px 30px rgb(69, 78, 44); +} + +.rollable:hover, +.rollable:focus { + color: #000; + text-shadow: 0 0 10px red; + cursor: pointer; +} + +.grid, +.grid-2col { + display: grid; + grid-column: span 2/span 2; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: 10px; + margin: 5px 0; + padding: 0; +} + +.grid-3col { + grid-column: span 3/span 3; + grid-template-columns: repeat(3, minmax(0, 1fr)); +} + +.grid-4col { + grid-column: span 4/span 4; + grid-template-columns: repeat(4, minmax(0, 1fr)); +} + +.grid-5col { + grid-column: span 5/span 5; + grid-template-columns: repeat(5, minmax(0, 1fr)); +} + +.grid-6col { + grid-column: span 6/span 6; + grid-template-columns: repeat(6, minmax(0, 1fr)); +} + +.grid-7col { + grid-column: span 7/span 7; + grid-template-columns: repeat(7, minmax(0, 1fr)); +} + +.grid-8col { + grid-column: span 8/span 8; + grid-template-columns: repeat(8, minmax(0, 1fr)); +} + +.grid-9col { + grid-column: span 9/span 9; + grid-template-columns: repeat(9, minmax(0, 1fr)); +} + +.grid-10col { + grid-column: span 10/span 10; + grid-template-columns: repeat(10, minmax(0, 1fr)); +} + +.grid-11col { + grid-column: span 11/span 11; + grid-template-columns: repeat(11, minmax(0, 1fr)); +} + +.grid-12col { + grid-column: span 12/span 12; + grid-template-columns: repeat(12, minmax(0, 1fr)); +} + +.grid-start-2 { + grid-column-start: 2; +} + +.grid-start-3 { + grid-column-start: 3; +} + +.grid-start-4 { + grid-column-start: 4; +} + +.grid-start-5 { + grid-column-start: 5; +} + +.grid-start-6 { + grid-column-start: 6; +} + +.grid-start-7 { + grid-column-start: 7; +} + +.grid-start-8 { + grid-column-start: 8; +} + +.grid-start-9 { + grid-column-start: 9; +} + +.grid-start-10 { + grid-column-start: 10; +} + +.grid-start-11 { + grid-column-start: 11; +} + +.grid-start-12 { + grid-column-start: 12; +} + +.grid-span-2 { + grid-column-end: span 2; +} + +.grid-span-3 { + grid-column-end: span 3; +} + +.grid-span-4 { + grid-column-end: span 4; +} + +.grid-span-5 { + grid-column-end: span 5; +} + +.grid-span-6 { + grid-column-end: span 6; +} + +.grid-span-7 { + grid-column-end: span 7; +} + +.grid-span-8 { + grid-column-end: span 8; +} + +.grid-span-9 { + grid-column-end: span 9; +} + +.grid-span-10 { + grid-column-end: span 10; +} + +.grid-span-11 { + grid-column-end: span 11; +} + +.grid-span-12 { + grid-column-end: span 12; +} + +.flex-group-center, +.flex-group-left, +.flex-group-right { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + text-align: center; +} + +.flex-group-left { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; +} + +.flex-group-right { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + text-align: right; +} + +.flex-align-left { + align-items: flex-start; +} + +.flex-align-right { + align-items: flex-end; +} + +.gap-xs { + gap: 2px; +} + +.gap-sm { + gap: 4px; +} + +.gap-md { + gap: 8px; +} + +.gap-lg { + gap: 16px; +} + +.flexshrink { + -webkit-box-flex: 0; + -ms-flex: 0; + flex: 0; +} + +.flex-between { + -webkit-box-pack: justify; + -ms-flex-pack: justify; + justify-content: space-between; +} + +.flexlarge { + -webkit-box-flex: 2; + -ms-flex: 2; + flex: 2; +} + +.align-left { + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + text-align: left; +} + +.align-right { + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; + text-align: right; +} + +.align-center { + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + text-align: center; +} + +.system-vermine2047 .item-form { + font-family: "Roboto", sans-serif; +} + +.system-vermine2047 .sheet-header { + -webkit-box-flex: 0; + -ms-flex: 0 auto; + flex: 0 auto; + overflow: hidden; + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + -webkit-box-pack: start; + -ms-flex-pack: start; + justify-content: flex-start; + margin-bottom: 10px; +} + +.system-vermine2047 .sheet-header .profile-img { + -webkit-box-flex: 0; + -ms-flex: 0 0 100px; + flex: 0 0 100px; + height: 100px; + margin-right: 10px; +} + +.system-vermine2047 .sheet-header .header-fields { + -webkit-box-flex: 1; + -ms-flex: 1; + flex: 1; +} + +.system-vermine2047 .sheet-header h1.charname { + height: 50px; + padding: 0px; + margin: 5px 0; + border-bottom: 0; +} + +.system-vermine2047 .sheet-header h1.charname input { + width: 100%; + height: 100%; + margin: 0; +} + +.system-vermine2047 .sheet-tabs { + -webkit-box-flex: 0; + -ms-flex: 0; + flex: 0; +} + +.system-vermine2047 .sheet-body .tab, +.system-vermine2047 .sheet-body .tab .editor { + height: 100%; + min-width: 100%; + +} + +.system-vermine2047 .sheet-body .tab .editor { + min-height: 75px; + margin-bottom: 1rem; + + min-width: 100%; + + + .editor-content { + min-width: 100%; + min-height: 3rem; + } +} + +.system-vermine2047 editor:hover .editor-edit { + display: block; +} + +.system-vermine2047 .tox { + min-height: 25vh; +} + +.system-vermine2047 .tox .tox-editor-container { + background: #fff; +} + +.system-vermine2047 .tox .tox-edit-area { + padding: 0 8px; +} + +.system-vermine2047 .resource-label { + font-weight: bold; +} + +.system-vermine2047 .items-header { + height: 28px; + margin: 2px 0; + padding: 0; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background: rgba(0, 0, 0, 0.05); + border: 2px groove #eeede0; + font-weight: bold; +} + +.system-vermine2047 .items-header>* { + font-size: 14px; + text-align: center; +} + +.system-vermine2047 .items-header .item-name { + font-weight: bold; + padding-left: 5px; + text-align: left; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.system-vermine2047 .items-list { + list-style: none; + margin: 0; + padding: 0; + overflow-y: auto; + scrollbar-width: thin; + color: #444; +} + +.system-vermine2047 .items-list .item-list { + list-style: none; + margin: 0; + padding: 0; +} + +.system-vermine2047 .items-list .item-name { + -webkit-box-flex: 2; + -ms-flex: 2; + flex: 2; + margin: 0; + overflow: hidden; + font-size: 13px; + text-align: left; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + display: -webkit-box; + display: -ms-flexbox; + display: flex; +} + +.system-vermine2047 .items-list .item-name h3, +.system-vermine2047 .items-list .item-name h4 { + margin: 0; + white-space: nowrap; + overflow-x: hidden; +} + +.system-vermine2047 .items-list .item-controls { + display: -webkit-box; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-box-pack: end; + -ms-flex-pack: end; + justify-content: flex-end; +} + +.system-vermine2047 .items-list .item-controls a { + font-size: 12px; + text-align: center; + margin: 0 6px; +} + +.system-vermine2047 .items-list .item { + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + padding: 0 2px; + border-bottom: 1px solid #c9c7b8; +} + +.system-vermine2047 .items-list .item:last-child { + border-bottom: none; +} + +.system-vermine2047 .items-list .item .item-name { + color: #191813; +} + +.system-vermine2047 .items-list .item .item-name .item-image { + -webkit-box-flex: 0; + -ms-flex: 0 0 30px; + flex: 0 0 30px; + height: 30px; + background-size: 30px; + border: none; + margin-right: 5px; +} + +.system-vermine2047 .items-list .item-prop { + text-align: center; + border-left: 1px solid #c9c7b8; + border-right: 1px solid #c9c7b8; + font-size: 12px; +} + +.system-vermine2047 .items-list .items-header { + height: 28px; + margin: 2px 0; + padding: 0; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + background: rgba(0, 0, 0, 0.05); + border: 2px groove #eeede0; + font-weight: bold; +} + +.system-vermine2047 .items-list .items-header>* { + font-size: 12px; + text-align: center; +} + +.system-vermine2047 .items-list .items-header .item-name { + padding-left: 5px; + text-align: left; +} + +.system-vermine2047 .item-formula { + -webkit-box-flex: 0; + -ms-flex: 0 0 200px; + flex: 0 0 200px; + padding: 0 8px; +} + +.system-vermine2047 .effects .item .effect-source, +.system-vermine2047 .effects .item .effect-duration, +.system-vermine2047 .effects .item .effect-controls { + text-align: center; + border-left: 1px solid #c9c7b8; + border-right: 1px solid #c9c7b8; + font-size: 12px; +} + +.system-vermine2047 .effects .item .effect-controls { + border: none; +} + +.chat-message .message-header { + line-height: 20px; + color: white; + text-shadow: 0px 0px 5px black; + background: #1918135e +} + +span.game-mode { + font-family: "DistressBlack", + sans-serif; + + position: absolute; + margin-left: auto; + color: transparent; + top: 1rem; + z-index: 900; + width: 55%; + text-align: center; + text-transform: uppercase; + font-weight: 900; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.767) 0%, rgba(0, 0, 0, 0.61) 17%, rgba(0, 0, 0, 0.548) 19%, rgba(222, 255, 221, 0.575) 24%, rgba(255, 255, 255, 0.637) 43%, rgba(0, 0, 0, 0.486) 47%, rgba(254, 255, 254, 0.466) 50%, rgba(0, 0, 0, 0.699) 63%, rgba(134, 160, 137, 0.479) 64%, rgba(213, 248, 210, 0.493) 100%); + background-clip: text; + + &#game-mode-1 { + color: rgba(235, 218, 143, 0.8); + } + + &#game-mode-2 { + color: rgb(131, 248, 131); + } + + &#game-mode-3 { + color: rgba(245, 124, 124, 0.8); + } +} \ No newline at end of file diff --git a/scss/vermine2047.scss b/scss/vermine2047.scss new file mode 100644 index 0000000..b56b547 --- /dev/null +++ b/scss/vermine2047.scss @@ -0,0 +1,3 @@ +@import "./base_work.scss"; +@import "./style.scss"; +@import "./roll.scss" \ No newline at end of file diff --git a/system.json b/system.json index f2a4f0a..f4c4905 100644 --- a/system.json +++ b/system.json @@ -18,7 +18,6 @@ "module/vermine2047.mjs" ], "styles": [ - "css/style.css", "css/vermine2047.css" ], "languages": [ @@ -27,6 +26,12 @@ "name": "English", "path": "lang/en.json", "flags": {} + }, + { + "lang": "fr", + "name": "Français", + "path": "lang/fr.json", + "flags": {} } ], "packs": [ diff --git a/template.json b/template.json index 654349a..a1f4702 100644 --- a/template.json +++ b/template.json @@ -1,37 +1,61 @@ { "Actor": { - "types": ["character", "npc", "group", "creature"], + "types": [ + "character", + "npc", + "group", + "creature" + ], "templates": { "base": { "minorWound": { - "threshold":1, - "value": 4, - "min": 1, + "threshold": 1, + "value": 0, + "min": 0, "max": 5 }, "majorWound": { - "threshold":4, - "value": 3, - "min": 1, + "threshold": 4, + "value": 0, + "min": 0, "max": 4 }, "deadlyWound": { - "threshold":8, - "value": 2, - "min": 1, + "threshold": 8, + "value": 0, + "min": 0, "max": 2 } } }, "character": { - "templates": ["base"], + "templates": [ + "base" + ], + "adaptation": { + "value": 1, + "min": 0, + "max": 5, + "totems": { + "human": { + "value": 1, + "min": 0, + "max": 3 + }, + "adapted": { + "value": 1, + "min": 0, + "max": 3 + } + } + }, "identity": { "height": 0, "weight": 0, "totem": "", "age": 15, "ageType": 2, - "profile": "", + "profile": "", "theme": "", "instincts": "", "prohibits": "", @@ -41,15 +65,15 @@ }, "equipment": { "description": "" - }, + }, "attributes": { "xp": { "value": 0, - "max":10 + "max": 10 }, "reputation": { "value": 0, - "max":10 + "max": 10 }, "self_control": { "value": 0, @@ -57,56 +81,56 @@ "max": 5 }, "effort": { - "value": 0, + "value": 0, "min": 0, "max": 5 } - }, + }, "abilities": { "vigor": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "physical" }, "health": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "physical" }, "precision": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "manual" }, "reflexes": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "manual" }, "knowledge": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "mental" }, "perception": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "mental" }, "will": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "social" }, "empathy": { - "value": 0, + "value": 1, "min": 0, "max": 5, "category": "social" @@ -118,215 +142,217 @@ "min": 0, "max": 5, "category": "man", - "rarity":1 + "rarity": 1 }, "civilization": { "value": 0, "min": 0, "max": 5, "category": "man", - "rarity":2 + "rarity": 2 }, "psychology": { "value": 0, "min": 0, "max": 5, "category": "man", - "rarity":1 + "rarity": 1 }, "rumors": { "value": 0, "min": 0, "max": 5, "category": "man", - "rarity":0 + "rarity": 0 }, "healing": { "value": 0, "min": 0, "max": 5, "category": "man", - "rarity":1 + "rarity": 1 }, "animalism": { "value": 0, "min": 0, "max": 5, "category": "animal", - "rarity":1 + "rarity": 1 }, "dissection": { "value": 0, "min": 0, "max": 5, "category": "animal", - "rarity":2 + "rarity": 2 }, "wildlife": { "value": 0, "min": 0, "max": 5, "category": "animal", - "rarity":1 + "rarity": 1 }, "repulsion": { "value": 0, "min": 0, "max": 5, "category": "animal", - "rarity":0 + "rarity": 0 }, "tracks": { "value": 0, "min": 0, "max": 5, "category": "animal", - "rarity":0 + "rarity": 0 }, "crafting": { "value": 0, "min": 0, "max": 5, "category": "tool", - "rarity":2 + "rarity": 2 }, "diy": { "value": 0, "min": 0, "max": 5, "category": "tool", - "rarity":0 + "rarity": 0 }, "mecanical": { "value": 0, "min": 0, "max": 5, "category": "tool", - "rarity":2 + "rarity": 2 }, "piloting": { "value": 0, "min": 0, "max": 5, "category": "tool", - "rarity":1 + "rarity": 1 }, "technology": { "value": 0, "min": 0, "max": 5, "category": "tool", - "rarity":2 + "rarity": 2 }, "firearms": { "value": 0, "min": 0, "max": 5, "category": "weapon", - "rarity":2 + "rarity": 2 }, "archery": { "value": 0, "min": 0, "max": 5, "category": "weapon", - "rarity":0 + "rarity": 0 }, "armory": { "value": 0, "min": 0, "max": 5, "category": "weapon", - "rarity":2 + "rarity": 2 }, "throwing": { "value": 0, "min": 0, "max": 5, "category": "weapon", - "rarity":0 + "rarity": 0 }, "melee": { "value": 0, "min": 0, "max": 5, "category": "weapon", - "rarity":0 + "rarity": 0 }, "alertness": { "value": 0, "min": 0, "max": 5, "category": "survival", - "rarity":0 + "rarity": 0 }, "atletics": { "value": 0, "min": 0, "max": 5, "category": "survival", - "rarity":0 + "rarity": 0 }, "food": { "value": 0, "min": 0, "max": 5, "category": "survival", - "rarity":0 + "rarity": 0 }, "stealth": { "value": 0, "min": 0, "max": 5, "category": "survival", - "rarity":0 + "rarity": 0 }, "close": { "value": 0, "min": 0, "max": 5, "category": "survival", - "rarity":0 + "rarity": 0 }, "environment": { "value": 0, "min": 0, "max": 5, "category": "world", - "rarity":1 + "rarity": 1 }, "flora": { "value": 0, "min": 0, "max": 5, "category": "world", - "rarity":1 + "rarity": 1 }, "road": { "value": 0, "min": 0, "max": 5, "category": "world", - "rarity":0 + "rarity": 0 }, "toxics": { "value": 0, "min": 0, "max": 5, "category": "world", - "rarity":2 + "rarity": 2 }, "ruins": { "value": 0, "min": 0, "max": 5, "category": "world", - "rarity":1 - } + "rarity": 1 + } } }, "npc": { - "templates": ["base"], + "templates": [ + "base" + ], "age": 15, "skills": "", "threat": { @@ -346,10 +372,12 @@ } }, "group": { - "templates": ["base"], + "templates": [ + "base" + ], "identity": { "totem": "", - "profile": "", + "profile": "", "origin": "", "theme": "", "instincts": "", @@ -360,12 +388,12 @@ }, "equipment": { "description": "" - }, + }, "level": { "value": 0, "min": 0, "max": 3 - }, + }, "reputation": { "value": 10, "min": 2, @@ -381,7 +409,9 @@ "encounters": [] }, "creature": { - "templates": ["base"], + "templates": [ + "base" + ], "skills": "", "modes": { "survival": true, @@ -411,74 +441,106 @@ } }, "Item": { - "types": ["item", "weapon", "defense", "vehicle", "ability", "specialty", "background", "trauma", "evolution", "rumor", "target", "rite"], + "types": [ + "item", + "weapon", + "defense", + "vehicle", + "ability", + "specialty", + "background", + "trauma", + "evolution", + "rumor", + "target", + "rite" + ], "templates": { "base": { "description": "", - "rarity":3, - "reliability":3, + "rarity": 3, + "reliability": 3, "quantity": 1, "weight": 0, "traits": [] - }, + }, "list": { "description": "" } }, "item": { - "templates": ["base"] + "templates": [ + "base" + ] }, "weapon": { - "templates": ["base"], - "min_range":0, - "max_range":0, - "damage":0, - "ammo":0 + "templates": [ + "base" + ], + "min_range": 0, + "max_range": 0, + "damage": 0, + "ammo": 0 }, "defense": { - "templates": ["base"], - "level":0, - "mobility":3 + "templates": [ + "base" + ], + "level": 0, + "mobility": 3 }, "ability": { - "templates": ["list"], + "templates": [ + "list" + ], "type": "", "totem": "", "learn": { - "threshold":5, - "hindrance":0 + "threshold": 5, + "hindrance": 0 }, "level": { "value": 1, "min": 1, "max": 3 - }, + }, "effects": [] }, "specialty": { - "templates": ["list"] + "name": "", + "skill": "" }, "vehicle": { - "templates": ["base"], - "mobility":3 + "templates": [ + "base" + ], + "mobility": 3 }, "rite": { - "templates": ["base"], + "templates": [ + "base" + ], "rituel": "", "transe": "", - "ability": "", + "ability": "", "effect": "" }, "background": { - "templates": ["list"], - "cost":1 + "templates": [ + "list" + ], + "cost": 1 }, "trauma": { - "templates": ["list"], + "templates": [ + "list" + ], "type": "" }, "evolution": { - "templates": ["list"], + "templates": [ + "list" + ], "level": { "value": 1, "min": 1, @@ -486,11 +548,15 @@ } }, "rumor": { - "templates": ["list"] + "templates": [ + "list" + ] }, "target": { - "templates": ["list"], - "level":"minor" + "templates": [ + "list" + ], + "level": "minor" } } -} +} \ No newline at end of file diff --git a/templates/actor/actor-character-sheet.hbs b/templates/actor/actor-character-sheet.hbs index cde1213..8baeaa4 100644 --- a/templates/actor/actor-character-sheet.hbs +++ b/templates/actor/actor-character-sheet.hbs @@ -1,52 +1,64 @@
    +
    -
    - - {{> "systems/vermine2047/templates/actor/character/character-header.hbs"}} + +
    + + {{> "systems/vermine2047/templates/actor/character/character-header.hbs"}} - - - -
    + +
    -
    - - {{> "systems/vermine2047/templates/actor/character/character-features.hbs"}} +
    + + {{> + "systems/vermine2047/templates/actor/character/character-features.hbs"}}

    {{ localize 'IDENTITY.totem'}}

    - {{> "systems/vermine2047/templates/actor/character/character-totem.hbs"}} + {{> + "systems/vermine2047/templates/actor/character/character-totem.hbs"}}

    {{ localize 'VERMINE.equipment'}}

    @@ -56,17 +68,18 @@

    {{ localize 'VERMINE.combat'}}

    - {{> "systems/vermine2047/templates/actor/character/character-combat.hbs"}} + {{> + "systems/vermine2047/templates/actor/character/character-combat.hbs"}}
    - +
    -

    {{ localize 'VERMINE.stories'}}

    - {{> "systems/vermine2047/templates/actor/character/character-stories.hbs"}} -
    - +

    {{ localize 'VERMINE.stories'}}

    + {{> + "systems/vermine2047/templates/actor/character/character-stories.hbs"}} +
    +
    -
    -
    + +
    - diff --git a/templates/actor/character/character-combat.hbs b/templates/actor/character/character-combat.hbs index 5af0bcf..6ddb120 100644 --- a/templates/actor/character/character-combat.hbs +++ b/templates/actor/character/character-combat.hbs @@ -1,76 +1,190 @@
    -

    {{ localize "VERMINE.self_control"}}

    -

    - / {{ system.attributes.self_control.max }} -

    -
    +

    {{ localize "VERMINE.self_control"}} : + {{@root.system.attributes.self_control.value}}/ + {{@root.system.attributes.self_control.max}} +

    + +
    + {{#repeat 10 1}} +
    + {{#iflteq @index @root.system.attributes.self_control.max }} + + {{/iflteq}} + +
    + {{/repeat}} +
    +
    -

    {{ localize "VERMINE.effort"}}

    -

    - / {{ system.attributes.effort.max }} -

    -
    +

    {{ localize "VERMINE.effort"}} : + {{@root.system.attributes.effort.value}}/ + {{@root.system.attributes.effort.max}} +

    + +
    + {{#repeat 10 1}} +
    + {{#iflteq @index @root.system.attributes.effort.max }} + + {{/iflteq}} + +
    + {{#ife @index 1}} +
    + {{/ife}} + {{/repeat}} +
    +
    -

    {{ localize "VERMINE.wounds.name"}}

    +

    {{ localize + "VERMINE.wounds.name"}}

    {{ localize "UI.effects.name"}}

      {{#each effects as |section sid|}} -
    1. -

      {{#if (eq section.type 'temporary')}} - {{localize "UI.effects.temporary" }} - {{else if (eq section.type 'passive')}} - {{localize "UI.effects.passive" }} - {{else if (eq section.type 'inactive')}} - {{localize "UI.effects.inactive" }} - {{/if}} -

      -
      {{localize 'UI.source'}}
      -
      {{localize 'UI.duration'}}
      +
    2. +

      {{#if (eq section.type + 'temporary')}} + {{localize "UI.effects.temporary" }} + {{else if (eq section.type 'passive')}} + {{localize "UI.effects.passive" }} + {{else if (eq section.type 'inactive')}} + {{localize "UI.effects.inactive" }} + {{/if}} +

      +
      {{localize 'UI.source'}}
      +
      {{localize 'UI.duration'}}
      + +
    3. + +
        + {{#each section.effects as |effect|}} +
      1. + +
        {{effect.sourceName}}
        +
        {{effect.duration.label}}
      2. - -
          - {{#each section.effects as |effect|}} -
        1. - -
          {{effect.sourceName}}
          -
          {{effect.duration.label}}
          - -
        2. {{/each}} -
        +
      {{/each}}
    diff --git a/templates/actor/character/character-features.hbs b/templates/actor/character/character-features.hbs index fbc6f0b..89aba28 100644 --- a/templates/actor/character/character-features.hbs +++ b/templates/actor/character/character-features.hbs @@ -2,36 +2,71 @@

    Caractéristiques

    {{#each config.abilityCategories as |abilityCategory ackey|}} -
    -

    {{ smarttl "ABILITY_CATEGORIES" ackey }}

    - {{#each @root.system.abilities as |ability key|}} - {{#if (eq ability.category ackey) }} -
    - - -
    - {{/if}} - {{/each}} +
    +

    {{ smarttl "ABILITY_CATEGORIES" ackey }}

    + {{#each @root.system.abilities as |ability key|}} + {{#if (eq ability.category ackey) }} +
    + +
    - {{/each}} + {{/if}} + {{/each}}
    + {{/each}} +

    Compétences

    -{{#each config.skillCategories as |skillCategory sckey|}} -
    -

    {{ smarttl "SKILLS_CATEGORIES" sckey }}

    + {{#each config.skillCategories as |skillCategory sckey|}} +
    +

    {{ smarttl "SKILLS_CATEGORIES" sckey }}

    {{#each @root.system.skills as |skill skey|}} - - {{#if (eq skill.category sckey) }} -
    - - {{ skillLevel "dicePool" skill.value }} - {{ skillLevel "reroll" skill.value }} - + + {{#if (eq skill.category sckey) }} +
    + +
    + {{#each @root.specialties as |spe ind|}} + {{#ife spe.system.skill skey}} + {{spe.name}} + {{/ife}} + {{/each}}
    - {{/if}} - {{/each}} + + {{skill.value}} +
    + {{#repeat (skillLevel "dicePool" skill.value) 0}} +
    + {{/repeat}} + {{#repeat (skillLevel "reroll" skill.value) 0}} +
    X
    + {{/repeat}} +
    +
    -{{/each}} + + {{/if}} + {{/each}} +
    + {{/each}}
    \ No newline at end of file diff --git a/templates/actor/character/character-header.hbs b/templates/actor/character/character-header.hbs index 6390de7..3aa2586 100644 --- a/templates/actor/character/character-header.hbs +++ b/templates/actor/character/character-header.hbs @@ -3,36 +3,45 @@

    - +

    - +
    - +
    - - ({{ ageType "name" system.identity.ageType }}) + + ({{ ageType "name" system.identity.ageType + }})
    -
    +

    - + {{#if (eq system.identity.totem "")}} - Choisissez votre totem - {{ else }} - {{ smarttl "TOTEMS" system.identity.totem }} + Choisissez votre totem + {{ else }} + {{ smarttl "TOTEMS" + system.identity.totem }} {{/if}}

    - -
    -
    + + - +
    \ No newline at end of file diff --git a/templates/actor/character/character-id.hbs b/templates/actor/character/character-id.hbs index d942c0f..7b7f8a1 100644 --- a/templates/actor/character/character-id.hbs +++ b/templates/actor/character/character-id.hbs @@ -1,54 +1,107 @@
    - +
    - - {{#if system.identity.relations}} - +
    + +

    {{localize "ITEMS.evolution"}}

    +
    {{localize "TOTEMS.human.name"}} + +
    + +
    {{localize "TOTEMS.adapted.name"}} + +
    + +
    +
    + {{#repeat system.adaptation.totems.human.max 1}} +
    + {{#ifgteq system.adaptation.totems.human.value @index}} +
    + {{/ifgteq}} +
    + {{/repeat}} +
    + +
    + {{#repeat system.adaptation.totems.adapted.max 1}} +
    + {{#ifgteq system.adaptation.totems.adapted.value @index}} +
    + {{/ifgteq}}
    + {{/repeat}} +
    +
    + +
    + +{{/if}} diff --git a/templates/actor/character/character-stories.hbs b/templates/actor/character/character-stories.hbs index 8cd307b..0e59df1 100644 --- a/templates/actor/character/character-stories.hbs +++ b/templates/actor/character/character-stories.hbs @@ -1,24 +1,30 @@

    {{ localize 'IDENTITY.theme'}}

    - +

    {{ localize 'IDENTITY.objectives'}}

    - +

    {{ localize 'IDENTITY.instincts'}}

    - +

    {{ localize 'IDENTITY.prohibits'}}

    - +
    -
    +

    {{ localize 'IDENTITY.notes'}}

    - {{editor system.identity.biography target="system.identity.biography" button=true owner=owner editable=editable}} + {{editor system.identity.biography target="system.identity.biography" + button=true owner=owner editable=editable}}
    -
    +

    {{ localize 'IDENTITY.relations'}}

    - {{editor system.identity.relations target="system.identity.relations" button=true owner=owner editable=editable}} + {{editor system.identity.relations target="system.identity.relations" + button=true owner=owner editable=editable}}
    diff --git a/templates/actor/character/character-totem.hbs b/templates/actor/character/character-totem.hbs index 375120c..a36e73e 100644 --- a/templates/actor/character/character-totem.hbs +++ b/templates/actor/character/character-totem.hbs @@ -1,106 +1,136 @@ +{{#if system.identity.totem}} +

    {{ smarttl 'TOTEMS' system.identity.totem 'name' }}

    -

    {{ smarttlk "TOTEMS" system.identity.totem "description"}}

    -
    -
    -
    Principes
    {{ smarttlk "TOTEMS" system.identity.totem "instincts"}}
    -
    -
    -
    Interdits
    {{ smarttlk "TOTEMS" system.identity.totem "bans"}}
    -
    +

    {{ smarttlk "TOTEMS" system.identity.totem + "description"}}

    +
    +
    +
    Principes
    {{ smarttlk "TOTEMS" + system.identity.totem "instincts"}}
    -
    -
    -
    -

    - {{ localize 'ITEMS.abilities'}} - -

    -
      +
      +
      Interdits
      {{ smarttlk "TOTEMS" + system.identity.totem "bans"}}
      +
      +
    +
    +
    +
    +

    + {{ localize 'ITEMS.abilities'}} + +

    +
      {{#each abilities as |item id|}} -
    1. - -
      - -
      -
    2. +
    3. + +
      + + +
      +
    4. {{/each}}
    -
    -
    -

    - {{ localize 'ITEMS.specialties'}} - -

    -
      - {{#each specialties as |item id|}} -
    1. - -
      - -
      -
    2. - {{/each}} -
    -
    -
    -

    - {{ localize 'ITEMS.backgrounds'}} - -

    -
      - {{#each backgrounds as |item id|}} -
    1. - -
      - -
      -
    2. - {{/each}} -
    -
    -
    -

    - {{ localize 'ITEMS.traumas'}} - -

    -
      - {{#each traumas as |item id|}} -
    1. - -
      - -
      -
    2. - {{/each}} -
    -
    -
    -

    - {{ localize 'ITEMS.evolutions'}} - -

    -
      - {{#each evolutions as |item id|}} -
    1. - -
      - -
      -
    2. - {{/each}} -
    -
    - \ No newline at end of file +
    +

    + {{ localize 'ITEMS.specialties'}} + +

    +
      + {{#each specialties as |item id|}} +
    1. + +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +

    + {{ localize 'ITEMS.backgrounds'}} + +

    +
      + {{#each backgrounds as |item id|}} +
    1. + +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +

    + {{ localize 'ITEMS.traumas'}} + +

    +
      + {{#each traumas as |item id|}} +
    1. + +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +

    + {{ localize 'ITEMS.evolutions'}} + +

    +
      + {{#each evolutions as |item id|}} +
    1. + +
      + + +
      +
    2. + {{/each}} +
    +
    +
    +{{else}} + +

    choisissez un totem

    + +{{/if}} diff --git a/templates/actor/creature/creature-combat.hbs b/templates/actor/creature/creature-combat.hbs index 5af0bcf..21c8b9e 100644 --- a/templates/actor/creature/creature-combat.hbs +++ b/templates/actor/creature/creature-combat.hbs @@ -2,75 +2,118 @@

    {{ localize "VERMINE.self_control"}}

    - / {{ system.attributes.self_control.max }} + / {{ + system.attributes.self_control.max }}

    -
    +

    {{ localize "VERMINE.effort"}}

    - / {{ system.attributes.effort.max }} + / {{ + system.attributes.effort.max }}

    -
    +
    -

    {{ localize "VERMINE.wounds.name"}}

    +

    {{ localize + "VERMINE.wounds.name"}}

    {{ localize "UI.effects.name"}}

      {{#each effects as |section sid|}} -
    1. -

      {{#if (eq section.type 'temporary')}} - {{localize "UI.effects.temporary" }} - {{else if (eq section.type 'passive')}} - {{localize "UI.effects.passive" }} - {{else if (eq section.type 'inactive')}} - {{localize "UI.effects.inactive" }} - {{/if}} -

      -
      {{localize 'UI.source'}}
      -
      {{localize 'UI.duration'}}
      +
    2. +

      {{#if (eq section.type + 'temporary')}} + {{localize "UI.effects.temporary" }} + {{else if (eq section.type 'passive')}} + {{localize "UI.effects.passive" }} + {{else if (eq section.type 'inactive')}} + {{localize "UI.effects.inactive" }} + {{/if}} +

      +
      {{localize 'UI.source'}}
      +
      {{localize 'UI.duration'}}
      + +
    3. + +
        + {{#each section.effects as |effect|}} +
      1. + +
        {{effect.sourceName}}
        +
        {{effect.duration.label}}
      2. - -
          - {{#each section.effects as |effect|}} -
        1. - -
          {{effect.sourceName}}
          -
          {{effect.duration.label}}
          - -
        2. {{/each}} -
        +
      {{/each}}
    diff --git a/templates/applications/choose-totem.hbs b/templates/applications/choose-totem.hbs index 90659e0..18c4f29 100644 --- a/templates/applications/choose-totem.hbs +++ b/templates/applications/choose-totem.hbs @@ -1,21 +1,32 @@
    {{#each config.totems as | totem tk|}} {{#if (ne tk "human")}} - {{#if (ne tk "adapted")}} -
    -

    - - {{ localize totem }} - -

    -

    - Instincts : {{ smarttlk "TOTEMS" tk "instincts"}}
    - Interdits : {{ smarttlk "TOTEMS" tk "bans"}}
    - Comportements : {{ smarttlk "TOTEMS" tk "behaviour"}}
    - Totem opposé : {{ smartcfg "totem_opposites" tk }}
    -

    -
    - {{/if}} + {{#if (ne tk "adapted")}} + +
    +

    + + {{ localize totem }} +

    {{ smarttlk "TOTEMS" + tk "name"}}

    +
    +

    +

    + Instincts : {{ smarttlk "TOTEMS" tk + "instincts"}}
    + Interdits : {{ smarttlk "TOTEMS" tk + "bans"}}
    + Comportements : {{ smarttlk "TOTEMS" tk + "behaviour"}}
    + Totem opposé : {{ smartcfg "totem_opposites" tk + }}
    +

    +
    + {{/if}} {{/if}} {{/each}}
    \ No newline at end of file diff --git a/templates/combat-tracker.hbs b/templates/combat-tracker.hbs index 44ab176..63ddbae 100644 --- a/templates/combat-tracker.hbs +++ b/templates/combat-tracker.hbs @@ -1,4 +1,5 @@ -
    +
    {{#if user.isGM}} @@ -24,34 +32,44 @@
    {{#if user.isGM}} - + - + {{/if}} {{#if combatCount}} {{#if combat.round}} -

    {{localize 'COMBAT.Round'}} {{combat.round}}

    +

    {{localize 'COMBAT.Round'}} + {{combat.round}}

    {{else}} -

    {{localize 'COMBAT.NotStarted'}}

    +

    {{localize + 'COMBAT.NotStarted'}}

    {{/if}} {{else}}

    {{localize "COMBAT.None"}}

    {{/if}} {{#if user.isGM}} - - + - + {{/if}} @@ -60,34 +78,60 @@
      {{#each turns}} -
    1. - {{this.name}} +
    2. + {{this.name}}
      -

      {{this.name}}

      +

      {{this.name}}

      - + - + - - + + - - + + - - + + {{#if this.canPing}} - + {{/if}}
      {{#each this.effects}} - + {{/each}}
      @@ -103,30 +147,43 @@ {{#if this.hasRolled}} {{this.initiative}} {{else if this.owner}} - + {{/if}}
    3. {{/each}}
    -
    diff --git a/templates/item/item-defense-sheet.html b/templates/item/item-defense-sheet.html index c6e4973..3047756 100644 --- a/templates/item/item-defense-sheet.html +++ b/templates/item/item-defense-sheet.html @@ -1,36 +1,69 @@ -
    +
    - +
    -

    +

    - +
    -
    - -
    - {{editor system.description target="system.description" rollData=rollData button=true owner=owner editable=editable}} -
    +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +
    + {{editor system.description target="system.description" rollData=rollData button=true owner=owner editable=editable}} +
    -
    + \ No newline at end of file diff --git a/templates/item/item-specialty-sheet.html b/templates/item/item-specialty-sheet.html index af6d632..66b9a49 100644 --- a/templates/item/item-specialty-sheet.html +++ b/templates/item/item-specialty-sheet.html @@ -1,29 +1,40 @@ -
    +
    - +
    -

    +

    + +
    - {{!-- Sheet Tab Navigation --}} - - - {{!-- Sheet Body --}} -
    - - {{!-- Description Tab --}} -
    - {{editor system.description target="system.description" rollData=rollData button=true owner=owner editable=editable}} -
    - - {{!-- Attributes Tab --}} -
    - {{!-- As you add new fields, add them in here! --}} -
    -
    - -
    + \ No newline at end of file diff --git a/templates/roll-dialog.hbs b/templates/roll-dialog.hbs new file mode 100644 index 0000000..359b45a --- /dev/null +++ b/templates/roll-dialog.hbs @@ -0,0 +1,164 @@ +
    + + + + + +
    +
    + Type de jet {{#if (eq rollType 'skill')}}{{ localize + 'VERMINE.skill_title' }}{{else}}{{ localize 'VERMINE.ability' + }}{{/if}} + {{#if (eq rollType 'skill')}}{{ localize 'VERMINE.skill_title' + }}{{else}}{{ localize 'VERMINE.ability' }}{{/if}} + {{#if (eq rollType 'skill')}}{{ smarttl "SKILLS" label + }}{{else}}{{ smarttl "ABILITIES" label }}{{/if}} +
    + +
    + + +
    +
    + + +
    +
    + + +
    +
    + {{#if (ne skillScore 0)}}{{ skillLevel 'label' + skillScore }}{{/if}} + {{localize 'VERMINE.bonus'}} : {{#if (ne + skillScore 0)}}{{ skillLevel 'dicePool' skillScore + }}{{else}}0{{/if}} + {{localize 'VERMINE.reroll'}} : {{#if (ne + skillScore 0)}}{{ skillLevel 'reroll' skillScore + }}{{else}}0{{/if}} +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    + + +
    +
    +

    utiliser des dés totems ? +

    +
    + + +
    +
    + + +
    +
    +
    + + +
    +
    +

    +

    +
    diff --git a/templates/roll-message.hbs b/templates/roll-message.hbs index 6b8fbbc..b5afaeb 100644 --- a/templates/roll-message.hbs +++ b/templates/roll-message.hbs @@ -1,26 +1,75 @@ -
    -
    -
    -
    - {{ ` + dicePool + `d6 }} -
    -
    -
    -
    -
    - {{ targetText }} -
    -
    -
      {{ diceString }}
    -
    -
    -
    - Résultat -

    {{ (total + skill + _trait + _usingSpecialization + _used).toString() }}

    -
    -
    -
    ` + - `

    {{ successText }}

    -
    +
    + {{log this}} +

    {{param.actor.name}} : test de {{param.rollLabel}}

    +
    +

    difficulté

    + {{param.difficulty}} +
    +
      + {{#each roll.dice as |dieType index|}} + {{#each dieType.results as |die index|}} +
    • + + {{die.result}} + +
    • + {{/each}} + {{/each}} +
    +
    +

    nombre de succès :

    + {{roll._total}} +
    +
    +
    +
    +

    + effort +

    + + + +
    + +
    +
    +

    relances possibles :

    + {{param.Reroll}}
    +
    \ No newline at end of file diff --git a/templates/roll.hbs b/templates/roll.hbs deleted file mode 100644 index 7017589..0000000 --- a/templates/roll.hbs +++ /dev/null @@ -1,74 +0,0 @@ -
    - - - - -
    -
    - Type de jet {{#if (eq rollType 'skill')}}{{ localize 'VERMINE.skill_title' }}{{else}}{{ localize 'VERMINE.ability' }}{{/if}} - {{#if (eq rollType 'skill')}}{{ localize 'VERMINE.skill_title' }}{{else}}{{ localize 'VERMINE.ability' }}{{/if}} - {{#if (eq rollType 'skill')}}{{ smarttl "SKILLS" label }}{{else}}{{ smarttl "ABILITIES" label }}{{/if}} -
    -
    - - -
    - -
    - - -
    - {{#if (eq rollType 'skill')}} -
    - - -
    -
    - {{#if (ne skillScore 0)}}{{ skillLevel 'label' skillScore }}{{/if}} - {{localize 'VERMINE.bonus'}} : {{#if (ne skillScore 0)}}{{ skillLevel 'dicePool' skillScore }}{{else}}0{{/if}} - {{localize 'VERMINE.reroll'}} : {{#if (ne skillScore 0)}}{{ skillLevel 'reroll' skillScore }}{{else}}0{{/if}} -
    -
    - - -
    - {{/if}} -
    - - -
    -
    - - -
    -
    - - -
    -
    - - -
    -
    -

    -

    -