├── .DS_Store ├── .gitignore ├── .vscode └── settings.json ├── README.md ├── config.json ├── css ├── output.css ├── style.css └── template.css ├── images ├── aziz_daaif.png ├── background.png ├── excalidraw.png └── structure.png ├── index.html ├── js ├── console.js ├── excalidraw-react.js ├── excalidraw.js └── slides.js ├── package-lock.json ├── package.json ├── partials ├── css │ └── p005.css ├── html │ └── p005.html ├── intro │ └── p005.html ├── js │ └── p005.js └── pages │ ├── p000.html │ ├── p001.html │ ├── p002.html │ ├── p003.html │ ├── p004.html │ ├── p005.html │ ├── p0051.html │ └── p006.html └── templates.html /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daaif/slides/71f8c300e10df6cd230579bce388d976aaf11b9b/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .vscode -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "liveServer.settings.port": 5503 3 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![New](https://img.shields.io/badge/New-MermaidJS-ffffff?style=plastic&color=50e815) 2 | # Simple Slides 3 | 4 | Simple slides is a framework that makes it easy to create HTML presentations. 5 | The goal is to provide an environment to explain web technologies. 6 | Simple Slides is created with Vanilla Javascript and incorporates CodeMirror to allow editing of HTML, CSS and Javascript without conflicting with the the presentation content. 7 | 8 | # Install Simple Slides 9 | 10 | ```shell 11 | npx sp-slides new 12 | cd 13 | npm run serve 14 | ``` 15 | 16 | # Demo 17 | 18 | [Demo site](https://sp-slides.daaif.net) 19 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "libraries": [ 3 | { 4 | "name": "console", 5 | "url": "/js/console.js", 6 | "version": "1", 7 | "global": true 8 | }, 9 | { 10 | "name": "react", 11 | "url": "https://unpkg.com/react@18/umd/react.development.js", 12 | "version": "18", 13 | "global": true, 14 | "crossorigin": true 15 | }, 16 | { 17 | "name": "react-dom", 18 | "url": "https://unpkg.com/react-dom@18/umd/react-dom.development.js", 19 | "version": "18", 20 | "global": true, 21 | "crossorigin": true 22 | }, 23 | { 24 | "name": "babel", 25 | "url": "https://unpkg.com/@babel/standalone/babel.min.js", 26 | "version": "7", 27 | "global": true, 28 | "crossorigin": true 29 | } 30 | ], 31 | "partials": { 32 | "page": "partials/pages/", 33 | "intro": "partials/intro/", 34 | "html": "partials/html/", 35 | "css": "partials/css/", 36 | "js": "partials/js/" 37 | }, 38 | "babel" : false, 39 | "youtube": true, 40 | "showNumSlides": true, 41 | "runOnChange": false, 42 | "runOnEnter": true 43 | } 44 | -------------------------------------------------------------------------------- /css/output.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 10px; 5 | box-sizing: border-box; 6 | } 7 | 8 | .console { 9 | border: none; 10 | border-top: 10px solid #ddd; 11 | width: 100%; 12 | background-color: #333; 13 | min-height: 2vh; 14 | position: fixed; 15 | bottom: 0; 16 | left: 0; 17 | max-height: 50vh; 18 | overflow-y: auto; 19 | 20 | } 21 | 22 | .console div { 23 | /* border-bottom: 1px solid #555; */ 24 | 25 | line-height: 1.7em; 26 | padding: 3px; 27 | padding-top: 8px; 28 | margin-top: 2px; 29 | box-shadow: 0 0 0.5px #FFF; 30 | font-family: monospace; 31 | color: #FFF; 32 | display: flex; 33 | align-self: start; 34 | } 35 | 36 | .log-symbol { 37 | color: rgb(241, 120, 245); 38 | font-weight: bold; 39 | display: block; 40 | font-size: 1.3em; 41 | } 42 | 43 | .json-key { 44 | color: #f0f698; 45 | } 46 | 47 | .json-string { 48 | color: rgb(193, 245, 169); 49 | 50 | } 51 | 52 | .json-number { 53 | color: rgb(175, 213, 245); 54 | /* color: #ce8404; */ 55 | } 56 | 57 | .json-boolean { 58 | color: rgb(252, 190, 252); 59 | } 60 | 61 | .json-null { 62 | color: rgb(249, 200, 200); 63 | } 64 | 65 | .console pre { 66 | margin: 0; 67 | font-size: 1.1em; 68 | white-space: pre-wrap; 69 | } 70 | -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | html, 2 | body { 3 | margin: 0; 4 | padding: 0; 5 | height: 100vh; 6 | font-size: 1.23em; 7 | font-family: "Averia Sans Libre", cursive, "PT Sans Narrow", sans-serif; 8 | } 9 | code { 10 | font-size: 0.98em; 11 | } 12 | .slides { 13 | box-sizing: border-box; 14 | margin: 0; 15 | padding: 6px; 16 | height: 100%; 17 | width: 100%; 18 | } 19 | .slide.example.hide, 20 | .slide.page.hide { 21 | display: none; 22 | } 23 | .outerCode .CodeMirror, 24 | .page .CodeMirror { 25 | height: auto; 26 | } 27 | .page h1 { 28 | padding-top: 14px; 29 | text-shadow: 0 0 2px #fff, 0 0 6px #00000099; 30 | font-variant: small-caps; 31 | } 32 | .slide.example.small-intro.current .intro .CodeMirror, 33 | .slide.example.small-html.current .html .CodeMirror, 34 | .slide.example.small-css.current .css .CodeMirror, 35 | .slide.example.small-js.current .js .CodeMirror { 36 | font-size: 0.8em; 37 | } 38 | .hover:hover { 39 | transform: scale(1.1); 40 | z-index: 1000; 41 | transition: 300ms; 42 | } 43 | 44 | .site { 45 | width: 100%; 46 | height: 100vh; 47 | } 48 | 49 | .big1 { 50 | font-size: 1em; 51 | } 52 | .big2 { 53 | font-size: 1.2em; 54 | } 55 | .big3 { 56 | font-size: 1.4em; 57 | } 58 | 59 | @media (min-width: 780px) { 60 | .big1 { 61 | font-size: 1.2em; 62 | } 63 | .big2 { 64 | font-size: 1.4em; 65 | } 66 | .big3 { 67 | font-size: 1.6em; 68 | } 69 | } 70 | @media (min-width: 980px) { 71 | .big1 { 72 | font-size: 1.3em; 73 | } 74 | .big2 { 75 | font-size: 1.5em; 76 | } 77 | .big3 { 78 | font-size: 1.8em; 79 | } 80 | .big4 { 81 | font-size: 2.6em; 82 | } 83 | .big5 { 84 | font-size: 3.2em; 85 | } 86 | .big6 { 87 | font-size: 4em; 88 | } 89 | } 90 | .img-inline { 91 | height: 40px; 92 | border: 1px solid greenyellow; 93 | padding: 2px; 94 | background-color: black; 95 | cursor: zoom-in; 96 | /* transition: 300ms; */ 97 | } 98 | .img-inline-hover { 99 | display: block; 100 | margin: 0 auto; 101 | position: fixed; 102 | width: auto; 103 | height: auto; 104 | top: 30px; 105 | box-shadow: 0 0 100px black; 106 | cursor: zoom-out; 107 | transition: 150ms; 108 | z-index: 2000; 109 | } 110 | 111 | .blink-item { 112 | opacity: 0.1; 113 | transition: opacity 1s; 114 | } 115 | .blink-item-active { 116 | opacity: 0.5; 117 | } 118 | .blink-item-current { 119 | transition: opacity 1s; 120 | opacity: 1; 121 | border-top: 16px solid #ccc; 122 | padding-top: 0.5em; 123 | padding-bottom: 0.3em; 124 | margin-top: 0.3em; 125 | border-bottom: 6px solid #ccc; 126 | } 127 | 128 | @keyframes zoomIn { 129 | from { 130 | opacity: 0; 131 | -webkit-transform: scale3d(0.3, 0.3, 0.3); 132 | transform: scale3d(0.3, 0.3, 0.3); 133 | background-color: #ffffffff; 134 | } 135 | 136 | 50% { 137 | opacity: 1; 138 | background-color: #f66; 139 | } 140 | 100% { 141 | opacity: 0.5; 142 | background-color: #ffc0c0; 143 | } 144 | } 145 | @keyframes zoomOut { 146 | from { 147 | opacity: 1; 148 | background-color: #ffffffff; 149 | } 150 | 151 | 50% { 152 | opacity: 0.5; 153 | -webkit-transform: scale3d(0.3, 0.3, 0.3); 154 | transform: scale3d(0.3, 0.3, 0.3); 155 | background-color: #f66; 156 | } 157 | 158 | to { 159 | opacity: 0; 160 | background-color: #ffffffff; 161 | } 162 | } 163 | @keyframes bounceInLeft { 164 | from, 165 | 60%, 166 | 75%, 167 | 90%, 168 | to { 169 | -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); 170 | animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); 171 | } 172 | 173 | 0% { 174 | opacity: 0; 175 | -webkit-transform: translate3d(-3000px, 0, 0); 176 | transform: translate3d(-3000px, 0, 0); 177 | } 178 | 179 | 60% { 180 | opacity: 1; 181 | -webkit-transform: translate3d(25px, 0, 0); 182 | transform: translate3d(25px, 0, 0); 183 | } 184 | 185 | 75% { 186 | -webkit-transform: translate3d(-10px, 0, 0); 187 | transform: translate3d(-10px, 0, 0); 188 | } 189 | 190 | 90% { 191 | -webkit-transform: translate3d(5px, 0, 0); 192 | transform: translate3d(5px, 0, 0); 193 | } 194 | 195 | to { 196 | -webkit-transform: translate3d(0, 0, 0); 197 | transform: translate3d(0, 0, 0); 198 | } 199 | } 200 | 201 | h1, 202 | h2 { 203 | background: url(../images/background.png) no-repeat center center; 204 | background-size: cover; 205 | } 206 | 207 | /* .excalidraw-wrapper { 208 | position: fixed; 209 | top: 3%; 210 | left: 3%; 211 | width: 94%; 212 | height: 94%; 213 | background: white; 214 | z-index: 1000; 215 | display: none; 216 | } 217 | 218 | .excalidraw { 219 | position: fixed !important; 220 | } 221 | .excalidraw-btn { 222 | position: fixed; 223 | bottom: 20px; 224 | left: 45%; 225 | z-index: 900; 226 | } 227 | 228 | .close-excalidraw { 229 | position: fixed; 230 | bottom: 20px; 231 | left: 45%; 232 | z-index: 1001; 233 | } */ 234 | 235 | .excalidraw-wrapper { 236 | position: fixed; 237 | top: 0; 238 | left: 0; 239 | width: 100%; 240 | height: 100%; 241 | background: white; 242 | z-index: 1000; 243 | display: none; 244 | } 245 | 246 | #excalidraw-root { 247 | width: 100%; 248 | height: 100%; 249 | margin: 0; 250 | padding: 0; 251 | } 252 | 253 | .excalidraw-btn { 254 | position: fixed; 255 | bottom: 0px; 256 | left: 45%; 257 | z-index: 900; 258 | } 259 | 260 | .excalidraw .App-menu-content { 261 | height: auto !important; 262 | max-height: 80vh; 263 | overflow-y: auto; 264 | } 265 | 266 | .excalidraw .App-menu { 267 | z-index: 1001; 268 | } 269 | 270 | .excalidraw { 271 | position: fixed !important; 272 | } 273 | 274 | div.layer-ui__wrapper > footer { 275 | padding-left: 10rem !important; 276 | bottom: 0.5rem !important; 277 | } 278 | 279 | div.layer-ui__wrapper > div > div > div.Stack.Stack_vertical.App-menu_top__left > div { 280 | display: none; 281 | } 282 | div.layer-ui__wrapper > div > div > div.layer-ui__wrapper__top-right .library-button { 283 | display: none; 284 | } 285 | 286 | .excalidraw.excalidraw-modal-container { 287 | z-index: 9000 !important; 288 | } 289 | 290 | kbd { 291 | color : white !important; 292 | background-color: black !important; 293 | } -------------------------------------------------------------------------------- /css/template.css: -------------------------------------------------------------------------------- 1 | .slide { 2 | margin-top: 12px; 3 | } 4 | .slide.example { 5 | box-sizing: border-box; 6 | border: 0.2px dotted gray; 7 | width: 100%; 8 | height: 100%; 9 | display: flex; 10 | cursor: ew-resize; 11 | background: #eee; 12 | } 13 | .slide.example .code { 14 | margin-right: 0px; 15 | width: 65%; 16 | background: #fff; 17 | } 18 | .slide.example .renderer { 19 | width: 35%; 20 | background: #fff; 21 | } 22 | 23 | .slide .container-code, 24 | .slide .container-renderer, 25 | .slide.page { 26 | overflow: auto; 27 | } 28 | .slide.example .container-code { 29 | margin-top: 8px; 30 | } 31 | .slide.example .code, 32 | .slide.example .renderer { 33 | display: flex; 34 | flex-direction: column; 35 | cursor: default; 36 | } 37 | .slide.example .navbar-renderer, 38 | .slide.example .container-renderer { 39 | flex: 1 1 auto; 40 | } 41 | .slide.example .navbar-code, 42 | .slide.example .navbar-renderer { 43 | height: 40px; 44 | /* width: 100%; */ 45 | display: flex; 46 | list-style: none; 47 | padding: 2px; 48 | margin: 0; 49 | border-bottom: 1px solid #ccc; 50 | border-top: 1px solid #ccc; 51 | background: #eee; 52 | font-size: 0.8em; 53 | /* position: fixed; */ 54 | } 55 | .slide.example .navbar-code li, 56 | .slide.example .navbar-renderer li { 57 | min-width: 60px; 58 | /* border: 1px dotted gray; */ 59 | /* background: #FFF; */ 60 | margin: 4px; 61 | text-align: center; 62 | /* border-right: 1px solid #DDD; */ 63 | /* border-bottom: 1px solid #DDD; */ 64 | /* box-shadow: 1px 1px 1px #DDD; */ 65 | } 66 | .slide.example .navbar-code li a, 67 | .slide.example .navbar-renderer li a { 68 | display: block; 69 | padding: 2px 6px; 70 | text-decoration: none; 71 | font-weight: bold; 72 | font-family: Arial, Helvetica, sans-serif; 73 | /* color: orangered; */ 74 | font-size: 0.8em; 75 | } 76 | .slide { 77 | position: fixed; 78 | left: 0; 79 | top: 0; 80 | bottom: 0; 81 | right: 0; 82 | } 83 | .slide.example.current.left, 84 | .slide.page.current.left { 85 | animation: fadeInLeft 500ms; 86 | } 87 | .slide.example.current.right, 88 | .slide.page.current.right { 89 | animation: fadeInRight 500ms; 90 | } 91 | 92 | .slide.example.current .container-renderer { 93 | height: 100%; 94 | border-left: 0.5px solid #ddd; 95 | } 96 | .slide.example.current .renderer iframe { 97 | height: 96%; 98 | width: 100%; 99 | } 100 | .slide.example.current .container-code .html .CodeMirror, 101 | .slide.example.current .container-code .css .CodeMirror, 102 | .slide.example.current .container-code .js .CodeMirror { 103 | height: 96% !important; 104 | } 105 | .slide.example.current .container-code .intro .CodeMirror { 106 | height: 80% !important; 107 | } 108 | .slide.example.current .container-code > div.hide { 109 | display: none; 110 | } 111 | .slide.example .container-code, 112 | .slide.example .container-renderer { 113 | /* margin-top: 50px; */ 114 | } 115 | .slide.example.current .resizer { 116 | width: 1%; 117 | height: 100%; 118 | background: #eee; 119 | } 120 | 121 | @keyframes show { 122 | from { 123 | opacity: 0; 124 | transform: scale(0.9); 125 | } 126 | to { 127 | opacity: 1; 128 | transform: scale(1); 129 | } 130 | } 131 | 132 | @keyframes fadeInLeft { 133 | from { 134 | opacity: 0; 135 | -webkit-transform: translate3d(-100%, 0, 0); 136 | transform: translate3d(-100%, 0, 0); 137 | } 138 | 139 | to { 140 | opacity: 1; 141 | -webkit-transform: translate3d(0, 0, 0); 142 | transform: translate3d(0, 0, 0); 143 | } 144 | } 145 | @keyframes fadeInRight { 146 | from { 147 | opacity: 0; 148 | -webkit-transform: translate3d(100%, 0, 0); 149 | transform: translate3d(100%, 0, 0); 150 | } 151 | 152 | to { 153 | opacity: 1; 154 | -webkit-transform: translate3d(0, 0, 0); 155 | transform: translate3d(0, 0, 0); 156 | } 157 | } 158 | /* Poppup template */ 159 | 160 | .outer { 161 | position: fixed; 162 | left: 0; 163 | right: 0; 164 | top: 0; 165 | bottom: 0; 166 | background: #000000bb; 167 | z-index: 1000; 168 | font-size: 0.7em; 169 | } 170 | .outer .inner { 171 | z-index: 1001; 172 | position: fixed; 173 | left: 10%; 174 | right: 10%; 175 | top: 10%; 176 | bottom: 10%; 177 | background: #fff; 178 | padding: 6px 12px; 179 | border: 3px double #ccc; 180 | } 181 | .outer .inner .navbar { 182 | list-style: none; 183 | display: flex; 184 | flex-direction: row-reverse; 185 | } 186 | .outer .inner .navbar button { 187 | min-width: 50px; 188 | } 189 | .inner .libraries { 190 | display: table; 191 | border-top: 0.7px dotted #aaa; 192 | border-left: 0.7px dotted #aaa; 193 | } 194 | .inner .libraries .library { 195 | display: table-row; 196 | } 197 | .inner .libraries .library > * { 198 | display: table-cell; 199 | padding: 4px 10px; 200 | border-bottom: 0.1px dotted #aaa; 201 | border-right: 0.1px dotted #aaa; 202 | } 203 | 204 | #progress { 205 | /* opacity: 0.7; */ 206 | height: 5px; 207 | position: fixed; 208 | left: 0; 209 | right: 0; 210 | top: 3px; 211 | border-radius: 0; 212 | z-index: 2099; 213 | } 214 | #progress .progress-bar { 215 | box-sizing: border-box; 216 | border-right: 2px solid white; 217 | } 218 | 219 | #top:hover #progress, 220 | #top:hover #grad { 221 | height: 16px; 222 | } 223 | #top:hover #progress { 224 | top: 0; 225 | } 226 | #top:hover { 227 | cursor: pointer; 228 | } 229 | #top:hover #grad { 230 | opacity: 1; 231 | } 232 | #top .grad:hover { 233 | color: white; 234 | } 235 | #numSlides { 236 | position: fixed; 237 | width: 60px; 238 | height: 30px; 239 | bottom: 0; 240 | right: 0; 241 | font-size: 0.5em; 242 | padding: 4px 8px; 243 | } 244 | #help { 245 | opacity: 0.3; 246 | position: fixed; 247 | /* width: 160px; */ 248 | height: 1.5rem; 249 | bottom: 1.3rem; 250 | left: 1rem; 251 | font-size: 0.5em; 252 | padding: 4px 8px; 253 | z-index: 2000; 254 | } 255 | #help:hover { 256 | opacity: 1; 257 | } 258 | .CodeMirror pre { 259 | padding: 0 10px; 260 | } 261 | 262 | #grad { 263 | display: flex; 264 | position: fixed; 265 | top: 0; 266 | left: 0; 267 | right: 0; 268 | z-index: 9200; 269 | opacity: 0; 270 | border-bottom: 0.5px solid black; 271 | } 272 | #grad .grad { 273 | box-sizing: border-box; 274 | color: #ccc; 275 | font-size: 0.4em; 276 | text-align: center; 277 | z-index: 9300; 278 | border-left: 0.5px solid #ccc; 279 | /* position: relative; */ 280 | /* display: none; */ 281 | } 282 | 283 | #tooltip { 284 | position: absolute; 285 | padding: 6px; 286 | border: 1px solid gray; 287 | font-size: 0.8em; 288 | opacity: 0.7; 289 | background: white; 290 | } 291 | 292 | #ytIframe { 293 | position: fixed; 294 | left: 0; 295 | top: 0; 296 | width: 100%; 297 | height: 100vh; 298 | } 299 | #ytOverlay { 300 | position: fixed; 301 | left: 0; 302 | top: 0; 303 | right: 0; 304 | bottom: 40px; 305 | background-color: rgba(156, 48, 48, 0.5); 306 | } 307 | -------------------------------------------------------------------------------- /images/aziz_daaif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daaif/slides/71f8c300e10df6cd230579bce388d976aaf11b9b/images/aziz_daaif.png -------------------------------------------------------------------------------- /images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daaif/slides/71f8c300e10df6cd230579bce388d976aaf11b9b/images/background.png -------------------------------------------------------------------------------- /images/excalidraw.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daaif/slides/71f8c300e10df6cd230579bce388d976aaf11b9b/images/excalidraw.png -------------------------------------------------------------------------------- /images/structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daaif/slides/71f8c300e10df6cd230579bce388d976aaf11b9b/images/structure.png -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Simple Slides 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 |
37 | 38 |
39 | 40 |
41 | 42 |
43 | 44 |
45 | 46 |
47 | 48 |
49 | 50 |
51 | 52 |
54 | 55 |
56 |
57 | 58 | 59 |
60 |
61 |
62 | 65 | 68 | 75 |
76 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /js/console.js: -------------------------------------------------------------------------------- 1 | const divConsole = document.createElement('div') 2 | divConsole.addEventListener('dblclick', () => { 3 | divConsole.innerHTML = '' 4 | }) 5 | document.addEventListener('DOMContentLoaded', function () { 6 | divConsole.classList.add('console') 7 | document.body.append(divConsole) 8 | divConsole.classList.add('hide-console') 9 | }) 10 | const originalConsoleLog = console.log; 11 | console.log = function (message) { 12 | originalConsoleLog(message); 13 | message = formatValue(message); 14 | addLog(message, 'log'); 15 | 16 | 17 | }; 18 | 19 | const originalConsoleWarn = console.warn; 20 | console.warn = function (message) { 21 | originalConsoleWarn(message); 22 | message = formatValue(message); 23 | addLog(message, 'warn'); 24 | }; 25 | 26 | const originalConsoleError = console.error; 27 | console.error = function (message) { 28 | originalConsoleError(message); 29 | message = formatValue(message); 30 | addLog(message, 'error'); 31 | }; 32 | 33 | function formatValue(value, indent = 0) { 34 | const indentation = ' '.repeat(indent); 35 | if (typeof value === 'string') { 36 | return `"${value}"`; 37 | } 38 | if (typeof value === 'number') { 39 | return `${value}`; 40 | } 41 | if (typeof value === 'boolean') { 42 | return `${value}`; 43 | } 44 | if (value === null) { 45 | return `null`; 46 | } 47 | if (Array.isArray(value)) { 48 | return formatArray(value, indent); 49 | } 50 | if (typeof value === 'object') { 51 | return formatObject(value, indent); 52 | } 53 | return value; 54 | } 55 | 56 | function formatArray(array, indent = 5) { 57 | if (array.length === 0) return '[]'; 58 | 59 | const spaces = ' '.repeat(indent + 2); 60 | const formattedItems = array 61 | .map(item => spaces + formatValue(item, indent + 2)) 62 | .join(',\n'); 63 | 64 | return `[\n${formattedItems}\n${' '.repeat(indent)}]`; 65 | } 66 | 67 | function formatObject(obj, indent = 5) { 68 | const entries = Object.entries(obj); 69 | if (entries.length === 0) return '{}'; 70 | 71 | const spaces = ' '.repeat(indent + 2); 72 | const formattedEntries = entries 73 | .map(([key, value]) => { 74 | const formattedValue = formatValue(value, indent + 2); 75 | return `${spaces}"${key}": ${formattedValue}`; 76 | }) 77 | .join(',\n'); 78 | 79 | return `{\n${formattedEntries}\n${' '.repeat(indent)}}`; 80 | } 81 | 82 | 83 | function addLog(message, type = 'log') { 84 | const logElement = document.createElement('div'); 85 | logElement.innerHTML = `
${message}
`; 86 | logElement.style.backgroundColor = type === 'log' ? 87 | '#000' : type === 'warn' ? 88 | '#950' : '#A00'; 89 | 90 | logElement.style.margin = '5px'; 91 | logElement.style.padding = '10px'; 92 | logElement.style.borderRadius = '4px'; 93 | logElement.style.fontFamily = 'monospace'; 94 | logElement.style.whiteSpace = 'pre-wrap'; 95 | 96 | divConsole.append(logElement); 97 | divConsole.scrollTop = divConsole.scrollHeight; 98 | } 99 | 100 | 101 | -------------------------------------------------------------------------------- /js/excalidraw-react.js: -------------------------------------------------------------------------------- 1 | const { Excalidraw } = ExcalidrawLib; 2 | 3 | const ExcalidrawWrapper = () => { 4 | const [excalidrawAPI, setExcalidrawAPI] = React.useState(null); 5 | 6 | return React.createElement(Excalidraw, { 7 | ref: (api) => setExcalidrawAPI(api), 8 | initialData: { 9 | appState: { 10 | viewBackgroundColor: "#ffffff", 11 | currentItemFontFamily: 1, 12 | language: "fr" 13 | } 14 | }, 15 | UIOptions: { 16 | canvasActions: { 17 | changeViewBackgroundColor: true, 18 | clearCanvas: true, 19 | loadScene: true, 20 | saveToActiveFile: true, 21 | theme: true, 22 | export: { 23 | saveFileToDisk: true, 24 | exportToBackend: false, 25 | renderCustomUI: null 26 | } 27 | } 28 | } 29 | 30 | }); 31 | }; 32 | 33 | ReactDOM.createRoot(document.getElementById('excalidraw-root')).render( 34 | React.createElement(ExcalidrawWrapper) 35 | ); -------------------------------------------------------------------------------- /js/excalidraw.js: -------------------------------------------------------------------------------- 1 | function toggleExcalidraw(evt) { 2 | evt.preventDefault() 3 | const link = evt.target.closest('a') 4 | const container = document.getElementById('excalidraw-container'); 5 | const currentDisplay = container.style.display; 6 | container.style.display = currentDisplay === 'none' ? 'block' : 'none'; 7 | if(currentDisplay === 'none') { 8 | link.classList.remove('btn-outline-primary') 9 | link.classList.add('btn-outline-danger') 10 | } else { 11 | link.classList.add('btn-outline-primary') 12 | link.classList.remove('btn-outline-danger') 13 | } 14 | } -------------------------------------------------------------------------------- /js/slides.js: -------------------------------------------------------------------------------- 1 | document.addEventListener('mermaid-ready', (evt) => { 2 | (async function () { 3 | const config = await fetch("config.json").then(resp => resp.json()); 4 | const templates = await fetch("templates.html").then(resp => resp.text()); 5 | document.querySelector("#templates").innerHTML = templates; 6 | let librariesLoaded = false; 7 | const progress = document.querySelector("#progress .progress-bar"); 8 | const numSlides = document.querySelector("#numSlides"); 9 | const ytBtn = document.querySelector("#yt"); 10 | const ytIframe = document.querySelector("#ytIframe"); 11 | let videoButtonTimerId; 12 | let consoleIsEnabled = false 13 | ytBtn.addEventListener("click", function (evt) { 14 | evt.preventDefault(); 15 | if (this.classList.contains('yt-close')) { 16 | ytIframe.style.display = "none"; 17 | ytBtn.innerHTML = ""; 18 | ytIframe.setAttribute("src", ""); 19 | ytBtn.classList.remove('yt-close'); 20 | ytOverlay.style.display = "none"; 21 | } else { 22 | const slide = slides[current]; 23 | const url = "//www.youtube.com/embed/" 24 | + slide.ytid 25 | + "?autoplay=1&rel=0&controls=0&start=" 26 | + slide.begin 27 | + ((slide.end) ? "&end=" + slide.end : ""); 28 | ytIframe.setAttribute("src", url); 29 | 30 | ytBtn.classList.add('yt-close'); 31 | ytBtn.innerHTML = ""; 32 | ytIframe.style.display = ""; 33 | if (slide.begin !== undefined && slide.end != undefined) { 34 | setTimeout(() => { 35 | this.click(); 36 | }, (slide.end - slide.begin) * 1000) 37 | } 38 | 39 | } 40 | }) 41 | const poppup = document.querySelector(".outer"); 42 | const librariesContainer = poppup.querySelector(".libraries"); 43 | const initialTemplate = poppup.querySelector(".libraries .library"); 44 | const grads = document.querySelector("#grad"); 45 | const cachedTemplate = initialTemplate.cloneNode(true); 46 | cachedTemplate.style.display = ""; 47 | initialTemplate.remove(); 48 | const sections = document.querySelectorAll(".slides > .slide"); 49 | const slides = []; 50 | let current = 0, 51 | previous = 0; 52 | let ytidDefault; 53 | sections.forEach((slide, index) => { 54 | const type = slide.classList.contains("example") ? "example" : "page"; 55 | const { page, intro, html, css, js, ytid, begin, end } = slide.dataset; 56 | ytidDefault = ytid || ytidDefault; 57 | slides.push({ 58 | slide, 59 | type, 60 | page, 61 | intro, 62 | html, 63 | css, 64 | js, 65 | ytid: ytidDefault, 66 | begin: begin !== undefined ? timeInSeconds(begin) : begin, 67 | end: end !== undefined ? timeInSeconds(end) : end, 68 | isLoaded: false 69 | }); 70 | }); 71 | 72 | grads.addEventListener("click", function (evt) { 73 | const position = parseInt((slides.length * evt.clientX) / this.clientWidth); 74 | location.hash = position; 75 | }); 76 | 77 | window.addEventListener("hashchange", function (evt) { 78 | const hash = parseInt(location.hash.substr(1)); 79 | if (hash >= 0) navigate(hash); 80 | }); 81 | attachNavigationEvents(); 82 | 83 | function navigate(hash = 0) { 84 | if (ytBtn.classList.contains('yt-close')) 85 | ytBtn.click(); 86 | hash = parseInt(hash); 87 | hash = hash < 0 ? 0 : hash >= slides.length ? slides.length - 1 : hash; 88 | const direction = current > hash ? "left" : "right"; 89 | previous = current; 90 | tearDown(previous); 91 | current = hash; 92 | const slide = slides[current]; 93 | const position = ((hash + 1) / slides.length) * 100 + "%"; 94 | progress.style.width = position; 95 | 96 | if (config.showNumSlides) { 97 | const num = current + 1 + " / " + slides.length; 98 | numSlides.innerText = num; 99 | } 100 | slides.forEach((s, i) => { 101 | s.slide.classList.remove("left"); 102 | s.slide.classList.remove("right"); 103 | if (i === hash) { 104 | s.slide.classList.add("current"); 105 | s.slide.classList.add(direction); 106 | s.slide.classList.remove("hide"); 107 | } else { 108 | s.slide.classList.add("hide"); 109 | s.slide.classList.remove("current"); 110 | } 111 | }); 112 | if (!slide.isLoaded) { 113 | loadSlide(slide, hash); 114 | } else { 115 | if (slide.type === "example") render(slide); 116 | } 117 | slide.begin ? 118 | ytBtn.classList.remove('d-none') : 119 | ytBtn.classList.add('d-none'); 120 | ytIframe.style.display = "none"; 121 | 122 | } 123 | function loadSlide(slideObject, hash) { 124 | if (slideObject.type === "page") { 125 | const request = new Request( 126 | config.partials["page"] + slideObject.page + ".html" 127 | ); 128 | fetch(request) 129 | .then(response => response.text()) 130 | .then(html => slideObject.slide.innerHTML = html) 131 | .then(_ => slideObject.isLoaded = true) 132 | .then(_ => attachImagesEvent(slideObject.slide)) 133 | .then(_ => reformatPage(slideObject.slide)) 134 | .then(_ => highlight(slideObject.slide)) 135 | .then(_ => mermaid.run()); 136 | 137 | } else { 138 | const template = document.querySelector("#template div"); 139 | 140 | slideObject.slide.innerHTML = template.innerHTML; 141 | attachEvents(slideObject); 142 | resizeSlide(slideObject); 143 | fetchContent(slideObject); 144 | } 145 | } 146 | 147 | function attachImagesEvent(slide) { 148 | const inlineImages = slide.querySelectorAll('.img-inline'); 149 | inlineImages.forEach(img => { 150 | img.addEventListener('click', function (evt) { 151 | this.classList.toggle('img-inline-hover'); 152 | const imgWidth = parseInt(getComputedStyle(this).width) 153 | const bodyWidth = parseInt(getComputedStyle(document.body).width) 154 | this.style.left = ((bodyWidth - imgWidth) / 2) + 'px'; 155 | }); 156 | }); 157 | } 158 | function reformatPage(slide) { 159 | const blinkItems = slide.querySelectorAll('.blink-item'); 160 | if (blinkItems.length > 0) { 161 | slide.blinkItems = blinkItems; 162 | slide.currentBlinkIndex = -1; 163 | } 164 | } 165 | 166 | function fetchContent(slideObject) { 167 | const container = slideObject.slide; 168 | const containerIntro = container.querySelector(".intro"); 169 | const containerHtml = container.querySelector(".html textarea"); 170 | const containerCss = container.querySelector(".css textarea"); 171 | const containerJs = container.querySelector(".js textarea"); 172 | const introPath = config.partials.intro; 173 | const htmlPath = config.partials.html; 174 | const cssPath = config.partials.css; 175 | const jsPath = config.partials.js; 176 | 177 | const reqINTRO = new Request(introPath + slideObject.intro + ".html"); 178 | const reqHTML = new Request(htmlPath + slideObject.html + ".html"); 179 | const reqCSS = new Request(cssPath + slideObject.css + ".css"); 180 | const reqJS = new Request(jsPath + slideObject.js + ".js"); 181 | const f0 = slideObject.intro 182 | ? fetch(reqINTRO).then(response => response.text()) 183 | : Promise.resolve(""); 184 | 185 | const f1 = slideObject.html 186 | ? fetch(reqHTML).then(response => response.text()) 187 | : Promise.resolve(""); 188 | 189 | const f2 = slideObject.css 190 | ? fetch(reqCSS).then(response => response.text()) 191 | : Promise.resolve(""); 192 | 193 | const f3 = slideObject.js 194 | ? fetch(reqJS).then(response => response.text()) 195 | : Promise.resolve(""); 196 | 197 | Promise.all([f0, f1, f2, f3]).then(([intro, html, css, js]) => { 198 | containerIntro.innerHTML = intro; 199 | highlight(containerIntro); 200 | mermaid.run() 201 | 202 | containerHtml.innerHTML = html; 203 | slideObject.htmlEditor = CodeMirror.fromTextArea(containerHtml, { 204 | lineNumbers: true, 205 | }); 206 | containerCss.innerHTML = css; 207 | slideObject.cssEditor = CodeMirror.fromTextArea(containerCss, { 208 | lineNumbers: true, 209 | }); 210 | containerJs.innerHTML = js; 211 | slideObject.jsEditor = CodeMirror.fromTextArea(containerJs, { 212 | lineNumbers: true, 213 | }); 214 | 215 | const type = intro ? "intro" : "html"; 216 | render(slideObject); 217 | showEditor(slideObject.slide, type); 218 | slideObject.isLoaded = true; 219 | 220 | if (config.runOnChange) { 221 | 222 | console.log('runOnChange') 223 | slideObject.htmlEditor.on("change", () => render(slideObject)); 224 | slideObject.cssEditor.on("change", () => render(slideObject)); 225 | slideObject.jsEditor.on("change", () => render(slideObject)); 226 | } 227 | if (config.runOnEnter) { 228 | console.log('RunOnEnter') 229 | slideObject.htmlEditor.on("keydown", 230 | (cm, evt) => { 231 | if (evt.key === 'Enter') 232 | render(slideObject) 233 | }); 234 | slideObject.cssEditor.on("keydown", 235 | (cm, evt) => { 236 | if (evt.key === 'Enter') 237 | render(slideObject) 238 | }); 239 | slideObject.jsEditor.on("keydown", 240 | (cm, evt) => { 241 | if (evt.key === 'Enter') 242 | render(slideObject) 243 | console.log(evt) 244 | }); 245 | } 246 | }); 247 | } 248 | 249 | function attachNavigationEvents() { 250 | let pageX0 = -1; 251 | window.addEventListener("keydown", function (evt) { 252 | const page = document 253 | .querySelector(".current") 254 | .classList.contains("page"); 255 | const slideObject = getCurrentSlideObject(); 256 | let keyCode = evt.keyCode, 257 | isTextarea = evt.target.tagName === "TEXTAREA"; 258 | if (!page && keyCode === 191 && !isTextarea) keyCode = 118; 259 | evt.stopPropagation(); 260 | switch (keyCode) { 261 | case 37: // Left 262 | if (evt.ctrlKey) go(current - 1, -1); 263 | break; 264 | case 38: // Up 265 | if (current > 0 && !isTextarea) 266 | go(current - 1, -1); 267 | break; 268 | case 39: // Right 269 | if (evt.ctrlKey) 270 | go(current + 1, 1); 271 | break; 272 | case 33: // PageUp 273 | go(current - 1, -1); 274 | break; 275 | case 34: // PageDown 276 | go(current + 1, 1); 277 | break; 278 | case 40: // Down 279 | if (current < slides.length - 1 && !isTextarea) 280 | go(current + 1, 1); 281 | break; 282 | case 13: 283 | if (evt.ctrlKey) render(slideObject); 284 | break; 285 | case 118: 286 | showNextTab(); 287 | } 288 | function go(hash, direction) { 289 | const slide = slideObject.slide 290 | if (slide.blinkItems !== undefined) { 291 | if ( 292 | direction > 0 && 293 | slide.currentBlinkIndex < slide.blinkItems.length - 1) { 294 | slide.currentBlinkIndex += 1; 295 | updateClasses(slide, direction) 296 | } else if ( 297 | direction < 0 && 298 | slide.currentBlinkIndex > -1) { 299 | slide.currentBlinkIndex -= 1; 300 | updateClasses(slide, direction) 301 | } else { 302 | location.hash = hash; 303 | } 304 | } else { 305 | location.hash = hash; 306 | } 307 | 308 | function updateClasses(slide, direction) { 309 | const currentIndex = slide.currentBlinkIndex; 310 | for (let i = 0; i < slide.blinkItems.length; i++) { 311 | slide.blinkItems[i].classList.remove( 312 | "blink-item-current", 313 | "blink-item-down", 314 | "blink-item-up" 315 | ) 316 | if (i <= currentIndex) { 317 | slide.blinkItems[i].classList.add("blink-item-active") 318 | } else { 319 | slide.blinkItems[i].classList.remove("blink-item-active") 320 | } 321 | } 322 | if (currentIndex > -1) { 323 | const cls = direction === 1 ? "blink-item-down" : "blink-item-up"; 324 | slide.blinkItems[currentIndex].classList.add("blink-item-current", cls); 325 | } 326 | } 327 | } 328 | }); 329 | window.addEventListener("touchstart", function (evt) { 330 | evt.stopImmediatePropagation(); 331 | pageX0 = evt.touches[0].pageX; 332 | }); 333 | 334 | window.addEventListener("touchend", function (evt) { 335 | if (pageX0 === -1) return; 336 | const delta = evt.changedTouches[0].pageX - pageX0; 337 | if (delta > 60) location.hash = current - 1; 338 | else if (delta < -60) location.hash = current + 1; 339 | pageX0 = -1; 340 | }); 341 | } 342 | function getCurrentSlideObject() { 343 | const currentSlide = document.querySelector(".slide.current"); 344 | return slides.find(so => so.slide === currentSlide); 345 | } 346 | function showNextTab() { 347 | const slideObject = getCurrentSlideObject(); 348 | const containers = slideObject.slide.querySelectorAll( 349 | ".container-code>div" 350 | ); 351 | let lastIntex = 0; 352 | containers.forEach((c, i) => { 353 | if (!c.classList.contains("hide")) lastIndex = i; 354 | c.classList.add("hide"); 355 | }); 356 | const currentIndex = lastIndex >= containers.length - 1 ? 0 : lastIndex + 1; 357 | containers[currentIndex].classList.remove("hide"); 358 | const lis = slide.querySelectorAll(".current .navbar-code li"); 359 | lis.forEach(li => { 360 | li.classList.remove("active"); 361 | }); 362 | const type = lis[currentIndex].querySelector("a").innerText.toLowerCase(); 363 | setActive(slideObject.slide, type); 364 | } 365 | function showEditor(slide, type) { 366 | const containers = slide.querySelectorAll(".container-code>div"); 367 | containers.forEach(c => { 368 | if (c.classList.contains(type)) { 369 | c.classList.remove("hide"); 370 | } else { 371 | c.classList.add("hide"); 372 | } 373 | }); 374 | setActive(slide, type); 375 | } 376 | 377 | function setActive(slide, type) { 378 | const lis = slide.querySelectorAll(".current .navbar-code li"); 379 | lis.forEach(li => { 380 | if (li.innerText.toLowerCase() === type) { 381 | li.classList.add("active"); 382 | li.querySelector("a").focus(); 383 | } else { 384 | li.classList.remove("active"); 385 | } 386 | }); 387 | } 388 | 389 | function attachEvents(slideObject) { 390 | const navbarCode = slideObject.slide.querySelector(".navbar-code"); 391 | const navbarRenderer = slideObject.slide.querySelector(".navbar-renderer"); 392 | const closeButton = poppup.querySelector(".close"); 393 | const addLibsButton = poppup.querySelector(".addlibs"); 394 | navbarCode.addEventListener("click", function (evt) { 395 | evt.preventDefault(); 396 | if (evt.target !== this) { 397 | const type = evt.target.innerText.toLowerCase(); 398 | showEditor(slideObject.slide, type); 399 | } 400 | }); 401 | navbarRenderer.addEventListener("click", function (evt) { 402 | evt.preventDefault(); 403 | evt.stopPropagation(); 404 | if (evt.target === this) return; 405 | switch (evt.target.innerText.toLowerCase()) { 406 | case "run": 407 | render(slideObject); 408 | slideObject.slide.querySelector(".navbar-renderer .run").focus(); 409 | break; 410 | case "reset": 411 | loadSlide(slideObject, current); 412 | break; 413 | case "libraries": 414 | showLibraries(slideObject); 415 | break; 416 | case "show console": 417 | case "hide console": 418 | showHideConsole(slideObject.slide.querySelector('.btn-console')) 419 | break; 420 | } 421 | }); 422 | closeButton.addEventListener("click", closePoppup); 423 | addLibsButton.addEventListener("click", function () { 424 | const checkboxes = poppup.querySelectorAll(".library input.sel"); 425 | const globals = poppup.querySelectorAll(".library input.global"); 426 | 427 | checkboxes.forEach((check, i) => { 428 | slideObject.libraries[i].selected = check.checked; 429 | slideObject.libraries[i].global = globals[i].checked; 430 | }); 431 | render(slideObject); 432 | closePoppup(); 433 | }); 434 | } 435 | 436 | function resizeSlide(slideObject) { 437 | if (slideObject.isLoaded) return; 438 | slide = slideObject.slide; 439 | 440 | let resizing = false; 441 | let iframe = null, 442 | iframeWindow = null; 443 | 444 | const code = document.querySelector(".slide.example.current .code"); 445 | const renderer = document.querySelector(".slide.example.current .renderer"); 446 | const resizer = document.querySelector(".slide.example.current .resizer"); 447 | resizer.addEventListener("mousedown", function downHandler(evt) { 448 | evt.preventDefault(); 449 | resizing = true; 450 | iframe = slide.querySelector(".container-renderer iframe"); 451 | iframeWindow = iframe.contentWindow; 452 | window.addEventListener("mousemove", moveHandler); 453 | iframeWindow.addEventListener("mousemove", iframeMoveHandler); 454 | window.addEventListener("mouseup", upHandler); 455 | }); 456 | function moveHandler(evt) { 457 | 458 | const bcrCode1 = code.getBoundingClientRect(); 459 | const bcrRenderer = renderer.getBoundingClientRect(); 460 | code.style.width = evt.pageX - bcrCode1.left + "px"; 461 | const bcrCode2 = code.getBoundingClientRect(); 462 | renderer.style.width = 463 | bcrRenderer.width + bcrCode1.width - bcrCode2.width + "px"; 464 | 465 | slide.style.cursor = "ew-resize !important"; 466 | } 467 | function iframeMoveHandler(evt) { 468 | const clientRect = iframe.getBoundingClientRect(); 469 | const event = new CustomEvent("mousemove", { 470 | bubbles: true, 471 | cancelable: false 472 | }); 473 | 474 | event.clientX = evt.clientX + clientRect.left; 475 | event.clientY = evt.clientY + clientRect.top; 476 | event.pageX = evt.pageX + clientRect.left; 477 | event.pageY = evt.pageY + clientRect.top; 478 | 479 | window.dispatchEvent(event); 480 | } 481 | function upHandler(evt) { 482 | resizing = false; 483 | window.removeEventListener("mousemove", moveHandler); 484 | iframeWindow.removeEventListener("mousemove", iframeMoveHandler); 485 | window.removeEventListener("mouseup", upHandler); 486 | } 487 | 488 | } 489 | function tearDown(index) { 490 | const slideObject = slides[index]; 491 | const containerRenderer = slideObject.slide.querySelector( 492 | ".container-renderer" 493 | ); 494 | if (containerRenderer) containerRenderer.innerHTML = ""; 495 | } 496 | function render(slideObject) { 497 | const containerRenderer = slideObject.slide.querySelector( 498 | ".container-renderer" 499 | ); 500 | const btnConsole = document.querySelector('.btn-console') 501 | containerRenderer.innerHTML = ""; 502 | const win = document.createElement("iframe"); 503 | win.setAttribute("frameborder", 0); 504 | containerRenderer.appendChild(win); 505 | rendererWindow = win.contentWindow 506 | 507 | attachLibraries(slideObject); 508 | function attachLibraries(slideObject) { 509 | if (slideObject.libraries === undefined) refreshLibraries(slideObject); 510 | const promises = []; 511 | slideObject.libraries.forEach(lib => { 512 | if (lib.selected) { 513 | const script = document.createElement("script"); 514 | script.setAttribute("src", lib.url); 515 | if (lib.crossorigin) 516 | script.setAttribute('crossorigin', '') 517 | win.contentWindow.document.head.appendChild(script) 518 | // setTimeout(_ => win.contentWindow.document.head.appendChild(script), 0) 519 | promises.push( 520 | new Promise(resolve => { 521 | script.onload = () => { 522 | resolve(lib.name); 523 | }; 524 | }) 525 | ); 526 | } 527 | }); 528 | Promise.all(promises).then(function (scripts) { 529 | const style = document.createElement("style"); 530 | style.classList.add("added"); 531 | style.innerText = slideObject.cssEditor.getValue(); 532 | const script = document.createElement("script"); 533 | if (config.babel) 534 | script.setAttribute("type", "text/babel"); 535 | script.classList.add("added"); 536 | let scriptContent = slideObject.jsEditor.getValue(); 537 | scriptContent = ` 538 | try { 539 | ${scriptContent} 540 | } catch(err) { 541 | console.error('*** ' + err.message + ' ***') 542 | } 543 | ` 544 | script.textContent = scriptContent; 545 | const link = document.createElement('link'); 546 | link.setAttribute("rel", "stylesheet"); 547 | link.setAttribute("href", "../css/output.css"); 548 | win.contentWindow.document.body.innerHTML = slideObject.htmlEditor.getValue(); 549 | win.contentWindow.document.head.appendChild(style); 550 | win.contentWindow.document.body.appendChild(script); 551 | win.contentWindow.document.head.appendChild(link); 552 | win.contentWindow.document.dispatchEvent(new Event('DOMContentLoaded', { 553 | bubbles: true, 554 | cancelable: true 555 | })); 556 | 557 | const doc = win.contentWindow.document 558 | divConsole = doc.querySelector('.console') 559 | if (consoleIsEnabled) { 560 | divConsole.style.display = '' 561 | divConsole.classList.remove('hide-console') 562 | } else { 563 | divConsole.style.display = 'none' 564 | divConsole.classList.add('hide-console') 565 | } 566 | setTimeout(() => { 567 | divConsole.scrollTop = divConsole.scrollHeight 568 | }, 10) 569 | // }) 570 | }) 571 | 572 | } 573 | } 574 | function showLibraries(slideObject) { 575 | refreshLibraries(slideObject); 576 | const checkboxes = poppup.querySelectorAll(".library input.sel"); 577 | const globals = poppup.querySelectorAll(".library input.global"); 578 | checkboxes.forEach((check, i) => { 579 | check.checked = 580 | slideObject.libraries[i].selected || slideObject.libraries[i].global; 581 | globals[i].checked = slideObject.libraries[i].global; 582 | }); 583 | poppup.style.display = ""; 584 | } 585 | function refreshLibraries(slideObject) { 586 | if (slideObject.libraries === undefined) { 587 | slideObject.libraries = []; 588 | config.libraries.forEach(lib => { 589 | const { name, url, version, global, crossorigin } = lib; 590 | slideObject.libraries.push({ 591 | selected: global, 592 | name, 593 | url, 594 | version, 595 | global, 596 | crossorigin 597 | }); 598 | }); 599 | if (!librariesLoaded) { 600 | config.libraries.forEach(lib => { 601 | const entree = cachedTemplate.cloneNode(true); 602 | entree.querySelector(".name").innerText = lib.name; 603 | entree.querySelector(".url").innerText = lib.url; 604 | entree.querySelector(".version").innerText = lib.version; 605 | entree.querySelector(".global").checked = lib.global; 606 | librariesContainer.appendChild(entree); 607 | }); 608 | librariesLoaded = true; 609 | } 610 | } 611 | } 612 | function closePoppup() { 613 | poppup.style.display = "none"; 614 | } 615 | function highlight(elm) { 616 | const codes = elm.querySelectorAll(".myCode"); 617 | codes.forEach(code => { 618 | const lines = !code.classList.contains("no-lines"); 619 | CodeMirror.fromTextArea(code, { 620 | lineNumbers: lines, 621 | readOnly: true 622 | }); 623 | }); 624 | } 625 | 626 | window.addEventListener("resize", () => setTimeout(resizeGraduations, 30)); 627 | function resizeGraduations(evt) { 628 | const grads = document.querySelector("#grad"); 629 | grads.innerHTML = ""; 630 | const width = 100 / slides.length + "%"; 631 | slides.forEach((s, i) => { 632 | const grad = document.createElement("div"); 633 | grad.style.width = width; 634 | grad.classList.add("grad"); 635 | grad.innerText = i + 1; 636 | grads.append(grad); 637 | }); 638 | } 639 | 640 | setTimeout(resizeGraduations, 30); 641 | // Allez au premier slide. 642 | navigate() 643 | 644 | function timeInSeconds(st) { 645 | const parts = st.split(':').reverse() 646 | let t = 0; 647 | for (let i = 0; i < parts.length; i++) { 648 | t += parts[i] * 60 ** i; 649 | } 650 | return t; 651 | } 652 | addEventListener("load", _ => { 653 | go(1) 654 | setTimeout(() => go(0), 100) 655 | }) 656 | 657 | function showHideConsole(btn) { 658 | const divConsole = rendererWindow.document.querySelector('.console') 659 | divConsole.classList.toggle('hide-console') 660 | const state = divConsole.classList.contains('hide-console') 661 | if (state) { 662 | divConsole.style.display = "none" 663 | consoleIsEnabled = false 664 | btn.innerText = 'Show Console' 665 | console.log('Hide Console') 666 | } else { 667 | divConsole.style.display = "block" 668 | divConsole.scrollTop = divConsole.scrollHeight; 669 | consoleIsEnabled = true 670 | btn.innerText = 'Hide Console' 671 | console.log('Show Console') 672 | } 673 | 674 | } 675 | })(); 676 | }) 677 | 678 | 679 | 680 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slides", 3 | "version": "1.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "slides", 9 | "version": "1.1.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bootstrap": "^4.4.1", 13 | "codemirror": "^5.51.0" 14 | }, 15 | "devDependencies": { 16 | "local-web-server": "~4.0.0" 17 | } 18 | }, 19 | "node_modules/@hapi/bourne": { 20 | "version": "3.0.0", 21 | "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-3.0.0.tgz", 22 | "integrity": "sha512-Waj1cwPXJDucOib4a3bAISsKJVb15MKi9IvmTI/7ssVEm6sywXGjVJDhl6/umt1pK1ZS7PacXU3A1PmFKHEZ2w==", 23 | "dev": true 24 | }, 25 | "node_modules/@koa/cors": { 26 | "version": "3.4.3", 27 | "resolved": "https://registry.npmjs.org/@koa/cors/-/cors-3.4.3.tgz", 28 | "integrity": "sha512-WPXQUaAeAMVaLTEFpoq3T2O1C+FstkjJnDQqy95Ck1UdILajsRhu6mhJ8H2f4NFPRBoCNN+qywTJfq/gGki5mw==", 29 | "dev": true, 30 | "dependencies": { 31 | "vary": "^1.1.2" 32 | }, 33 | "engines": { 34 | "node": ">= 8.0.0" 35 | } 36 | }, 37 | "node_modules/@tootallnate/once": { 38 | "version": "1.1.2", 39 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 40 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 41 | "dev": true, 42 | "engines": { 43 | "node": ">= 6" 44 | } 45 | }, 46 | "node_modules/accepts": { 47 | "version": "1.3.8", 48 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 49 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 50 | "dev": true, 51 | "dependencies": { 52 | "mime-types": "~2.1.34", 53 | "negotiator": "0.6.3" 54 | }, 55 | "engines": { 56 | "node": ">= 0.6" 57 | } 58 | }, 59 | "node_modules/agent-base": { 60 | "version": "6.0.2", 61 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 62 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 63 | "dev": true, 64 | "dependencies": { 65 | "debug": "4" 66 | }, 67 | "engines": { 68 | "node": ">= 6.0.0" 69 | } 70 | }, 71 | "node_modules/ansi-escape-sequences": { 72 | "version": "5.1.2", 73 | "resolved": "https://registry.npmjs.org/ansi-escape-sequences/-/ansi-escape-sequences-5.1.2.tgz", 74 | "integrity": "sha512-JcpoVp1W1bl1Qn4cVuiXEhD6+dyXKSOgCn2zlzE8inYgCJCBy1aPnUhlz6I4DFum8D4ovb9Qi/iAjUcGvG2lqw==", 75 | "dev": true, 76 | "dependencies": { 77 | "array-back": "^4.0.0" 78 | }, 79 | "engines": { 80 | "node": ">=8.0.0" 81 | } 82 | }, 83 | "node_modules/ansi-styles": { 84 | "version": "3.2.1", 85 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 86 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 87 | "dev": true, 88 | "dependencies": { 89 | "color-convert": "^1.9.0" 90 | }, 91 | "engines": { 92 | "node": ">=4" 93 | } 94 | }, 95 | "node_modules/any-promise": { 96 | "version": "1.3.0", 97 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 98 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 99 | "dev": true 100 | }, 101 | "node_modules/array-back": { 102 | "version": "4.0.2", 103 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", 104 | "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", 105 | "dev": true, 106 | "engines": { 107 | "node": ">=8" 108 | } 109 | }, 110 | "node_modules/basic-auth": { 111 | "version": "2.0.1", 112 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", 113 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", 114 | "dev": true, 115 | "dependencies": { 116 | "safe-buffer": "5.1.2" 117 | }, 118 | "engines": { 119 | "node": ">= 0.8" 120 | } 121 | }, 122 | "node_modules/basic-auth/node_modules/safe-buffer": { 123 | "version": "5.1.2", 124 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 125 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 126 | "dev": true 127 | }, 128 | "node_modules/batch": { 129 | "version": "0.6.1", 130 | "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", 131 | "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", 132 | "dev": true 133 | }, 134 | "node_modules/bootstrap": { 135 | "version": "4.4.1", 136 | "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.4.1.tgz", 137 | "integrity": "sha512-tbx5cHubwE6e2ZG7nqM3g/FZ5PQEDMWmMGNrCUBVRPHXTJaH7CBDdsLeu3eCh3B1tzAxTnAbtmrzvWEvT2NNEA==", 138 | "engines": { 139 | "node": ">=6" 140 | }, 141 | "funding": { 142 | "type": "opencollective", 143 | "url": "https://opencollective.com/bootstrap" 144 | }, 145 | "peerDependencies": { 146 | "jquery": "1.9.1 - 3", 147 | "popper.js": "^1.16.0" 148 | } 149 | }, 150 | "node_modules/byte-size": { 151 | "version": "6.2.0", 152 | "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-6.2.0.tgz", 153 | "integrity": "sha512-6EspYUCAPMc7E2rltBgKwhG+Cmk0pDm9zDtF1Awe2dczNUL3YpZ8mTs/dueOTS1hqGWBOatqef4jYMGjln7WmA==", 154 | "dev": true, 155 | "engines": { 156 | "node": ">=8" 157 | } 158 | }, 159 | "node_modules/bytes": { 160 | "version": "3.1.2", 161 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 162 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 163 | "dev": true, 164 | "engines": { 165 | "node": ">= 0.8" 166 | } 167 | }, 168 | "node_modules/cache-content-type": { 169 | "version": "1.0.1", 170 | "resolved": "https://registry.npmjs.org/cache-content-type/-/cache-content-type-1.0.1.tgz", 171 | "integrity": "sha512-IKufZ1o4Ut42YUrZSo8+qnMTrFuKkvyoLXUywKz9GJ5BrhOFGhLdkx9sG4KAnVvbY6kEcSFjLQul+DVmBm2bgA==", 172 | "dev": true, 173 | "dependencies": { 174 | "mime-types": "^2.1.18", 175 | "ylru": "^1.2.0" 176 | }, 177 | "engines": { 178 | "node": ">= 6.0.0" 179 | } 180 | }, 181 | "node_modules/call-bind-apply-helpers": { 182 | "version": "1.0.1", 183 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", 184 | "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", 185 | "dev": true, 186 | "dependencies": { 187 | "es-errors": "^1.3.0", 188 | "function-bind": "^1.1.2" 189 | }, 190 | "engines": { 191 | "node": ">= 0.4" 192 | } 193 | }, 194 | "node_modules/call-bound": { 195 | "version": "1.0.3", 196 | "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", 197 | "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", 198 | "dev": true, 199 | "dependencies": { 200 | "call-bind-apply-helpers": "^1.0.1", 201 | "get-intrinsic": "^1.2.6" 202 | }, 203 | "engines": { 204 | "node": ">= 0.4" 205 | }, 206 | "funding": { 207 | "url": "https://github.com/sponsors/ljharb" 208 | } 209 | }, 210 | "node_modules/chalk": { 211 | "version": "2.4.2", 212 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 213 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 214 | "dev": true, 215 | "dependencies": { 216 | "ansi-styles": "^3.2.1", 217 | "escape-string-regexp": "^1.0.5", 218 | "supports-color": "^5.3.0" 219 | }, 220 | "engines": { 221 | "node": ">=4" 222 | } 223 | }, 224 | "node_modules/co": { 225 | "version": "4.6.0", 226 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", 227 | "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", 228 | "dev": true, 229 | "engines": { 230 | "iojs": ">= 1.0.0", 231 | "node": ">= 0.12.0" 232 | } 233 | }, 234 | "node_modules/co-body": { 235 | "version": "6.2.0", 236 | "resolved": "https://registry.npmjs.org/co-body/-/co-body-6.2.0.tgz", 237 | "integrity": "sha512-Kbpv2Yd1NdL1V/V4cwLVxraHDV6K8ayohr2rmH0J87Er8+zJjcTa6dAn9QMPC9CRgU8+aNajKbSf1TzDB1yKPA==", 238 | "dev": true, 239 | "dependencies": { 240 | "@hapi/bourne": "^3.0.0", 241 | "inflation": "^2.0.0", 242 | "qs": "^6.5.2", 243 | "raw-body": "^2.3.3", 244 | "type-is": "^1.6.16" 245 | }, 246 | "engines": { 247 | "node": ">=8.0.0" 248 | } 249 | }, 250 | "node_modules/codemirror": { 251 | "version": "5.51.0", 252 | "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-5.51.0.tgz", 253 | "integrity": "sha512-vyuYYRv3eXL0SCuZA4spRFlKNzQAewHcipRQCOKgRy7VNAvZxTKzbItdbCl4S5AgPZ5g3WkHp+ibWQwv9TLG7Q==" 254 | }, 255 | "node_modules/color-convert": { 256 | "version": "1.9.3", 257 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 258 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 259 | "dev": true, 260 | "dependencies": { 261 | "color-name": "1.1.3" 262 | } 263 | }, 264 | "node_modules/color-name": { 265 | "version": "1.1.3", 266 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 267 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 268 | "dev": true 269 | }, 270 | "node_modules/command-line-args": { 271 | "version": "5.2.1", 272 | "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", 273 | "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", 274 | "dev": true, 275 | "dependencies": { 276 | "array-back": "^3.1.0", 277 | "find-replace": "^3.0.0", 278 | "lodash.camelcase": "^4.3.0", 279 | "typical": "^4.0.0" 280 | }, 281 | "engines": { 282 | "node": ">=4.0.0" 283 | } 284 | }, 285 | "node_modules/command-line-args/node_modules/array-back": { 286 | "version": "3.1.0", 287 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", 288 | "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", 289 | "dev": true, 290 | "engines": { 291 | "node": ">=6" 292 | } 293 | }, 294 | "node_modules/command-line-args/node_modules/typical": { 295 | "version": "4.0.0", 296 | "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", 297 | "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", 298 | "dev": true, 299 | "engines": { 300 | "node": ">=8" 301 | } 302 | }, 303 | "node_modules/command-line-usage": { 304 | "version": "6.1.3", 305 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", 306 | "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", 307 | "dev": true, 308 | "dependencies": { 309 | "array-back": "^4.0.2", 310 | "chalk": "^2.4.2", 311 | "table-layout": "^1.0.2", 312 | "typical": "^5.2.0" 313 | }, 314 | "engines": { 315 | "node": ">=8.0.0" 316 | } 317 | }, 318 | "node_modules/command-line-usage/node_modules/typical": { 319 | "version": "5.2.0", 320 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 321 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 322 | "dev": true, 323 | "engines": { 324 | "node": ">=8" 325 | } 326 | }, 327 | "node_modules/common-log-format": { 328 | "version": "1.0.0", 329 | "resolved": "https://registry.npmjs.org/common-log-format/-/common-log-format-1.0.0.tgz", 330 | "integrity": "sha512-fFn/WPNbsTCGTTwdCpZfVZSa5mgqMEkA0gMTRApFSlEsYN+9B2FPfiqch5FT+jsv5IV1RHV3GeZvCa7Qg+jssw==", 331 | "dev": true, 332 | "bin": { 333 | "clf": "bin/cli.js" 334 | }, 335 | "engines": { 336 | "node": ">=8" 337 | } 338 | }, 339 | "node_modules/compressible": { 340 | "version": "2.0.18", 341 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 342 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 343 | "dev": true, 344 | "dependencies": { 345 | "mime-db": ">= 1.43.0 < 2" 346 | }, 347 | "engines": { 348 | "node": ">= 0.6" 349 | } 350 | }, 351 | "node_modules/content-disposition": { 352 | "version": "0.5.4", 353 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 354 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 355 | "dev": true, 356 | "dependencies": { 357 | "safe-buffer": "5.2.1" 358 | }, 359 | "engines": { 360 | "node": ">= 0.6" 361 | } 362 | }, 363 | "node_modules/content-type": { 364 | "version": "1.0.5", 365 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 366 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 367 | "dev": true, 368 | "engines": { 369 | "node": ">= 0.6" 370 | } 371 | }, 372 | "node_modules/cookies": { 373 | "version": "0.9.1", 374 | "resolved": "https://registry.npmjs.org/cookies/-/cookies-0.9.1.tgz", 375 | "integrity": "sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==", 376 | "dev": true, 377 | "dependencies": { 378 | "depd": "~2.0.0", 379 | "keygrip": "~1.1.0" 380 | }, 381 | "engines": { 382 | "node": ">= 0.8" 383 | } 384 | }, 385 | "node_modules/copy-to": { 386 | "version": "2.0.1", 387 | "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", 388 | "integrity": "sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w==", 389 | "dev": true 390 | }, 391 | "node_modules/core-util-is": { 392 | "version": "1.0.3", 393 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 394 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 395 | "dev": true 396 | }, 397 | "node_modules/create-mixin": { 398 | "version": "3.0.0", 399 | "resolved": "https://registry.npmjs.org/create-mixin/-/create-mixin-3.0.0.tgz", 400 | "integrity": "sha512-LkdMqnWT9LaqBN4huqpUnMz56Yr1mVSoCduAd2xXefgH/YZP2sXCMAyztXjk4q8hTF/TlcDa+zQW2aTgGdjjKQ==", 401 | "dev": true, 402 | "engines": { 403 | "node": ">=10" 404 | } 405 | }, 406 | "node_modules/debug": { 407 | "version": "4.4.0", 408 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", 409 | "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", 410 | "dev": true, 411 | "dependencies": { 412 | "ms": "^2.1.3" 413 | }, 414 | "engines": { 415 | "node": ">=6.0" 416 | }, 417 | "peerDependenciesMeta": { 418 | "supports-color": { 419 | "optional": true 420 | } 421 | } 422 | }, 423 | "node_modules/deep-equal": { 424 | "version": "1.0.1", 425 | "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", 426 | "integrity": "sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==", 427 | "dev": true 428 | }, 429 | "node_modules/deep-extend": { 430 | "version": "0.6.0", 431 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 432 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 433 | "dev": true, 434 | "engines": { 435 | "node": ">=4.0.0" 436 | } 437 | }, 438 | "node_modules/delegates": { 439 | "version": "1.0.0", 440 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 441 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", 442 | "dev": true 443 | }, 444 | "node_modules/depd": { 445 | "version": "2.0.0", 446 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 447 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 448 | "dev": true, 449 | "engines": { 450 | "node": ">= 0.8" 451 | } 452 | }, 453 | "node_modules/destroy": { 454 | "version": "1.2.0", 455 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 456 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 457 | "dev": true, 458 | "engines": { 459 | "node": ">= 0.8", 460 | "npm": "1.2.8000 || >= 1.4.16" 461 | } 462 | }, 463 | "node_modules/dunder-proto": { 464 | "version": "1.0.1", 465 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 466 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 467 | "dev": true, 468 | "dependencies": { 469 | "call-bind-apply-helpers": "^1.0.1", 470 | "es-errors": "^1.3.0", 471 | "gopd": "^1.2.0" 472 | }, 473 | "engines": { 474 | "node": ">= 0.4" 475 | } 476 | }, 477 | "node_modules/ee-first": { 478 | "version": "1.1.1", 479 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 480 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", 481 | "dev": true 482 | }, 483 | "node_modules/encodeurl": { 484 | "version": "1.0.2", 485 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 486 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 487 | "dev": true, 488 | "engines": { 489 | "node": ">= 0.8" 490 | } 491 | }, 492 | "node_modules/es-define-property": { 493 | "version": "1.0.1", 494 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 495 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 496 | "dev": true, 497 | "engines": { 498 | "node": ">= 0.4" 499 | } 500 | }, 501 | "node_modules/es-errors": { 502 | "version": "1.3.0", 503 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 504 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 505 | "dev": true, 506 | "engines": { 507 | "node": ">= 0.4" 508 | } 509 | }, 510 | "node_modules/es-object-atoms": { 511 | "version": "1.0.0", 512 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", 513 | "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", 514 | "dev": true, 515 | "dependencies": { 516 | "es-errors": "^1.3.0" 517 | }, 518 | "engines": { 519 | "node": ">= 0.4" 520 | } 521 | }, 522 | "node_modules/escape-html": { 523 | "version": "1.0.3", 524 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 525 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", 526 | "dev": true 527 | }, 528 | "node_modules/escape-string-regexp": { 529 | "version": "1.0.5", 530 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 531 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 532 | "dev": true, 533 | "engines": { 534 | "node": ">=0.8.0" 535 | } 536 | }, 537 | "node_modules/etag": { 538 | "version": "1.8.1", 539 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 540 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 541 | "dev": true, 542 | "engines": { 543 | "node": ">= 0.6" 544 | } 545 | }, 546 | "node_modules/find-replace": { 547 | "version": "3.0.0", 548 | "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", 549 | "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", 550 | "dev": true, 551 | "dependencies": { 552 | "array-back": "^3.0.1" 553 | }, 554 | "engines": { 555 | "node": ">=4.0.0" 556 | } 557 | }, 558 | "node_modules/find-replace/node_modules/array-back": { 559 | "version": "3.1.0", 560 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", 561 | "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", 562 | "dev": true, 563 | "engines": { 564 | "node": ">=6" 565 | } 566 | }, 567 | "node_modules/fresh": { 568 | "version": "0.5.2", 569 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 570 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 571 | "dev": true, 572 | "engines": { 573 | "node": ">= 0.6" 574 | } 575 | }, 576 | "node_modules/function-bind": { 577 | "version": "1.1.2", 578 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 579 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 580 | "dev": true, 581 | "funding": { 582 | "url": "https://github.com/sponsors/ljharb" 583 | } 584 | }, 585 | "node_modules/get-intrinsic": { 586 | "version": "1.2.7", 587 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", 588 | "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", 589 | "dev": true, 590 | "dependencies": { 591 | "call-bind-apply-helpers": "^1.0.1", 592 | "es-define-property": "^1.0.1", 593 | "es-errors": "^1.3.0", 594 | "es-object-atoms": "^1.0.0", 595 | "function-bind": "^1.1.2", 596 | "get-proto": "^1.0.0", 597 | "gopd": "^1.2.0", 598 | "has-symbols": "^1.1.0", 599 | "hasown": "^2.0.2", 600 | "math-intrinsics": "^1.1.0" 601 | }, 602 | "engines": { 603 | "node": ">= 0.4" 604 | }, 605 | "funding": { 606 | "url": "https://github.com/sponsors/ljharb" 607 | } 608 | }, 609 | "node_modules/get-proto": { 610 | "version": "1.0.1", 611 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 612 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 613 | "dev": true, 614 | "dependencies": { 615 | "dunder-proto": "^1.0.1", 616 | "es-object-atoms": "^1.0.0" 617 | }, 618 | "engines": { 619 | "node": ">= 0.4" 620 | } 621 | }, 622 | "node_modules/gopd": { 623 | "version": "1.2.0", 624 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 625 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 626 | "dev": true, 627 | "engines": { 628 | "node": ">= 0.4" 629 | }, 630 | "funding": { 631 | "url": "https://github.com/sponsors/ljharb" 632 | } 633 | }, 634 | "node_modules/has-flag": { 635 | "version": "3.0.0", 636 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 637 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 638 | "dev": true, 639 | "engines": { 640 | "node": ">=4" 641 | } 642 | }, 643 | "node_modules/has-symbols": { 644 | "version": "1.1.0", 645 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 646 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 647 | "dev": true, 648 | "engines": { 649 | "node": ">= 0.4" 650 | }, 651 | "funding": { 652 | "url": "https://github.com/sponsors/ljharb" 653 | } 654 | }, 655 | "node_modules/has-tostringtag": { 656 | "version": "1.0.2", 657 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 658 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 659 | "dev": true, 660 | "dependencies": { 661 | "has-symbols": "^1.0.3" 662 | }, 663 | "engines": { 664 | "node": ">= 0.4" 665 | }, 666 | "funding": { 667 | "url": "https://github.com/sponsors/ljharb" 668 | } 669 | }, 670 | "node_modules/hasown": { 671 | "version": "2.0.2", 672 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 673 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 674 | "dev": true, 675 | "dependencies": { 676 | "function-bind": "^1.1.2" 677 | }, 678 | "engines": { 679 | "node": ">= 0.4" 680 | } 681 | }, 682 | "node_modules/http-assert": { 683 | "version": "1.5.0", 684 | "resolved": "https://registry.npmjs.org/http-assert/-/http-assert-1.5.0.tgz", 685 | "integrity": "sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==", 686 | "dev": true, 687 | "dependencies": { 688 | "deep-equal": "~1.0.1", 689 | "http-errors": "~1.8.0" 690 | }, 691 | "engines": { 692 | "node": ">= 0.8" 693 | } 694 | }, 695 | "node_modules/http-errors": { 696 | "version": "1.8.1", 697 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", 698 | "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", 699 | "dev": true, 700 | "dependencies": { 701 | "depd": "~1.1.2", 702 | "inherits": "2.0.4", 703 | "setprototypeof": "1.2.0", 704 | "statuses": ">= 1.5.0 < 2", 705 | "toidentifier": "1.0.1" 706 | }, 707 | "engines": { 708 | "node": ">= 0.6" 709 | } 710 | }, 711 | "node_modules/http-errors/node_modules/depd": { 712 | "version": "1.1.2", 713 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 714 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 715 | "dev": true, 716 | "engines": { 717 | "node": ">= 0.6" 718 | } 719 | }, 720 | "node_modules/http-proxy-agent": { 721 | "version": "4.0.1", 722 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 723 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 724 | "dev": true, 725 | "dependencies": { 726 | "@tootallnate/once": "1", 727 | "agent-base": "6", 728 | "debug": "4" 729 | }, 730 | "engines": { 731 | "node": ">= 6" 732 | } 733 | }, 734 | "node_modules/https-proxy-agent": { 735 | "version": "5.0.1", 736 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 737 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 738 | "dev": true, 739 | "dependencies": { 740 | "agent-base": "6", 741 | "debug": "4" 742 | }, 743 | "engines": { 744 | "node": ">= 6" 745 | } 746 | }, 747 | "node_modules/iconv-lite": { 748 | "version": "0.4.24", 749 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 750 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 751 | "dev": true, 752 | "dependencies": { 753 | "safer-buffer": ">= 2.1.2 < 3" 754 | }, 755 | "engines": { 756 | "node": ">=0.10.0" 757 | } 758 | }, 759 | "node_modules/inflation": { 760 | "version": "2.1.0", 761 | "resolved": "https://registry.npmjs.org/inflation/-/inflation-2.1.0.tgz", 762 | "integrity": "sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==", 763 | "dev": true, 764 | "engines": { 765 | "node": ">= 0.8.0" 766 | } 767 | }, 768 | "node_modules/inherits": { 769 | "version": "2.0.4", 770 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 771 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 772 | "dev": true 773 | }, 774 | "node_modules/is-docker": { 775 | "version": "2.2.1", 776 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 777 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 778 | "dev": true, 779 | "bin": { 780 | "is-docker": "cli.js" 781 | }, 782 | "engines": { 783 | "node": ">=8" 784 | }, 785 | "funding": { 786 | "url": "https://github.com/sponsors/sindresorhus" 787 | } 788 | }, 789 | "node_modules/is-generator-function": { 790 | "version": "1.1.0", 791 | "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", 792 | "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", 793 | "dev": true, 794 | "dependencies": { 795 | "call-bound": "^1.0.3", 796 | "get-proto": "^1.0.0", 797 | "has-tostringtag": "^1.0.2", 798 | "safe-regex-test": "^1.1.0" 799 | }, 800 | "engines": { 801 | "node": ">= 0.4" 802 | }, 803 | "funding": { 804 | "url": "https://github.com/sponsors/ljharb" 805 | } 806 | }, 807 | "node_modules/is-regex": { 808 | "version": "1.2.1", 809 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", 810 | "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", 811 | "dev": true, 812 | "dependencies": { 813 | "call-bound": "^1.0.2", 814 | "gopd": "^1.2.0", 815 | "has-tostringtag": "^1.0.2", 816 | "hasown": "^2.0.2" 817 | }, 818 | "engines": { 819 | "node": ">= 0.4" 820 | }, 821 | "funding": { 822 | "url": "https://github.com/sponsors/ljharb" 823 | } 824 | }, 825 | "node_modules/is-wsl": { 826 | "version": "2.2.0", 827 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 828 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 829 | "dev": true, 830 | "dependencies": { 831 | "is-docker": "^2.0.0" 832 | }, 833 | "engines": { 834 | "node": ">=8" 835 | } 836 | }, 837 | "node_modules/isarray": { 838 | "version": "1.0.0", 839 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 840 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 841 | "dev": true 842 | }, 843 | "node_modules/jquery": { 844 | "version": "3.7.1", 845 | "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", 846 | "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", 847 | "peer": true 848 | }, 849 | "node_modules/json-stringify-safe": { 850 | "version": "5.0.1", 851 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 852 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 853 | "dev": true 854 | }, 855 | "node_modules/jsonparse": { 856 | "version": "1.3.1", 857 | "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", 858 | "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", 859 | "dev": true, 860 | "engines": [ 861 | "node >= 0.2.0" 862 | ] 863 | }, 864 | "node_modules/JSONStream": { 865 | "version": "1.3.5", 866 | "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", 867 | "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", 868 | "dev": true, 869 | "dependencies": { 870 | "jsonparse": "^1.2.0", 871 | "through": ">=2.2.7 <3" 872 | }, 873 | "bin": { 874 | "JSONStream": "bin.js" 875 | }, 876 | "engines": { 877 | "node": "*" 878 | } 879 | }, 880 | "node_modules/keygrip": { 881 | "version": "1.1.0", 882 | "resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.1.0.tgz", 883 | "integrity": "sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==", 884 | "dev": true, 885 | "dependencies": { 886 | "tsscmp": "1.0.6" 887 | }, 888 | "engines": { 889 | "node": ">= 0.6" 890 | } 891 | }, 892 | "node_modules/koa": { 893 | "version": "2.15.3", 894 | "resolved": "https://registry.npmjs.org/koa/-/koa-2.15.3.tgz", 895 | "integrity": "sha512-j/8tY9j5t+GVMLeioLaxweJiKUayFhlGqNTzf2ZGwL0ZCQijd2RLHK0SLW5Tsko8YyyqCZC2cojIb0/s62qTAg==", 896 | "dev": true, 897 | "dependencies": { 898 | "accepts": "^1.3.5", 899 | "cache-content-type": "^1.0.0", 900 | "content-disposition": "~0.5.2", 901 | "content-type": "^1.0.4", 902 | "cookies": "~0.9.0", 903 | "debug": "^4.3.2", 904 | "delegates": "^1.0.0", 905 | "depd": "^2.0.0", 906 | "destroy": "^1.0.4", 907 | "encodeurl": "^1.0.2", 908 | "escape-html": "^1.0.3", 909 | "fresh": "~0.5.2", 910 | "http-assert": "^1.3.0", 911 | "http-errors": "^1.6.3", 912 | "is-generator-function": "^1.0.7", 913 | "koa-compose": "^4.1.0", 914 | "koa-convert": "^2.0.0", 915 | "on-finished": "^2.3.0", 916 | "only": "~0.0.2", 917 | "parseurl": "^1.3.2", 918 | "statuses": "^1.5.0", 919 | "type-is": "^1.6.16", 920 | "vary": "^1.1.2" 921 | }, 922 | "engines": { 923 | "node": "^4.8.4 || ^6.10.1 || ^7.10.1 || >= 8.1.4" 924 | } 925 | }, 926 | "node_modules/koa-bodyparser": { 927 | "version": "4.4.1", 928 | "resolved": "https://registry.npmjs.org/koa-bodyparser/-/koa-bodyparser-4.4.1.tgz", 929 | "integrity": "sha512-kBH3IYPMb+iAXnrxIhXnW+gXV8OTzCu8VPDqvcDHW9SQrbkHmqPQtiZwrltNmSq6/lpipHnT7k7PsjlVD7kK0w==", 930 | "dev": true, 931 | "dependencies": { 932 | "co-body": "^6.0.0", 933 | "copy-to": "^2.0.1", 934 | "type-is": "^1.6.18" 935 | }, 936 | "engines": { 937 | "node": ">=8.0.0" 938 | } 939 | }, 940 | "node_modules/koa-compose": { 941 | "version": "4.1.0", 942 | "resolved": "https://registry.npmjs.org/koa-compose/-/koa-compose-4.1.0.tgz", 943 | "integrity": "sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==", 944 | "dev": true 945 | }, 946 | "node_modules/koa-compress": { 947 | "version": "3.1.0", 948 | "resolved": "https://registry.npmjs.org/koa-compress/-/koa-compress-3.1.0.tgz", 949 | "integrity": "sha512-0m24/yS/GbhWI+g9FqtvStY+yJwTObwoxOvPok6itVjRen7PBWkjsJ8pre76m+99YybXLKhOJ62mJ268qyBFMQ==", 950 | "dev": true, 951 | "dependencies": { 952 | "bytes": "^3.0.0", 953 | "compressible": "^2.0.0", 954 | "koa-is-json": "^1.0.0", 955 | "statuses": "^1.0.0" 956 | }, 957 | "engines": { 958 | "node": ">= 8.0.0" 959 | } 960 | }, 961 | "node_modules/koa-conditional-get": { 962 | "version": "2.0.0", 963 | "resolved": "https://registry.npmjs.org/koa-conditional-get/-/koa-conditional-get-2.0.0.tgz", 964 | "integrity": "sha512-FTZYr681zfyW0bz8FDc55RJrRnicz6KPv2oA3GOf6knksJd0uJdfenKud+RtBjHzO0g1tVHNjwN6gk7OfHAtbQ==", 965 | "dev": true 966 | }, 967 | "node_modules/koa-convert": { 968 | "version": "2.0.0", 969 | "resolved": "https://registry.npmjs.org/koa-convert/-/koa-convert-2.0.0.tgz", 970 | "integrity": "sha512-asOvN6bFlSnxewce2e/DK3p4tltyfC4VM7ZwuTuepI7dEQVcvpyFuBcEARu1+Hxg8DIwytce2n7jrZtRlPrARA==", 971 | "dev": true, 972 | "dependencies": { 973 | "co": "^4.6.0", 974 | "koa-compose": "^4.1.0" 975 | }, 976 | "engines": { 977 | "node": ">= 10" 978 | } 979 | }, 980 | "node_modules/koa-etag": { 981 | "version": "3.0.0", 982 | "resolved": "https://registry.npmjs.org/koa-etag/-/koa-etag-3.0.0.tgz", 983 | "integrity": "sha512-HYU1zIsH4S9xOlUZGuZIP1PIiJ0EkBXgwL8PjFECb/pUYmAee8gfcvIovregBMYxECDhLulEWT2+ZRsA/lczCQ==", 984 | "dev": true, 985 | "dependencies": { 986 | "etag": "^1.3.0", 987 | "mz": "^2.1.0" 988 | } 989 | }, 990 | "node_modules/koa-is-json": { 991 | "version": "1.0.0", 992 | "resolved": "https://registry.npmjs.org/koa-is-json/-/koa-is-json-1.0.0.tgz", 993 | "integrity": "sha512-+97CtHAlWDx0ndt0J8y3P12EWLwTLMXIfMnYDev3wOTwH/RpBGMlfn4bDXlMEg1u73K6XRE9BbUp+5ZAYoRYWw==", 994 | "dev": true 995 | }, 996 | "node_modules/koa-json": { 997 | "version": "2.0.2", 998 | "resolved": "https://registry.npmjs.org/koa-json/-/koa-json-2.0.2.tgz", 999 | "integrity": "sha512-8+dz0T2ekDuNN1svYoKPCV2txotQ3Ufg8Fn5bft1T48MPJWiC/HKmkk+3xj9EC/iNZuFYeLRazN2h2o3RSUXuQ==", 1000 | "dev": true, 1001 | "dependencies": { 1002 | "koa-is-json": "1", 1003 | "streaming-json-stringify": "3" 1004 | } 1005 | }, 1006 | "node_modules/koa-morgan": { 1007 | "version": "1.0.1", 1008 | "resolved": "https://registry.npmjs.org/koa-morgan/-/koa-morgan-1.0.1.tgz", 1009 | "integrity": "sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==", 1010 | "dev": true, 1011 | "dependencies": { 1012 | "morgan": "^1.6.1" 1013 | } 1014 | }, 1015 | "node_modules/koa-range": { 1016 | "version": "0.3.0", 1017 | "resolved": "https://registry.npmjs.org/koa-range/-/koa-range-0.3.0.tgz", 1018 | "integrity": "sha512-Ich3pCz6RhtbajYXRWjIl6O5wtrLs6kE3nkXc9XmaWe+MysJyZO7K4L3oce1Jpg/iMgCbj+5UCiMm/rqVtcDIg==", 1019 | "dev": true, 1020 | "dependencies": { 1021 | "stream-slice": "^0.1.2" 1022 | }, 1023 | "engines": { 1024 | "node": ">=7" 1025 | } 1026 | }, 1027 | "node_modules/koa-route": { 1028 | "version": "3.2.0", 1029 | "resolved": "https://registry.npmjs.org/koa-route/-/koa-route-3.2.0.tgz", 1030 | "integrity": "sha512-8FsuWw/L+CUWJfpgN6vrlYUDNTheEinG8Zkm97GyuLJNyWjCVUs9p10Ih3jTIWwmDVQcz6827l0RKadAS5ibqA==", 1031 | "dev": true, 1032 | "dependencies": { 1033 | "debug": "*", 1034 | "methods": "~1.1.0", 1035 | "path-to-regexp": "^1.2.0" 1036 | } 1037 | }, 1038 | "node_modules/koa-route/node_modules/isarray": { 1039 | "version": "0.0.1", 1040 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 1041 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 1042 | "dev": true 1043 | }, 1044 | "node_modules/koa-route/node_modules/path-to-regexp": { 1045 | "version": "1.9.0", 1046 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", 1047 | "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", 1048 | "dev": true, 1049 | "dependencies": { 1050 | "isarray": "0.0.1" 1051 | } 1052 | }, 1053 | "node_modules/koa-send": { 1054 | "version": "5.0.1", 1055 | "resolved": "https://registry.npmjs.org/koa-send/-/koa-send-5.0.1.tgz", 1056 | "integrity": "sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==", 1057 | "dev": true, 1058 | "dependencies": { 1059 | "debug": "^4.1.1", 1060 | "http-errors": "^1.7.3", 1061 | "resolve-path": "^1.4.0" 1062 | }, 1063 | "engines": { 1064 | "node": ">= 8" 1065 | } 1066 | }, 1067 | "node_modules/koa-static": { 1068 | "version": "5.0.0", 1069 | "resolved": "https://registry.npmjs.org/koa-static/-/koa-static-5.0.0.tgz", 1070 | "integrity": "sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==", 1071 | "dev": true, 1072 | "dependencies": { 1073 | "debug": "^3.1.0", 1074 | "koa-send": "^5.0.0" 1075 | }, 1076 | "engines": { 1077 | "node": ">= 7.6.0" 1078 | } 1079 | }, 1080 | "node_modules/koa-static/node_modules/debug": { 1081 | "version": "3.2.7", 1082 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1083 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1084 | "dev": true, 1085 | "dependencies": { 1086 | "ms": "^2.1.1" 1087 | } 1088 | }, 1089 | "node_modules/load-module": { 1090 | "version": "3.0.0", 1091 | "resolved": "https://registry.npmjs.org/load-module/-/load-module-3.0.0.tgz", 1092 | "integrity": "sha512-ZqprfrTx4vfH5+1mgpspPh5JYsNyA193NkMUdb3GwpmVqMczOh8cUDJgZBmEZVlSR42JBGYTUxlBAX9LHIBtIA==", 1093 | "dev": true, 1094 | "dependencies": { 1095 | "array-back": "^4.0.1" 1096 | }, 1097 | "engines": { 1098 | "node": ">=10" 1099 | } 1100 | }, 1101 | "node_modules/local-web-server": { 1102 | "version": "4.0.0", 1103 | "resolved": "https://registry.npmjs.org/local-web-server/-/local-web-server-4.0.0.tgz", 1104 | "integrity": "sha512-i6ESE41af9QbspV1VvN3fRHHpl5w7T4QxIhg3JzzQWYg6tPEzPklx+y9sTJiD5lY6vY82NZUmzhr28FZo+KctA==", 1105 | "dev": true, 1106 | "dependencies": { 1107 | "lws": "^3.0.0", 1108 | "lws-basic-auth": "^2.0.0", 1109 | "lws-blacklist": "^3.0.0", 1110 | "lws-body-parser": "^2.0.0", 1111 | "lws-compress": "^2.0.0", 1112 | "lws-conditional-get": "^2.0.0", 1113 | "lws-cors": "^3.0.0", 1114 | "lws-index": "^2.0.0", 1115 | "lws-json": "^2.0.0", 1116 | "lws-log": "^2.0.0", 1117 | "lws-mime": "^2.0.0", 1118 | "lws-range": "^3.0.0", 1119 | "lws-request-monitor": "^2.0.0", 1120 | "lws-rewrite": "^3.0.0", 1121 | "lws-spa": "^3.0.0", 1122 | "lws-static": "^2.0.0", 1123 | "node-version-matches": "^2.0.1" 1124 | }, 1125 | "bin": { 1126 | "ws": "bin/cli.js" 1127 | }, 1128 | "engines": { 1129 | "node": ">=10" 1130 | } 1131 | }, 1132 | "node_modules/lodash.assignwith": { 1133 | "version": "4.2.0", 1134 | "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", 1135 | "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==", 1136 | "dev": true 1137 | }, 1138 | "node_modules/lodash.camelcase": { 1139 | "version": "4.3.0", 1140 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1141 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", 1142 | "dev": true 1143 | }, 1144 | "node_modules/lodash.throttle": { 1145 | "version": "4.1.1", 1146 | "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", 1147 | "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", 1148 | "dev": true 1149 | }, 1150 | "node_modules/lws": { 1151 | "version": "3.1.0", 1152 | "resolved": "https://registry.npmjs.org/lws/-/lws-3.1.0.tgz", 1153 | "integrity": "sha512-I8rTgZxz8OJL0hjdlDxs6WpcVG7WSyalVHPQXXK+WPNVjm3KhkT5gV0Qmsgm2FRLbRUp15tso80xmDxMsyt7zA==", 1154 | "dev": true, 1155 | "dependencies": { 1156 | "ansi-escape-sequences": "^5.1.2", 1157 | "array-back": "^4.0.1", 1158 | "byte-size": "^6.2.0", 1159 | "command-line-args": "^5.1.1", 1160 | "command-line-usage": "^6.1.0", 1161 | "create-mixin": "^3.0.0", 1162 | "koa": "^2.11.0", 1163 | "load-module": "^3.0.0", 1164 | "lodash.assignwith": "^4.2.0", 1165 | "node-version-matches": "^2.0.1", 1166 | "open": "^7.0.4", 1167 | "qrcode-terminal": "^0.12.0", 1168 | "reduce-flatten": "^3.0.0", 1169 | "typical": "^6.0.0", 1170 | "walk-back": "^4.0.0" 1171 | }, 1172 | "bin": { 1173 | "lws": "bin/cli.js" 1174 | }, 1175 | "engines": { 1176 | "node": ">=10" 1177 | } 1178 | }, 1179 | "node_modules/lws-basic-auth": { 1180 | "version": "2.0.0", 1181 | "resolved": "https://registry.npmjs.org/lws-basic-auth/-/lws-basic-auth-2.0.0.tgz", 1182 | "integrity": "sha512-zzyoGFLQPuKaQJvHMLmmSyfT6lIvocwcDXllTVW5brD0t0YgHYopILkzja+x+MIlJX/YhNKniaTSasujniYVjw==", 1183 | "dev": true, 1184 | "dependencies": { 1185 | "basic-auth": "^2.0.1" 1186 | }, 1187 | "engines": { 1188 | "node": ">=10" 1189 | } 1190 | }, 1191 | "node_modules/lws-blacklist": { 1192 | "version": "3.0.0", 1193 | "resolved": "https://registry.npmjs.org/lws-blacklist/-/lws-blacklist-3.0.0.tgz", 1194 | "integrity": "sha512-KNXGDBmbj+UGfWMBAefe2vrfuWpEQms/9Fd7kfMScTqAKF6nrVoEs4pkxfefArG3bX0bu7jWLyB4tJGma5WC6Q==", 1195 | "dev": true, 1196 | "dependencies": { 1197 | "array-back": "^4.0.1", 1198 | "path-to-regexp": "^6.1.0" 1199 | }, 1200 | "engines": { 1201 | "node": ">=10" 1202 | } 1203 | }, 1204 | "node_modules/lws-body-parser": { 1205 | "version": "2.0.0", 1206 | "resolved": "https://registry.npmjs.org/lws-body-parser/-/lws-body-parser-2.0.0.tgz", 1207 | "integrity": "sha512-QFDzln3sSdKWL9fVNWy2+ZmrKy/XaYRO0/FFB0MBrDCsNnzepeCD4I7rOOfyuphLn42yR8XUpWdcJ3Ii5aauRA==", 1208 | "dev": true, 1209 | "dependencies": { 1210 | "koa-bodyparser": "^4.2.1" 1211 | }, 1212 | "engines": { 1213 | "node": ">=10" 1214 | } 1215 | }, 1216 | "node_modules/lws-compress": { 1217 | "version": "2.0.0", 1218 | "resolved": "https://registry.npmjs.org/lws-compress/-/lws-compress-2.0.0.tgz", 1219 | "integrity": "sha512-5qDXI9pukVYWm07WjAOfpItLXKtL8lCHvjmW4RiXULhTRJj1qqBjNcmqReyk8L7NLUKhc+8eqoDDJFKURQEp0w==", 1220 | "dev": true, 1221 | "dependencies": { 1222 | "koa-compress": "^3.0.0" 1223 | }, 1224 | "engines": { 1225 | "node": ">=10" 1226 | } 1227 | }, 1228 | "node_modules/lws-conditional-get": { 1229 | "version": "2.0.0", 1230 | "resolved": "https://registry.npmjs.org/lws-conditional-get/-/lws-conditional-get-2.0.0.tgz", 1231 | "integrity": "sha512-U05yDlFJKIYa7gJZYfnc1HIEuXbKpDJztgkvNYyxCqJC28j/k9ORoNnFNOIHpBh/jlPJgV8x7uH34mIxFAryWA==", 1232 | "dev": true, 1233 | "dependencies": { 1234 | "koa-conditional-get": "^2.0.0", 1235 | "koa-etag": "^3.0.0" 1236 | }, 1237 | "engines": { 1238 | "node": ">=10" 1239 | } 1240 | }, 1241 | "node_modules/lws-cors": { 1242 | "version": "3.1.1", 1243 | "resolved": "https://registry.npmjs.org/lws-cors/-/lws-cors-3.1.1.tgz", 1244 | "integrity": "sha512-JMqRHdZ8wS17LB9MbHZvOAiDE/2MD3TSODvEAmNkIPEvutKq1Z6wfuFbfiNjAQRGyImUfiUM99vJOFHmLCg2cw==", 1245 | "dev": true, 1246 | "dependencies": { 1247 | "@koa/cors": "^3.0.0" 1248 | }, 1249 | "engines": { 1250 | "node": ">=10" 1251 | } 1252 | }, 1253 | "node_modules/lws-index": { 1254 | "version": "2.0.0", 1255 | "resolved": "https://registry.npmjs.org/lws-index/-/lws-index-2.0.0.tgz", 1256 | "integrity": "sha512-qfkeQmKYnd13LmQubzI5LtFV2N8PJQG4QvgSoefoiB3dWre9k2T4C7ajjOTKO8mgSzYpUEREduNcQcLyt62n0g==", 1257 | "dev": true, 1258 | "dependencies": { 1259 | "serve-index-75lb": "^2.0.1" 1260 | }, 1261 | "engines": { 1262 | "node": ">=10" 1263 | } 1264 | }, 1265 | "node_modules/lws-json": { 1266 | "version": "2.0.0", 1267 | "resolved": "https://registry.npmjs.org/lws-json/-/lws-json-2.0.0.tgz", 1268 | "integrity": "sha512-vqUFrAQ5BGpkMS2Mm/ZhgvUMi6Tgia7YtESG7pKjNoiSsD+TxncG0nqp8YjUh2xrEzi/SYFc/ed+9ZOl/t0A0g==", 1269 | "dev": true, 1270 | "dependencies": { 1271 | "koa-json": "^2.0.2" 1272 | }, 1273 | "engines": { 1274 | "node": ">=10" 1275 | } 1276 | }, 1277 | "node_modules/lws-log": { 1278 | "version": "2.0.0", 1279 | "resolved": "https://registry.npmjs.org/lws-log/-/lws-log-2.0.0.tgz", 1280 | "integrity": "sha512-YveoazSZ0Qb1Tljdm8G8yn9c+mAMXgvLMACZzh5aZIk7p8YJwiXf9r1S+xY7wbXEcKG629KfVO0B5G5gRFcyDQ==", 1281 | "dev": true, 1282 | "dependencies": { 1283 | "koa-morgan": "^1.0.1", 1284 | "stream-log-stats": "^3.0.2" 1285 | }, 1286 | "engines": { 1287 | "node": ">=10" 1288 | } 1289 | }, 1290 | "node_modules/lws-mime": { 1291 | "version": "2.0.0", 1292 | "resolved": "https://registry.npmjs.org/lws-mime/-/lws-mime-2.0.0.tgz", 1293 | "integrity": "sha512-mfrAgRQ5+hkQ7LJ6EAgwnUeymNeYxwLXZY3UQ6C2hSTr7BqMSzm9k5O0C8wWP2dzdhChzITYKwzWbUnAYVBwtA==", 1294 | "dev": true, 1295 | "engines": { 1296 | "node": ">=10" 1297 | } 1298 | }, 1299 | "node_modules/lws-range": { 1300 | "version": "3.0.0", 1301 | "resolved": "https://registry.npmjs.org/lws-range/-/lws-range-3.0.0.tgz", 1302 | "integrity": "sha512-7ZhA/LqQnKjolKBo/2BFj9DyDDXcJGY3v05TwYRD0qDGrxW4vuatEjluC3SV7ZO/k4PxDLdxuk+RCgL5t3ThtQ==", 1303 | "dev": true, 1304 | "dependencies": { 1305 | "koa-range": "^0.3.0" 1306 | }, 1307 | "engines": { 1308 | "node": ">=10" 1309 | } 1310 | }, 1311 | "node_modules/lws-request-monitor": { 1312 | "version": "2.0.0", 1313 | "resolved": "https://registry.npmjs.org/lws-request-monitor/-/lws-request-monitor-2.0.0.tgz", 1314 | "integrity": "sha512-ZTo0/pS42qiejcYlL+wlpurSbDSS0J7pDDohqBx7jjUQkgni2Qd8cPzn/kW8QI82gXgDmdZH+ps0vheLHlgdgg==", 1315 | "dev": true, 1316 | "dependencies": { 1317 | "byte-size": "^6.2.0" 1318 | }, 1319 | "engines": { 1320 | "node": ">=10" 1321 | } 1322 | }, 1323 | "node_modules/lws-rewrite": { 1324 | "version": "3.1.1", 1325 | "resolved": "https://registry.npmjs.org/lws-rewrite/-/lws-rewrite-3.1.1.tgz", 1326 | "integrity": "sha512-cOeaPXIlLUVLxS6BZ52QzZVzI8JjCzlWD4RWizB5Hd+0YGO0SPa3Vgk7CIghtAOsSdjtXg/wSOap2H1h+tw8BQ==", 1327 | "dev": true, 1328 | "dependencies": { 1329 | "array-back": "^4.0.1", 1330 | "http-proxy-agent": "^4.0.1", 1331 | "https-proxy-agent": "^5.0.0", 1332 | "koa-route": "^3.2.0", 1333 | "path-to-regexp": "^6.1.0" 1334 | }, 1335 | "bin": { 1336 | "lws-rewrite": "bin/cli.js" 1337 | }, 1338 | "engines": { 1339 | "node": ">=10" 1340 | } 1341 | }, 1342 | "node_modules/lws-spa": { 1343 | "version": "3.0.0", 1344 | "resolved": "https://registry.npmjs.org/lws-spa/-/lws-spa-3.0.0.tgz", 1345 | "integrity": "sha512-Tz10LfuOTUsRG6z+OCJ/vBN+4LQWoAGIJ1R02CFPrDk0pY3rHezM7/cCpq6Z6dXD+ipdNE8alkVn4zL2M+eVGg==", 1346 | "dev": true, 1347 | "dependencies": { 1348 | "koa-send": "^5.0.0" 1349 | }, 1350 | "engines": { 1351 | "node": ">=10" 1352 | } 1353 | }, 1354 | "node_modules/lws-static": { 1355 | "version": "2.0.0", 1356 | "resolved": "https://registry.npmjs.org/lws-static/-/lws-static-2.0.0.tgz", 1357 | "integrity": "sha512-P25A0+IXdkB6Y6gZAG7X0mnaa+FJ8aTiWLUgM5kazaWmruRO7lyhSjitsA3y5TLI3DpPCZn0mWE4SRREujUZLg==", 1358 | "dev": true, 1359 | "dependencies": { 1360 | "koa-static": "^5.0.0" 1361 | }, 1362 | "engines": { 1363 | "node": ">=10" 1364 | } 1365 | }, 1366 | "node_modules/math-intrinsics": { 1367 | "version": "1.1.0", 1368 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 1369 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 1370 | "dev": true, 1371 | "engines": { 1372 | "node": ">= 0.4" 1373 | } 1374 | }, 1375 | "node_modules/media-typer": { 1376 | "version": "0.3.0", 1377 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1378 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1379 | "dev": true, 1380 | "engines": { 1381 | "node": ">= 0.6" 1382 | } 1383 | }, 1384 | "node_modules/methods": { 1385 | "version": "1.1.2", 1386 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1387 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1388 | "dev": true, 1389 | "engines": { 1390 | "node": ">= 0.6" 1391 | } 1392 | }, 1393 | "node_modules/mime-db": { 1394 | "version": "1.53.0", 1395 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.53.0.tgz", 1396 | "integrity": "sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==", 1397 | "dev": true, 1398 | "engines": { 1399 | "node": ">= 0.6" 1400 | } 1401 | }, 1402 | "node_modules/mime-types": { 1403 | "version": "2.1.35", 1404 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1405 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "mime-db": "1.52.0" 1409 | }, 1410 | "engines": { 1411 | "node": ">= 0.6" 1412 | } 1413 | }, 1414 | "node_modules/mime-types/node_modules/mime-db": { 1415 | "version": "1.52.0", 1416 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1417 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1418 | "dev": true, 1419 | "engines": { 1420 | "node": ">= 0.6" 1421 | } 1422 | }, 1423 | "node_modules/morgan": { 1424 | "version": "1.10.0", 1425 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", 1426 | "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", 1427 | "dev": true, 1428 | "dependencies": { 1429 | "basic-auth": "~2.0.1", 1430 | "debug": "2.6.9", 1431 | "depd": "~2.0.0", 1432 | "on-finished": "~2.3.0", 1433 | "on-headers": "~1.0.2" 1434 | }, 1435 | "engines": { 1436 | "node": ">= 0.8.0" 1437 | } 1438 | }, 1439 | "node_modules/morgan/node_modules/debug": { 1440 | "version": "2.6.9", 1441 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1442 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1443 | "dev": true, 1444 | "dependencies": { 1445 | "ms": "2.0.0" 1446 | } 1447 | }, 1448 | "node_modules/morgan/node_modules/ms": { 1449 | "version": "2.0.0", 1450 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1451 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 1452 | "dev": true 1453 | }, 1454 | "node_modules/morgan/node_modules/on-finished": { 1455 | "version": "2.3.0", 1456 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1457 | "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", 1458 | "dev": true, 1459 | "dependencies": { 1460 | "ee-first": "1.1.1" 1461 | }, 1462 | "engines": { 1463 | "node": ">= 0.8" 1464 | } 1465 | }, 1466 | "node_modules/ms": { 1467 | "version": "2.1.3", 1468 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1469 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1470 | "dev": true 1471 | }, 1472 | "node_modules/mz": { 1473 | "version": "2.7.0", 1474 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 1475 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 1476 | "dev": true, 1477 | "dependencies": { 1478 | "any-promise": "^1.0.0", 1479 | "object-assign": "^4.0.1", 1480 | "thenify-all": "^1.0.0" 1481 | } 1482 | }, 1483 | "node_modules/negotiator": { 1484 | "version": "0.6.3", 1485 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1486 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1487 | "dev": true, 1488 | "engines": { 1489 | "node": ">= 0.6" 1490 | } 1491 | }, 1492 | "node_modules/node-version-matches": { 1493 | "version": "2.0.1", 1494 | "resolved": "https://registry.npmjs.org/node-version-matches/-/node-version-matches-2.0.1.tgz", 1495 | "integrity": "sha512-oqk6+05FC0dNVY5NuXuhPEMq+m1b9ZjS9SIhVE9EjwCHZspnmjSO8npbKAEieinR8GeEgbecoQcYIvI/Kwcf6Q==", 1496 | "dev": true, 1497 | "dependencies": { 1498 | "semver": "^6.3.0" 1499 | }, 1500 | "engines": { 1501 | "node": ">=8" 1502 | } 1503 | }, 1504 | "node_modules/object-assign": { 1505 | "version": "4.1.1", 1506 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1507 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1508 | "dev": true, 1509 | "engines": { 1510 | "node": ">=0.10.0" 1511 | } 1512 | }, 1513 | "node_modules/object-inspect": { 1514 | "version": "1.13.3", 1515 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", 1516 | "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", 1517 | "dev": true, 1518 | "engines": { 1519 | "node": ">= 0.4" 1520 | }, 1521 | "funding": { 1522 | "url": "https://github.com/sponsors/ljharb" 1523 | } 1524 | }, 1525 | "node_modules/on-finished": { 1526 | "version": "2.4.1", 1527 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1528 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1529 | "dev": true, 1530 | "dependencies": { 1531 | "ee-first": "1.1.1" 1532 | }, 1533 | "engines": { 1534 | "node": ">= 0.8" 1535 | } 1536 | }, 1537 | "node_modules/on-headers": { 1538 | "version": "1.0.2", 1539 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 1540 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 1541 | "dev": true, 1542 | "engines": { 1543 | "node": ">= 0.8" 1544 | } 1545 | }, 1546 | "node_modules/only": { 1547 | "version": "0.0.2", 1548 | "resolved": "https://registry.npmjs.org/only/-/only-0.0.2.tgz", 1549 | "integrity": "sha512-Fvw+Jemq5fjjyWz6CpKx6w9s7xxqo3+JCyM0WXWeCSOboZ8ABkyvP8ID4CZuChA/wxSx+XSJmdOm8rGVyJ1hdQ==", 1550 | "dev": true 1551 | }, 1552 | "node_modules/open": { 1553 | "version": "7.4.2", 1554 | "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", 1555 | "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", 1556 | "dev": true, 1557 | "dependencies": { 1558 | "is-docker": "^2.0.0", 1559 | "is-wsl": "^2.1.1" 1560 | }, 1561 | "engines": { 1562 | "node": ">=8" 1563 | }, 1564 | "funding": { 1565 | "url": "https://github.com/sponsors/sindresorhus" 1566 | } 1567 | }, 1568 | "node_modules/parseurl": { 1569 | "version": "1.3.3", 1570 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1571 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1572 | "dev": true, 1573 | "engines": { 1574 | "node": ">= 0.8" 1575 | } 1576 | }, 1577 | "node_modules/path-is-absolute": { 1578 | "version": "1.0.1", 1579 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1580 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1581 | "dev": true, 1582 | "engines": { 1583 | "node": ">=0.10.0" 1584 | } 1585 | }, 1586 | "node_modules/path-to-regexp": { 1587 | "version": "6.3.0", 1588 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", 1589 | "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", 1590 | "dev": true 1591 | }, 1592 | "node_modules/popper.js": { 1593 | "version": "1.16.1", 1594 | "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", 1595 | "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", 1596 | "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1", 1597 | "peer": true, 1598 | "funding": { 1599 | "type": "opencollective", 1600 | "url": "https://opencollective.com/popperjs" 1601 | } 1602 | }, 1603 | "node_modules/process-nextick-args": { 1604 | "version": "2.0.1", 1605 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1606 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1607 | "dev": true 1608 | }, 1609 | "node_modules/qrcode-terminal": { 1610 | "version": "0.12.0", 1611 | "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", 1612 | "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", 1613 | "dev": true, 1614 | "bin": { 1615 | "qrcode-terminal": "bin/qrcode-terminal.js" 1616 | } 1617 | }, 1618 | "node_modules/qs": { 1619 | "version": "6.13.1", 1620 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.1.tgz", 1621 | "integrity": "sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==", 1622 | "dev": true, 1623 | "dependencies": { 1624 | "side-channel": "^1.0.6" 1625 | }, 1626 | "engines": { 1627 | "node": ">=0.6" 1628 | }, 1629 | "funding": { 1630 | "url": "https://github.com/sponsors/ljharb" 1631 | } 1632 | }, 1633 | "node_modules/raw-body": { 1634 | "version": "2.5.2", 1635 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1636 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1637 | "dev": true, 1638 | "dependencies": { 1639 | "bytes": "3.1.2", 1640 | "http-errors": "2.0.0", 1641 | "iconv-lite": "0.4.24", 1642 | "unpipe": "1.0.0" 1643 | }, 1644 | "engines": { 1645 | "node": ">= 0.8" 1646 | } 1647 | }, 1648 | "node_modules/raw-body/node_modules/http-errors": { 1649 | "version": "2.0.0", 1650 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1651 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1652 | "dev": true, 1653 | "dependencies": { 1654 | "depd": "2.0.0", 1655 | "inherits": "2.0.4", 1656 | "setprototypeof": "1.2.0", 1657 | "statuses": "2.0.1", 1658 | "toidentifier": "1.0.1" 1659 | }, 1660 | "engines": { 1661 | "node": ">= 0.8" 1662 | } 1663 | }, 1664 | "node_modules/raw-body/node_modules/statuses": { 1665 | "version": "2.0.1", 1666 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1667 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1668 | "dev": true, 1669 | "engines": { 1670 | "node": ">= 0.8" 1671 | } 1672 | }, 1673 | "node_modules/readable-stream": { 1674 | "version": "2.3.8", 1675 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1676 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1677 | "dev": true, 1678 | "dependencies": { 1679 | "core-util-is": "~1.0.0", 1680 | "inherits": "~2.0.3", 1681 | "isarray": "~1.0.0", 1682 | "process-nextick-args": "~2.0.0", 1683 | "safe-buffer": "~5.1.1", 1684 | "string_decoder": "~1.1.1", 1685 | "util-deprecate": "~1.0.1" 1686 | } 1687 | }, 1688 | "node_modules/readable-stream/node_modules/safe-buffer": { 1689 | "version": "5.1.2", 1690 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1691 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1692 | "dev": true 1693 | }, 1694 | "node_modules/reduce-flatten": { 1695 | "version": "3.0.1", 1696 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-3.0.1.tgz", 1697 | "integrity": "sha512-bYo+97BmUUOzg09XwfkwALt4PQH1M5L0wzKerBt6WLm3Fhdd43mMS89HiT1B9pJIqko/6lWx3OnV4J9f2Kqp5Q==", 1698 | "dev": true, 1699 | "engines": { 1700 | "node": ">=8" 1701 | } 1702 | }, 1703 | "node_modules/resolve-path": { 1704 | "version": "1.4.0", 1705 | "resolved": "https://registry.npmjs.org/resolve-path/-/resolve-path-1.4.0.tgz", 1706 | "integrity": "sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==", 1707 | "dev": true, 1708 | "dependencies": { 1709 | "http-errors": "~1.6.2", 1710 | "path-is-absolute": "1.0.1" 1711 | }, 1712 | "engines": { 1713 | "node": ">= 0.8" 1714 | } 1715 | }, 1716 | "node_modules/resolve-path/node_modules/depd": { 1717 | "version": "1.1.2", 1718 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1719 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 1720 | "dev": true, 1721 | "engines": { 1722 | "node": ">= 0.6" 1723 | } 1724 | }, 1725 | "node_modules/resolve-path/node_modules/http-errors": { 1726 | "version": "1.6.3", 1727 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1728 | "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", 1729 | "dev": true, 1730 | "dependencies": { 1731 | "depd": "~1.1.2", 1732 | "inherits": "2.0.3", 1733 | "setprototypeof": "1.1.0", 1734 | "statuses": ">= 1.4.0 < 2" 1735 | }, 1736 | "engines": { 1737 | "node": ">= 0.6" 1738 | } 1739 | }, 1740 | "node_modules/resolve-path/node_modules/inherits": { 1741 | "version": "2.0.3", 1742 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1743 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", 1744 | "dev": true 1745 | }, 1746 | "node_modules/resolve-path/node_modules/setprototypeof": { 1747 | "version": "1.1.0", 1748 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1749 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", 1750 | "dev": true 1751 | }, 1752 | "node_modules/safe-buffer": { 1753 | "version": "5.2.1", 1754 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1755 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1756 | "dev": true, 1757 | "funding": [ 1758 | { 1759 | "type": "github", 1760 | "url": "https://github.com/sponsors/feross" 1761 | }, 1762 | { 1763 | "type": "patreon", 1764 | "url": "https://www.patreon.com/feross" 1765 | }, 1766 | { 1767 | "type": "consulting", 1768 | "url": "https://feross.org/support" 1769 | } 1770 | ] 1771 | }, 1772 | "node_modules/safe-regex-test": { 1773 | "version": "1.1.0", 1774 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", 1775 | "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", 1776 | "dev": true, 1777 | "dependencies": { 1778 | "call-bound": "^1.0.2", 1779 | "es-errors": "^1.3.0", 1780 | "is-regex": "^1.2.1" 1781 | }, 1782 | "engines": { 1783 | "node": ">= 0.4" 1784 | }, 1785 | "funding": { 1786 | "url": "https://github.com/sponsors/ljharb" 1787 | } 1788 | }, 1789 | "node_modules/safer-buffer": { 1790 | "version": "2.1.2", 1791 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1792 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1793 | "dev": true 1794 | }, 1795 | "node_modules/semver": { 1796 | "version": "6.3.1", 1797 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1798 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1799 | "dev": true, 1800 | "bin": { 1801 | "semver": "bin/semver.js" 1802 | } 1803 | }, 1804 | "node_modules/serve-index-75lb": { 1805 | "version": "2.0.1", 1806 | "resolved": "https://registry.npmjs.org/serve-index-75lb/-/serve-index-75lb-2.0.1.tgz", 1807 | "integrity": "sha512-/d9r8bqJlFQcwy0a0nb1KnWAA+Mno+V+VaoKocdkbW5aXKRQd/+4bfnRhQRQr6uEoYwTRJ4xgztOyCJvWcpBpQ==", 1808 | "dev": true, 1809 | "dependencies": { 1810 | "accepts": "~1.3.4", 1811 | "batch": "0.6.1", 1812 | "debug": "2.6.9", 1813 | "escape-html": "~1.0.3", 1814 | "http-errors": "~1.6.2", 1815 | "mime-types": "~2.1.18", 1816 | "parseurl": "~1.3.2" 1817 | }, 1818 | "engines": { 1819 | "node": ">= 0.8.0" 1820 | } 1821 | }, 1822 | "node_modules/serve-index-75lb/node_modules/debug": { 1823 | "version": "2.6.9", 1824 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1825 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1826 | "dev": true, 1827 | "dependencies": { 1828 | "ms": "2.0.0" 1829 | } 1830 | }, 1831 | "node_modules/serve-index-75lb/node_modules/depd": { 1832 | "version": "1.1.2", 1833 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 1834 | "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", 1835 | "dev": true, 1836 | "engines": { 1837 | "node": ">= 0.6" 1838 | } 1839 | }, 1840 | "node_modules/serve-index-75lb/node_modules/http-errors": { 1841 | "version": "1.6.3", 1842 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 1843 | "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", 1844 | "dev": true, 1845 | "dependencies": { 1846 | "depd": "~1.1.2", 1847 | "inherits": "2.0.3", 1848 | "setprototypeof": "1.1.0", 1849 | "statuses": ">= 1.4.0 < 2" 1850 | }, 1851 | "engines": { 1852 | "node": ">= 0.6" 1853 | } 1854 | }, 1855 | "node_modules/serve-index-75lb/node_modules/inherits": { 1856 | "version": "2.0.3", 1857 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1858 | "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", 1859 | "dev": true 1860 | }, 1861 | "node_modules/serve-index-75lb/node_modules/ms": { 1862 | "version": "2.0.0", 1863 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1864 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", 1865 | "dev": true 1866 | }, 1867 | "node_modules/serve-index-75lb/node_modules/setprototypeof": { 1868 | "version": "1.1.0", 1869 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1870 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", 1871 | "dev": true 1872 | }, 1873 | "node_modules/setprototypeof": { 1874 | "version": "1.2.0", 1875 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1876 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", 1877 | "dev": true 1878 | }, 1879 | "node_modules/side-channel": { 1880 | "version": "1.1.0", 1881 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", 1882 | "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", 1883 | "dev": true, 1884 | "dependencies": { 1885 | "es-errors": "^1.3.0", 1886 | "object-inspect": "^1.13.3", 1887 | "side-channel-list": "^1.0.0", 1888 | "side-channel-map": "^1.0.1", 1889 | "side-channel-weakmap": "^1.0.2" 1890 | }, 1891 | "engines": { 1892 | "node": ">= 0.4" 1893 | }, 1894 | "funding": { 1895 | "url": "https://github.com/sponsors/ljharb" 1896 | } 1897 | }, 1898 | "node_modules/side-channel-list": { 1899 | "version": "1.0.0", 1900 | "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", 1901 | "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", 1902 | "dev": true, 1903 | "dependencies": { 1904 | "es-errors": "^1.3.0", 1905 | "object-inspect": "^1.13.3" 1906 | }, 1907 | "engines": { 1908 | "node": ">= 0.4" 1909 | }, 1910 | "funding": { 1911 | "url": "https://github.com/sponsors/ljharb" 1912 | } 1913 | }, 1914 | "node_modules/side-channel-map": { 1915 | "version": "1.0.1", 1916 | "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", 1917 | "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", 1918 | "dev": true, 1919 | "dependencies": { 1920 | "call-bound": "^1.0.2", 1921 | "es-errors": "^1.3.0", 1922 | "get-intrinsic": "^1.2.5", 1923 | "object-inspect": "^1.13.3" 1924 | }, 1925 | "engines": { 1926 | "node": ">= 0.4" 1927 | }, 1928 | "funding": { 1929 | "url": "https://github.com/sponsors/ljharb" 1930 | } 1931 | }, 1932 | "node_modules/side-channel-weakmap": { 1933 | "version": "1.0.2", 1934 | "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", 1935 | "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", 1936 | "dev": true, 1937 | "dependencies": { 1938 | "call-bound": "^1.0.2", 1939 | "es-errors": "^1.3.0", 1940 | "get-intrinsic": "^1.2.5", 1941 | "object-inspect": "^1.13.3", 1942 | "side-channel-map": "^1.0.1" 1943 | }, 1944 | "engines": { 1945 | "node": ">= 0.4" 1946 | }, 1947 | "funding": { 1948 | "url": "https://github.com/sponsors/ljharb" 1949 | } 1950 | }, 1951 | "node_modules/statuses": { 1952 | "version": "1.5.0", 1953 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1954 | "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", 1955 | "dev": true, 1956 | "engines": { 1957 | "node": ">= 0.6" 1958 | } 1959 | }, 1960 | "node_modules/stream-log-stats": { 1961 | "version": "3.0.2", 1962 | "resolved": "https://registry.npmjs.org/stream-log-stats/-/stream-log-stats-3.0.2.tgz", 1963 | "integrity": "sha512-393j7aeF9iRdHvyANqEQU82UQmpw2CTxgsT83caefh+lOxavVLbVrw8Mr4zjXeZLh2+xeHZMKfVx4T0rJ/EchA==", 1964 | "dev": true, 1965 | "dependencies": { 1966 | "ansi-escape-sequences": "^5.1.2", 1967 | "byte-size": "^6.2.0", 1968 | "common-log-format": "^1.0.0", 1969 | "JSONStream": "^1.3.5", 1970 | "lodash.throttle": "^4.1.1", 1971 | "stream-via": "^1.0.4", 1972 | "table-layout": "~1.0.0" 1973 | }, 1974 | "bin": { 1975 | "log-stats": "bin/cli.js" 1976 | }, 1977 | "engines": { 1978 | "node": ">=8.0.0" 1979 | } 1980 | }, 1981 | "node_modules/stream-slice": { 1982 | "version": "0.1.2", 1983 | "resolved": "https://registry.npmjs.org/stream-slice/-/stream-slice-0.1.2.tgz", 1984 | "integrity": "sha512-QzQxpoacatkreL6jsxnVb7X5R/pGw9OUv2qWTYWnmLpg4NdN31snPy/f3TdQE1ZUXaThRvj1Zw4/OGg0ZkaLMA==", 1985 | "dev": true 1986 | }, 1987 | "node_modules/stream-via": { 1988 | "version": "1.0.4", 1989 | "resolved": "https://registry.npmjs.org/stream-via/-/stream-via-1.0.4.tgz", 1990 | "integrity": "sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==", 1991 | "dev": true, 1992 | "engines": { 1993 | "node": ">=0.10.0" 1994 | } 1995 | }, 1996 | "node_modules/streaming-json-stringify": { 1997 | "version": "3.1.0", 1998 | "resolved": "https://registry.npmjs.org/streaming-json-stringify/-/streaming-json-stringify-3.1.0.tgz", 1999 | "integrity": "sha512-axtfs3BDxAsrZ9swD163FBrXZ8dhJJp6kUI6C97TvUZG9RHKfbg9nFbXqEheFNOb3IYMEt2ag9F62sWLFUZ4ug==", 2000 | "dev": true, 2001 | "dependencies": { 2002 | "json-stringify-safe": "5", 2003 | "readable-stream": "2" 2004 | } 2005 | }, 2006 | "node_modules/string_decoder": { 2007 | "version": "1.1.1", 2008 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2009 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2010 | "dev": true, 2011 | "dependencies": { 2012 | "safe-buffer": "~5.1.0" 2013 | } 2014 | }, 2015 | "node_modules/string_decoder/node_modules/safe-buffer": { 2016 | "version": "5.1.2", 2017 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2018 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2019 | "dev": true 2020 | }, 2021 | "node_modules/supports-color": { 2022 | "version": "5.5.0", 2023 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2024 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2025 | "dev": true, 2026 | "dependencies": { 2027 | "has-flag": "^3.0.0" 2028 | }, 2029 | "engines": { 2030 | "node": ">=4" 2031 | } 2032 | }, 2033 | "node_modules/table-layout": { 2034 | "version": "1.0.2", 2035 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", 2036 | "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", 2037 | "dev": true, 2038 | "dependencies": { 2039 | "array-back": "^4.0.1", 2040 | "deep-extend": "~0.6.0", 2041 | "typical": "^5.2.0", 2042 | "wordwrapjs": "^4.0.0" 2043 | }, 2044 | "engines": { 2045 | "node": ">=8.0.0" 2046 | } 2047 | }, 2048 | "node_modules/table-layout/node_modules/typical": { 2049 | "version": "5.2.0", 2050 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 2051 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 2052 | "dev": true, 2053 | "engines": { 2054 | "node": ">=8" 2055 | } 2056 | }, 2057 | "node_modules/thenify": { 2058 | "version": "3.3.1", 2059 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 2060 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 2061 | "dev": true, 2062 | "dependencies": { 2063 | "any-promise": "^1.0.0" 2064 | } 2065 | }, 2066 | "node_modules/thenify-all": { 2067 | "version": "1.6.0", 2068 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 2069 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 2070 | "dev": true, 2071 | "dependencies": { 2072 | "thenify": ">= 3.1.0 < 4" 2073 | }, 2074 | "engines": { 2075 | "node": ">=0.8" 2076 | } 2077 | }, 2078 | "node_modules/through": { 2079 | "version": "2.3.8", 2080 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2081 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 2082 | "dev": true 2083 | }, 2084 | "node_modules/toidentifier": { 2085 | "version": "1.0.1", 2086 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2087 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2088 | "dev": true, 2089 | "engines": { 2090 | "node": ">=0.6" 2091 | } 2092 | }, 2093 | "node_modules/tsscmp": { 2094 | "version": "1.0.6", 2095 | "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", 2096 | "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==", 2097 | "dev": true, 2098 | "engines": { 2099 | "node": ">=0.6.x" 2100 | } 2101 | }, 2102 | "node_modules/type-is": { 2103 | "version": "1.6.18", 2104 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2105 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2106 | "dev": true, 2107 | "dependencies": { 2108 | "media-typer": "0.3.0", 2109 | "mime-types": "~2.1.24" 2110 | }, 2111 | "engines": { 2112 | "node": ">= 0.6" 2113 | } 2114 | }, 2115 | "node_modules/typical": { 2116 | "version": "6.0.1", 2117 | "resolved": "https://registry.npmjs.org/typical/-/typical-6.0.1.tgz", 2118 | "integrity": "sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==", 2119 | "dev": true, 2120 | "engines": { 2121 | "node": ">=10" 2122 | } 2123 | }, 2124 | "node_modules/unpipe": { 2125 | "version": "1.0.0", 2126 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2127 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2128 | "dev": true, 2129 | "engines": { 2130 | "node": ">= 0.8" 2131 | } 2132 | }, 2133 | "node_modules/util-deprecate": { 2134 | "version": "1.0.2", 2135 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2136 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2137 | "dev": true 2138 | }, 2139 | "node_modules/vary": { 2140 | "version": "1.1.2", 2141 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2142 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2143 | "dev": true, 2144 | "engines": { 2145 | "node": ">= 0.8" 2146 | } 2147 | }, 2148 | "node_modules/walk-back": { 2149 | "version": "4.0.0", 2150 | "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-4.0.0.tgz", 2151 | "integrity": "sha512-kudCA8PXVQfrqv2mFTG72vDBRi8BKWxGgFLwPpzHcpZnSwZk93WMwUDVcLHWNsnm+Y0AC4Vb6MUNRgaHfyV2DQ==", 2152 | "dev": true, 2153 | "engines": { 2154 | "node": ">=8.0.0" 2155 | } 2156 | }, 2157 | "node_modules/wordwrapjs": { 2158 | "version": "4.0.1", 2159 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", 2160 | "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", 2161 | "dev": true, 2162 | "dependencies": { 2163 | "reduce-flatten": "^2.0.0", 2164 | "typical": "^5.2.0" 2165 | }, 2166 | "engines": { 2167 | "node": ">=8.0.0" 2168 | } 2169 | }, 2170 | "node_modules/wordwrapjs/node_modules/reduce-flatten": { 2171 | "version": "2.0.0", 2172 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", 2173 | "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", 2174 | "dev": true, 2175 | "engines": { 2176 | "node": ">=6" 2177 | } 2178 | }, 2179 | "node_modules/wordwrapjs/node_modules/typical": { 2180 | "version": "5.2.0", 2181 | "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", 2182 | "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", 2183 | "dev": true, 2184 | "engines": { 2185 | "node": ">=8" 2186 | } 2187 | }, 2188 | "node_modules/ylru": { 2189 | "version": "1.4.0", 2190 | "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", 2191 | "integrity": "sha512-2OQsPNEmBCvXuFlIni/a+Rn+R2pHW9INm0BxXJ4hVDA8TirqMj+J/Rp9ItLatT/5pZqWwefVrTQcHpixsxnVlA==", 2192 | "dev": true, 2193 | "engines": { 2194 | "node": ">= 4.0.0" 2195 | } 2196 | } 2197 | } 2198 | } 2199 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "slides", 3 | "version": "1.1.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "serve": "ws --spa index.html" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "devDependencies": { 13 | "local-web-server": "~4.0.0" 14 | }, 15 | "dependencies": { 16 | "bootstrap": "^4.4.1", 17 | "codemirror": "^5.51.0" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /partials/css/p005.css: -------------------------------------------------------------------------------- 1 | /* This content is editable */ 2 | #feedback { 3 | font-size: 1.4em; 4 | } 5 | #selectable .ui-selecting { 6 | background: #FECA40; 7 | } 8 | #selectable .ui-selected { 9 | background: #F39814; 10 | color: white; 11 | } 12 | #selectable { 13 | list-style-type: none; 14 | margin: 0; padding: 0; 15 | width: 60%; 16 | } 17 | #selectable li { 18 | margin: 3px; padding: 0.4em; 19 | font-size: 1.4em; 20 | height: 18px; 21 | } -------------------------------------------------------------------------------- /partials/html/p005.html: -------------------------------------------------------------------------------- 1 | 2 |
    3 |
  1. Item 1
  2. 4 |
  3. Item 2
  4. 5 |
  5. Item 3
  6. 6 |
  7. Item 4
  8. 7 |
  9. Item 5
  10. 8 |
  11. Item 6
  12. 9 |
  13. Item 7
  14. 10 |
-------------------------------------------------------------------------------- /partials/intro/p005.html: -------------------------------------------------------------------------------- 1 |
2 |

JQuery UI Selectable

3 |

Enable a DOM element (or group of elements) 4 | to be selectable. Draw a box with your cursor to select items. 5 | Hold down the Ctrl key to make multiple 6 | non-adjacent selections.

7 |

8 | Source jQueru UI 9 |

10 |
11 |

Adding Console support

12 |

You can log to the console exactly as you would by calling console.log(), console.warn() or console.error(). 13 | The only constraint is that these methods only take a single argument.

14 |

see examples in the JS tab

15 |

To clear the console, just double click on it

16 |
-------------------------------------------------------------------------------- /partials/js/p005.js: -------------------------------------------------------------------------------- 1 | /* This content is editable */ 2 | $(function () {$( '#selectable' ).selectable()}) 3 | 4 | /* Console support examples */ 5 | console.log(["abc", true, null, {keys: []}]) 6 | 7 | console.log(' \u2705 Il fait beau \u2600 \u2600 \u2600 \u2600 \u2600 !!!') 8 | console.warn(' \u26A1 Le temps est nuageux \u2601 \u2601 \u2601 \u2601 \u2601 !!!') 9 | console.error(' \u26D4 Il pleut \u2614 \u2614 \u2614 \u2614 \u2614 \u2614 !!!') 10 | 11 | fetch('https://dummyjson.com/comments?limit=2') 12 | .then(res => res.json()) 13 | .then(r => r.comments) 14 | .then(r => r.map(({body, likes}) => ({body, likes}))) 15 | .then(console.log) 16 | 17 | console.log(12345.898) 18 | -------------------------------------------------------------------------------- /partials/pages/p000.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |

Simple slides par

4 | 5 | 6 |

Abdelaziz DAAIF

7 |
8 |
9 |

Enseignant Chercheur

10 |

ENSET Mohammedia

11 |

Université Hassan II, Casablanca

12 |
13 |
14 | Site Web 17 |
18 | -------------------------------------------------------------------------------- /partials/pages/p001.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |

Simple Slides

4 |

5 | Simple slides is a framework that makes it easy to create 6 | presentations. The goal is to provide an environment to explain web 7 | technologies. Simple Slides incorporates CodeMirror to 8 | allow editing of HTML, CSS and Javascript without conflicting with the the 9 | presentation content. 10 |

11 |

12 |

Navigation

13 |
14 |

Next slide: or Ctrl →

15 |

previous slide: or Ctrl ←

16 |
17 |
18 | -------------------------------------------------------------------------------- /partials/pages/p002.html: -------------------------------------------------------------------------------- 1 |
2 |

How Simple Slides works 1

3 | 4 | 8 | 12 | 15 | 20 | 21 |
-------------------------------------------------------------------------------- /partials/pages/p003.html: -------------------------------------------------------------------------------- 1 |
2 | 3 |
4 |
5 |

How Simple Slides works 2

6 | 7 |

8 | There are two types of slides : 9 |

    10 |
  • 11 | Simple slides having .page css class :

    12 |
    13 | the data-page attribute referse to p001.html page 14 | located by default at partials/pages folder. 15 |
  • 16 |
  • 17 | Example slides having .example css class :

    18 |
    23 | The above slide encapsulates p005.html, p005.css 24 | and p005.js that will be executed in an isolated environment. 25 |
  • 26 |
27 |

28 |
29 |
30 | File strucure 31 |
32 |
33 | 34 |
-------------------------------------------------------------------------------- /partials/pages/p004.html: -------------------------------------------------------------------------------- 1 |
2 |

Here is the content of this presentation

3 |

4 | 32 |

33 |
-------------------------------------------------------------------------------- /partials/pages/p005.html: -------------------------------------------------------------------------------- 1 |
2 |

Adding Mermaid support New

3 |
4 |
5 | 29 |
30 |
31 |
32 |         %%{ init : { 
33 |           "theme" : "default", 
34 |           "themeVariables": { "fontSize": "20px" }
35 |         }}%%
36 |         graph TB
37 |       A(Application React) --> B[Composants]
38 |       B --> C[Props]
39 |       B --> D[State]
40 |       B --> E[JSX]
41 |       E --> F[Virtual DOM]
42 |       F --> G[DOM réel]
43 |     
44 |       style A fill:#FFF, color:#000
45 |       style B fill:#005, color:#FFF
46 |       style C fill:#050, color:#FFF
47 |       style D fill:#050, color:#FFF
48 |       style E fill:#050, color:#FFF
49 |       style F fill:#500, color:#FFF
50 |       style G fill:#50F, color:#FFF
51 |       
52 |
53 |
54 | 55 | 56 |
57 | -------------------------------------------------------------------------------- /partials/pages/p0051.html: -------------------------------------------------------------------------------- 1 |
2 |

Adding Excalidraw support New

3 |
4 | Excalidraw support 5 |


6 |

Cliquez une puis une deuxième fois pour voir l'interface de Excalidraw en bas à gauche

7 |

Cliquez sur le même bouton pour le fermer.

8 |
9 |

Pour plus d'infos sur excalidraw voir le 10 | Site officiel

11 |
12 | -------------------------------------------------------------------------------- /partials/pages/p006.html: -------------------------------------------------------------------------------- 1 |
2 |

Additional Resources

3 |
    4 |
  • 5 | Github repository 6 |
  • 7 |
  • 8 |

    who am I

    9 |

    Abdelaziz DAAIF

    10 |

    Professor and Researcher at ENSET Mohammedia

    11 |

    Hassan II University of Casablanca

    12 |
  • 13 |
  • 14 |

    Licence

    15 |

    MIT

    16 |
  • 17 |
18 |
-------------------------------------------------------------------------------- /templates.html: -------------------------------------------------------------------------------- 1 | 45 | 46 | 63 |
64 |
65 |
72 |
73 |
74 |
75 | 76 |
77 | 82 | 87 | 88 | 89 | 90 | 91 | 92 | 93 |
94 | 102 | 103 |
--------------------------------------------------------------------------------