@vue-skuilder/standalone-ui 0.1.35 → 0.1.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{TagViewer-BPkaxyIU.js → TagViewer-DYPKSc3Z.js} +2 -2
- package/dist/assets/{TagViewer-BPkaxyIU.js.map → TagViewer-DYPKSc3Z.js.map} +1 -1
- package/dist/assets/common-ui.es-3rfUYt9S.js +1 -0
- package/dist/assets/{common-ui.es-DxZNthuJ.js → common-ui.es-DfgaTZ4z.js} +4 -4
- package/dist/assets/{common-ui.es-DxZNthuJ.js.map → common-ui.es-DfgaTZ4z.js.map} +1 -1
- package/dist/assets/{dist-BC_KquM-.js → dist-BcZ1gsNX.js} +33 -11
- package/dist/assets/dist-BcZ1gsNX.js.map +1 -0
- package/dist/assets/index-CwbD9tGY.css +1 -0
- package/dist/assets/{index-C6NB1IPv.js → index-e8XolFvR.js} +5 -5
- package/dist/assets/index-e8XolFvR.js.map +1 -0
- package/dist/index.html +4 -4
- package/dist-lib/assets/index.css +1 -1
- package/dist-lib/{common-ui.es-BndKNv1Z.js → common-ui.es-B8Tew0sr.js} +3 -3
- package/dist-lib/{common-ui.es-BndKNv1Z.js.map → common-ui.es-B8Tew0sr.js.map} +1 -1
- package/dist-lib/{common-ui.es-CXj4fGMG.js → common-ui.es-Be_EI6up.js} +2 -2
- package/dist-lib/{dist-D3TZHmH5.js → dist-BP0_sJdJ.js} +144 -34
- package/dist-lib/dist-BP0_sJdJ.js.map +1 -0
- package/dist-lib/questions.cjs.js +37 -15
- package/dist-lib/questions.cjs.js.map +1 -1
- package/dist-lib/questions.mjs +3 -3
- package/dist-lib/questions.mjs.map +1 -1
- package/package.json +6 -6
- package/dist/assets/common-ui.es-CWLWg2GC.js +0 -1
- package/dist/assets/dist-BC_KquM-.js.map +0 -1
- package/dist/assets/index-C6NB1IPv.js.map +0 -1
- package/dist/assets/index-DEb1MxOC.css +0 -1
- package/dist-lib/dist-D3TZHmH5.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
(function(t,c){typeof exports==`object`&&typeof module<`u`?c(exports):typeof define==`function`&&define.amd?define([`exports`],c):(t=typeof globalThis<`u`?globalThis:t||self,c(t.VueSkuilderStandaloneQuestions={}))})(this,function(exports){var __vite_style__=document.createElement(`style`);__vite_style__.textContent=`.ti-tag-input[data-v-a3408643]{color:inherit;width:100%;line-height:inherit;background-color:#0000;border:none;margin:0;padding:0;display:flex;position:absolute;top:0}.ti-tag-input[data-v-a3408643]::-ms-clear{display:none}input[data-v-a3408643]:focus{outline:none}input[disabled][data-v-a3408643]{background-color:#0000}@font-face{font-family:icomoon;src:url(data:application/vnd.ms-fontobject;base64,aAUAAMQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUdPJHwAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxIFrAAAALwAAABgY21hcBdW0okAAAEcAAAAVGdhc3AAAAAQAAABcAAAAAhnbHlmpZ+jMAAAAXgAAAD8aGVhZA/FmAgAAAJ0AAAANmhoZWEHgAPIAAACrAAAACRobXR4EgABvgAAAtAAAAAcbG9jYQCSAOIAAALsAAAAEG1heHAACQAfAAAC/AAAACBuYW1lmUoJ+wAAAxwAAAGGcG9zdAADAAAAAASkAAAAIAADA4ABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOkCA8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABAA4AAAACgAIAAIAAgABACDpAv/9//8AAAAAACDpAP/9//8AAf/jFwQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAVgEBA74CgQAcAAABMhceARcWFwcmJy4BJyYjIgYHFyERFzY3PgE3NgIWSkNDbykpF2QQIB9VMzQ5P3AtnP6AmB0iIkspKAJVFxhSODlCIDMrKz4REislmgGAmhkVFBwICAABANYAgQMqAtUACwAAAQcXBycHJzcnNxc3Ayru7jzu7jzu7jzu7gKZ7u487u487u487u4AAQCSAIEDgAK9AAUAACUBFwEnNwGAAcQ8/gDuPPkBxDz+AO48AAAAAAEAAAAAAAAfydNRXw889QALBAAAAAAA1nUqGwAAAADWdSobAAAAAAO+AtUAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA74AAQAAAAAAAAAAAAAAAAAAAAcEAAAAAAAAAAAAAAACAAAABAAAVgQAANYEAACSAAAAAAAKABQAHgBQAGoAfgABAAAABwAdAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==);src:url(data:application/vnd.ms-fontobject;base64,aAUAAMQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUdPJHwAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxIFrAAAALwAAABgY21hcBdW0okAAAEcAAAAVGdhc3AAAAAQAAABcAAAAAhnbHlmpZ+jMAAAAXgAAAD8aGVhZA/FmAgAAAJ0AAAANmhoZWEHgAPIAAACrAAAACRobXR4EgABvgAAAtAAAAAcbG9jYQCSAOIAAALsAAAAEG1heHAACQAfAAAC/AAAACBuYW1lmUoJ+wAAAxwAAAGGcG9zdAADAAAAAASkAAAAIAADA4ABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOkCA8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABAA4AAAACgAIAAIAAgABACDpAv/9//8AAAAAACDpAP/9//8AAf/jFwQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAVgEBA74CgQAcAAABMhceARcWFwcmJy4BJyYjIgYHFyERFzY3PgE3NgIWSkNDbykpF2QQIB9VMzQ5P3AtnP6AmB0iIkspKAJVFxhSODlCIDMrKz4REislmgGAmhkVFBwICAABANYAgQMqAtUACwAAAQcXBycHJzcnNxc3Ayru7jzu7jzu7jzu7gKZ7u487u487u487u4AAQCSAIEDgAK9AAUAACUBFwEnNwGAAcQ8/gDuPPkBxDz+AO48AAAAAAEAAAAAAAAfydNRXw889QALBAAAAAAA1nUqGwAAAADWdSobAAAAAAO+AtUAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA74AAQAAAAAAAAAAAAAAAAAAAAcEAAAAAAAAAAAAAAACAAAABAAAVgQAANYEAACSAAAAAAAKABQAHgBQAGoAfgABAAAABwAdAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==)format("embedded-opentype"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBawAAAC8AAAAYGNtYXAXVtKJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZqWfozAAAAF4AAAA/GhlYWQPxZgIAAACdAAAADZoaGVhB4ADyAAAAqwAAAAkaG10eBIAAb4AAALQAAAAHGxvY2EAkgDiAAAC7AAAABBtYXhwAAkAHwAAAvwAAAAgbmFtZZlKCfsAAAMcAAABhnBvc3QAAwAAAAAEpAAAACAAAwOAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QL//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAFYBAQO+AoEAHAAAATIXHgEXFhcHJicuAScmIyIGBxchERc2Nz4BNzYCFkpDQ28pKRdkECAfVTM0OT9wLZz+gJgdIiJLKSgCVRcYUjg5QiAzKys+ERIrJZoBgJoZFRQcCAgAAQDWAIEDKgLVAAsAAAEHFwcnByc3JzcXNwMq7u487u487u487u4Cme7uPO7uPO7uPO7uAAEAkgCBA4ACvQAFAAAlARcBJzcBgAHEPP4A7jz5AcQ8/gDuPAAAAAABAAAAAAAAH8nTUV8PPPUACwQAAAAAANZ1KhsAAAAA1nUqGwAAAAADvgLVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAO+AAEAAAAAAAAAAAAAAAAAAAAHBAAAAAAAAAAAAAAAAgAAAAQAAFYEAADWBAAAkgAAAAAACgAUAB4AUABqAH4AAQAAAAcAHQABAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=)format("truetype"),url(data:font/woff;base64,d09GRgABAAAAAAUQAAsAAAAABMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIFrGNtYXAAAAFoAAAAVAAAAFQXVtKJZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAAPwAAAD8pZ+jMGhlYWQAAALAAAAANgAAADYPxZgIaGhlYQAAAvgAAAAkAAAAJAeAA8hobXR4AAADHAAAABwAAAAcEgABvmxvY2EAAAM4AAAAEAAAABAAkgDibWF4cAAAA0gAAAAgAAAAIAAJAB9uYW1lAAADaAAAAYYAAAGGmUoJ+3Bvc3QAAATwAAAAIAAAACAAAwAAAAMDgAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QIDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADgAAAAKAAgAAgACAAEAIOkC//3//wAAAAAAIOkA//3//wAB/+MXBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQBWAQEDvgKBABwAAAEyFx4BFxYXByYnLgEnJiMiBgcXIREXNjc+ATc2AhZKQ0NvKSkXZBAgH1UzNDk/cC2c/oCYHSIiSykoAlUXGFI4OUIgMysrPhESKyWaAYCaGRUUHAgIAAEA1gCBAyoC1QALAAABBxcHJwcnNyc3FzcDKu7uPO7uPO7uPO7uApnu7jzu7jzu7jzu7gABAJIAgQOAAr0ABQAAJQEXASc3AYABxDz+AO48+QHEPP4A7jwAAAAAAQAAAAAAAB/J01FfDzz1AAsEAAAAAADWdSobAAAAANZ1KhsAAAAAA74C1QAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADvgABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABWBAAA1gQAAJIAAAAAAAoAFAAeAFAAagB+AAEAAAAHAB0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)format("woff");font-weight:400;font-style:normal}[class^=ti-icon-][data-v-63864685],[class*=\\ ti-icon-][data-v-63864685]{speak:none;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;font-family:icomoon!important}.ti-icon-check[data-v-63864685]:before{content:""}.ti-icon-close[data-v-63864685]:before{content:""}.ti-icon-undo[data-v-63864685]:before{content:""}ul[data-v-63864685]{margin:0;padding:0;list-style-type:none}[data-v-63864685],[data-v-63864685]:before,[data-v-63864685]:after{box-sizing:border-box}input[data-v-63864685]:focus{outline:none}input[disabled][data-v-63864685]{background-color:#0000}.vue-tags-input[data-v-63864685]{background-color:#fff;max-width:450px;position:relative}div.vue-tags-input.disabled[data-v-63864685]{opacity:.5}div.vue-tags-input.disabled [data-v-63864685]{cursor:default}.ti-input[data-v-63864685]{border:1px solid #ccc;flex-wrap:wrap;padding:4px;display:flex}.ti-tags[data-v-63864685]{flex-wrap:wrap;width:100%;line-height:1em;display:flex}.ti-tag[data-v-63864685]{color:#fff;background-color:#5c6bc0;border-radius:2px;margin:2px;padding:3px 5px;font-size:.85em;display:flex}.ti-tag[data-v-63864685]:focus{outline:none}.ti-tag .ti-content[data-v-63864685]{align-items:center;display:flex}.ti-tag .ti-content .handle[data-v-63864685]{cursor:grab;font-weight:700}.ti-tag .ti-content .handle[data-v-63864685]:active{cursor:grabbing}.ti-tag .ti-tag-center[data-v-63864685]{position:relative}.ti-tag span[data-v-63864685]{line-height:.85em}.ti-tag span.ti-hidden[data-v-63864685]{visibility:hidden;white-space:pre;height:0;padding-left:14px}.ti-tag .ti-actions[data-v-63864685]{align-items:center;margin-left:2px;font-size:1.15em;display:flex}.ti-tag .ti-actions i[data-v-63864685]{cursor:pointer}.ti-tag[data-v-63864685]:last-child{margin-right:4px}.ti-tag.ti-invalid[data-v-63864685],.ti-tag.ti-tag.ti-deletion-mark[data-v-63864685]{background-color:#e54d42}.ti-tag.ghost-tag[data-v-63864685]{opacity:.5;background:#f6ff72;border:1px solid #b6b6b6}.ti-tag.drag-tag[data-v-63864685]{opacity:.8;background:#fff}.ti-new-tag-input-wrapper[data-v-63864685]{flex:1 0 auto;margin:2px;padding:3px 5px;font-size:.85em;display:flex}.ti-new-tag-input-wrapper input[data-v-63864685]{border:none;flex:1 0 auto;min-width:100px;margin:0;padding:0}.ti-new-tag-input[data-v-63864685]{line-height:initial}.ti-autocomplete[data-v-63864685]{z-index:20;background-color:#fff;border:1px solid #ccc;border-top:none;width:100%;position:absolute}.ti-item>div[data-v-63864685]{cursor:pointer;width:100%;padding:3px 6px}.ti-selected-item[data-v-63864685]{color:#fff;background-color:#5c6bc0}
|
|
1
|
+
(function(t,c){typeof exports==`object`&&typeof module<`u`?c(exports):typeof define==`function`&&define.amd?define([`exports`],c):(t=typeof globalThis<`u`?globalThis:t||self,c(t.VueSkuilderStandaloneQuestions={}))})(this,function(exports){var __vite_style__=document.createElement(`style`);__vite_style__.textContent=`.ti-tag-input[data-v-a3408643]{color:inherit;width:100%;line-height:inherit;background-color:#0000;border:none;margin:0;padding:0;display:flex;position:absolute;top:0}.ti-tag-input[data-v-a3408643]::-ms-clear{display:none}input[data-v-a3408643]:focus{outline:none}input[disabled][data-v-a3408643]{background-color:#0000}@font-face{font-family:icomoon;src:url(data:application/vnd.ms-fontobject;base64,aAUAAMQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUdPJHwAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxIFrAAAALwAAABgY21hcBdW0okAAAEcAAAAVGdhc3AAAAAQAAABcAAAAAhnbHlmpZ+jMAAAAXgAAAD8aGVhZA/FmAgAAAJ0AAAANmhoZWEHgAPIAAACrAAAACRobXR4EgABvgAAAtAAAAAcbG9jYQCSAOIAAALsAAAAEG1heHAACQAfAAAC/AAAACBuYW1lmUoJ+wAAAxwAAAGGcG9zdAADAAAAAASkAAAAIAADA4ABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOkCA8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABAA4AAAACgAIAAIAAgABACDpAv/9//8AAAAAACDpAP/9//8AAf/jFwQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAVgEBA74CgQAcAAABMhceARcWFwcmJy4BJyYjIgYHFyERFzY3PgE3NgIWSkNDbykpF2QQIB9VMzQ5P3AtnP6AmB0iIkspKAJVFxhSODlCIDMrKz4REislmgGAmhkVFBwICAABANYAgQMqAtUACwAAAQcXBycHJzcnNxc3Ayru7jzu7jzu7jzu7gKZ7u487u487u487u4AAQCSAIEDgAK9AAUAACUBFwEnNwGAAcQ8/gDuPPkBxDz+AO48AAAAAAEAAAAAAAAfydNRXw889QALBAAAAAAA1nUqGwAAAADWdSobAAAAAAO+AtUAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA74AAQAAAAAAAAAAAAAAAAAAAAcEAAAAAAAAAAAAAAACAAAABAAAVgQAANYEAACSAAAAAAAKABQAHgBQAGoAfgABAAAABwAdAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==);src:url(data:application/vnd.ms-fontobject;base64,aAUAAMQEAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAUdPJHwAAAAAAAAAAAAAAAAAAAAAAAA4AaQBjAG8AbQBvAG8AbgAAAA4AUgBlAGcAdQBsAGEAcgAAABYAVgBlAHIAcwBpAG8AbgAgADEALgAwAAAADgBpAGMAbwBtAG8AbwBuAAAAAAAAAQAAAAsAgAADADBPUy8yDxIFrAAAALwAAABgY21hcBdW0okAAAEcAAAAVGdhc3AAAAAQAAABcAAAAAhnbHlmpZ+jMAAAAXgAAAD8aGVhZA/FmAgAAAJ0AAAANmhoZWEHgAPIAAACrAAAACRobXR4EgABvgAAAtAAAAAcbG9jYQCSAOIAAALsAAAAEG1heHAACQAfAAAC/AAAACBuYW1lmUoJ+wAAAxwAAAGGcG9zdAADAAAAAASkAAAAIAADA4ABkAAFAAACmQLMAAAAjwKZAswAAAHrADMBCQAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOkCA8D/wABAA8AAQAAAAAEAAAAAAAAAAAAAACAAAAAAAAMAAAADAAAAHAABAAMAAAAcAAMAAQAAABwABAA4AAAACgAIAAIAAgABACDpAv/9//8AAAAAACDpAP/9//8AAf/jFwQAAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAVgEBA74CgQAcAAABMhceARcWFwcmJy4BJyYjIgYHFyERFzY3PgE3NgIWSkNDbykpF2QQIB9VMzQ5P3AtnP6AmB0iIkspKAJVFxhSODlCIDMrKz4REislmgGAmhkVFBwICAABANYAgQMqAtUACwAAAQcXBycHJzcnNxc3Ayru7jzu7jzu7jzu7gKZ7u487u487u487u4AAQCSAIEDgAK9AAUAACUBFwEnNwGAAcQ8/gDuPPkBxDz+AO48AAAAAAEAAAAAAAAfydNRXw889QALBAAAAAAA1nUqGwAAAADWdSobAAAAAAO+AtUAAAAIAAIAAAAAAAAAAQAAA8D/wAAABAAAAAAAA74AAQAAAAAAAAAAAAAAAAAAAAcEAAAAAAAAAAAAAAACAAAABAAAVgQAANYEAACSAAAAAAAKABQAHgBQAGoAfgABAAAABwAdAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEABwAAAAEAAAAAAAIABwBgAAEAAAAAAAMABwA2AAEAAAAAAAQABwB1AAEAAAAAAAUACwAVAAEAAAAAAAYABwBLAAEAAAAAAAoAGgCKAAMAAQQJAAEADgAHAAMAAQQJAAIADgBnAAMAAQQJAAMADgA9AAMAAQQJAAQADgB8AAMAAQQJAAUAFgAgAAMAAQQJAAYADgBSAAMAAQQJAAoANACkaWNvbW9vbgBpAGMAbwBtAG8AbwBuVmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwaWNvbW9vbgBpAGMAbwBtAG8AbwBuaWNvbW9vbgBpAGMAbwBtAG8AbwBuUmVndWxhcgBSAGUAZwB1AGwAYQByaWNvbW9vbgBpAGMAbwBtAG8AbwBuRm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==)format("embedded-opentype"),url(data:font/ttf;base64,AAEAAAALAIAAAwAwT1MvMg8SBawAAAC8AAAAYGNtYXAXVtKJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5ZqWfozAAAAF4AAAA/GhlYWQPxZgIAAACdAAAADZoaGVhB4ADyAAAAqwAAAAkaG10eBIAAb4AAALQAAAAHGxvY2EAkgDiAAAC7AAAABBtYXhwAAkAHwAAAvwAAAAgbmFtZZlKCfsAAAMcAAABhnBvc3QAAwAAAAAEpAAAACAAAwOAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADpAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6QL//f//AAAAAAAg6QD//f//AAH/4xcEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAFYBAQO+AoEAHAAAATIXHgEXFhcHJicuAScmIyIGBxchERc2Nz4BNzYCFkpDQ28pKRdkECAfVTM0OT9wLZz+gJgdIiJLKSgCVRcYUjg5QiAzKys+ERIrJZoBgJoZFRQcCAgAAQDWAIEDKgLVAAsAAAEHFwcnByc3JzcXNwMq7u487u487u487u4Cme7uPO7uPO7uPO7uAAEAkgCBA4ACvQAFAAAlARcBJzcBgAHEPP4A7jz5AcQ8/gDuPAAAAAABAAAAAAAAH8nTUV8PPPUACwQAAAAAANZ1KhsAAAAA1nUqGwAAAAADvgLVAAAACAACAAAAAAAAAAEAAAPA/8AAAAQAAAAAAAO+AAEAAAAAAAAAAAAAAAAAAAAHBAAAAAAAAAAAAAAAAgAAAAQAAFYEAADWBAAAkgAAAAAACgAUAB4AUABqAH4AAQAAAAcAHQABAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAcAAAABAAAAAAACAAcAYAABAAAAAAADAAcANgABAAAAAAAEAAcAdQABAAAAAAAFAAsAFQABAAAAAAAGAAcASwABAAAAAAAKABoAigADAAEECQABAA4ABwADAAEECQACAA4AZwADAAEECQADAA4APQADAAEECQAEAA4AfAADAAEECQAFABYAIAADAAEECQAGAA4AUgADAAEECQAKADQApGljb21vb24AaQBjAG8AbQBvAG8AblZlcnNpb24gMS4wAFYAZQByAHMAaQBvAG4AIAAxAC4AMGljb21vb24AaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AblJlZ3VsYXIAUgBlAGcAdQBsAGEAcmljb21vb24AaQBjAG8AbQBvAG8AbkZvbnQgZ2VuZXJhdGVkIGJ5IEljb01vb24uAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=)format("truetype"),url(data:font/woff;base64,d09GRgABAAAAAAUQAAsAAAAABMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDxIFrGNtYXAAAAFoAAAAVAAAAFQXVtKJZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAAPwAAAD8pZ+jMGhlYWQAAALAAAAANgAAADYPxZgIaGhlYQAAAvgAAAAkAAAAJAeAA8hobXR4AAADHAAAABwAAAAcEgABvmxvY2EAAAM4AAAAEAAAABAAkgDibWF4cAAAA0gAAAAgAAAAIAAJAB9uYW1lAAADaAAAAYYAAAGGmUoJ+3Bvc3QAAATwAAAAIAAAACAAAwAAAAMDgAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA6QIDwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADgAAAAKAAgAAgACAAEAIOkC//3//wAAAAAAIOkA//3//wAB/+MXBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQBWAQEDvgKBABwAAAEyFx4BFxYXByYnLgEnJiMiBgcXIREXNjc+ATc2AhZKQ0NvKSkXZBAgH1UzNDk/cC2c/oCYHSIiSykoAlUXGFI4OUIgMysrPhESKyWaAYCaGRUUHAgIAAEA1gCBAyoC1QALAAABBxcHJwcnNyc3FzcDKu7uPO7uPO7uPO7uApnu7jzu7jzu7jzu7gABAJIAgQOAAr0ABQAAJQEXASc3AYABxDz+AO48+QHEPP4A7jwAAAAAAQAAAAAAAB/J01FfDzz1AAsEAAAAAADWdSobAAAAANZ1KhsAAAAAA74C1QAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADvgABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABWBAAA1gQAAJIAAAAAAAoAFAAeAFAAagB+AAEAAAAHAB0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAHAAAAAQAAAAAAAgAHAGAAAQAAAAAAAwAHADYAAQAAAAAABAAHAHUAAQAAAAAABQALABUAAQAAAAAABgAHAEsAAQAAAAAACgAaAIoAAwABBAkAAQAOAAcAAwABBAkAAgAOAGcAAwABBAkAAwAOAD0AAwABBAkABAAOAHwAAwABBAkABQAWACAAAwABBAkABgAOAFIAAwABBAkACgA0AKRpY29tb29uAGkAYwBvAG0AbwBvAG5WZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADBpY29tb29uAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG5SZWd1bGFyAFIAZQBnAHUAbABhAHJpY29tb29uAGkAYwBvAG0AbwBvAG5Gb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA)format("woff");font-weight:400;font-style:normal}[class^=ti-icon-][data-v-63864685],[class*=\\ ti-icon-][data-v-63864685]{speak:none;font-variant:normal;text-transform:none;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-style:normal;font-weight:400;line-height:1;font-family:icomoon!important}.ti-icon-check[data-v-63864685]:before{content:""}.ti-icon-close[data-v-63864685]:before{content:""}.ti-icon-undo[data-v-63864685]:before{content:""}ul[data-v-63864685]{margin:0;padding:0;list-style-type:none}[data-v-63864685],[data-v-63864685]:before,[data-v-63864685]:after{box-sizing:border-box}input[data-v-63864685]:focus{outline:none}input[disabled][data-v-63864685]{background-color:#0000}.vue-tags-input[data-v-63864685]{background-color:#fff;max-width:450px;position:relative}div.vue-tags-input.disabled[data-v-63864685]{opacity:.5}div.vue-tags-input.disabled [data-v-63864685]{cursor:default}.ti-input[data-v-63864685]{border:1px solid #ccc;flex-wrap:wrap;padding:4px;display:flex}.ti-tags[data-v-63864685]{flex-wrap:wrap;width:100%;line-height:1em;display:flex}.ti-tag[data-v-63864685]{color:#fff;background-color:#5c6bc0;border-radius:2px;margin:2px;padding:3px 5px;font-size:.85em;display:flex}.ti-tag[data-v-63864685]:focus{outline:none}.ti-tag .ti-content[data-v-63864685]{align-items:center;display:flex}.ti-tag .ti-content .handle[data-v-63864685]{cursor:grab;font-weight:700}.ti-tag .ti-content .handle[data-v-63864685]:active{cursor:grabbing}.ti-tag .ti-tag-center[data-v-63864685]{position:relative}.ti-tag span[data-v-63864685]{line-height:.85em}.ti-tag span.ti-hidden[data-v-63864685]{visibility:hidden;white-space:pre;height:0;padding-left:14px}.ti-tag .ti-actions[data-v-63864685]{align-items:center;margin-left:2px;font-size:1.15em;display:flex}.ti-tag .ti-actions i[data-v-63864685]{cursor:pointer}.ti-tag[data-v-63864685]:last-child{margin-right:4px}.ti-tag.ti-invalid[data-v-63864685],.ti-tag.ti-tag.ti-deletion-mark[data-v-63864685]{background-color:#e54d42}.ti-tag.ghost-tag[data-v-63864685]{opacity:.5;background:#f6ff72;border:1px solid #b6b6b6}.ti-tag.drag-tag[data-v-63864685]{opacity:.8;background:#fff}.ti-new-tag-input-wrapper[data-v-63864685]{flex:1 0 auto;margin:2px;padding:3px 5px;font-size:.85em;display:flex}.ti-new-tag-input-wrapper input[data-v-63864685]{border:none;flex:1 0 auto;min-width:100px;margin:0;padding:0}.ti-new-tag-input[data-v-63864685]{line-height:initial}.ti-autocomplete[data-v-63864685]{z-index:20;background-color:#fff;border:1px solid #ccc;border-top:none;width:100%;position:absolute}.ti-item>div[data-v-63864685]{cursor:pointer;width:100%;padding:3px 6px}.ti-selected-item[data-v-63864685]{color:#fff;background-color:#5c6bc0}canvas[data-v-f91502f8]{margin-left:auto;margin-right:auto;padding:10px;display:block}img[data-v-f91502f8]{max-width:100%;max-height:60vh;margin-left:auto;margin-right:auto;padding:10px;display:block}svg[data-v-2f79c080]{border:1px}@keyframes progress{0%{width:0%}to{width:100%}}.progressContainer{background-color:#eee;height:5px}#progress{background-color:#00f;width:100%;height:5px;animation-timing-function:linear}.hidden{opacity:0}.piano-range-container[data-v-4b232a8b]{margin:20px 0}.piano-wrapper[data-v-4b232a8b]{width:100%;margin:10px 0;overflow-x:hidden}.piano-svg[data-v-4b232a8b]{width:100%;height:auto;display:block}.white-key[data-v-4b232a8b]{fill:#fff}.black-key[data-v-4b232a8b]{fill:#333}.white-key.active[data-v-4b232a8b]{fill:#e6f2ff}.black-key.active[data-v-4b232a8b]{fill:#1a1a1a}.range-marker[data-v-4b232a8b]{fill:#ff5252}.note-label[data-v-4b232a8b]{fill:#333;font-size:12px;font-weight:700}.save-button[data-v-6ee9020f]{opacity:1;transition:opacity .5s ease-out}.save-button.v-btn--disabled[data-v-6ee9020f]:not(.v-btn--loading){opacity:0}
|
|
2
2
|
/*$vite$:1*/`,document.head.appendChild(__vite_style__),Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var __create=Object.create,__defProp$1=Object.defineProperty,__name$2=(t,c)=>__defProp$1(t,`name`,{value:c,configurable:!0}),__getOwnPropDesc=Object.getOwnPropertyDescriptor,__getOwnPropNames$1=Object.getOwnPropertyNames,__getProtoOf=Object.getPrototypeOf,__hasOwnProp=Object.prototype.hasOwnProperty,__esmMin=(t,c)=>()=>(t&&(c=t(t=0)),c),__commonJSMin$2=(t,c)=>()=>(c||t((c={exports:{}}).exports,c),c.exports),__exportAll$1=(t,c)=>{let u={};for(var d in t)__defProp$1(u,d,{get:t[d],enumerable:!0});return c||__defProp$1(u,Symbol.toStringTag,{value:`Module`}),u},__copyProps$2=(t,c,u,d)=>{if(c&&typeof c==`object`||typeof c==`function`)for(var m=__getOwnPropNames$1(c),g=0,b=m.length,S;g<b;g++)S=m[g],!__hasOwnProp.call(t,S)&&S!==u&&__defProp$1(t,S,{get:(t=>c[t]).bind(null,S),enumerable:!(d=__getOwnPropDesc(c,S))||d.enumerable});return t},__toESM$2=(t,c,u)=>(u=t==null?{}:__create(__getProtoOf(t)),__copyProps$2(c||!t||!t.__esModule?__defProp$1(u,`default`,{value:t,enumerable:!0}):u,t)),__toCommonJS=t=>__hasOwnProp.call(t,`module.exports`)?t[`module.exports`]:__copyProps$2(__defProp$1({},`__esModule`,{value:!0}),t),Status,ServerRequestType,init_wire_format=__esmMin((()=>{(function(t){t.awaitingResponse=`awaiting`,t.ok=`ok`,t.warning=`warning`,t.error=`error`})(Status||(Status={})),(function(t){t.CREATE_CLASSROOM=`CREATE_CLASSROOM`,t.DELETE_CLASSROOM=`DELETE_CLASSROOM`,t.JOIN_CLASSROOM=`JOIN_CLASSROOM`,t.LEAVE_CLASSROOM=`LEAVE_CLASSROOM`,t.CREATE_COURSE=`CREATE_COURSE`,t.DELETE_COURSE=`DELETE_COURSE`,t.ADD_COURSE_DATA=`ADD_COURSE_DATA`,t.PACK_COURSE=`PACK_COURSE`})(ServerRequestType||(ServerRequestType={}))})),DocType$1,init_db=__esmMin((()=>{(function(t){t.DISPLAYABLE_DATA=`DISPLAYABLE_DATA`,t.CARD=`CARD`,t.DATASHAPE=`DATASHAPE`,t.QUESTIONTYPE=`QUESTION`,t.VIEW=`VIEW`,t.PEDAGOGY=`PEDAGOGY`,t.CARDRECORD=`CARDRECORD`,t.SCHEDULED_CARD=`SCHEDULED_CARD`,t.TAG=`TAG`})(DocType$1||(DocType$1={}))})),NameSpacer,init_namespacer=__esmMin((()=>{NameSpacer=class{static getDataShapeDescriptor(t){let c=t.split(`.`);if(c.length!==3)throw Error(`shapeStr [${t}] not valid`);return{course:c[0],dataShape:c[2]}}static getDataShapeString(t){return`${t.course}.datashape.${t.dataShape}`}static getViewDescriptor(t){let c=t.split(`.`);if(c.length!==4)throw Error(`viewStr not valid`);return{course:c[0],questionType:c[2],view:c[3]}}static getViewString(t){return`${t.course}.question.${t.questionType}.${t.view}`}static getQuestionDescriptor(t){let c=t.split(`.`);if(c.length!==3)throw Error(`questionStr not valid`);return{course:c[0],questionType:c[2]}}static getQuestionString(t){return`${t.course}.question.${t.questionType}`}}})),FieldType,init_FieldType=__esmMin((()=>{(function(t){t.STRING=`string`,t.NUMBER=`number`,t.INT=`int`,t.IMAGE=`image`,t.MARKDOWN=`markdown`,t.AUDIO=`audio`,t.MIDI=`midi`,t.MEDIA_UPLOADS=`uploads`,t.CHESS_PUZZLE=`chess_puzzle`})(FieldType||(FieldType={}))}));function prepareNote55(t,c,u,d,m,g,b){let S=NameSpacer.getDataShapeString({course:c,dataShape:u.name}),C=u.fields.map(t=>({name:t.name,type:t.type})).filter(t=>t.type===FieldType.IMAGE||t.type===FieldType.AUDIO).concat([{name:`autoplayAudio`,type:FieldType.AUDIO}]);for(let t=1;t<11;t++)d[`audio-${t}`]&&C.push({name:`audio-${t}`,type:FieldType.AUDIO}),d[`image-${t}`]&&C.push({name:`image-${t}`,type:FieldType.IMAGE});if(d[`audio-11`])throw Error(`Too many audio attachments`);if(d[`image-11`])throw Error(`Too many image attachments`);let w={},T={course:t,data:[],docType:DocType$1.DISPLAYABLE_DATA,id_datashape:S};return m&&(T.author=m),C.forEach(t=>{w[t.name]=d[t.name]}),b&&Object.keys(b).forEach(t=>{w[t]=b[t]}),(C.length!==0||b&&Object.keys(b).length)&&(T._attachments=w),u.fields.filter(t=>t.type!==FieldType.IMAGE&&t.type!==FieldType.AUDIO).forEach(t=>{T.data.push({name:t.name,data:d[t.name]})}),T}function isTaggedPerformance(t){return typeof t==`object`&&!!t&&`_global`in t}var init_course_data=__esmMin((()=>{init_db(),init_namespacer(),init_FieldType()}));function _typeof$2(t){"@babel/helpers - typeof";return _typeof$2=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(t){return typeof t}:function(t){return t&&typeof Symbol==`function`&&t.constructor===Symbol&&t!==Symbol.prototype?`symbol`:typeof t},_typeof$2(t)}var init_typeof=__esmMin((()=>{__name$2(_typeof$2,`_typeof`)}));function toPrimitive$1(t,c){if(_typeof$2(t)!=`object`||!t)return t;var u=t[Symbol.toPrimitive];if(u!==void 0){var d=u.call(t,c||`default`);if(_typeof$2(d)!=`object`)return d;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(c===`string`?String:Number)(t)}var init_toPrimitive=__esmMin((()=>{init_typeof(),__name$2(toPrimitive$1,`toPrimitive`)}));function toPropertyKey$1(t){var c=toPrimitive$1(t,`string`);return _typeof$2(c)==`symbol`?c:c+``}var init_toPropertyKey=__esmMin((()=>{init_typeof(),init_toPrimitive(),__name$2(toPropertyKey$1,`toPropertyKey`)}));function _defineProperty$2(t,c,u){return(c=toPropertyKey$1(c))in t?Object.defineProperty(t,c,{value:u,enumerable:!0,configurable:!0,writable:!0}):t[c]=u,t}var init_defineProperty=__esmMin((()=>{init_toPropertyKey(),__name$2(_defineProperty$2,`_defineProperty`)}));function blankCourseElo(){return{global:{score:990+Math.round(Math.random()*20),count:0},tags:{},misc:{}}}function EloToNumber(t){return typeof t==`number`?t:isCourseElo(t)?t.global.score:t.score}function toCourseElo(t){if(typeof t==`string`)throw Error(`unsuitiably typed input to toCourseElo`);return typeof t==`number`?{global:{score:t,count:0},misc:{},tags:{}}:isCourseElo(t)?t:t===void 0?{global:{score:995+Math.random()*10,count:0},tags:{},misc:{}}:{global:t,tags:{},misc:{}}}function isCourseElo(t){return!t||typeof t!=`object`?!1:`global`in t&&`tags`in t}function adjustCourseScores(t,c,u,d){if(u<0||u>1)throw Error(`ELO performance rating must be between 0 and 1 - received ${u}`);let m=toCourseElo(t),g=toCourseElo(c);(d==null||!d.globalOnly)&&Object.keys(g.tags).forEach(t=>{let c=adjustScores(m.tags[t]?m.tags[t]:{count:0,score:m.global.score},g.tags[t],u);m.tags[t]=c.userElo,g.tags[t]=c.cardElo});let b=adjustScores(m.global,g.global,u);return m.global=b.userElo,g.global=b.cardElo,{userElo:m,cardElo:g}}function kForCount(t){let c=16;return 16+48/(1+t/10)}function adjustScores(t,c,u){if(u<0||u>1)throw Error(`ELO performance rating must be between 0 and 1 - received ${u}`);let d=new EloRanker(kForCount(t.count)),m=new EloRanker(kForCount(c.count)),g=d.getExpected(t.score,c.score),b=d.updateRating(g,u,t.score),S=m.updateRating(1-g,1-u,c.score);return{userElo:{score:b,count:t.count+1},cardElo:{score:S,count:c.count+1}}}function adjustCourseScoresPerTag(t,c,u){let d=u._global;if(d<0||d>1)throw Error(`ELO _global score must be between 0 and 1 - received ${d}`);let m=toCourseElo(t),g=toCourseElo(c);for(let[t,c]of Object.entries(u)){if(t===`_global`)continue;if(c===null){m.tags[t]=m.tags[t]??{count:0,score:-1},m.tags[t]={...m.tags[t],count:m.tags[t].count+1,score:-1};continue}if(typeof c!=`number`||c<0||c>1)throw Error(`ELO tag score for '${t}' must be between 0 and 1 - received ${c}`);let u=m.tags[t],d=adjustScores(u&&u.score!==-1?u:{count:u?.count??0,score:m.global.score},g.tags[t]??{count:0,score:g.global.score},c);m.tags[t]=d.userElo,g.tags[t]=d.cardElo}let b=adjustScores(m.global,g.global,d);return m.global=b.userElo,g.global=b.cardElo,{userElo:m,cardElo:g}}var EloRanker,init_elo$1=__esmMin((()=>{init_defineProperty(),EloRanker=class{constructor(t=32){_defineProperty$2(this,`k`,void 0),this.k=t}setKFactor(t){this.k=t}getKFactor(){return this.k}getExpected(t,c){return 1/(1+10**((c-t)/400))}updateRating(t,c,u){return Math.round(u+this.k*(c-t))}}})),log$2,init_logshim=__esmMin((()=>{log$2=__name$2((...t)=>{console.log(...t)},`log`)})),init_validators=__esmMin((()=>{init_wire_format()})),init_fieldConverters=__esmMin((()=>{})),require___vite_browser_external=__commonJSMin$2(((t,c)=>{c.exports={}})),import___vite_browser_external$3,import___vite_browser_external$4,import___vite_browser_external$5,init_logger$1=__esmMin((()=>{__toESM$2(require___vite_browser_external(),1),__toESM$2(require___vite_browser_external(),1),__toESM$2(require___vite_browser_external(),1)})),init_cardParser=__esmMin((()=>{})),init_types$2=__esmMin((()=>{})),init_AnswerInterfaces=__esmMin((()=>{})),init_DataShape=__esmMin((()=>{})),init_FieldDefinition=__esmMin((()=>{})),init_Tagger=__esmMin((()=>{}));function emptyTagFilter(){return{include:[],exclude:[]}}function hasActiveFilter(t){return t?t.include.length>0||t.exclude.length>0:!1}var init_TagFilter=__esmMin((()=>{})),init_Validator=__esmMin((()=>{init_wire_format()}));function displayableDataToViewData(t){let c={};return t.data.forEach(t=>{c[t.name]=t.data}),t._attachments&&Object.getOwnPropertyNames(t._attachments).forEach(u=>{t._attachments&&(c[u]=t._attachments[u].data)}),c}var init_ViewData=__esmMin((()=>{})),init_interfaces$1=__esmMin((()=>{init_AnswerInterfaces(),init_DataShape(),init_FieldDefinition(),init_Tagger(),init_TagFilter(),init_Validator(),init_ViewData()})),DataShapeName,init_DataShapeNames=__esmMin((()=>{(function(t){t.BLANK=``,t.Basic=`Basic`,t.Blanks=`Blanks`,t.Default=`Default`,t.MATH_SingleDigitAddition=`SingleDigitAddition`,t.MATH_SingleDigitSubtraction=`SingleDigitSubtraction`,t.MATH_SingleDigitDivision=`SingleDigitDivision`,t.MATH_SingleDigitMultiplication=`SingleDigitMultiplication`,t.MATH_EqualityTest=`EqualityTest`,t.MATH_OneStepEquation=`OneStepEquation`,t.MATH_AngleCategorize=`AngleCategorize`,t.MATH_SupplimentaryAngles=`SupplimentaryAngles`,t.MATH_CountBy=`CountBy`,t.FRENCH_AudioParse=`AudioParse`,t.FRENCH_Vocab=`Vocab`,t.WORDWORK_Spelling=`WordWork_Spelling`,t.PIANO_Echo=`Piano_Echo`,t.PIANO_PlayNote=`Piano_PlayNote`,t.PITCH_chroma=`Pitch_chroma`,t.SIGHTSING_IdentifyKey=`SightSing_IdentifyKey`,t.CHESS_puzzle=`CHESS_puzzle`,t.CHESS_forks=`CHESS_forks`,t.TYPING_singleLetter=`TYPING_singleLetter`,t.TYPING_fallingLetters=`TYPING_fallingLetters`})(DataShapeName||(DataShapeName={}))})),init_enums=__esmMin((()=>{init_DataShapeNames(),init_FieldType()})),util,objectUtil,ZodParsedType,getParsedType,init_util$1=__esmMin((()=>{(function(t){t.assertEqual=t=>{};function assertIs(t){}t.assertIs=assertIs;function assertNever(t){throw Error()}t.assertNever=assertNever,t.arrayToEnum=t=>{let c={};for(let u of t)c[u]=u;return c},t.getValidEnumValues=c=>{let u=t.objectKeys(c).filter(t=>typeof c[c[t]]!=`number`),d={};for(let t of u)d[t]=c[t];return t.objectValues(d)},t.objectValues=c=>t.objectKeys(c).map(function(t){return c[t]}),t.objectKeys=typeof Object.keys==`function`?t=>Object.keys(t):t=>{let c=[];for(let u in t)Object.prototype.hasOwnProperty.call(t,u)&&c.push(u);return c},t.find=(t,c)=>{for(let u of t)if(c(u))return u},t.isInteger=typeof Number.isInteger==`function`?t=>Number.isInteger(t):t=>typeof t==`number`&&Number.isFinite(t)&&Math.floor(t)===t;function joinValues(t,c=` | `){return t.map(t=>typeof t==`string`?`'${t}'`:t).join(c)}t.joinValues=joinValues,t.jsonStringifyReplacer=(t,c)=>typeof c==`bigint`?c.toString():c})(util||(util={})),(function(t){t.mergeShapes=(t,c)=>({...t,...c})})(objectUtil||(objectUtil={})),ZodParsedType=util.arrayToEnum([`string`,`nan`,`number`,`integer`,`float`,`boolean`,`date`,`bigint`,`symbol`,`function`,`undefined`,`null`,`array`,`object`,`unknown`,`promise`,`void`,`never`,`map`,`set`]),getParsedType=t=>{switch(typeof t){case`undefined`:return ZodParsedType.undefined;case`string`:return ZodParsedType.string;case`number`:return Number.isNaN(t)?ZodParsedType.nan:ZodParsedType.number;case`boolean`:return ZodParsedType.boolean;case`function`:return ZodParsedType.function;case`bigint`:return ZodParsedType.bigint;case`symbol`:return ZodParsedType.symbol;case`object`:return Array.isArray(t)?ZodParsedType.array:t===null?ZodParsedType.null:t.then&&typeof t.then==`function`&&t.catch&&typeof t.catch==`function`?ZodParsedType.promise:typeof Map<`u`&&t instanceof Map?ZodParsedType.map:typeof Set<`u`&&t instanceof Set?ZodParsedType.set:typeof Date<`u`&&t instanceof Date?ZodParsedType.date:ZodParsedType.object;default:return ZodParsedType.unknown}}})),ZodIssueCode,ZodError,init_ZodError=__esmMin((()=>{init_util$1(),ZodIssueCode=util.arrayToEnum([`invalid_type`,`invalid_literal`,`custom`,`invalid_union`,`invalid_union_discriminator`,`invalid_enum_value`,`unrecognized_keys`,`invalid_arguments`,`invalid_return_type`,`invalid_date`,`invalid_string`,`too_small`,`too_big`,`invalid_intersection_types`,`not_multiple_of`,`not_finite`]),ZodError=class ZodError extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=t=>{this.issues=[...this.issues,t]},this.addIssues=(t=[])=>{this.issues=[...this.issues,...t]};let c=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,c):this.__proto__=c,this.name=`ZodError`,this.issues=t}format(t){let c=t||function(t){return t.message},u={_errors:[]},processError=t=>{for(let d of t.issues)if(d.code===`invalid_union`)d.unionErrors.map(processError);else if(d.code===`invalid_return_type`)processError(d.returnTypeError);else if(d.code===`invalid_arguments`)processError(d.argumentsError);else if(d.path.length===0)u._errors.push(c(d));else{let t=u,m=0;for(;m<d.path.length;){let u=d.path[m];m===d.path.length-1?(t[u]=t[u]||{_errors:[]},t[u]._errors.push(c(d))):t[u]=t[u]||{_errors:[]},t=t[u],m++}}};return processError(this),u}static assert(t){if(!(t instanceof ZodError))throw Error(`Not a ZodError: ${t}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,util.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(t=t=>t.message){let c={},u=[];for(let d of this.issues)if(d.path.length>0){let u=d.path[0];c[u]=c[u]||[],c[u].push(t(d))}else u.push(t(d));return{formErrors:u,fieldErrors:c}}get formErrors(){return this.flatten()}},ZodError.create=t=>new ZodError(t)})),errorMap,init_en=__esmMin((()=>{init_ZodError(),init_util$1(),errorMap=(t,c)=>{let u;switch(t.code){case ZodIssueCode.invalid_type:u=t.received===ZodParsedType.undefined?`Required`:`Expected ${t.expected}, received ${t.received}`;break;case ZodIssueCode.invalid_literal:u=`Invalid literal value, expected ${JSON.stringify(t.expected,util.jsonStringifyReplacer)}`;break;case ZodIssueCode.unrecognized_keys:u=`Unrecognized key(s) in object: ${util.joinValues(t.keys,`, `)}`;break;case ZodIssueCode.invalid_union:u=`Invalid input`;break;case ZodIssueCode.invalid_union_discriminator:u=`Invalid discriminator value. Expected ${util.joinValues(t.options)}`;break;case ZodIssueCode.invalid_enum_value:u=`Invalid enum value. Expected ${util.joinValues(t.options)}, received '${t.received}'`;break;case ZodIssueCode.invalid_arguments:u=`Invalid function arguments`;break;case ZodIssueCode.invalid_return_type:u=`Invalid function return type`;break;case ZodIssueCode.invalid_date:u=`Invalid date`;break;case ZodIssueCode.invalid_string:typeof t.validation==`object`?`includes`in t.validation?(u=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position==`number`&&(u=`${u} at one or more positions greater than or equal to ${t.validation.position}`)):`startsWith`in t.validation?u=`Invalid input: must start with "${t.validation.startsWith}"`:`endsWith`in t.validation?u=`Invalid input: must end with "${t.validation.endsWith}"`:util.assertNever(t.validation):u=t.validation===`regex`?`Invalid`:`Invalid ${t.validation}`;break;case ZodIssueCode.too_small:u=t.type===`array`?`Array must contain ${t.exact?`exactly`:t.inclusive?`at least`:`more than`} ${t.minimum} element(s)`:t.type===`string`?`String must contain ${t.exact?`exactly`:t.inclusive?`at least`:`over`} ${t.minimum} character(s)`:t.type===`number`||t.type===`bigint`?`Number must be ${t.exact?`exactly equal to `:t.inclusive?`greater than or equal to `:`greater than `}${t.minimum}`:t.type===`date`?`Date must be ${t.exact?`exactly equal to `:t.inclusive?`greater than or equal to `:`greater than `}${new Date(Number(t.minimum))}`:`Invalid input`;break;case ZodIssueCode.too_big:u=t.type===`array`?`Array must contain ${t.exact?`exactly`:t.inclusive?`at most`:`less than`} ${t.maximum} element(s)`:t.type===`string`?`String must contain ${t.exact?`exactly`:t.inclusive?`at most`:`under`} ${t.maximum} character(s)`:t.type===`number`?`Number must be ${t.exact?`exactly`:t.inclusive?`less than or equal to`:`less than`} ${t.maximum}`:t.type===`bigint`?`BigInt must be ${t.exact?`exactly`:t.inclusive?`less than or equal to`:`less than`} ${t.maximum}`:t.type===`date`?`Date must be ${t.exact?`exactly`:t.inclusive?`smaller than or equal to`:`smaller than`} ${new Date(Number(t.maximum))}`:`Invalid input`;break;case ZodIssueCode.custom:u=`Invalid input`;break;case ZodIssueCode.invalid_intersection_types:u=`Intersection results could not be merged`;break;case ZodIssueCode.not_multiple_of:u=`Number must be a multiple of ${t.multipleOf}`;break;case ZodIssueCode.not_finite:u=`Number must be finite`;break;default:u=c.defaultError,util.assertNever(t)}return{message:u}}}));function getErrorMap(){return overrideErrorMap}var overrideErrorMap,init_errors=__esmMin((()=>{init_en(),overrideErrorMap=errorMap}));function addIssueToContext(t,c){let u=getErrorMap(),d=makeIssue({issueData:c,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,u,u===errorMap?void 0:errorMap].filter(t=>!!t)});t.common.issues.push(d)}var makeIssue,ParseStatus,INVALID,DIRTY,OK,isAborted,isDirty$1,isValid$3,isAsync,init_parseUtil=__esmMin((()=>{init_errors(),init_en(),makeIssue=t=>{let{data:c,path:u,errorMaps:d,issueData:m}=t,g=[...u,...m.path||[]],b={...m,path:g};if(m.message!==void 0)return{...m,path:g,message:m.message};let S=``,C=d.filter(t=>!!t).slice().reverse();for(let t of C)S=t(b,{data:c,defaultError:S}).message;return{...m,path:g,message:S}},ParseStatus=class ParseStatus{constructor(){this.value=`valid`}dirty(){this.value===`valid`&&(this.value=`dirty`)}abort(){this.value!==`aborted`&&(this.value=`aborted`)}static mergeArray(t,c){let u=[];for(let d of c){if(d.status===`aborted`)return INVALID;d.status===`dirty`&&t.dirty(),u.push(d.value)}return{status:t.value,value:u}}static async mergeObjectAsync(t,c){let u=[];for(let t of c){let c=await t.key,d=await t.value;u.push({key:c,value:d})}return ParseStatus.mergeObjectSync(t,u)}static mergeObjectSync(t,c){let u={};for(let d of c){let{key:c,value:m}=d;if(c.status===`aborted`||m.status===`aborted`)return INVALID;c.status===`dirty`&&t.dirty(),m.status===`dirty`&&t.dirty(),c.value!==`__proto__`&&(m.value!==void 0||d.alwaysSet)&&(u[c.value]=m.value)}return{status:t.value,value:u}}},INVALID=Object.freeze({status:`aborted`}),DIRTY=t=>({status:`dirty`,value:t}),OK=t=>({status:`valid`,value:t}),isAborted=t=>t.status===`aborted`,isDirty$1=__name$2(t=>t.status===`dirty`,`isDirty`),isValid$3=__name$2(t=>t.status===`valid`,`isValid`),isAsync=t=>typeof Promise<`u`&&t instanceof Promise})),init_typeAliases=__esmMin((()=>{})),errorUtil,init_errorUtil=__esmMin((()=>{(function(t){t.errToObj=t=>typeof t==`string`?{message:t}:t||{},t.toString=t=>typeof t==`string`?t:t?.message})(errorUtil||(errorUtil={}))}));function processCreateParams(t){if(!t)return{};let{errorMap:c,invalid_type_error:u,required_error:d,description:m}=t;if(c&&(u||d))throw Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);if(c)return{errorMap:c,description:m};let customMap=(c,m)=>{let{message:g}=t;return c.code===`invalid_enum_value`?{message:g??m.defaultError}:m.data===void 0?{message:g??d??m.defaultError}:c.code===`invalid_type`?{message:g??u??m.defaultError}:{message:m.defaultError}};return{errorMap:customMap,description:m}}function timeRegexSource(t){let c=`[0-5]\\d`;t.precision?c=`${c}\\.\\d{${t.precision}}`:t.precision??(c=`${c}(\\.\\d+)?`);let u=t.precision?`+`:`?`;return`([01]\\d|2[0-3]):[0-5]\\d(:${c})${u}`}function timeRegex(t){return RegExp(`^${timeRegexSource(t)}$`)}function datetimeRegex(t){let c=`${dateRegexSource}T${timeRegexSource(t)}`,u=[];return u.push(t.local?`Z?`:`Z`),t.offset&&u.push(`([+-]\\d{2}:?\\d{2})`),c=`${c}(${u.join(`|`)})`,RegExp(`^${c}$`)}function isValidIP(t,c){return!!((c===`v4`||!c)&&ipv4Regex.test(t)||(c===`v6`||!c)&&ipv6Regex.test(t))}function isValidJWT(t,c){if(!jwtRegex.test(t))return!1;try{let[u]=t.split(`.`);if(!u)return!1;let d=u.replace(/-/g,`+`).replace(/_/g,`/`).padEnd(u.length+(4-u.length%4)%4,`=`),m=JSON.parse(atob(d));return!(typeof m!=`object`||!m||`typ`in m&&m?.typ!==`JWT`||!m.alg||c&&m.alg!==c)}catch{return!1}}function isValidCidr(t,c){return!!((c===`v4`||!c)&&ipv4CidrRegex.test(t)||(c===`v6`||!c)&&ipv6CidrRegex.test(t))}function floatSafeRemainder(t,c){let u=(t.toString().split(`.`)[1]||``).length,d=(c.toString().split(`.`)[1]||``).length,m=u>d?u:d;return Number.parseInt(t.toFixed(m).replace(`.`,``))%Number.parseInt(c.toFixed(m).replace(`.`,``))/10**m}function deepPartialify(t){if(t instanceof ZodObject){let c={};for(let u in t.shape){let d=t.shape[u];c[u]=ZodOptional.create(deepPartialify(d))}return new ZodObject({...t._def,shape:()=>c})}else if(t instanceof ZodArray)return new ZodArray({...t._def,type:deepPartialify(t.element)});else if(t instanceof ZodOptional)return ZodOptional.create(deepPartialify(t.unwrap()));else if(t instanceof ZodNullable)return ZodNullable.create(deepPartialify(t.unwrap()));else if(t instanceof ZodTuple)return ZodTuple.create(t.items.map(t=>deepPartialify(t)));else return t}function mergeValues(t,c){let u=getParsedType(t),d=getParsedType(c);if(t===c)return{valid:!0,data:t};if(u===ZodParsedType.object&&d===ZodParsedType.object){let u=util.objectKeys(c),d=util.objectKeys(t).filter(t=>u.indexOf(t)!==-1),m={...t,...c};for(let u of d){let d=mergeValues(t[u],c[u]);if(!d.valid)return{valid:!1};m[u]=d.data}return{valid:!0,data:m}}else if(u===ZodParsedType.array&&d===ZodParsedType.array){if(t.length!==c.length)return{valid:!1};let u=[];for(let d=0;d<t.length;d++){let m=t[d],g=c[d],b=mergeValues(m,g);if(!b.valid)return{valid:!1};u.push(b.data)}return{valid:!0,data:u}}else if(u===ZodParsedType.date&&d===ZodParsedType.date&&+t==+c)return{valid:!0,data:t};else return{valid:!1}}function createZodEnum(t,c){return new ZodEnum({values:t,typeName:ZodFirstPartyTypeKind.ZodEnum,...processCreateParams(c)})}var ParseInputLazyPath,handleResult,ZodType,cuidRegex,cuid2Regex,ulidRegex,uuidRegex,nanoidRegex,jwtRegex,durationRegex,emailRegex,_emojiRegex,emojiRegex$1,ipv4Regex,ipv4CidrRegex,ipv6Regex,ipv6CidrRegex,base64Regex,base64urlRegex,dateRegexSource,dateRegex,ZodString,ZodNumber,ZodBigInt,ZodBoolean,ZodDate,ZodSymbol,ZodUndefined,ZodNull,ZodAny,ZodUnknown,ZodNever,ZodVoid,ZodArray,ZodObject,ZodUnion,getDiscriminator,ZodDiscriminatedUnion,ZodIntersection,ZodTuple,ZodRecord,ZodMap,ZodSet,ZodFunction,ZodLazy,ZodLiteral,ZodEnum,ZodNativeEnum,ZodPromise,ZodEffects,ZodOptional,ZodNullable,ZodDefault,ZodCatch,ZodNaN,ZodBranded,ZodPipeline,ZodReadonly,late,ZodFirstPartyTypeKind,stringType,numberType,nanType,bigIntType,booleanType,dateType,symbolType,undefinedType,nullType,anyType,unknownType,neverType,voidType,arrayType,objectType,strictObjectType,unionType,discriminatedUnionType,intersectionType,tupleType,recordType,mapType,setType,functionType,lazyType,literalType,enumType,nativeEnumType,promiseType,effectsType,optionalType,nullableType,preprocessType,pipelineType,init_types$1=__esmMin((()=>{init_ZodError(),init_errors(),init_errorUtil(),init_parseUtil(),init_util$1(),ParseInputLazyPath=class{constructor(t,c,u,d){this._cachedPath=[],this.parent=t,this.data=c,this._path=u,this._key=d}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}},handleResult=(t,c)=>{if(isValid$3(c))return{success:!0,data:c.value};if(!t.common.issues.length)throw Error(`Validation failed but no issues detected.`);return{success:!1,get error(){return this._error||(this._error=new ZodError(t.common.issues)),this._error}}},ZodType=class{get description(){return this._def.description}_getType(t){return getParsedType(t.data)}_getOrReturnCtx(t,c){return c||{common:t.parent.common,data:t.data,parsedType:getParsedType(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new ParseStatus,ctx:{common:t.parent.common,data:t.data,parsedType:getParsedType(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){let c=this._parse(t);if(isAsync(c))throw Error(`Synchronous parse encountered promise.`);return c}_parseAsync(t){let c=this._parse(t);return Promise.resolve(c)}parse(t,c){let u=this.safeParse(t,c);if(u.success)return u.data;throw u.error}safeParse(t,c){let u={common:{issues:[],async:c?.async??!1,contextualErrorMap:c?.errorMap},path:c?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:getParsedType(t)};return handleResult(u,this._parseSync({data:t,path:u.path,parent:u}))}"~validate"(t){let c={common:{issues:[],async:!!this[`~standard`].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:getParsedType(t)};if(!this[`~standard`].async)try{let u=this._parseSync({data:t,path:[],parent:c});return isValid$3(u)?{value:u.value}:{issues:c.common.issues}}catch(t){t?.message?.toLowerCase()?.includes(`encountered`)&&(this[`~standard`].async=!0),c.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:c}).then(t=>isValid$3(t)?{value:t.value}:{issues:c.common.issues})}async parseAsync(t,c){let u=await this.safeParseAsync(t,c);if(u.success)return u.data;throw u.error}async safeParseAsync(t,c){let u={common:{issues:[],contextualErrorMap:c?.errorMap,async:!0},path:c?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:getParsedType(t)},d=this._parse({data:t,path:u.path,parent:u});return handleResult(u,await(isAsync(d)?d:Promise.resolve(d)))}refine(t,c){let getIssueProperties=t=>typeof c==`string`||c===void 0?{message:c}:typeof c==`function`?c(t):c;return this._refinement((c,u)=>{let d=t(c),setError=()=>u.addIssue({code:ZodIssueCode.custom,...getIssueProperties(c)});return typeof Promise<`u`&&d instanceof Promise?d.then(t=>t?!0:(setError(),!1)):d?!0:(setError(),!1)})}refinement(t,c){return this._refinement((u,d)=>t(u)?!0:(d.addIssue(typeof c==`function`?c(u,d):c),!1))}_refinement(t){return new ZodEffects({schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:`refinement`,refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this[`~standard`]={version:1,vendor:`zod`,validate:t=>this[`~validate`](t)}}optional(){return ZodOptional.create(this,this._def)}nullable(){return ZodNullable.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return ZodArray.create(this)}promise(){return ZodPromise.create(this,this._def)}or(t){return ZodUnion.create([this,t],this._def)}and(t){return ZodIntersection.create(this,t,this._def)}transform(t){return new ZodEffects({...processCreateParams(this._def),schema:this,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:{type:`transform`,transform:t}})}default(t){let c=typeof t==`function`?t:()=>t;return new ZodDefault({...processCreateParams(this._def),innerType:this,defaultValue:c,typeName:ZodFirstPartyTypeKind.ZodDefault})}brand(){return new ZodBranded({typeName:ZodFirstPartyTypeKind.ZodBranded,type:this,...processCreateParams(this._def)})}catch(t){let c=typeof t==`function`?t:()=>t;return new ZodCatch({...processCreateParams(this._def),innerType:this,catchValue:c,typeName:ZodFirstPartyTypeKind.ZodCatch})}describe(t){let c=this.constructor;return new c({...this._def,description:t})}pipe(t){return ZodPipeline.create(this,t)}readonly(){return ZodReadonly.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}},cuidRegex=/^c[^\s-]{8,}$/i,cuid2Regex=/^[0-9a-z]+$/,ulidRegex=/^[0-9A-HJKMNP-TV-Z]{26}$/i,uuidRegex=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,nanoidRegex=/^[a-z0-9_-]{21}$/i,jwtRegex=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,durationRegex=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,emailRegex=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,_emojiRegex=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,ipv4Regex=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4CidrRegex=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6Regex=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,ipv6CidrRegex=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64Regex=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64urlRegex=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,dateRegexSource=`((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`,dateRegex=RegExp(`^${dateRegexSource}$`),ZodString=class ZodString extends ZodType{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==ZodParsedType.string){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.string,received:c.parsedType}),INVALID}let c=new ParseStatus,u;for(let d of this._def.checks)if(d.kind===`min`)t.data.length<d.value&&(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.too_small,minimum:d.value,type:`string`,inclusive:!0,exact:!1,message:d.message}),c.dirty());else if(d.kind===`max`)t.data.length>d.value&&(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.too_big,maximum:d.value,type:`string`,inclusive:!0,exact:!1,message:d.message}),c.dirty());else if(d.kind===`length`){let m=t.data.length>d.value,g=t.data.length<d.value;(m||g)&&(u=this._getOrReturnCtx(t,u),m?addIssueToContext(u,{code:ZodIssueCode.too_big,maximum:d.value,type:`string`,inclusive:!0,exact:!0,message:d.message}):g&&addIssueToContext(u,{code:ZodIssueCode.too_small,minimum:d.value,type:`string`,inclusive:!0,exact:!0,message:d.message}),c.dirty())}else if(d.kind===`email`)emailRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`email`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`emoji`)emojiRegex$1||(emojiRegex$1=new RegExp(_emojiRegex,`u`)),emojiRegex$1.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`emoji`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`uuid`)uuidRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`uuid`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`nanoid`)nanoidRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`nanoid`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`cuid`)cuidRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`cuid`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`cuid2`)cuid2Regex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`cuid2`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`ulid`)ulidRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`ulid`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty());else if(d.kind===`url`)try{new URL(t.data)}catch{u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`url`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()}else d.kind===`regex`?(d.regex.lastIndex=0,d.regex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`regex`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty())):d.kind===`trim`?t.data=t.data.trim():d.kind===`includes`?t.data.includes(d.value,d.position)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:{includes:d.value,position:d.position},message:d.message}),c.dirty()):d.kind===`toLowerCase`?t.data=t.data.toLowerCase():d.kind===`toUpperCase`?t.data=t.data.toUpperCase():d.kind===`startsWith`?t.data.startsWith(d.value)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:{startsWith:d.value},message:d.message}),c.dirty()):d.kind===`endsWith`?t.data.endsWith(d.value)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:{endsWith:d.value},message:d.message}),c.dirty()):d.kind===`datetime`?datetimeRegex(d).test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:`datetime`,message:d.message}),c.dirty()):d.kind===`date`?dateRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:`date`,message:d.message}),c.dirty()):d.kind===`time`?timeRegex(d).test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.invalid_string,validation:`time`,message:d.message}),c.dirty()):d.kind===`duration`?durationRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`duration`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):d.kind===`ip`?isValidIP(t.data,d.version)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`ip`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):d.kind===`jwt`?isValidJWT(t.data,d.alg)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`jwt`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):d.kind===`cidr`?isValidCidr(t.data,d.version)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`cidr`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):d.kind===`base64`?base64Regex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`base64`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):d.kind===`base64url`?base64urlRegex.test(t.data)||(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{validation:`base64url`,code:ZodIssueCode.invalid_string,message:d.message}),c.dirty()):util.assertNever(d);return{status:c.value,value:t.data}}_regex(t,c,u){return this.refinement(c=>t.test(c),{validation:c,code:ZodIssueCode.invalid_string,...errorUtil.errToObj(u)})}_addCheck(t){return new ZodString({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:`email`,...errorUtil.errToObj(t)})}url(t){return this._addCheck({kind:`url`,...errorUtil.errToObj(t)})}emoji(t){return this._addCheck({kind:`emoji`,...errorUtil.errToObj(t)})}uuid(t){return this._addCheck({kind:`uuid`,...errorUtil.errToObj(t)})}nanoid(t){return this._addCheck({kind:`nanoid`,...errorUtil.errToObj(t)})}cuid(t){return this._addCheck({kind:`cuid`,...errorUtil.errToObj(t)})}cuid2(t){return this._addCheck({kind:`cuid2`,...errorUtil.errToObj(t)})}ulid(t){return this._addCheck({kind:`ulid`,...errorUtil.errToObj(t)})}base64(t){return this._addCheck({kind:`base64`,...errorUtil.errToObj(t)})}base64url(t){return this._addCheck({kind:`base64url`,...errorUtil.errToObj(t)})}jwt(t){return this._addCheck({kind:`jwt`,...errorUtil.errToObj(t)})}ip(t){return this._addCheck({kind:`ip`,...errorUtil.errToObj(t)})}cidr(t){return this._addCheck({kind:`cidr`,...errorUtil.errToObj(t)})}datetime(t){return typeof t==`string`?this._addCheck({kind:`datetime`,precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:`datetime`,precision:t?.precision===void 0?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...errorUtil.errToObj(t?.message)})}date(t){return this._addCheck({kind:`date`,message:t})}time(t){return typeof t==`string`?this._addCheck({kind:`time`,precision:null,message:t}):this._addCheck({kind:`time`,precision:t?.precision===void 0?null:t?.precision,...errorUtil.errToObj(t?.message)})}duration(t){return this._addCheck({kind:`duration`,...errorUtil.errToObj(t)})}regex(t,c){return this._addCheck({kind:`regex`,regex:t,...errorUtil.errToObj(c)})}includes(t,c){return this._addCheck({kind:`includes`,value:t,position:c?.position,...errorUtil.errToObj(c?.message)})}startsWith(t,c){return this._addCheck({kind:`startsWith`,value:t,...errorUtil.errToObj(c)})}endsWith(t,c){return this._addCheck({kind:`endsWith`,value:t,...errorUtil.errToObj(c)})}min(t,c){return this._addCheck({kind:`min`,value:t,...errorUtil.errToObj(c)})}max(t,c){return this._addCheck({kind:`max`,value:t,...errorUtil.errToObj(c)})}length(t,c){return this._addCheck({kind:`length`,value:t,...errorUtil.errToObj(c)})}nonempty(t){return this.min(1,errorUtil.errToObj(t))}trim(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:`trim`}]})}toLowerCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:`toLowerCase`}]})}toUpperCase(){return new ZodString({...this._def,checks:[...this._def.checks,{kind:`toUpperCase`}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind===`datetime`)}get isDate(){return!!this._def.checks.find(t=>t.kind===`date`)}get isTime(){return!!this._def.checks.find(t=>t.kind===`time`)}get isDuration(){return!!this._def.checks.find(t=>t.kind===`duration`)}get isEmail(){return!!this._def.checks.find(t=>t.kind===`email`)}get isURL(){return!!this._def.checks.find(t=>t.kind===`url`)}get isEmoji(){return!!this._def.checks.find(t=>t.kind===`emoji`)}get isUUID(){return!!this._def.checks.find(t=>t.kind===`uuid`)}get isNANOID(){return!!this._def.checks.find(t=>t.kind===`nanoid`)}get isCUID(){return!!this._def.checks.find(t=>t.kind===`cuid`)}get isCUID2(){return!!this._def.checks.find(t=>t.kind===`cuid2`)}get isULID(){return!!this._def.checks.find(t=>t.kind===`ulid`)}get isIP(){return!!this._def.checks.find(t=>t.kind===`ip`)}get isCIDR(){return!!this._def.checks.find(t=>t.kind===`cidr`)}get isBase64(){return!!this._def.checks.find(t=>t.kind===`base64`)}get isBase64url(){return!!this._def.checks.find(t=>t.kind===`base64url`)}get minLength(){let t=null;for(let c of this._def.checks)c.kind===`min`&&(t===null||c.value>t)&&(t=c.value);return t}get maxLength(){let t=null;for(let c of this._def.checks)c.kind===`max`&&(t===null||c.value<t)&&(t=c.value);return t}},ZodString.create=t=>new ZodString({checks:[],typeName:ZodFirstPartyTypeKind.ZodString,coerce:t?.coerce??!1,...processCreateParams(t)}),ZodNumber=class ZodNumber extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==ZodParsedType.number){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.number,received:c.parsedType}),INVALID}let c,u=new ParseStatus;for(let d of this._def.checks)d.kind===`int`?util.isInteger(t.data)||(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:`integer`,received:`float`,message:d.message}),u.dirty()):d.kind===`min`?(d.inclusive?t.data<d.value:t.data<=d.value)&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.too_small,minimum:d.value,type:`number`,inclusive:d.inclusive,exact:!1,message:d.message}),u.dirty()):d.kind===`max`?(d.inclusive?t.data>d.value:t.data>=d.value)&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.too_big,maximum:d.value,type:`number`,inclusive:d.inclusive,exact:!1,message:d.message}),u.dirty()):d.kind===`multipleOf`?floatSafeRemainder(t.data,d.value)!==0&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.not_multiple_of,multipleOf:d.value,message:d.message}),u.dirty()):d.kind===`finite`?Number.isFinite(t.data)||(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.not_finite,message:d.message}),u.dirty()):util.assertNever(d);return{status:u.value,value:t.data}}gte(t,c){return this.setLimit(`min`,t,!0,errorUtil.toString(c))}gt(t,c){return this.setLimit(`min`,t,!1,errorUtil.toString(c))}lte(t,c){return this.setLimit(`max`,t,!0,errorUtil.toString(c))}lt(t,c){return this.setLimit(`max`,t,!1,errorUtil.toString(c))}setLimit(t,c,u,d){return new ZodNumber({...this._def,checks:[...this._def.checks,{kind:t,value:c,inclusive:u,message:errorUtil.toString(d)}]})}_addCheck(t){return new ZodNumber({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:`int`,message:errorUtil.toString(t)})}positive(t){return this._addCheck({kind:`min`,value:0,inclusive:!1,message:errorUtil.toString(t)})}negative(t){return this._addCheck({kind:`max`,value:0,inclusive:!1,message:errorUtil.toString(t)})}nonpositive(t){return this._addCheck({kind:`max`,value:0,inclusive:!0,message:errorUtil.toString(t)})}nonnegative(t){return this._addCheck({kind:`min`,value:0,inclusive:!0,message:errorUtil.toString(t)})}multipleOf(t,c){return this._addCheck({kind:`multipleOf`,value:t,message:errorUtil.toString(c)})}finite(t){return this._addCheck({kind:`finite`,message:errorUtil.toString(t)})}safe(t){return this._addCheck({kind:`min`,inclusive:!0,value:-(2**53-1),message:errorUtil.toString(t)})._addCheck({kind:`max`,inclusive:!0,value:2**53-1,message:errorUtil.toString(t)})}get minValue(){let t=null;for(let c of this._def.checks)c.kind===`min`&&(t===null||c.value>t)&&(t=c.value);return t}get maxValue(){let t=null;for(let c of this._def.checks)c.kind===`max`&&(t===null||c.value<t)&&(t=c.value);return t}get isInt(){return!!this._def.checks.find(t=>t.kind===`int`||t.kind===`multipleOf`&&util.isInteger(t.value))}get isFinite(){let t=null,c=null;for(let u of this._def.checks)if(u.kind===`finite`||u.kind===`int`||u.kind===`multipleOf`)return!0;else u.kind===`min`?(c===null||u.value>c)&&(c=u.value):u.kind===`max`&&(t===null||u.value<t)&&(t=u.value);return Number.isFinite(c)&&Number.isFinite(t)}},ZodNumber.create=t=>new ZodNumber({checks:[],typeName:ZodFirstPartyTypeKind.ZodNumber,coerce:t?.coerce||!1,...processCreateParams(t)}),ZodBigInt=class ZodBigInt extends ZodType{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==ZodParsedType.bigint)return this._getInvalidInput(t);let c,u=new ParseStatus;for(let d of this._def.checks)d.kind===`min`?(d.inclusive?t.data<d.value:t.data<=d.value)&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.too_small,type:`bigint`,minimum:d.value,inclusive:d.inclusive,message:d.message}),u.dirty()):d.kind===`max`?(d.inclusive?t.data>d.value:t.data>=d.value)&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.too_big,type:`bigint`,maximum:d.value,inclusive:d.inclusive,message:d.message}),u.dirty()):d.kind===`multipleOf`?t.data%d.value!==BigInt(0)&&(c=this._getOrReturnCtx(t,c),addIssueToContext(c,{code:ZodIssueCode.not_multiple_of,multipleOf:d.value,message:d.message}),u.dirty()):util.assertNever(d);return{status:u.value,value:t.data}}_getInvalidInput(t){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.bigint,received:c.parsedType}),INVALID}gte(t,c){return this.setLimit(`min`,t,!0,errorUtil.toString(c))}gt(t,c){return this.setLimit(`min`,t,!1,errorUtil.toString(c))}lte(t,c){return this.setLimit(`max`,t,!0,errorUtil.toString(c))}lt(t,c){return this.setLimit(`max`,t,!1,errorUtil.toString(c))}setLimit(t,c,u,d){return new ZodBigInt({...this._def,checks:[...this._def.checks,{kind:t,value:c,inclusive:u,message:errorUtil.toString(d)}]})}_addCheck(t){return new ZodBigInt({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!1,message:errorUtil.toString(t)})}negative(t){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!1,message:errorUtil.toString(t)})}nonpositive(t){return this._addCheck({kind:`max`,value:BigInt(0),inclusive:!0,message:errorUtil.toString(t)})}nonnegative(t){return this._addCheck({kind:`min`,value:BigInt(0),inclusive:!0,message:errorUtil.toString(t)})}multipleOf(t,c){return this._addCheck({kind:`multipleOf`,value:t,message:errorUtil.toString(c)})}get minValue(){let t=null;for(let c of this._def.checks)c.kind===`min`&&(t===null||c.value>t)&&(t=c.value);return t}get maxValue(){let t=null;for(let c of this._def.checks)c.kind===`max`&&(t===null||c.value<t)&&(t=c.value);return t}},ZodBigInt.create=t=>new ZodBigInt({checks:[],typeName:ZodFirstPartyTypeKind.ZodBigInt,coerce:t?.coerce??!1,...processCreateParams(t)}),ZodBoolean=class extends ZodType{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==ZodParsedType.boolean){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.boolean,received:c.parsedType}),INVALID}return OK(t.data)}},ZodBoolean.create=t=>new ZodBoolean({typeName:ZodFirstPartyTypeKind.ZodBoolean,coerce:t?.coerce||!1,...processCreateParams(t)}),ZodDate=class ZodDate extends ZodType{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==ZodParsedType.date){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.date,received:c.parsedType}),INVALID}if(Number.isNaN(t.data.getTime()))return addIssueToContext(this._getOrReturnCtx(t),{code:ZodIssueCode.invalid_date}),INVALID;let c=new ParseStatus,u;for(let d of this._def.checks)d.kind===`min`?t.data.getTime()<d.value&&(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.too_small,message:d.message,inclusive:!0,exact:!1,minimum:d.value,type:`date`}),c.dirty()):d.kind===`max`?t.data.getTime()>d.value&&(u=this._getOrReturnCtx(t,u),addIssueToContext(u,{code:ZodIssueCode.too_big,message:d.message,inclusive:!0,exact:!1,maximum:d.value,type:`date`}),c.dirty()):util.assertNever(d);return{status:c.value,value:new Date(t.data.getTime())}}_addCheck(t){return new ZodDate({...this._def,checks:[...this._def.checks,t]})}min(t,c){return this._addCheck({kind:`min`,value:t.getTime(),message:errorUtil.toString(c)})}max(t,c){return this._addCheck({kind:`max`,value:t.getTime(),message:errorUtil.toString(c)})}get minDate(){let t=null;for(let c of this._def.checks)c.kind===`min`&&(t===null||c.value>t)&&(t=c.value);return t==null?null:new Date(t)}get maxDate(){let t=null;for(let c of this._def.checks)c.kind===`max`&&(t===null||c.value<t)&&(t=c.value);return t==null?null:new Date(t)}},ZodDate.create=t=>new ZodDate({checks:[],coerce:t?.coerce||!1,typeName:ZodFirstPartyTypeKind.ZodDate,...processCreateParams(t)}),ZodSymbol=class extends ZodType{_parse(t){if(this._getType(t)!==ZodParsedType.symbol){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.symbol,received:c.parsedType}),INVALID}return OK(t.data)}},ZodSymbol.create=t=>new ZodSymbol({typeName:ZodFirstPartyTypeKind.ZodSymbol,...processCreateParams(t)}),ZodUndefined=class extends ZodType{_parse(t){if(this._getType(t)!==ZodParsedType.undefined){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.undefined,received:c.parsedType}),INVALID}return OK(t.data)}},ZodUndefined.create=t=>new ZodUndefined({typeName:ZodFirstPartyTypeKind.ZodUndefined,...processCreateParams(t)}),ZodNull=class extends ZodType{_parse(t){if(this._getType(t)!==ZodParsedType.null){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.null,received:c.parsedType}),INVALID}return OK(t.data)}},ZodNull.create=t=>new ZodNull({typeName:ZodFirstPartyTypeKind.ZodNull,...processCreateParams(t)}),ZodAny=class extends ZodType{constructor(){super(...arguments),this._any=!0}_parse(t){return OK(t.data)}},ZodAny.create=t=>new ZodAny({typeName:ZodFirstPartyTypeKind.ZodAny,...processCreateParams(t)}),ZodUnknown=class extends ZodType{constructor(){super(...arguments),this._unknown=!0}_parse(t){return OK(t.data)}},ZodUnknown.create=t=>new ZodUnknown({typeName:ZodFirstPartyTypeKind.ZodUnknown,...processCreateParams(t)}),ZodNever=class extends ZodType{_parse(t){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.never,received:c.parsedType}),INVALID}},ZodNever.create=t=>new ZodNever({typeName:ZodFirstPartyTypeKind.ZodNever,...processCreateParams(t)}),ZodVoid=class extends ZodType{_parse(t){if(this._getType(t)!==ZodParsedType.undefined){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.void,received:c.parsedType}),INVALID}return OK(t.data)}},ZodVoid.create=t=>new ZodVoid({typeName:ZodFirstPartyTypeKind.ZodVoid,...processCreateParams(t)}),ZodArray=class ZodArray extends ZodType{_parse(t){let{ctx:c,status:u}=this._processInputParams(t),d=this._def;if(c.parsedType!==ZodParsedType.array)return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:c.parsedType}),INVALID;if(d.exactLength!==null){let t=c.data.length>d.exactLength.value,m=c.data.length<d.exactLength.value;(t||m)&&(addIssueToContext(c,{code:t?ZodIssueCode.too_big:ZodIssueCode.too_small,minimum:m?d.exactLength.value:void 0,maximum:t?d.exactLength.value:void 0,type:`array`,inclusive:!0,exact:!0,message:d.exactLength.message}),u.dirty())}if(d.minLength!==null&&c.data.length<d.minLength.value&&(addIssueToContext(c,{code:ZodIssueCode.too_small,minimum:d.minLength.value,type:`array`,inclusive:!0,exact:!1,message:d.minLength.message}),u.dirty()),d.maxLength!==null&&c.data.length>d.maxLength.value&&(addIssueToContext(c,{code:ZodIssueCode.too_big,maximum:d.maxLength.value,type:`array`,inclusive:!0,exact:!1,message:d.maxLength.message}),u.dirty()),c.common.async)return Promise.all([...c.data].map((t,u)=>d.type._parseAsync(new ParseInputLazyPath(c,t,c.path,u)))).then(t=>ParseStatus.mergeArray(u,t));let m=[...c.data].map((t,u)=>d.type._parseSync(new ParseInputLazyPath(c,t,c.path,u)));return ParseStatus.mergeArray(u,m)}get element(){return this._def.type}min(t,c){return new ZodArray({...this._def,minLength:{value:t,message:errorUtil.toString(c)}})}max(t,c){return new ZodArray({...this._def,maxLength:{value:t,message:errorUtil.toString(c)}})}length(t,c){return new ZodArray({...this._def,exactLength:{value:t,message:errorUtil.toString(c)}})}nonempty(t){return this.min(1,t)}},ZodArray.create=(t,c)=>new ZodArray({type:t,minLength:null,maxLength:null,exactLength:null,typeName:ZodFirstPartyTypeKind.ZodArray,...processCreateParams(c)}),ZodObject=class ZodObject extends ZodType{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;let t=this._def.shape();return this._cached={shape:t,keys:util.objectKeys(t)},this._cached}_parse(t){if(this._getType(t)!==ZodParsedType.object){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:c.parsedType}),INVALID}let{status:c,ctx:u}=this._processInputParams(t),{shape:d,keys:m}=this._getCached(),g=[];if(!(this._def.catchall instanceof ZodNever&&this._def.unknownKeys===`strip`))for(let t in u.data)m.includes(t)||g.push(t);let b=[];for(let t of m){let c=d[t],m=u.data[t];b.push({key:{status:`valid`,value:t},value:c._parse(new ParseInputLazyPath(u,m,u.path,t)),alwaysSet:t in u.data})}if(this._def.catchall instanceof ZodNever){let t=this._def.unknownKeys;if(t===`passthrough`)for(let t of g)b.push({key:{status:`valid`,value:t},value:{status:`valid`,value:u.data[t]}});else if(t===`strict`)g.length>0&&(addIssueToContext(u,{code:ZodIssueCode.unrecognized_keys,keys:g}),c.dirty());else if(t!==`strip`)throw Error(`Internal ZodObject error: invalid unknownKeys value.`)}else{let t=this._def.catchall;for(let c of g){let d=u.data[c];b.push({key:{status:`valid`,value:c},value:t._parse(new ParseInputLazyPath(u,d,u.path,c)),alwaysSet:c in u.data})}}return u.common.async?Promise.resolve().then(async()=>{let t=[];for(let c of b){let u=await c.key,d=await c.value;t.push({key:u,value:d,alwaysSet:c.alwaysSet})}return t}).then(t=>ParseStatus.mergeObjectSync(c,t)):ParseStatus.mergeObjectSync(c,b)}get shape(){return this._def.shape()}strict(t){return errorUtil.errToObj,new ZodObject({...this._def,unknownKeys:`strict`,...t===void 0?{}:{errorMap:(c,u)=>{let d=this._def.errorMap?.(c,u).message??u.defaultError;return c.code===`unrecognized_keys`?{message:errorUtil.errToObj(t).message??d}:{message:d}}}})}strip(){return new ZodObject({...this._def,unknownKeys:`strip`})}passthrough(){return new ZodObject({...this._def,unknownKeys:`passthrough`})}extend(t){return new ZodObject({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new ZodObject({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:ZodFirstPartyTypeKind.ZodObject})}setKey(t,c){return this.augment({[t]:c})}catchall(t){return new ZodObject({...this._def,catchall:t})}pick(t){let c={};for(let u of util.objectKeys(t))t[u]&&this.shape[u]&&(c[u]=this.shape[u]);return new ZodObject({...this._def,shape:()=>c})}omit(t){let c={};for(let u of util.objectKeys(this.shape))t[u]||(c[u]=this.shape[u]);return new ZodObject({...this._def,shape:()=>c})}deepPartial(){return deepPartialify(this)}partial(t){let c={};for(let u of util.objectKeys(this.shape)){let d=this.shape[u];t&&!t[u]?c[u]=d:c[u]=d.optional()}return new ZodObject({...this._def,shape:()=>c})}required(t){let c={};for(let u of util.objectKeys(this.shape))if(t&&!t[u])c[u]=this.shape[u];else{let t=this.shape[u];for(;t instanceof ZodOptional;)t=t._def.innerType;c[u]=t}return new ZodObject({...this._def,shape:()=>c})}keyof(){return createZodEnum(util.objectKeys(this.shape))}},ZodObject.create=(t,c)=>new ZodObject({shape:()=>t,unknownKeys:`strip`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(c)}),ZodObject.strictCreate=(t,c)=>new ZodObject({shape:()=>t,unknownKeys:`strict`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(c)}),ZodObject.lazycreate=(t,c)=>new ZodObject({shape:t,unknownKeys:`strip`,catchall:ZodNever.create(),typeName:ZodFirstPartyTypeKind.ZodObject,...processCreateParams(c)}),ZodUnion=class extends ZodType{_parse(t){let{ctx:c}=this._processInputParams(t),u=this._def.options;function handleResults(t){for(let c of t)if(c.result.status===`valid`)return c.result;for(let u of t)if(u.result.status===`dirty`)return c.common.issues.push(...u.ctx.common.issues),u.result;let u=t.map(t=>new ZodError(t.ctx.common.issues));return addIssueToContext(c,{code:ZodIssueCode.invalid_union,unionErrors:u}),INVALID}if(c.common.async)return Promise.all(u.map(async t=>{let u={...c,common:{...c.common,issues:[]},parent:null};return{result:await t._parseAsync({data:c.data,path:c.path,parent:u}),ctx:u}})).then(handleResults);{let t,d=[];for(let m of u){let u={...c,common:{...c.common,issues:[]},parent:null},g=m._parseSync({data:c.data,path:c.path,parent:u});if(g.status===`valid`)return g;g.status===`dirty`&&!t&&(t={result:g,ctx:u}),u.common.issues.length&&d.push(u.common.issues)}if(t)return c.common.issues.push(...t.ctx.common.issues),t.result;let m=d.map(t=>new ZodError(t));return addIssueToContext(c,{code:ZodIssueCode.invalid_union,unionErrors:m}),INVALID}}get options(){return this._def.options}},ZodUnion.create=(t,c)=>new ZodUnion({options:t,typeName:ZodFirstPartyTypeKind.ZodUnion,...processCreateParams(c)}),getDiscriminator=t=>t instanceof ZodLazy?getDiscriminator(t.schema):t instanceof ZodEffects?getDiscriminator(t.innerType()):t instanceof ZodLiteral?[t.value]:t instanceof ZodEnum?t.options:t instanceof ZodNativeEnum?util.objectValues(t.enum):t instanceof ZodDefault?getDiscriminator(t._def.innerType):t instanceof ZodUndefined?[void 0]:t instanceof ZodNull?[null]:t instanceof ZodOptional?[void 0,...getDiscriminator(t.unwrap())]:t instanceof ZodNullable?[null,...getDiscriminator(t.unwrap())]:t instanceof ZodBranded||t instanceof ZodReadonly?getDiscriminator(t.unwrap()):t instanceof ZodCatch?getDiscriminator(t._def.innerType):[],ZodDiscriminatedUnion=class ZodDiscriminatedUnion extends ZodType{_parse(t){let{ctx:c}=this._processInputParams(t);if(c.parsedType!==ZodParsedType.object)return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:c.parsedType}),INVALID;let u=this.discriminator,d=c.data[u],m=this.optionsMap.get(d);return m?c.common.async?m._parseAsync({data:c.data,path:c.path,parent:c}):m._parseSync({data:c.data,path:c.path,parent:c}):(addIssueToContext(c,{code:ZodIssueCode.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[u]}),INVALID)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,c,u){let d=new Map;for(let u of c){let c=getDiscriminator(u.shape[t]);if(!c.length)throw Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(let m of c){if(d.has(m))throw Error(`Discriminator property ${String(t)} has duplicate value ${String(m)}`);d.set(m,u)}}return new ZodDiscriminatedUnion({typeName:ZodFirstPartyTypeKind.ZodDiscriminatedUnion,discriminator:t,options:c,optionsMap:d,...processCreateParams(u)})}},ZodIntersection=class extends ZodType{_parse(t){let{status:c,ctx:u}=this._processInputParams(t),handleParsed=(t,d)=>{if(isAborted(t)||isAborted(d))return INVALID;let m=mergeValues(t.value,d.value);return m.valid?((isDirty$1(t)||isDirty$1(d))&&c.dirty(),{status:c.value,value:m.data}):(addIssueToContext(u,{code:ZodIssueCode.invalid_intersection_types}),INVALID)};return u.common.async?Promise.all([this._def.left._parseAsync({data:u.data,path:u.path,parent:u}),this._def.right._parseAsync({data:u.data,path:u.path,parent:u})]).then(([t,c])=>handleParsed(t,c)):handleParsed(this._def.left._parseSync({data:u.data,path:u.path,parent:u}),this._def.right._parseSync({data:u.data,path:u.path,parent:u}))}},ZodIntersection.create=(t,c,u)=>new ZodIntersection({left:t,right:c,typeName:ZodFirstPartyTypeKind.ZodIntersection,...processCreateParams(u)}),ZodTuple=class ZodTuple extends ZodType{_parse(t){let{status:c,ctx:u}=this._processInputParams(t);if(u.parsedType!==ZodParsedType.array)return addIssueToContext(u,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.array,received:u.parsedType}),INVALID;if(u.data.length<this._def.items.length)return addIssueToContext(u,{code:ZodIssueCode.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),INVALID;!this._def.rest&&u.data.length>this._def.items.length&&(addIssueToContext(u,{code:ZodIssueCode.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:`array`}),c.dirty());let d=[...u.data].map((t,c)=>{let d=this._def.items[c]||this._def.rest;return d?d._parse(new ParseInputLazyPath(u,t,u.path,c)):null}).filter(t=>!!t);return u.common.async?Promise.all(d).then(t=>ParseStatus.mergeArray(c,t)):ParseStatus.mergeArray(c,d)}get items(){return this._def.items}rest(t){return new ZodTuple({...this._def,rest:t})}},ZodTuple.create=(t,c)=>{if(!Array.isArray(t))throw Error(`You must pass an array of schemas to z.tuple([ ... ])`);return new ZodTuple({items:t,typeName:ZodFirstPartyTypeKind.ZodTuple,rest:null,...processCreateParams(c)})},ZodRecord=class ZodRecord extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:c,ctx:u}=this._processInputParams(t);if(u.parsedType!==ZodParsedType.object)return addIssueToContext(u,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.object,received:u.parsedType}),INVALID;let d=[],m=this._def.keyType,g=this._def.valueType;for(let t in u.data)d.push({key:m._parse(new ParseInputLazyPath(u,t,u.path,t)),value:g._parse(new ParseInputLazyPath(u,u.data[t],u.path,t)),alwaysSet:t in u.data});return u.common.async?ParseStatus.mergeObjectAsync(c,d):ParseStatus.mergeObjectSync(c,d)}get element(){return this._def.valueType}static create(t,c,u){return c instanceof ZodType?new ZodRecord({keyType:t,valueType:c,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(u)}):new ZodRecord({keyType:ZodString.create(),valueType:t,typeName:ZodFirstPartyTypeKind.ZodRecord,...processCreateParams(c)})}},ZodMap=class extends ZodType{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){let{status:c,ctx:u}=this._processInputParams(t);if(u.parsedType!==ZodParsedType.map)return addIssueToContext(u,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.map,received:u.parsedType}),INVALID;let d=this._def.keyType,m=this._def.valueType,g=[...u.data.entries()].map(([t,c],g)=>({key:d._parse(new ParseInputLazyPath(u,t,u.path,[g,`key`])),value:m._parse(new ParseInputLazyPath(u,c,u.path,[g,`value`]))}));if(u.common.async){let t=new Map;return Promise.resolve().then(async()=>{for(let u of g){let d=await u.key,m=await u.value;if(d.status===`aborted`||m.status===`aborted`)return INVALID;(d.status===`dirty`||m.status===`dirty`)&&c.dirty(),t.set(d.value,m.value)}return{status:c.value,value:t}})}else{let t=new Map;for(let u of g){let d=u.key,m=u.value;if(d.status===`aborted`||m.status===`aborted`)return INVALID;(d.status===`dirty`||m.status===`dirty`)&&c.dirty(),t.set(d.value,m.value)}return{status:c.value,value:t}}}},ZodMap.create=(t,c,u)=>new ZodMap({valueType:c,keyType:t,typeName:ZodFirstPartyTypeKind.ZodMap,...processCreateParams(u)}),ZodSet=class ZodSet extends ZodType{_parse(t){let{status:c,ctx:u}=this._processInputParams(t);if(u.parsedType!==ZodParsedType.set)return addIssueToContext(u,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.set,received:u.parsedType}),INVALID;let d=this._def;d.minSize!==null&&u.data.size<d.minSize.value&&(addIssueToContext(u,{code:ZodIssueCode.too_small,minimum:d.minSize.value,type:`set`,inclusive:!0,exact:!1,message:d.minSize.message}),c.dirty()),d.maxSize!==null&&u.data.size>d.maxSize.value&&(addIssueToContext(u,{code:ZodIssueCode.too_big,maximum:d.maxSize.value,type:`set`,inclusive:!0,exact:!1,message:d.maxSize.message}),c.dirty());let m=this._def.valueType;function finalizeSet(t){let u=new Set;for(let d of t){if(d.status===`aborted`)return INVALID;d.status===`dirty`&&c.dirty(),u.add(d.value)}return{status:c.value,value:u}}let g=[...u.data.values()].map((t,c)=>m._parse(new ParseInputLazyPath(u,t,u.path,c)));return u.common.async?Promise.all(g).then(t=>finalizeSet(t)):finalizeSet(g)}min(t,c){return new ZodSet({...this._def,minSize:{value:t,message:errorUtil.toString(c)}})}max(t,c){return new ZodSet({...this._def,maxSize:{value:t,message:errorUtil.toString(c)}})}size(t,c){return this.min(t,c).max(t,c)}nonempty(t){return this.min(1,t)}},ZodSet.create=(t,c)=>new ZodSet({valueType:t,minSize:null,maxSize:null,typeName:ZodFirstPartyTypeKind.ZodSet,...processCreateParams(c)}),ZodFunction=class ZodFunction extends ZodType{constructor(){super(...arguments),this.validate=this.implement}_parse(t){let{ctx:c}=this._processInputParams(t);if(c.parsedType!==ZodParsedType.function)return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.function,received:c.parsedType}),INVALID;function makeArgsIssue(t,u){return makeIssue({data:t,path:c.path,errorMaps:[c.common.contextualErrorMap,c.schemaErrorMap,getErrorMap(),errorMap].filter(t=>!!t),issueData:{code:ZodIssueCode.invalid_arguments,argumentsError:u}})}function makeReturnsIssue(t,u){return makeIssue({data:t,path:c.path,errorMaps:[c.common.contextualErrorMap,c.schemaErrorMap,getErrorMap(),errorMap].filter(t=>!!t),issueData:{code:ZodIssueCode.invalid_return_type,returnTypeError:u}})}let u={errorMap:c.common.contextualErrorMap},d=c.data;if(this._def.returns instanceof ZodPromise){let t=this;return OK(async function(...c){let m=new ZodError([]),g=await t._def.args.parseAsync(c,u).catch(t=>{throw m.addIssue(makeArgsIssue(c,t)),m}),b=await Reflect.apply(d,this,g);return await t._def.returns._def.type.parseAsync(b,u).catch(t=>{throw m.addIssue(makeReturnsIssue(b,t)),m})})}else{let t=this;return OK(function(...c){let m=t._def.args.safeParse(c,u);if(!m.success)throw new ZodError([makeArgsIssue(c,m.error)]);let g=Reflect.apply(d,this,m.data),b=t._def.returns.safeParse(g,u);if(!b.success)throw new ZodError([makeReturnsIssue(g,b.error)]);return b.data})}}parameters(){return this._def.args}returnType(){return this._def.returns}args(...t){return new ZodFunction({...this._def,args:ZodTuple.create(t).rest(ZodUnknown.create())})}returns(t){return new ZodFunction({...this._def,returns:t})}implement(t){return this.parse(t)}strictImplement(t){return this.parse(t)}static create(t,c,u){return new ZodFunction({args:t||ZodTuple.create([]).rest(ZodUnknown.create()),returns:c||ZodUnknown.create(),typeName:ZodFirstPartyTypeKind.ZodFunction,...processCreateParams(u)})}},ZodLazy=class extends ZodType{get schema(){return this._def.getter()}_parse(t){let{ctx:c}=this._processInputParams(t);return this._def.getter()._parse({data:c.data,path:c.path,parent:c})}},ZodLazy.create=(t,c)=>new ZodLazy({getter:t,typeName:ZodFirstPartyTypeKind.ZodLazy,...processCreateParams(c)}),ZodLiteral=class extends ZodType{_parse(t){if(t.data!==this._def.value){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{received:c.data,code:ZodIssueCode.invalid_literal,expected:this._def.value}),INVALID}return{status:`valid`,value:t.data}}get value(){return this._def.value}},ZodLiteral.create=(t,c)=>new ZodLiteral({value:t,typeName:ZodFirstPartyTypeKind.ZodLiteral,...processCreateParams(c)}),ZodEnum=class ZodEnum extends ZodType{_parse(t){if(typeof t.data!=`string`){let c=this._getOrReturnCtx(t),u=this._def.values;return addIssueToContext(c,{expected:util.joinValues(u),received:c.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){let c=this._getOrReturnCtx(t),u=this._def.values;return addIssueToContext(c,{received:c.data,code:ZodIssueCode.invalid_enum_value,options:u}),INVALID}return OK(t.data)}get options(){return this._def.values}get enum(){let t={};for(let c of this._def.values)t[c]=c;return t}get Values(){let t={};for(let c of this._def.values)t[c]=c;return t}get Enum(){let t={};for(let c of this._def.values)t[c]=c;return t}extract(t,c=this._def){return ZodEnum.create(t,{...this._def,...c})}exclude(t,c=this._def){return ZodEnum.create(this.options.filter(c=>!t.includes(c)),{...this._def,...c})}},ZodEnum.create=createZodEnum,ZodNativeEnum=class extends ZodType{_parse(t){let c=util.getValidEnumValues(this._def.values),u=this._getOrReturnCtx(t);if(u.parsedType!==ZodParsedType.string&&u.parsedType!==ZodParsedType.number){let t=util.objectValues(c);return addIssueToContext(u,{expected:util.joinValues(t),received:u.parsedType,code:ZodIssueCode.invalid_type}),INVALID}if(this._cache||(this._cache=new Set(util.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){let t=util.objectValues(c);return addIssueToContext(u,{received:u.data,code:ZodIssueCode.invalid_enum_value,options:t}),INVALID}return OK(t.data)}get enum(){return this._def.values}},ZodNativeEnum.create=(t,c)=>new ZodNativeEnum({values:t,typeName:ZodFirstPartyTypeKind.ZodNativeEnum,...processCreateParams(c)}),ZodPromise=class extends ZodType{unwrap(){return this._def.type}_parse(t){let{ctx:c}=this._processInputParams(t);return c.parsedType!==ZodParsedType.promise&&c.common.async===!1?(addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.promise,received:c.parsedType}),INVALID):OK((c.parsedType===ZodParsedType.promise?c.data:Promise.resolve(c.data)).then(t=>this._def.type.parseAsync(t,{path:c.path,errorMap:c.common.contextualErrorMap})))}},ZodPromise.create=(t,c)=>new ZodPromise({type:t,typeName:ZodFirstPartyTypeKind.ZodPromise,...processCreateParams(c)}),ZodEffects=class extends ZodType{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===ZodFirstPartyTypeKind.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){let{status:c,ctx:u}=this._processInputParams(t),d=this._def.effect||null,m={addIssue:t=>{addIssueToContext(u,t),t.fatal?c.abort():c.dirty()},get path(){return u.path}};if(m.addIssue=m.addIssue.bind(m),d.type===`preprocess`){let t=d.transform(u.data,m);if(u.common.async)return Promise.resolve(t).then(async t=>{if(c.value===`aborted`)return INVALID;let d=await this._def.schema._parseAsync({data:t,path:u.path,parent:u});return d.status===`aborted`?INVALID:d.status===`dirty`||c.value===`dirty`?DIRTY(d.value):d});{if(c.value===`aborted`)return INVALID;let d=this._def.schema._parseSync({data:t,path:u.path,parent:u});return d.status===`aborted`?INVALID:d.status===`dirty`||c.value===`dirty`?DIRTY(d.value):d}}if(d.type===`refinement`){let executeRefinement=t=>{let c=d.refinement(t,m);if(u.common.async)return Promise.resolve(c);if(c instanceof Promise)throw Error(`Async refinement encountered during synchronous parse operation. Use .parseAsync instead.`);return t};if(u.common.async===!1){let t=this._def.schema._parseSync({data:u.data,path:u.path,parent:u});return t.status===`aborted`?INVALID:(t.status===`dirty`&&c.dirty(),executeRefinement(t.value),{status:c.value,value:t.value})}else return this._def.schema._parseAsync({data:u.data,path:u.path,parent:u}).then(t=>t.status===`aborted`?INVALID:(t.status===`dirty`&&c.dirty(),executeRefinement(t.value).then(()=>({status:c.value,value:t.value}))))}if(d.type===`transform`)if(u.common.async===!1){let t=this._def.schema._parseSync({data:u.data,path:u.path,parent:u});if(!isValid$3(t))return INVALID;let g=d.transform(t.value,m);if(g instanceof Promise)throw Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);return{status:c.value,value:g}}else return this._def.schema._parseAsync({data:u.data,path:u.path,parent:u}).then(t=>isValid$3(t)?Promise.resolve(d.transform(t.value,m)).then(t=>({status:c.value,value:t})):INVALID);util.assertNever(d)}},ZodEffects.create=(t,c,u)=>new ZodEffects({schema:t,typeName:ZodFirstPartyTypeKind.ZodEffects,effect:c,...processCreateParams(u)}),ZodEffects.createWithPreprocess=(t,c,u)=>new ZodEffects({schema:c,effect:{type:`preprocess`,transform:t},typeName:ZodFirstPartyTypeKind.ZodEffects,...processCreateParams(u)}),ZodOptional=class extends ZodType{_parse(t){return this._getType(t)===ZodParsedType.undefined?OK(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}},ZodOptional.create=(t,c)=>new ZodOptional({innerType:t,typeName:ZodFirstPartyTypeKind.ZodOptional,...processCreateParams(c)}),ZodNullable=class extends ZodType{_parse(t){return this._getType(t)===ZodParsedType.null?OK(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}},ZodNullable.create=(t,c)=>new ZodNullable({innerType:t,typeName:ZodFirstPartyTypeKind.ZodNullable,...processCreateParams(c)}),ZodDefault=class extends ZodType{_parse(t){let{ctx:c}=this._processInputParams(t),u=c.data;return c.parsedType===ZodParsedType.undefined&&(u=this._def.defaultValue()),this._def.innerType._parse({data:u,path:c.path,parent:c})}removeDefault(){return this._def.innerType}},ZodDefault.create=(t,c)=>new ZodDefault({innerType:t,typeName:ZodFirstPartyTypeKind.ZodDefault,defaultValue:typeof c.default==`function`?c.default:()=>c.default,...processCreateParams(c)}),ZodCatch=class extends ZodType{_parse(t){let{ctx:c}=this._processInputParams(t),u={...c,common:{...c.common,issues:[]}},d=this._def.innerType._parse({data:u.data,path:u.path,parent:{...u}});return isAsync(d)?d.then(t=>({status:`valid`,value:t.status===`valid`?t.value:this._def.catchValue({get error(){return new ZodError(u.common.issues)},input:u.data})})):{status:`valid`,value:d.status===`valid`?d.value:this._def.catchValue({get error(){return new ZodError(u.common.issues)},input:u.data})}}removeCatch(){return this._def.innerType}},ZodCatch.create=(t,c)=>new ZodCatch({innerType:t,typeName:ZodFirstPartyTypeKind.ZodCatch,catchValue:typeof c.catch==`function`?c.catch:()=>c.catch,...processCreateParams(c)}),ZodNaN=class extends ZodType{_parse(t){if(this._getType(t)!==ZodParsedType.nan){let c=this._getOrReturnCtx(t);return addIssueToContext(c,{code:ZodIssueCode.invalid_type,expected:ZodParsedType.nan,received:c.parsedType}),INVALID}return{status:`valid`,value:t.data}}},ZodNaN.create=t=>new ZodNaN({typeName:ZodFirstPartyTypeKind.ZodNaN,...processCreateParams(t)}),ZodBranded=class extends ZodType{_parse(t){let{ctx:c}=this._processInputParams(t),u=c.data;return this._def.type._parse({data:u,path:c.path,parent:c})}unwrap(){return this._def.type}},ZodPipeline=class ZodPipeline extends ZodType{_parse(t){let{status:c,ctx:u}=this._processInputParams(t);if(u.common.async){let handleAsync=async()=>{let t=await this._def.in._parseAsync({data:u.data,path:u.path,parent:u});return t.status===`aborted`?INVALID:t.status===`dirty`?(c.dirty(),DIRTY(t.value)):this._def.out._parseAsync({data:t.value,path:u.path,parent:u})};return handleAsync()}else{let t=this._def.in._parseSync({data:u.data,path:u.path,parent:u});return t.status===`aborted`?INVALID:t.status===`dirty`?(c.dirty(),{status:`dirty`,value:t.value}):this._def.out._parseSync({data:t.value,path:u.path,parent:u})}}static create(t,c){return new ZodPipeline({in:t,out:c,typeName:ZodFirstPartyTypeKind.ZodPipeline})}},ZodReadonly=class extends ZodType{_parse(t){let c=this._def.innerType._parse(t),freeze=t=>(isValid$3(t)&&(t.value=Object.freeze(t.value)),t);return isAsync(c)?c.then(t=>freeze(t)):freeze(c)}unwrap(){return this._def.innerType}},ZodReadonly.create=(t,c)=>new ZodReadonly({innerType:t,typeName:ZodFirstPartyTypeKind.ZodReadonly,...processCreateParams(c)}),ZodObject.lazycreate,(function(t){t.ZodString=`ZodString`,t.ZodNumber=`ZodNumber`,t.ZodNaN=`ZodNaN`,t.ZodBigInt=`ZodBigInt`,t.ZodBoolean=`ZodBoolean`,t.ZodDate=`ZodDate`,t.ZodSymbol=`ZodSymbol`,t.ZodUndefined=`ZodUndefined`,t.ZodNull=`ZodNull`,t.ZodAny=`ZodAny`,t.ZodUnknown=`ZodUnknown`,t.ZodNever=`ZodNever`,t.ZodVoid=`ZodVoid`,t.ZodArray=`ZodArray`,t.ZodObject=`ZodObject`,t.ZodUnion=`ZodUnion`,t.ZodDiscriminatedUnion=`ZodDiscriminatedUnion`,t.ZodIntersection=`ZodIntersection`,t.ZodTuple=`ZodTuple`,t.ZodRecord=`ZodRecord`,t.ZodMap=`ZodMap`,t.ZodSet=`ZodSet`,t.ZodFunction=`ZodFunction`,t.ZodLazy=`ZodLazy`,t.ZodLiteral=`ZodLiteral`,t.ZodEnum=`ZodEnum`,t.ZodEffects=`ZodEffects`,t.ZodNativeEnum=`ZodNativeEnum`,t.ZodOptional=`ZodOptional`,t.ZodNullable=`ZodNullable`,t.ZodDefault=`ZodDefault`,t.ZodCatch=`ZodCatch`,t.ZodPromise=`ZodPromise`,t.ZodBranded=`ZodBranded`,t.ZodPipeline=`ZodPipeline`,t.ZodReadonly=`ZodReadonly`})(ZodFirstPartyTypeKind||(ZodFirstPartyTypeKind={})),stringType=ZodString.create,numberType=ZodNumber.create,ZodNaN.create,ZodBigInt.create,ZodBoolean.create,ZodDate.create,ZodSymbol.create,ZodUndefined.create,ZodNull.create,anyType=ZodAny.create,ZodUnknown.create,ZodNever.create,ZodVoid.create,arrayType=ZodArray.create,objectType=ZodObject.create,ZodObject.strictCreate,ZodUnion.create,ZodDiscriminatedUnion.create,ZodIntersection.create,ZodTuple.create,ZodRecord.create,ZodMap.create,ZodSet.create,ZodFunction.create,ZodLazy.create,ZodLiteral.create,ZodEnum.create,ZodNativeEnum.create,ZodPromise.create,ZodEffects.create,ZodOptional.create,ZodNullable.create,ZodEffects.createWithPreprocess,ZodPipeline.create})),init_external=__esmMin((()=>{init_errors(),init_parseUtil(),init_typeAliases(),init_util$1(),init_types$1(),init_ZodError()})),init_zod=__esmMin((()=>{init_external(),init_external()})),ignoreOverride,defaultOptions,getDefaultOptions,init_Options=__esmMin((()=>{ignoreOverride=Symbol(`Let zodToJsonSchema decide on which parser to use`),defaultOptions={name:void 0,$refStrategy:`root`,basePath:[`#`],effectStrategy:`input`,pipeStrategy:`all`,dateStrategy:`format:date-time`,mapStrategy:`entries`,removeAdditionalStrategy:`passthrough`,allowedAdditionalProperties:!0,rejectedAdditionalProperties:!1,definitionPath:`definitions`,target:`jsonSchema7`,strictUnions:!1,definitions:{},errorMessages:!1,markdownDescription:!1,patternStrategy:`escape`,applyRegexFlags:!1,emailStrategy:`format:email`,base64Strategy:`contentEncoding:base64`,nameStrategy:`ref`,openAiAnyTypeName:`OpenAiAnyType`},getDefaultOptions=t=>typeof t==`string`?{...defaultOptions,name:t}:{...defaultOptions,...t}})),getRefs,init_Refs=__esmMin((()=>{init_Options(),getRefs=t=>{let c=getDefaultOptions(t),u=c.name===void 0?c.basePath:[...c.basePath,c.definitionPath,c.name];return{...c,flags:{hasReferencedOpenAiAnyType:!1},currentPath:u,propertyPath:void 0,seen:new Map(Object.entries(c.definitions).map(([t,u])=>[u._def,{def:u._def,path:[...c.basePath,c.definitionPath,t],jsonSchema:void 0}]))}}}));function addErrorMessage(t,c,u,d){d?.errorMessages&&u&&(t.errorMessage={...t.errorMessage,[c]:u})}function setResponseValueAndErrors(t,c,u,d,m){t[c]=u,addErrorMessage(t,c,d,m)}var init_errorMessages=__esmMin((()=>{})),getRelativePath,init_getRelativePath=__esmMin((()=>{getRelativePath=(t,c)=>{let u=0;for(;u<t.length&&u<c.length&&t[u]===c[u];u++);return[(t.length-u).toString(),...c.slice(u)].join(`/`)}}));function parseAnyDef(t){if(t.target!==`openAi`)return{};let c=[...t.basePath,t.definitionPath,t.openAiAnyTypeName];return t.flags.hasReferencedOpenAiAnyType=!0,{$ref:t.$refStrategy===`relative`?getRelativePath(c,t.currentPath):c.join(`/`)}}var init_any=__esmMin((()=>{init_getRelativePath()}));function parseArrayDef(t,c){let u={type:`array`};return t.type?._def&&t.type?._def?.typeName!==ZodFirstPartyTypeKind.ZodAny&&(u.items=parseDef(t.type._def,{...c,currentPath:[...c.currentPath,`items`]})),t.minLength&&setResponseValueAndErrors(u,`minItems`,t.minLength.value,t.minLength.message,c),t.maxLength&&setResponseValueAndErrors(u,`maxItems`,t.maxLength.value,t.maxLength.message,c),t.exactLength&&(setResponseValueAndErrors(u,`minItems`,t.exactLength.value,t.exactLength.message,c),setResponseValueAndErrors(u,`maxItems`,t.exactLength.value,t.exactLength.message,c)),u}var init_array=__esmMin((()=>{init_zod(),init_errorMessages(),init_parseDef()}));function parseBigintDef(t,c){let u={type:`integer`,format:`int64`};if(!t.checks)return u;for(let d of t.checks)switch(d.kind){case`min`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`minimum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMinimum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMinimum=!0),setResponseValueAndErrors(u,`minimum`,d.value,d.message,c));break;case`max`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`maximum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMaximum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMaximum=!0),setResponseValueAndErrors(u,`maximum`,d.value,d.message,c));break;case`multipleOf`:setResponseValueAndErrors(u,`multipleOf`,d.value,d.message,c);break}return u}var init_bigint=__esmMin((()=>{init_errorMessages()}));function parseBooleanDef(){return{type:`boolean`}}var init_boolean=__esmMin((()=>{}));function parseBrandedDef(t,c){return parseDef(t.type._def,c)}var init_branded=__esmMin((()=>{init_parseDef()})),parseCatchDef,init_catch=__esmMin((()=>{init_parseDef(),parseCatchDef=(t,c)=>parseDef(t.innerType._def,c)}));function parseDateDef(t,c,u){let d=u??c.dateStrategy;if(Array.isArray(d))return{anyOf:d.map((u,d)=>parseDateDef(t,c,u))};switch(d){case`string`:case`format:date-time`:return{type:`string`,format:`date-time`};case`format:date`:return{type:`string`,format:`date`};case`integer`:return integerDateParser(t,c)}}var integerDateParser,init_date=__esmMin((()=>{init_errorMessages(),integerDateParser=(t,c)=>{let u={type:`integer`,format:`unix-time`};if(c.target===`openApi3`)return u;for(let d of t.checks)switch(d.kind){case`min`:setResponseValueAndErrors(u,`minimum`,d.value,d.message,c);break;case`max`:setResponseValueAndErrors(u,`maximum`,d.value,d.message,c);break}return u}}));function parseDefaultDef(t,c){return{...parseDef(t.innerType._def,c),default:t.defaultValue()}}var init_default=__esmMin((()=>{init_parseDef()}));function parseEffectsDef(t,c){return c.effectStrategy===`input`?parseDef(t.schema._def,c):parseAnyDef(c)}var init_effects=__esmMin((()=>{init_parseDef(),init_any()}));function parseEnumDef(t){return{type:`string`,enum:Array.from(t.values)}}var init_enum=__esmMin((()=>{}));function parseIntersectionDef(t,c){let u=[parseDef(t.left._def,{...c,currentPath:[...c.currentPath,`allOf`,`0`]}),parseDef(t.right._def,{...c,currentPath:[...c.currentPath,`allOf`,`1`]})].filter(t=>!!t),d=c.target===`jsonSchema2019-09`?{unevaluatedProperties:!1}:void 0,m=[];return u.forEach(t=>{if(isJsonSchema7AllOfType(t))m.push(...t.allOf),t.unevaluatedProperties===void 0&&(d=void 0);else{let c=t;if(`additionalProperties`in t&&t.additionalProperties===!1){let{additionalProperties:u,...d}=t;c=d}else d=void 0;m.push(c)}}),m.length?{allOf:m,...d}:void 0}var isJsonSchema7AllOfType,init_intersection=__esmMin((()=>{init_parseDef(),isJsonSchema7AllOfType=t=>`type`in t&&t.type===`string`?!1:`allOf`in t}));function parseLiteralDef(t,c){let u=typeof t.value;return u!==`bigint`&&u!==`number`&&u!==`boolean`&&u!==`string`?{type:Array.isArray(t.value)?`array`:`object`}:c.target===`openApi3`?{type:u===`bigint`?`integer`:u,enum:[t.value]}:{type:u===`bigint`?`integer`:u,const:t.value}}var init_literal=__esmMin((()=>{}));function parseStringDef(t,c){let u={type:`string`};if(t.checks)for(let d of t.checks)switch(d.kind){case`min`:setResponseValueAndErrors(u,`minLength`,typeof u.minLength==`number`?Math.max(u.minLength,d.value):d.value,d.message,c);break;case`max`:setResponseValueAndErrors(u,`maxLength`,typeof u.maxLength==`number`?Math.min(u.maxLength,d.value):d.value,d.message,c);break;case`email`:switch(c.emailStrategy){case`format:email`:addFormat(u,`email`,d.message,c);break;case`format:idn-email`:addFormat(u,`idn-email`,d.message,c);break;case`pattern:zod`:addPattern(u,zodPatterns.email,d.message,c);break}break;case`url`:addFormat(u,`uri`,d.message,c);break;case`uuid`:addFormat(u,`uuid`,d.message,c);break;case`regex`:addPattern(u,d.regex,d.message,c);break;case`cuid`:addPattern(u,zodPatterns.cuid,d.message,c);break;case`cuid2`:addPattern(u,zodPatterns.cuid2,d.message,c);break;case`startsWith`:addPattern(u,RegExp(`^${escapeLiteralCheckValue(d.value,c)}`),d.message,c);break;case`endsWith`:addPattern(u,RegExp(`${escapeLiteralCheckValue(d.value,c)}$`),d.message,c);break;case`datetime`:addFormat(u,`date-time`,d.message,c);break;case`date`:addFormat(u,`date`,d.message,c);break;case`time`:addFormat(u,`time`,d.message,c);break;case`duration`:addFormat(u,`duration`,d.message,c);break;case`length`:setResponseValueAndErrors(u,`minLength`,typeof u.minLength==`number`?Math.max(u.minLength,d.value):d.value,d.message,c),setResponseValueAndErrors(u,`maxLength`,typeof u.maxLength==`number`?Math.min(u.maxLength,d.value):d.value,d.message,c);break;case`includes`:addPattern(u,RegExp(escapeLiteralCheckValue(d.value,c)),d.message,c);break;case`ip`:d.version!==`v6`&&addFormat(u,`ipv4`,d.message,c),d.version!==`v4`&&addFormat(u,`ipv6`,d.message,c);break;case`base64url`:addPattern(u,zodPatterns.base64url,d.message,c);break;case`jwt`:addPattern(u,zodPatterns.jwt,d.message,c);break;case`cidr`:d.version!==`v6`&&addPattern(u,zodPatterns.ipv4Cidr,d.message,c),d.version!==`v4`&&addPattern(u,zodPatterns.ipv6Cidr,d.message,c);break;case`emoji`:addPattern(u,zodPatterns.emoji(),d.message,c);break;case`ulid`:addPattern(u,zodPatterns.ulid,d.message,c);break;case`base64`:switch(c.base64Strategy){case`format:binary`:addFormat(u,`binary`,d.message,c);break;case`contentEncoding:base64`:setResponseValueAndErrors(u,`contentEncoding`,`base64`,d.message,c);break;case`pattern:zod`:addPattern(u,zodPatterns.base64,d.message,c);break}break;case`nanoid`:addPattern(u,zodPatterns.nanoid,d.message,c);case`toLowerCase`:case`toUpperCase`:case`trim`:break;default:(t=>{})(d)}return u}function escapeLiteralCheckValue(t,c){return c.patternStrategy===`escape`?escapeNonAlphaNumeric(t):t}function escapeNonAlphaNumeric(t){let c=``;for(let u=0;u<t.length;u++)ALPHA_NUMERIC.has(t[u])||(c+=`\\`),c+=t[u];return c}function addFormat(t,c,u,d){t.format||t.anyOf?.some(t=>t.format)?(t.anyOf||(t.anyOf=[]),t.format&&(t.anyOf.push({format:t.format,...t.errorMessage&&d.errorMessages&&{errorMessage:{format:t.errorMessage.format}}}),delete t.format,t.errorMessage&&(delete t.errorMessage.format,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.anyOf.push({format:c,...u&&d.errorMessages&&{errorMessage:{format:u}}})):setResponseValueAndErrors(t,`format`,c,u,d)}function addPattern(t,c,u,d){t.pattern||t.allOf?.some(t=>t.pattern)?(t.allOf||(t.allOf=[]),t.pattern&&(t.allOf.push({pattern:t.pattern,...t.errorMessage&&d.errorMessages&&{errorMessage:{pattern:t.errorMessage.pattern}}}),delete t.pattern,t.errorMessage&&(delete t.errorMessage.pattern,Object.keys(t.errorMessage).length===0&&delete t.errorMessage)),t.allOf.push({pattern:stringifyRegExpWithFlags(c,d),...u&&d.errorMessages&&{errorMessage:{pattern:u}}})):setResponseValueAndErrors(t,`pattern`,stringifyRegExpWithFlags(c,d),u,d)}function stringifyRegExpWithFlags(t,c){if(!c.applyRegexFlags||!t.flags)return t.source;let u={i:t.flags.includes(`i`),m:t.flags.includes(`m`),s:t.flags.includes(`s`)},d=u.i?t.source.toLowerCase():t.source,m=``,g=!1,b=!1,S=!1;for(let t=0;t<d.length;t++){if(g){m+=d[t],g=!1;continue}if(u.i){if(b){if(d[t].match(/[a-z]/)){S?(m+=d[t],m+=`${d[t-2]}-${d[t]}`.toUpperCase(),S=!1):d[t+1]===`-`&&d[t+2]?.match(/[a-z]/)?(m+=d[t],S=!0):m+=`${d[t]}${d[t].toUpperCase()}`;continue}}else if(d[t].match(/[a-z]/)){m+=`[${d[t]}${d[t].toUpperCase()}]`;continue}}if(u.m){if(d[t]===`^`){m+=`(^|(?<=[\r
|
|
3
3
|
]))`;continue}else if(d[t]===`$`){m+=`($|(?=[\r
|
|
4
|
-
]))`;continue}}if(u.s&&d[t]===`.`){m+=b?`${d[t]}\r\n`:`[${d[t]}\r\n]`;continue}m+=d[t],d[t]===`\\`?g=!0:b&&d[t]===`]`?b=!1:!b&&d[t]===`[`&&(b=!0)}try{new RegExp(m)}catch{return console.warn(`Could not convert regex pattern at ${c.currentPath.join(`/`)} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return m}var emojiRegex,zodPatterns,ALPHA_NUMERIC,init_string=__esmMin((()=>{init_errorMessages(),emojiRegex=void 0,zodPatterns={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(emojiRegex===void 0&&(emojiRegex=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`)),emojiRegex),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/},ALPHA_NUMERIC=new Set(`ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789`)}));function parseRecordDef(t,c){if(c.target===`openAi`&&console.warn(`Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.`),c.target===`openApi3`&&t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{type:`object`,required:t.keyType._def.values,properties:t.keyType._def.values.reduce((u,d)=>({...u,[d]:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`properties`,d]})??parseAnyDef(c)}),{}),additionalProperties:c.rejectedAdditionalProperties};let u={type:`object`,additionalProperties:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`additionalProperties`]})??c.allowedAdditionalProperties};if(c.target===`openApi3`)return u;if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodString&&t.keyType._def.checks?.length){let{type:d,...m}=parseStringDef(t.keyType._def,c);return{...u,propertyNames:m}}else if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{...u,propertyNames:{enum:t.keyType._def.values}};else if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodBranded&&t.keyType._def.type._def.typeName===ZodFirstPartyTypeKind.ZodString&&t.keyType._def.type._def.checks?.length){let{type:d,...m}=parseBrandedDef(t.keyType._def,c);return{...u,propertyNames:m}}return u}var init_record=__esmMin((()=>{init_zod(),init_parseDef(),init_string(),init_branded(),init_any()}));function parseMapDef(t,c){return c.mapStrategy===`record`?parseRecordDef(t,c):{type:`array`,maxItems:125,items:{type:`array`,items:[parseDef(t.keyType._def,{...c,currentPath:[...c.currentPath,`items`,`items`,`0`]})||parseAnyDef(c),parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`items`,`items`,`1`]})||parseAnyDef(c)],minItems:2,maxItems:2}}}var init_map=__esmMin((()=>{init_parseDef(),init_record(),init_any()}));function parseNativeEnumDef(t){let c=t.values,u=Object.keys(t.values).filter(t=>typeof c[c[t]]!=`number`).map(t=>c[t]),d=Array.from(new Set(u.map(t=>typeof t)));return{type:d.length===1?d[0]===`string`?`string`:`number`:[`string`,`number`],enum:u}}var init_nativeEnum=__esmMin((()=>{}));function parseNeverDef(t){return t.target===`openAi`?void 0:{not:parseAnyDef({...t,currentPath:[...t.currentPath,`not`]})}}var init_never=__esmMin((()=>{init_any()}));function parseNullDef(t){return t.target===`openApi3`?{enum:[`null`],nullable:!0}:{type:`null`}}var init_null=__esmMin((()=>{}));function parseUnionDef(t,c){if(c.target===`openApi3`)return asAnyOf(t,c);let u=t.options instanceof Map?Array.from(t.options.values()):t.options;if(u.every(t=>t._def.typeName in primitiveMappings&&(!t._def.checks||!t._def.checks.length))){let t=u.reduce((t,c)=>{let u=primitiveMappings[c._def.typeName];return u&&!t.includes(u)?[...t,u]:t},[]);return{type:t.length>1?t:t[0]}}else if(u.every(t=>t._def.typeName===`ZodLiteral`&&!t.description)){let t=u.reduce((t,c)=>{let u=typeof c._def.value;switch(u){case`string`:case`number`:case`boolean`:return[...t,u];case`bigint`:return[...t,`integer`];case`object`:if(c._def.value===null)return[...t,`null`];default:return t}},[]);if(t.length===u.length){let c=t.filter((t,c,u)=>u.indexOf(t)===c);return{type:c.length>1?c:c[0],enum:u.reduce((t,c)=>t.includes(c._def.value)?t:[...t,c._def.value],[])}}}else if(u.every(t=>t._def.typeName===`ZodEnum`))return{type:`string`,enum:u.reduce((t,c)=>[...t,...c._def.values.filter(c=>!t.includes(c))],[])};return asAnyOf(t,c)}var primitiveMappings,asAnyOf,init_union=__esmMin((()=>{init_parseDef(),primitiveMappings={ZodString:`string`,ZodNumber:`number`,ZodBigInt:`integer`,ZodBoolean:`boolean`,ZodNull:`null`},asAnyOf=(t,c)=>{let u=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`anyOf`,`${u}`]})).filter(t=>!!t&&(!c.strictUnions||typeof t==`object`&&Object.keys(t).length>0));return u.length?{anyOf:u}:void 0}}));function parseNullableDef(t,c){if([`ZodString`,`ZodNumber`,`ZodBigInt`,`ZodBoolean`,`ZodNull`].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return c.target===`openApi3`?{type:primitiveMappings[t.innerType._def.typeName],nullable:!0}:{type:[primitiveMappings[t.innerType._def.typeName],`null`]};if(c.target===`openApi3`){let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath]});return u&&`$ref`in u?{allOf:[u],nullable:!0}:u&&{...u,nullable:!0}}let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath,`anyOf`,`0`]});return u&&{anyOf:[u,{type:`null`}]}}var init_nullable=__esmMin((()=>{init_parseDef(),init_union()}));function parseNumberDef(t,c){let u={type:`number`};if(!t.checks)return u;for(let d of t.checks)switch(d.kind){case`int`:u.type=`integer`,addErrorMessage(u,`type`,d.message,c);break;case`min`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`minimum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMinimum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMinimum=!0),setResponseValueAndErrors(u,`minimum`,d.value,d.message,c));break;case`max`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`maximum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMaximum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMaximum=!0),setResponseValueAndErrors(u,`maximum`,d.value,d.message,c));break;case`multipleOf`:setResponseValueAndErrors(u,`multipleOf`,d.value,d.message,c);break}return u}var init_number=__esmMin((()=>{init_errorMessages()}));function parseObjectDef(t,c){let u=c.target===`openAi`,d={type:`object`,properties:{}},m=[],g=t.shape();for(let t in g){let b=g[t];if(b===void 0||b._def===void 0)continue;let S=safeIsOptional(b);S&&u&&(b._def.typeName===`ZodOptional`&&(b=b._def.innerType),b.isNullable()||(b=b.nullable()),S=!1);let C=parseDef(b._def,{...c,currentPath:[...c.currentPath,`properties`,t],propertyPath:[...c.currentPath,`properties`,t]});C!==void 0&&(d.properties[t]=C,S||m.push(t))}m.length&&(d.required=m);let b=decideAdditionalProperties(t,c);return b!==void 0&&(d.additionalProperties=b),d}function decideAdditionalProperties(t,c){if(t.catchall._def.typeName!==`ZodNever`)return parseDef(t.catchall._def,{...c,currentPath:[...c.currentPath,`additionalProperties`]});switch(t.unknownKeys){case`passthrough`:return c.allowedAdditionalProperties;case`strict`:return c.rejectedAdditionalProperties;case`strip`:return c.removeAdditionalStrategy===`strict`?c.allowedAdditionalProperties:c.rejectedAdditionalProperties}}function safeIsOptional(t){try{return t.isOptional()}catch{return!0}}var init_object=__esmMin((()=>{init_parseDef()})),parseOptionalDef,init_optional=__esmMin((()=>{init_parseDef(),init_any(),parseOptionalDef=(t,c)=>{if(c.currentPath.toString()===c.propertyPath?.toString())return parseDef(t.innerType._def,c);let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath,`anyOf`,`1`]});return u?{anyOf:[{not:parseAnyDef(c)},u]}:parseAnyDef(c)}})),parsePipelineDef,init_pipeline=__esmMin((()=>{init_parseDef(),parsePipelineDef=(t,c)=>{if(c.pipeStrategy===`input`)return parseDef(t.in._def,c);if(c.pipeStrategy===`output`)return parseDef(t.out._def,c);let u=parseDef(t.in._def,{...c,currentPath:[...c.currentPath,`allOf`,`0`]});return{allOf:[u,parseDef(t.out._def,{...c,currentPath:[...c.currentPath,`allOf`,u?`1`:`0`]})].filter(t=>t!==void 0)}}}));function parsePromiseDef(t,c){return parseDef(t.type._def,c)}var init_promise=__esmMin((()=>{init_parseDef()}));function parseSetDef(t,c){let u={type:`array`,uniqueItems:!0,items:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`items`]})};return t.minSize&&setResponseValueAndErrors(u,`minItems`,t.minSize.value,t.minSize.message,c),t.maxSize&&setResponseValueAndErrors(u,`maxItems`,t.maxSize.value,t.maxSize.message,c),u}var init_set=__esmMin((()=>{init_errorMessages(),init_parseDef()}));function parseTupleDef(t,c){return t.rest?{type:`array`,minItems:t.items.length,items:t.items.map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`items`,`${u}`]})).reduce((t,c)=>c===void 0?t:[...t,c],[]),additionalItems:parseDef(t.rest._def,{...c,currentPath:[...c.currentPath,`additionalItems`]})}:{type:`array`,minItems:t.items.length,maxItems:t.items.length,items:t.items.map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`items`,`${u}`]})).reduce((t,c)=>c===void 0?t:[...t,c],[])}}var init_tuple=__esmMin((()=>{init_parseDef()}));function parseUndefinedDef(t){return{not:parseAnyDef(t)}}var init_undefined=__esmMin((()=>{init_any()}));function parseUnknownDef(t){return parseAnyDef(t)}var init_unknown=__esmMin((()=>{init_any()})),parseReadonlyDef,init_readonly=__esmMin((()=>{init_parseDef(),parseReadonlyDef=(t,c)=>parseDef(t.innerType._def,c)})),selectParser,init_selectParser=__esmMin((()=>{init_zod(),init_any(),init_array(),init_bigint(),init_boolean(),init_branded(),init_catch(),init_date(),init_default(),init_effects(),init_enum(),init_intersection(),init_literal(),init_map(),init_nativeEnum(),init_never(),init_null(),init_nullable(),init_number(),init_object(),init_optional(),init_pipeline(),init_promise(),init_record(),init_set(),init_string(),init_tuple(),init_undefined(),init_union(),init_unknown(),init_readonly(),selectParser=(t,c,u)=>{switch(c){case ZodFirstPartyTypeKind.ZodString:return parseStringDef(t,u);case ZodFirstPartyTypeKind.ZodNumber:return parseNumberDef(t,u);case ZodFirstPartyTypeKind.ZodObject:return parseObjectDef(t,u);case ZodFirstPartyTypeKind.ZodBigInt:return parseBigintDef(t,u);case ZodFirstPartyTypeKind.ZodBoolean:return parseBooleanDef();case ZodFirstPartyTypeKind.ZodDate:return parseDateDef(t,u);case ZodFirstPartyTypeKind.ZodUndefined:return parseUndefinedDef(u);case ZodFirstPartyTypeKind.ZodNull:return parseNullDef(u);case ZodFirstPartyTypeKind.ZodArray:return parseArrayDef(t,u);case ZodFirstPartyTypeKind.ZodUnion:case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:return parseUnionDef(t,u);case ZodFirstPartyTypeKind.ZodIntersection:return parseIntersectionDef(t,u);case ZodFirstPartyTypeKind.ZodTuple:return parseTupleDef(t,u);case ZodFirstPartyTypeKind.ZodRecord:return parseRecordDef(t,u);case ZodFirstPartyTypeKind.ZodLiteral:return parseLiteralDef(t,u);case ZodFirstPartyTypeKind.ZodEnum:return parseEnumDef(t);case ZodFirstPartyTypeKind.ZodNativeEnum:return parseNativeEnumDef(t);case ZodFirstPartyTypeKind.ZodNullable:return parseNullableDef(t,u);case ZodFirstPartyTypeKind.ZodOptional:return parseOptionalDef(t,u);case ZodFirstPartyTypeKind.ZodMap:return parseMapDef(t,u);case ZodFirstPartyTypeKind.ZodSet:return parseSetDef(t,u);case ZodFirstPartyTypeKind.ZodLazy:return()=>t.getter()._def;case ZodFirstPartyTypeKind.ZodPromise:return parsePromiseDef(t,u);case ZodFirstPartyTypeKind.ZodNaN:case ZodFirstPartyTypeKind.ZodNever:return parseNeverDef(u);case ZodFirstPartyTypeKind.ZodEffects:return parseEffectsDef(t,u);case ZodFirstPartyTypeKind.ZodAny:return parseAnyDef(u);case ZodFirstPartyTypeKind.ZodUnknown:return parseUnknownDef(u);case ZodFirstPartyTypeKind.ZodDefault:return parseDefaultDef(t,u);case ZodFirstPartyTypeKind.ZodBranded:return parseBrandedDef(t,u);case ZodFirstPartyTypeKind.ZodReadonly:return parseReadonlyDef(t,u);case ZodFirstPartyTypeKind.ZodCatch:return parseCatchDef(t,u);case ZodFirstPartyTypeKind.ZodPipeline:return parsePipelineDef(t,u);case ZodFirstPartyTypeKind.ZodFunction:case ZodFirstPartyTypeKind.ZodVoid:case ZodFirstPartyTypeKind.ZodSymbol:return;default:return(t=>void 0)(c)}}}));function parseDef(t,c,u=!1){let d=c.seen.get(t);if(c.override){let m=c.override?.(t,c,d,u);if(m!==ignoreOverride)return m}if(d&&!u){let t=get$ref(d,c);if(t!==void 0)return t}let m={def:t,path:c.currentPath,jsonSchema:void 0};c.seen.set(t,m);let g=selectParser(t,t.typeName,c),b=typeof g==`function`?parseDef(g(),c):g;if(b&&addMeta(t,c,b),c.postProcess){let u=c.postProcess(b,t,c);return m.jsonSchema=b,u}return m.jsonSchema=b,b}var get$ref,addMeta,init_parseDef=__esmMin((()=>{init_Options(),init_selectParser(),init_getRelativePath(),init_any(),get$ref=(t,c)=>{switch(c.$refStrategy){case`root`:return{$ref:t.path.join(`/`)};case`relative`:return{$ref:getRelativePath(c.currentPath,t.path)};case`none`:case`seen`:return t.path.length<c.currentPath.length&&t.path.every((t,u)=>c.currentPath[u]===t)?(console.warn(`Recursive reference detected at ${c.currentPath.join(`/`)}! Defaulting to any`),parseAnyDef(c)):c.$refStrategy===`seen`?parseAnyDef(c):void 0}},addMeta=(t,c,u)=>(t.description&&(u.description=t.description,c.markdownDescription&&(u.markdownDescription=t.description)),u)})),init_parseTypes=__esmMin((()=>{})),zodToJsonSchema,init_zodToJsonSchema=__esmMin((()=>{init_parseDef(),init_Refs(),init_any(),zodToJsonSchema=(t,c)=>{let u=getRefs(c),d=typeof c==`object`&&c.definitions?Object.entries(c.definitions).reduce((t,[c,d])=>({...t,[c]:parseDef(d._def,{...u,currentPath:[...u.basePath,u.definitionPath,c]},!0)??parseAnyDef(u)}),{}):void 0,m=typeof c==`string`?c:c?.nameStrategy===`title`?void 0:c?.name,g=parseDef(t._def,m===void 0?u:{...u,currentPath:[...u.basePath,u.definitionPath,m]},!1)??parseAnyDef(u),b=typeof c==`object`&&c.name!==void 0&&c.nameStrategy===`title`?c.name:void 0;b!==void 0&&(g.title=b),u.flags.hasReferencedOpenAiAnyType&&(d||(d={}),d[u.openAiAnyTypeName]||(d[u.openAiAnyTypeName]={type:[`string`,`number`,`integer`,`boolean`,`array`,`null`],items:{$ref:u.$refStrategy===`relative`?`1`:[...u.basePath,u.definitionPath,u.openAiAnyTypeName].join(`/`)}}));let S=m===void 0?d?{...g,[u.definitionPath]:d}:g:{$ref:[...u.$refStrategy===`relative`?[]:u.basePath,u.definitionPath,m].join(`/`),[u.definitionPath]:{...d,[m]:g}};return u.target===`jsonSchema7`?S.$schema=`http://json-schema.org/draft-07/schema#`:(u.target===`jsonSchema2019-09`||u.target===`openAi`)&&(S.$schema=`https://json-schema.org/draft/2019-09/schema#`),u.target===`openAi`&&(`anyOf`in S||`oneOf`in S||`allOf`in S||`type`in S&&Array.isArray(S.type))&&console.warn(`Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.`),S}})),init_esm=__esmMin((()=>{init_Options(),init_Refs(),init_errorMessages(),init_getRelativePath(),init_parseDef(),init_parseTypes(),init_any(),init_array(),init_bigint(),init_boolean(),init_branded(),init_catch(),init_date(),init_default(),init_effects(),init_enum(),init_intersection(),init_literal(),init_map(),init_nativeEnum(),init_never(),init_null(),init_nullable(),init_number(),init_object(),init_optional(),init_pipeline(),init_promise(),init_readonly(),init_record(),init_set(),init_string(),init_tuple(),init_undefined(),init_union(),init_unknown(),init_selectParser(),init_zodToJsonSchema()}));function fieldTypeToZodSchema(t){let c;switch(t.type){case FieldType.STRING:c=stringType().min(1,`${t.name} cannot be empty`);break;case FieldType.MARKDOWN:c=stringType().min(1,`${t.name} cannot be empty`),c=t.name===`Input`?c.refine(t=>typeof t==`string`&&t.includes(`{{`)&&t.includes(`}}`),`Must contain at least one blank in format {{answer}} or {{answer1|answer2||distractor}}`).describe(`Markdown text with blanks. Format: {{answer}} for fill-in or {{answer1|answer2||distractor1|distractor2}} for multiple choice. Use the 'fill-in-card-authoring' MCP prompt for detailed syntax guidance.`):c.describe(`Markdown content`);break;case FieldType.NUMBER:c=numberType().describe(`Numeric value for ${t.name}`);break;case FieldType.INT:c=numberType().int().describe(`Integer value for ${t.name}`);break;case FieldType.IMAGE:c=anyType().optional().describe(`Image file`);break;case FieldType.AUDIO:c=anyType().optional().describe(`Audio file`);break;case FieldType.MIDI:c=anyType().optional().describe(`MIDI file`);break;case FieldType.MEDIA_UPLOADS:c=arrayType(anyType()).optional().describe(`Optional media files (images, audio, etc.)`);break;case FieldType.CHESS_PUZZLE:c=stringType().min(1,`Chess puzzle cannot be empty`).describe(`Chess puzzle in FEN or PGN format`);break;default:c=anyType().describe(`Field of type ${t.type}`)}if(t.validator){let u=t.validator;c=c.refine(t=>{try{return u.test(String(t)).status===Status.ok}catch{return!1}},{message:u.instructions||`Validation failed for ${t.name}`}),u.instructions&&(c=c.describe(`${c.description||``}\nInstructions: ${u.instructions}`.trim()))}return c}function toZod(t){let c={};return t.fields.forEach(t=>{c[t.name]=fieldTypeToZodSchema(t)}),objectType(c).describe(`DataShape: ${t.name} - Schema for card creation`)}function toZodJSON(t){let c=zodToJsonSchema(toZod(t));return JSON.stringify(c,null,2)}var init_dataShapeToZod=__esmMin((()=>{init_zod(),init_esm(),init_dist$1()})),init_dist$1=__esmMin((()=>{init_wire_format(),init_course_data(),init_elo$1(),init_namespacer(),init_logshim(),init_validators(),init_fieldConverters(),init_db(),init_logger$1(),init_cardParser(),init_types$2(),init_interfaces$1(),init_enums(),init_dataShapeToZod()})),n,r,__name$1,i$1,a,o,s,__commonJSMin$1,__copyProps$1,__toESM$1,l,init_shapes_BQUVJdp5=__esmMin((()=>{init_dist$1(),n=Object.create,r=Object.defineProperty,__name$1=__name$2((t,c)=>r(t,`name`,{value:c,configurable:!0}),`__name`),i$1=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,__commonJSMin$1=__name$2((t,c)=>()=>(c||t((c={exports:{}}).exports,c),c.exports),`__commonJSMin`),__copyProps$1=__name$2((t,c,u,d)=>{if(c&&typeof c==`object`||typeof c==`function`)for(var m=a(c),g=0,b=m.length,S;g<b;g++)S=m[g],!s.call(t,S)&&S!==u&&r(t,S,{get:(t=>c[t]).bind(null,S),enumerable:!(d=i$1(c,S))||d.enumerable});return t},`__copyProps`),__toESM$1=__name$2((t,c,u)=>(u=t==null?{}:n(o(t)),__copyProps$1(c||!t||!t.__esModule?r(u,`default`,{value:t,enumerable:!0}):u,t)),`__toESM`),l=[{name:DataShapeName.Blanks,fields:[{name:`Input`,type:FieldType.MARKDOWN},{name:`Uploads`,type:FieldType.MEDIA_UPLOADS}]}]})),shared_esm_bundler_exports=__exportAll$1({EMPTY_ARR:()=>EMPTY_ARR,EMPTY_OBJ:()=>EMPTY_OBJ,NO:()=>NO,NOOP:()=>NOOP,PatchFlagNames:()=>PatchFlagNames,PatchFlags:()=>PatchFlags,ShapeFlags:()=>ShapeFlags,SlotFlags:()=>SlotFlags,camelize:()=>camelize,capitalize:()=>capitalize,cssVarNameEscapeSymbolsRE:()=>cssVarNameEscapeSymbolsRE,def:()=>def,escapeHtml:()=>escapeHtml,escapeHtmlComment:()=>escapeHtmlComment,extend:()=>extend$2,genCacheKey:()=>genCacheKey,genPropsAccessExp:()=>genPropsAccessExp,generateCodeFrame:()=>generateCodeFrame,getEscapedCssVarName:()=>getEscapedCssVarName,getGlobalThis:()=>getGlobalThis,hasChanged:()=>hasChanged,hasOwn:()=>hasOwn,hyphenate:()=>hyphenate,includeBooleanAttr:()=>includeBooleanAttr,invokeArrayFns:()=>invokeArrayFns,isArray:()=>isArray$3,isBooleanAttr:()=>isBooleanAttr,isBuiltInDirective:()=>isBuiltInDirective,isDate:()=>isDate$1,isFunction:()=>isFunction$1,isGloballyAllowed:()=>isGloballyAllowed,isGloballyWhitelisted:()=>isGloballyWhitelisted,isHTMLTag:()=>isHTMLTag,isIntegerKey:()=>isIntegerKey,isKnownHtmlAttr:()=>isKnownHtmlAttr,isKnownMathMLAttr:()=>isKnownMathMLAttr,isKnownSvgAttr:()=>isKnownSvgAttr,isMap:()=>isMap,isMathMLTag:()=>isMathMLTag,isModelListener:()=>isModelListener,isObject:()=>isObject$1,isOn:()=>isOn,isPlainObject:()=>isPlainObject$3,isPromise:()=>isPromise,isRegExp:()=>isRegExp,isRenderableAttrValue:()=>isRenderableAttrValue,isReservedProp:()=>isReservedProp,isSSRSafeAttrName:()=>isSSRSafeAttrName,isSVGTag:()=>isSVGTag,isSet:()=>isSet,isSpecialBooleanAttr:()=>isSpecialBooleanAttr,isString:()=>isString$1,isSymbol:()=>isSymbol,isVoidTag:()=>isVoidTag,looseEqual:()=>looseEqual,looseIndexOf:()=>looseIndexOf,looseToNumber:()=>looseToNumber,makeMap:()=>makeMap,normalizeClass:()=>normalizeClass,normalizeProps:()=>normalizeProps,normalizeStyle:()=>normalizeStyle,objectToString:()=>objectToString,parseStringStyle:()=>parseStringStyle,propsToAttrMap:()=>propsToAttrMap,remove:()=>remove,slotFlagsText:()=>slotFlagsText,stringifyStyle:()=>stringifyStyle,toDisplayString:()=>toDisplayString,toHandlerKey:()=>toHandlerKey,toNumber:()=>toNumber,toRawType:()=>toRawType,toTypeString:()=>toTypeString});function makeMap(t){let c=Object.create(null);for(let u of t.split(`,`))c[u]=1;return t=>t in c}function genPropsAccessExp(t){return identRE.test(t)?`__props.${t}`:`__props[${JSON.stringify(t)}]`}function genCacheKey(t,c){return t+JSON.stringify(c,(t,c)=>typeof c==`function`?c.toString():c)}function generateCodeFrame(t,c=0,u=t.length){if(c=Math.max(0,Math.min(c,t.length)),u=Math.max(0,Math.min(u,t.length)),c>u)return``;let d=t.split(/(\r?\n)/),m=d.filter((t,c)=>c%2==1);d=d.filter((t,c)=>c%2==0);let g=0,b=[];for(let t=0;t<d.length;t++)if(g+=d[t].length+(m[t]&&m[t].length||0),g>=c){for(let S=t-range;S<=t+range||u>g;S++){if(S<0||S>=d.length)continue;let C=S+1;b.push(`${C}${` `.repeat(Math.max(3-String(C).length,0))}| ${d[S]}`);let w=d[S].length,T=m[S]&&m[S].length||0;if(S===t){let t=c-(g-(w+T)),d=Math.max(1,u>g?w-t:u-c);b.push(` | `+` `.repeat(t)+`^`.repeat(d))}else if(S>t){if(u>g){let t=Math.max(Math.min(u-g,w),1);b.push(` | `+`^`.repeat(t))}g+=w+T}}break}return b.join(`
|
|
5
|
-
`)}function normalizeStyle(t){if(isArray$3(t)){let c={};for(let u=0;u<t.length;u++){let d=t[u],m=isString$1(d)?parseStringStyle(d):normalizeStyle(d);if(m)for(let t in m)c[t]=m[t]}return c}else if(isString$1(t)||isObject$1(t))return t}function parseStringStyle(t){let c={};return t.replace(styleCommentRE,``).split(listDelimiterRE).forEach(t=>{if(t){let u=t.split(propertyDelimiterRE);u.length>1&&(c[u[0].trim()]=u[1].trim())}}),c}function stringifyStyle(t){if(!t)return``;if(isString$1(t))return t;let c=``;for(let u in t){let d=t[u];if(isString$1(d)||typeof d==`number`){let t=u.startsWith(`--`)?u:hyphenate(u);c+=`${t}:${d};`}}return c}function normalizeClass(t){let c=``;if(isString$1(t))c=t;else if(isArray$3(t))for(let u=0;u<t.length;u++){let d=normalizeClass(t[u]);d&&(c+=d+` `)}else if(isObject$1(t))for(let u in t)t[u]&&(c+=u+` `);return c.trim()}function normalizeProps(t){if(!t)return null;let{class:c,style:u}=t;return c&&!isString$1(c)&&(t.class=normalizeClass(c)),u&&(t.style=normalizeStyle(u)),t}function includeBooleanAttr(t){return!!t||t===``}function isSSRSafeAttrName(t){if(attrValidationCache.hasOwnProperty(t))return attrValidationCache[t];let c=unsafeAttrCharRE.test(t);return c&&console.error(`unsafe attribute name: ${t}`),attrValidationCache[t]=!c}function isRenderableAttrValue(t){if(t==null)return!1;let c=typeof t;return c===`string`||c===`number`||c===`boolean`}function escapeHtml(t){let c=``+t,u=escapeRE.exec(c);if(!u)return c;let d=``,m,g,b=0;for(g=u.index;g<c.length;g++){switch(c.charCodeAt(g)){case 34:m=`"`;break;case 38:m=`&`;break;case 39:m=`'`;break;case 60:m=`<`;break;case 62:m=`>`;break;default:continue}b!==g&&(d+=c.slice(b,g)),b=g+1,d+=m}return b===g?d:d+c.slice(b,g)}function escapeHtmlComment(t){return t.replace(commentStripRE,``)}function getEscapedCssVarName(t,c){return t.replace(cssVarNameEscapeSymbolsRE,t=>c?t===`"`?`\\\\\\"`:`\\\\${t}`:`\\${t}`)}function looseCompareArrays(t,c){if(t.length!==c.length)return!1;let u=!0;for(let d=0;u&&d<t.length;d++)u=looseEqual(t[d],c[d]);return u}function looseEqual(t,c){if(t===c)return!0;let u=isDate$1(t),d=isDate$1(c);if(u||d)return u&&d?t.getTime()===c.getTime():!1;if(u=isSymbol(t),d=isSymbol(c),u||d)return t===c;if(u=isArray$3(t),d=isArray$3(c),u||d)return u&&d?looseCompareArrays(t,c):!1;if(u=isObject$1(t),d=isObject$1(c),u||d){if(!u||!d||Object.keys(t).length!==Object.keys(c).length)return!1;for(let u in t){let d=t.hasOwnProperty(u),m=c.hasOwnProperty(u);if(d&&!m||!d&&m||!looseEqual(t[u],c[u]))return!1}}return String(t)===String(c)}function looseIndexOf(t,c){return t.findIndex(t=>looseEqual(t,c))}var EMPTY_OBJ,EMPTY_ARR,NOOP,NO,isOn,isModelListener,extend$2,remove,hasOwnProperty$1,hasOwn,isArray$3,isMap,isSet,isDate$1,isRegExp,isFunction$1,isString$1,isSymbol,isObject$1,isPromise,objectToString,toTypeString,toRawType,isPlainObject$3,isIntegerKey,isReservedProp,isBuiltInDirective,cacheStringFunction,camelizeRE,camelize,hyphenateRE,hyphenate,capitalize,toHandlerKey,hasChanged,invokeArrayFns,def,looseToNumber,toNumber,_globalThis,getGlobalThis,identRE,PatchFlags,PatchFlagNames,ShapeFlags,SlotFlags,slotFlagsText,isGloballyAllowed,isGloballyWhitelisted,range,listDelimiterRE,propertyDelimiterRE,styleCommentRE,HTML_TAGS,SVG_TAGS,MATH_TAGS,VOID_TAGS,isHTMLTag,isSVGTag,isMathMLTag,isVoidTag,specialBooleanAttrs,isSpecialBooleanAttr,isBooleanAttr,unsafeAttrCharRE,attrValidationCache,propsToAttrMap,isKnownHtmlAttr,isKnownSvgAttr,isKnownMathMLAttr,escapeRE,commentStripRE,cssVarNameEscapeSymbolsRE,isRef$1,toDisplayString,replacer,stringifySymbol,init_shared_esm_bundler=__esmMin((()=>{EMPTY_OBJ=process.env.NODE_ENV===`production`?{}:Object.freeze({}),EMPTY_ARR=process.env.NODE_ENV===`production`?[]:Object.freeze([]),NOOP=()=>{},NO=()=>!1,isOn=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),isModelListener=t=>t.startsWith(`onUpdate:`),extend$2=Object.assign,remove=(t,c)=>{let u=t.indexOf(c);u>-1&&t.splice(u,1)},hasOwnProperty$1=Object.prototype.hasOwnProperty,hasOwn=(t,c)=>hasOwnProperty$1.call(t,c),isArray$3=Array.isArray,isMap=t=>toTypeString(t)===`[object Map]`,isSet=t=>toTypeString(t)===`[object Set]`,isDate$1=__name$2(t=>toTypeString(t)===`[object Date]`,`isDate`),isRegExp=t=>toTypeString(t)===`[object RegExp]`,isFunction$1=__name$2(t=>typeof t==`function`,`isFunction`),isString$1=__name$2(t=>typeof t==`string`,`isString`),isSymbol=t=>typeof t==`symbol`,isObject$1=__name$2(t=>typeof t==`object`&&!!t,`isObject`),isPromise=t=>(isObject$1(t)||isFunction$1(t))&&isFunction$1(t.then)&&isFunction$1(t.catch),objectToString=Object.prototype.toString,toTypeString=t=>objectToString.call(t),toRawType=t=>toTypeString(t).slice(8,-1),isPlainObject$3=__name$2(t=>toTypeString(t)===`[object Object]`,`isPlainObject`),isIntegerKey=t=>isString$1(t)&&t!==`NaN`&&t[0]!==`-`&&``+parseInt(t,10)===t,isReservedProp=makeMap(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),isBuiltInDirective=makeMap(`bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo`),cacheStringFunction=t=>{let c=Object.create(null);return u=>c[u]||(c[u]=t(u))},camelizeRE=/-(\w)/g,camelize=cacheStringFunction(t=>t.replace(camelizeRE,(t,c)=>c?c.toUpperCase():``)),hyphenateRE=/\B([A-Z])/g,hyphenate=cacheStringFunction(t=>t.replace(hyphenateRE,`-$1`).toLowerCase()),capitalize=cacheStringFunction(t=>t.charAt(0).toUpperCase()+t.slice(1)),toHandlerKey=cacheStringFunction(t=>t?`on${capitalize(t)}`:``),hasChanged=(t,c)=>!Object.is(t,c),invokeArrayFns=(t,...c)=>{for(let u=0;u<t.length;u++)t[u](...c)},def=(t,c,u,d=!1)=>{Object.defineProperty(t,c,{configurable:!0,enumerable:!1,writable:d,value:u})},looseToNumber=t=>{let c=parseFloat(t);return isNaN(c)?t:c},toNumber=t=>{let c=isString$1(t)?Number(t):NaN;return isNaN(c)?t:c},getGlobalThis=()=>_globalThis||(_globalThis=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`||typeof window<`u`?window:{}),identRE=/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/,PatchFlags={TEXT:1,1:`TEXT`,CLASS:2,2:`CLASS`,STYLE:4,4:`STYLE`,PROPS:8,8:`PROPS`,FULL_PROPS:16,16:`FULL_PROPS`,NEED_HYDRATION:32,32:`NEED_HYDRATION`,STABLE_FRAGMENT:64,64:`STABLE_FRAGMENT`,KEYED_FRAGMENT:128,128:`KEYED_FRAGMENT`,UNKEYED_FRAGMENT:256,256:`UNKEYED_FRAGMENT`,NEED_PATCH:512,512:`NEED_PATCH`,DYNAMIC_SLOTS:1024,1024:`DYNAMIC_SLOTS`,DEV_ROOT_FRAGMENT:2048,2048:`DEV_ROOT_FRAGMENT`,CACHED:-1,"-1":`CACHED`,BAIL:-2,"-2":`BAIL`},PatchFlagNames={1:`TEXT`,2:`CLASS`,4:`STYLE`,8:`PROPS`,16:`FULL_PROPS`,32:`NEED_HYDRATION`,64:`STABLE_FRAGMENT`,128:`KEYED_FRAGMENT`,256:`UNKEYED_FRAGMENT`,512:`NEED_PATCH`,1024:`DYNAMIC_SLOTS`,2048:`DEV_ROOT_FRAGMENT`,[-1]:`HOISTED`,[-2]:`BAIL`},ShapeFlags={ELEMENT:1,1:`ELEMENT`,FUNCTIONAL_COMPONENT:2,2:`FUNCTIONAL_COMPONENT`,STATEFUL_COMPONENT:4,4:`STATEFUL_COMPONENT`,TEXT_CHILDREN:8,8:`TEXT_CHILDREN`,ARRAY_CHILDREN:16,16:`ARRAY_CHILDREN`,SLOTS_CHILDREN:32,32:`SLOTS_CHILDREN`,TELEPORT:64,64:`TELEPORT`,SUSPENSE:128,128:`SUSPENSE`,COMPONENT_SHOULD_KEEP_ALIVE:256,256:`COMPONENT_SHOULD_KEEP_ALIVE`,COMPONENT_KEPT_ALIVE:512,512:`COMPONENT_KEPT_ALIVE`,COMPONENT:6,6:`COMPONENT`},SlotFlags={STABLE:1,1:`STABLE`,DYNAMIC:2,2:`DYNAMIC`,FORWARDED:3,3:`FORWARDED`},slotFlagsText={1:`STABLE`,2:`DYNAMIC`,3:`FORWARDED`},isGloballyAllowed=makeMap(`Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol`),isGloballyWhitelisted=isGloballyAllowed,range=2,listDelimiterRE=/;(?![^(]*\))/g,propertyDelimiterRE=/:([^]+)/,styleCommentRE=/\/\*[^]*?\*\//g,HTML_TAGS=`html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot`,SVG_TAGS=`svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view`,MATH_TAGS=`annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics`,VOID_TAGS=`area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr`,isHTMLTag=makeMap(HTML_TAGS),isSVGTag=makeMap(SVG_TAGS),isMathMLTag=makeMap(MATH_TAGS),isVoidTag=makeMap(VOID_TAGS),specialBooleanAttrs=`itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`,isSpecialBooleanAttr=makeMap(specialBooleanAttrs),isBooleanAttr=makeMap(specialBooleanAttrs+`,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`),unsafeAttrCharRE=/[>/="'\u0009\u000a\u000c\u0020]/,attrValidationCache={},propsToAttrMap={acceptCharset:`accept-charset`,className:`class`,htmlFor:`for`,httpEquiv:`http-equiv`},isKnownHtmlAttr=makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`),isKnownSvgAttr=makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`),isKnownMathMLAttr=makeMap(`accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`),escapeRE=/["'&<>]/,commentStripRE=/^-?>|<!--|-->|--!>|<!-$/g,cssVarNameEscapeSymbolsRE=/[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,isRef$1=__name$2(t=>!!(t&&t.__v_isRef===!0),`isRef`),toDisplayString=t=>isString$1(t)?t:t==null?``:isArray$3(t)||isObject$1(t)&&(t.toString===objectToString||!isFunction$1(t.toString))?isRef$1(t)?toDisplayString(t.value):JSON.stringify(t,replacer,2):String(t),replacer=(t,c)=>isRef$1(c)?replacer(t,c.value):isMap(c)?{[`Map(${c.size})`]:[...c.entries()].reduce((t,[c,u],d)=>(t[stringifySymbol(c,d)+` =>`]=u,t),{})}:isSet(c)?{[`Set(${c.size})`]:[...c.values()].map(t=>stringifySymbol(t))}:isSymbol(c)?stringifySymbol(c):isObject$1(c)&&!isArray$3(c)&&!isPlainObject$3(c)?String(c):c,stringifySymbol=(t,c=``)=>{var u;return isSymbol(t)?`Symbol(${t.description??c})`:t}}));function warn$3(t,...c){console.warn(`[Vue warn] ${t}`,...c)}function effectScope(t){return new EffectScope(t)}function getCurrentScope(){return activeEffectScope}function onScopeDispose(t,c=!1){activeEffectScope?activeEffectScope.cleanups.push(t):process.env.NODE_ENV!==`production`&&!c&&warn$3(`onScopeDispose() is called when there is no active effect scope to be associated with.`)}function batch(t,c=!1){if(t.flags|=8,c){t.next=batchedComputed,batchedComputed=t;return}t.next=batchedSub,batchedSub=t}function startBatch(){batchDepth++}function endBatch(){if(--batchDepth>0)return;if(batchedComputed){let t=batchedComputed;for(batchedComputed=void 0;t;){let c=t.next;t.next=void 0,t.flags&=-9,t=c}}let t;for(;batchedSub;){let c=batchedSub;for(batchedSub=void 0;c;){let u=c.next;if(c.next=void 0,c.flags&=-9,c.flags&1)try{c.trigger()}catch(c){t||(t=c)}c=u}}if(t)throw t}function prepareDeps(t){for(let c=t.deps;c;c=c.nextDep)c.version=-1,c.prevActiveLink=c.dep.activeLink,c.dep.activeLink=c}function cleanupDeps(t){let c,u=t.depsTail,d=u;for(;d;){let t=d.prevDep;d.version===-1?(d===u&&(u=t),removeSub(d),removeDep(d)):c=d,d.dep.activeLink=d.prevActiveLink,d.prevActiveLink=void 0,d=t}t.deps=c,t.depsTail=u}function isDirty(t){for(let c=t.deps;c;c=c.nextDep)if(c.dep.version!==c.version||c.dep.computed&&(refreshComputed(c.dep.computed)||c.dep.version!==c.version))return!0;return!!t._dirty}function refreshComputed(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===globalVersion))return;t.globalVersion=globalVersion;let c=t.dep;if(t.flags|=2,c.version>0&&!t.isSSR&&t.deps&&!isDirty(t)){t.flags&=-3;return}let u=activeSub,d=shouldTrack;activeSub=t,shouldTrack=!0;try{prepareDeps(t);let u=t.fn(t._value);(c.version===0||hasChanged(u,t._value))&&(t._value=u,c.version++)}catch(t){throw c.version++,t}finally{activeSub=u,shouldTrack=d,cleanupDeps(t),t.flags&=-3}}function removeSub(t,c=!1){let{dep:u,prevSub:d,nextSub:m}=t;if(d&&(d.nextSub=m,t.prevSub=void 0),m&&(m.prevSub=d,t.nextSub=void 0),process.env.NODE_ENV!==`production`&&u.subsHead===t&&(u.subsHead=m),u.subs===t&&(u.subs=d,!d&&u.computed)){u.computed.flags&=-5;for(let t=u.computed.deps;t;t=t.nextDep)removeSub(t,!0)}!c&&!--u.sc&&u.map&&u.map.delete(u.key)}function removeDep(t){let{prevDep:c,nextDep:u}=t;c&&(c.nextDep=u,t.prevDep=void 0),u&&(u.prevDep=c,t.nextDep=void 0)}function effect(t,c){t.effect instanceof ReactiveEffect&&(t=t.effect.fn);let u=new ReactiveEffect(t);c&&extend$2(u,c);try{u.run()}catch(t){throw u.stop(),t}let d=u.run.bind(u);return d.effect=u,d}function stop(t){t.effect.stop()}function pauseTracking(){trackStack.push(shouldTrack),shouldTrack=!1}function resetTracking(){let t=trackStack.pop();shouldTrack=t===void 0?!0:t}function cleanupEffect(t){let{cleanup:c}=t;if(t.cleanup=void 0,c){let t=activeSub;activeSub=void 0;try{c()}finally{activeSub=t}}}function addSub(t){if(t.dep.sc++,t.sub.flags&4){let c=t.dep.computed;if(c&&!t.dep.subs){c.flags|=20;for(let t=c.deps;t;t=t.nextDep)addSub(t)}let u=t.dep.subs;u!==t&&(t.prevSub=u,u&&(u.nextSub=t)),process.env.NODE_ENV!==`production`&&t.dep.subsHead===void 0&&(t.dep.subsHead=t),t.dep.subs=t}}function track(t,c,u){if(shouldTrack&&activeSub){let d=targetMap.get(t);d||targetMap.set(t,d=new Map);let m=d.get(u);m||(d.set(u,m=new Dep),m.map=d,m.key=u),process.env.NODE_ENV===`production`?m.track():m.track({target:t,type:c,key:u})}}function trigger(t,c,u,d,m,g){let b=targetMap.get(t);if(!b){globalVersion++;return}let run=b=>{b&&(process.env.NODE_ENV===`production`?b.trigger():b.trigger({target:t,type:c,key:u,newValue:d,oldValue:m,oldTarget:g}))};if(startBatch(),c===`clear`)b.forEach(run);else{let m=isArray$3(t),g=m&&isIntegerKey(u);if(m&&u===`length`){let t=Number(d);b.forEach((c,u)=>{(u===`length`||u===ARRAY_ITERATE_KEY||!isSymbol(u)&&u>=t)&&run(c)})}else switch((u!==void 0||b.has(void 0))&&run(b.get(u)),g&&run(b.get(ARRAY_ITERATE_KEY)),c){case`add`:m?g&&run(b.get(`length`)):(run(b.get(ITERATE_KEY)),isMap(t)&&run(b.get(MAP_KEY_ITERATE_KEY)));break;case`delete`:m||(run(b.get(ITERATE_KEY)),isMap(t)&&run(b.get(MAP_KEY_ITERATE_KEY)));break;case`set`:isMap(t)&&run(b.get(ITERATE_KEY));break}}endBatch()}function getDepFromReactive(t,c){let u=targetMap.get(t);return u&&u.get(c)}function reactiveReadArray(t){let c=toRaw(t);return c===t?c:(track(c,`iterate`,ARRAY_ITERATE_KEY),isShallow(t)?c:c.map(toReactive))}function shallowReadArray(t){return track(t=toRaw(t),`iterate`,ARRAY_ITERATE_KEY),t}function iterator(t,c,u){let d=shallowReadArray(t),m=d[c]();return d!==t&&!isShallow(t)&&(m._next=m.next,m.next=()=>{let t=m._next();return t.value&&(t.value=u(t.value)),t}),m}function apply(t,c,u,d,m,g){let b=shallowReadArray(t),S=b!==t&&!isShallow(t),C=b[c];if(C!==arrayProto[c]){let c=C.apply(t,g);return S?toReactive(c):c}let wrappedFn=u;b!==t&&(S?wrappedFn=function(c,d){return u.call(this,toReactive(c),d,t)}:u.length>2&&(wrappedFn=function(c,d){return u.call(this,c,d,t)}));let w=C.call(b,wrappedFn,d);return S&&m?m(w):w}function reduce(t,c,u,d){let m=shallowReadArray(t),wrappedFn=u;return m!==t&&(isShallow(t)?u.length>3&&(wrappedFn=function(c,d,m){return u.call(this,c,d,m,t)}):wrappedFn=function(c,d,m){return u.call(this,c,toReactive(d),m,t)}),m[c](wrappedFn,...d)}function searchProxy(t,c,u){let d=toRaw(t);track(d,`iterate`,ARRAY_ITERATE_KEY);let m=d[c](...u);return(m===-1||m===!1)&&isProxy(u[0])?(u[0]=toRaw(u[0]),d[c](...u)):m}function noTracking(t,c,u=[]){pauseTracking(),startBatch();let d=toRaw(t)[c].apply(t,u);return endBatch(),resetTracking(),d}function hasOwnProperty(t){isSymbol(t)||(t=String(t));let c=toRaw(this);return track(c,`has`,t),c.hasOwnProperty(t)}function createIterableMethod(t,c,u){return function(...d){let m=this.__v_raw,g=toRaw(m),b=isMap(g),S=t===`entries`||t===Symbol.iterator&&b,C=t===`keys`&&b,w=m[t](...d),T=u?toShallow:c?toReadonly:toReactive;return!c&&track(g,`iterate`,C?MAP_KEY_ITERATE_KEY:ITERATE_KEY),{next(){let{value:t,done:c}=w.next();return c?{value:t,done:c}:{value:S?[T(t[0]),T(t[1])]:T(t),done:c}},[Symbol.iterator](){return this}}}}function createReadonlyMethod(t){return function(...c){if(process.env.NODE_ENV!==`production`){let u=c[0]?`on key "${c[0]}" `:``;warn$3(`${capitalize(t)} operation ${u}failed: target is readonly.`,toRaw(this))}return t===`delete`?!1:t===`clear`?void 0:this}}function createInstrumentations(t,c){let u={get(u){let d=this.__v_raw,m=toRaw(d),g=toRaw(u);t||(hasChanged(u,g)&&track(m,`get`,u),track(m,`get`,g));let{has:b}=getProto(m),S=c?toShallow:t?toReadonly:toReactive;if(b.call(m,u))return S(d.get(u));if(b.call(m,g))return S(d.get(g));d!==m&&d.get(u)},get size(){let c=this.__v_raw;return!t&&track(toRaw(c),`iterate`,ITERATE_KEY),Reflect.get(c,`size`,c)},has(c){let u=this.__v_raw,d=toRaw(u),m=toRaw(c);return t||(hasChanged(c,m)&&track(d,`has`,c),track(d,`has`,m)),c===m?u.has(c):u.has(c)||u.has(m)},forEach(u,d){let m=this,g=m.__v_raw,b=toRaw(g),S=c?toShallow:t?toReadonly:toReactive;return!t&&track(b,`iterate`,ITERATE_KEY),g.forEach((t,c)=>u.call(d,S(t),S(c),m))}};return extend$2(u,t?{add:createReadonlyMethod(`add`),set:createReadonlyMethod(`set`),delete:createReadonlyMethod(`delete`),clear:createReadonlyMethod(`clear`)}:{add(t){!c&&!isShallow(t)&&!isReadonly(t)&&(t=toRaw(t));let u=toRaw(this);return getProto(u).has.call(u,t)||(u.add(t),trigger(u,`add`,t,t)),this},set(t,u){!c&&!isShallow(u)&&!isReadonly(u)&&(u=toRaw(u));let d=toRaw(this),{has:m,get:g}=getProto(d),b=m.call(d,t);b?process.env.NODE_ENV!==`production`&&checkIdentityKeys(d,m,t):(t=toRaw(t),b=m.call(d,t));let S=g.call(d,t);return d.set(t,u),b?hasChanged(u,S)&&trigger(d,`set`,t,u,S):trigger(d,`add`,t,u),this},delete(t){let c=toRaw(this),{has:u,get:d}=getProto(c),m=u.call(c,t);m?process.env.NODE_ENV!==`production`&&checkIdentityKeys(c,u,t):(t=toRaw(t),m=u.call(c,t));let g=d?d.call(c,t):void 0,b=c.delete(t);return m&&trigger(c,`delete`,t,void 0,g),b},clear(){let t=toRaw(this),c=t.size!==0,u=process.env.NODE_ENV===`production`?void 0:isMap(t)?new Map(t):new Set(t),d=t.clear();return c&&trigger(t,`clear`,void 0,void 0,u),d}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(d=>{u[d]=createIterableMethod(d,t,c)}),u}function createInstrumentationGetter(t,c){let u=createInstrumentations(t,c);return(c,d,m)=>d===`__v_isReactive`?!t:d===`__v_isReadonly`?t:d===`__v_raw`?c:Reflect.get(hasOwn(u,d)&&d in c?u:c,d,m)}function checkIdentityKeys(t,c,u){let d=toRaw(u);if(d!==u&&c.call(t,d)){let c=toRawType(t);warn$3(`Reactive ${c} contains both the raw and reactive versions of the same object${c===`Map`?` as keys`:``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}function targetTypeMap(t){switch(t){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function getTargetType(t){return t.__v_skip||!Object.isExtensible(t)?0:targetTypeMap(toRawType(t))}function reactive(t){return isReadonly(t)?t:createReactiveObject(t,!1,mutableHandlers,mutableCollectionHandlers,reactiveMap)}function shallowReactive(t){return createReactiveObject(t,!1,shallowReactiveHandlers,shallowCollectionHandlers,shallowReactiveMap)}function readonly(t){return createReactiveObject(t,!0,readonlyHandlers,readonlyCollectionHandlers,readonlyMap)}function shallowReadonly(t){return createReactiveObject(t,!0,shallowReadonlyHandlers,shallowReadonlyCollectionHandlers,shallowReadonlyMap)}function createReactiveObject(t,c,u,d,m){if(!isObject$1(t))return process.env.NODE_ENV!==`production`&&warn$3(`value cannot be made ${c?`readonly`:`reactive`}: ${String(t)}`),t;if(t.__v_raw&&!(c&&t.__v_isReactive))return t;let g=m.get(t);if(g)return g;let b=getTargetType(t);if(b===0)return t;let S=new Proxy(t,b===2?d:u);return m.set(t,S),S}function isReactive(t){return isReadonly(t)?isReactive(t.__v_raw):!!(t&&t.__v_isReactive)}function isReadonly(t){return!!(t&&t.__v_isReadonly)}function isShallow(t){return!!(t&&t.__v_isShallow)}function isProxy(t){return t?!!t.__v_raw:!1}function toRaw(t){let c=t&&t.__v_raw;return c?toRaw(c):t}function markRaw(t){return!hasOwn(t,`__v_skip`)&&Object.isExtensible(t)&&def(t,`__v_skip`,!0),t}function isRef(t){return t?t.__v_isRef===!0:!1}function ref(t){return createRef(t,!1)}function shallowRef(t){return createRef(t,!0)}function createRef(t,c){return isRef(t)?t:new RefImpl(t,c)}function triggerRef(t){t.dep&&(process.env.NODE_ENV===`production`?t.dep.trigger():t.dep.trigger({target:t,type:`set`,key:`value`,newValue:t._value}))}function unref(t){return isRef(t)?t.value:t}function toValue(t){return isFunction$1(t)?t():unref(t)}function proxyRefs(t){return isReactive(t)?t:new Proxy(t,shallowUnwrapHandlers)}function customRef(t){return new CustomRefImpl(t)}function toRefs(t){process.env.NODE_ENV!==`production`&&!isProxy(t)&&warn$3(`toRefs() expects a reactive object but received a plain one.`);let c=isArray$3(t)?Array(t.length):{};for(let u in t)c[u]=propertyToRef(t,u);return c}function toRef(t,c,u){return isRef(t)?t:isFunction$1(t)?new GetterRefImpl(t):isObject$1(t)&&arguments.length>1?propertyToRef(t,c,u):ref(t)}function propertyToRef(t,c,u){let d=t[c];return isRef(d)?d:new ObjectRefImpl(t,c,u)}function computed$1(t,c,u=!1){let d,m;isFunction$1(t)?d=t:(d=t.get,m=t.set);let g=new ComputedRefImpl(d,m,u);return process.env.NODE_ENV!==`production`&&c&&!u&&(g.onTrack=c.onTrack,g.onTrigger=c.onTrigger),g}function getCurrentWatcher(){return activeWatcher}function onWatcherCleanup(t,c=!1,u=activeWatcher){if(u){let c=cleanupMap.get(u);c||cleanupMap.set(u,c=[]),c.push(t)}else process.env.NODE_ENV!==`production`&&!c&&warn$3(`onWatcherCleanup() was called when there was no active watcher to associate with.`)}function watch$1(t,cb,c=EMPTY_OBJ){let{immediate:u,deep:d,once:m,scheduler:g,augmentJob:b,call:S}=c,warnInvalidSource=t=>{(c.onWarn||warn$3)(`Invalid watch source: `,t,`A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`)},reactiveGetter=t=>d?t:isShallow(t)||d===!1||d===0?traverse(t,1):traverse(t),C,getter,w,boundCleanup,T=!1,E=!1;if(isRef(t)?(getter=()=>t.value,T=isShallow(t)):isReactive(t)?(getter=()=>reactiveGetter(t),T=!0):isArray$3(t)?(E=!0,T=t.some(t=>isReactive(t)||isShallow(t)),getter=()=>t.map(t=>{if(isRef(t))return t.value;if(isReactive(t))return reactiveGetter(t);if(isFunction$1(t))return S?S(t,2):t();process.env.NODE_ENV!==`production`&&warnInvalidSource(t)})):isFunction$1(t)?getter=cb?S?()=>S(t,2):t:()=>{if(w){pauseTracking();try{w()}finally{resetTracking()}}let c=activeWatcher;activeWatcher=C;try{return S?S(t,3,[boundCleanup]):t(boundCleanup)}finally{activeWatcher=c}}:(getter=NOOP,process.env.NODE_ENV!==`production`&&warnInvalidSource(t)),cb&&d){let t=getter,c=d===!0?1/0:d;getter=()=>traverse(t(),c)}let D=getCurrentScope(),watchHandle=()=>{C.stop(),D&&D.active&&remove(D.effects,C)};if(m&&cb){let t=cb;cb=(...c)=>{t(...c),watchHandle()}}let O=E?Array(t.length).fill(INITIAL_WATCHER_VALUE):INITIAL_WATCHER_VALUE,job=t=>{if(!(!(C.flags&1)||!C.dirty&&!t))if(cb){let t=C.run();if(d||T||(E?t.some((t,c)=>hasChanged(t,O[c])):hasChanged(t,O))){w&&w();let c=activeWatcher;activeWatcher=C;try{let c=[t,O===INITIAL_WATCHER_VALUE?void 0:E&&O[0]===INITIAL_WATCHER_VALUE?[]:O,boundCleanup];S?S(cb,3,c):cb(...c),O=t}finally{activeWatcher=c}}}else C.run()};return b&&b(job),C=new ReactiveEffect(getter),C.scheduler=g?()=>g(job,!1):job,boundCleanup=t=>onWatcherCleanup(t,!1,C),w=C.onStop=()=>{let t=cleanupMap.get(C);if(t){if(S)S(t,4);else for(let c of t)c();cleanupMap.delete(C)}},process.env.NODE_ENV!==`production`&&(C.onTrack=c.onTrack,C.onTrigger=c.onTrigger),cb?u?job(!0):O=C.run():g?g(job.bind(null,!0),!0):C.run(),watchHandle.pause=C.pause.bind(C),watchHandle.resume=C.resume.bind(C),watchHandle.stop=watchHandle,watchHandle}function traverse(t,c=1/0,u){if(c<=0||!isObject$1(t)||t.__v_skip||(u=u||new Set,u.has(t)))return t;if(u.add(t),c--,isRef(t))traverse(t.value,c,u);else if(isArray$3(t))for(let d=0;d<t.length;d++)traverse(t[d],c,u);else if(isSet(t)||isMap(t))t.forEach(t=>{traverse(t,c,u)});else if(isPlainObject$3(t)){for(let d in t)traverse(t[d],c,u);for(let d of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,d)&&traverse(t[d],c,u)}return t}var activeEffectScope,EffectScope,activeSub,pausedQueueEffects,ReactiveEffect,batchDepth,batchedSub,batchedComputed,shouldTrack,trackStack,globalVersion,Link,Dep,targetMap,ITERATE_KEY,MAP_KEY_ITERATE_KEY,ARRAY_ITERATE_KEY,arrayInstrumentations,arrayProto,isNonTrackableKeys,builtInSymbols,BaseReactiveHandler,MutableReactiveHandler,ReadonlyReactiveHandler,mutableHandlers,readonlyHandlers,shallowReactiveHandlers,shallowReadonlyHandlers,toShallow,getProto,mutableCollectionHandlers,shallowCollectionHandlers,readonlyCollectionHandlers,shallowReadonlyCollectionHandlers,reactiveMap,shallowReactiveMap,readonlyMap,shallowReadonlyMap,toReactive,toReadonly,RefImpl,shallowUnwrapHandlers,CustomRefImpl,ObjectRefImpl,GetterRefImpl,ComputedRefImpl,TrackOpTypes,TriggerOpTypes,INITIAL_WATCHER_VALUE,cleanupMap,activeWatcher,init_reactivity_esm_bundler=__esmMin((()=>{init_shared_esm_bundler(),__name$2(warn$3,`warn`),EffectScope=class{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=activeEffectScope,!t&&activeEffectScope&&(this.index=(activeEffectScope.scopes||(activeEffectScope.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,c;if(this.scopes)for(t=0,c=this.scopes.length;t<c;t++)this.scopes[t].pause();for(t=0,c=this.effects.length;t<c;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,c;if(this.scopes)for(t=0,c=this.scopes.length;t<c;t++)this.scopes[t].resume();for(t=0,c=this.effects.length;t<c;t++)this.effects[t].resume()}}run(t){if(this._active){let c=activeEffectScope;try{return activeEffectScope=this,t()}finally{activeEffectScope=c}}else process.env.NODE_ENV!==`production`&&warn$3(`cannot run an inactive effect scope.`)}on(){activeEffectScope=this}off(){activeEffectScope=this.parent}stop(t){if(this._active){this._active=!1;let c,u;for(c=0,u=this.effects.length;c<u;c++)this.effects[c].stop();for(this.effects.length=0,c=0,u=this.cleanups.length;c<u;c++)this.cleanups[c]();if(this.cleanups.length=0,this.scopes){for(c=0,u=this.scopes.length;c<u;c++)this.scopes[c].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){let t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0}}},pausedQueueEffects=new WeakSet,ReactiveEffect=class{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,activeEffectScope&&activeEffectScope.active&&activeEffectScope.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,pausedQueueEffects.has(this)&&(pausedQueueEffects.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||batch(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,cleanupEffect(this),prepareDeps(this);let t=activeSub,c=shouldTrack;activeSub=this,shouldTrack=!0;try{return this.fn()}finally{process.env.NODE_ENV!==`production`&&activeSub!==this&&warn$3(`Active effect was not restored correctly - this is likely a Vue internal bug.`),cleanupDeps(this),activeSub=t,shouldTrack=c,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)removeSub(t);this.deps=this.depsTail=void 0,cleanupEffect(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?pausedQueueEffects.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){isDirty(this)&&this.run()}get dirty(){return isDirty(this)}},batchDepth=0,shouldTrack=!0,trackStack=[],globalVersion=0,Link=class{constructor(t,c){this.sub=t,this.dep=c,this.version=c.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Dep=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,process.env.NODE_ENV!==`production`&&(this.subsHead=void 0)}track(t){if(!activeSub||!shouldTrack||activeSub===this.computed)return;let c=this.activeLink;if(c===void 0||c.sub!==activeSub)c=this.activeLink=new Link(activeSub,this),activeSub.deps?(c.prevDep=activeSub.depsTail,activeSub.depsTail.nextDep=c,activeSub.depsTail=c):activeSub.deps=activeSub.depsTail=c,addSub(c);else if(c.version===-1&&(c.version=this.version,c.nextDep)){let t=c.nextDep;t.prevDep=c.prevDep,c.prevDep&&(c.prevDep.nextDep=t),c.prevDep=activeSub.depsTail,c.nextDep=void 0,activeSub.depsTail.nextDep=c,activeSub.depsTail=c,activeSub.deps===c&&(activeSub.deps=t)}return process.env.NODE_ENV!==`production`&&activeSub.onTrack&&activeSub.onTrack(extend$2({effect:activeSub},t)),c}trigger(t){this.version++,globalVersion++,this.notify(t)}notify(t){startBatch();try{if(process.env.NODE_ENV!==`production`)for(let c=this.subsHead;c;c=c.nextSub)c.sub.onTrigger&&!(c.sub.flags&8)&&c.sub.onTrigger(extend$2({effect:c.sub},t));for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{endBatch()}}},targetMap=new WeakMap,ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Object iterate`),MAP_KEY_ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Map keys iterate`),ARRAY_ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Array iterate`),arrayInstrumentations={__proto__:null,[Symbol.iterator](){return iterator(this,Symbol.iterator,toReactive)},concat(...t){return reactiveReadArray(this).concat(...t.map(t=>isArray$3(t)?reactiveReadArray(t):t))},entries(){return iterator(this,`entries`,t=>(t[1]=toReactive(t[1]),t))},every(t,c){return apply(this,`every`,t,c,void 0,arguments)},filter(t,c){return apply(this,`filter`,t,c,t=>t.map(toReactive),arguments)},find(t,c){return apply(this,`find`,t,c,toReactive,arguments)},findIndex(t,c){return apply(this,`findIndex`,t,c,void 0,arguments)},findLast(t,c){return apply(this,`findLast`,t,c,toReactive,arguments)},findLastIndex(t,c){return apply(this,`findLastIndex`,t,c,void 0,arguments)},forEach(t,c){return apply(this,`forEach`,t,c,void 0,arguments)},includes(...t){return searchProxy(this,`includes`,t)},indexOf(...t){return searchProxy(this,`indexOf`,t)},join(t){return reactiveReadArray(this).join(t)},lastIndexOf(...t){return searchProxy(this,`lastIndexOf`,t)},map(t,c){return apply(this,`map`,t,c,void 0,arguments)},pop(){return noTracking(this,`pop`)},push(...t){return noTracking(this,`push`,t)},reduce(t,...c){return reduce(this,`reduce`,t,c)},reduceRight(t,...c){return reduce(this,`reduceRight`,t,c)},shift(){return noTracking(this,`shift`)},some(t,c){return apply(this,`some`,t,c,void 0,arguments)},splice(...t){return noTracking(this,`splice`,t)},toReversed(){return reactiveReadArray(this).toReversed()},toSorted(t){return reactiveReadArray(this).toSorted(t)},toSpliced(...t){return reactiveReadArray(this).toSpliced(...t)},unshift(...t){return noTracking(this,`unshift`,t)},values(){return iterator(this,`values`,toReactive)}},arrayProto=Array.prototype,isNonTrackableKeys=makeMap(`__proto__,__v_isRef,__isVue`),builtInSymbols=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!==`arguments`&&t!==`caller`).map(t=>Symbol[t]).filter(isSymbol)),BaseReactiveHandler=class{constructor(t=!1,c=!1){this._isReadonly=t,this._isShallow=c}get(t,c,u){if(c===`__v_skip`)return t.__v_skip;let d=this._isReadonly,m=this._isShallow;if(c===`__v_isReactive`)return!d;if(c===`__v_isReadonly`)return d;if(c===`__v_isShallow`)return m;if(c===`__v_raw`)return u===(d?m?shallowReadonlyMap:readonlyMap:m?shallowReactiveMap:reactiveMap).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(u)?t:void 0;let g=isArray$3(t);if(!d){let t;if(g&&(t=arrayInstrumentations[c]))return t;if(c===`hasOwnProperty`)return hasOwnProperty}let b=Reflect.get(t,c,isRef(t)?t:u);return(isSymbol(c)?builtInSymbols.has(c):isNonTrackableKeys(c))||(d||track(t,`get`,c),m)?b:isRef(b)?g&&isIntegerKey(c)?b:b.value:isObject$1(b)?d?readonly(b):reactive(b):b}},MutableReactiveHandler=class extends BaseReactiveHandler{constructor(t=!1){super(!1,t)}set(t,c,u,d){let m=t[c];if(!this._isShallow){let c=isReadonly(m);if(!isShallow(u)&&!isReadonly(u)&&(m=toRaw(m),u=toRaw(u)),!isArray$3(t)&&isRef(m)&&!isRef(u))return c?!1:(m.value=u,!0)}let g=isArray$3(t)&&isIntegerKey(c)?Number(c)<t.length:hasOwn(t,c),b=Reflect.set(t,c,u,isRef(t)?t:d);return t===toRaw(d)&&(g?hasChanged(u,m)&&trigger(t,`set`,c,u,m):trigger(t,`add`,c,u)),b}deleteProperty(t,c){let u=hasOwn(t,c),d=t[c],m=Reflect.deleteProperty(t,c);return m&&u&&trigger(t,`delete`,c,void 0,d),m}has(t,c){let u=Reflect.has(t,c);return(!isSymbol(c)||!builtInSymbols.has(c))&&track(t,`has`,c),u}ownKeys(t){return track(t,`iterate`,isArray$3(t)?`length`:ITERATE_KEY),Reflect.ownKeys(t)}},ReadonlyReactiveHandler=class extends BaseReactiveHandler{constructor(t=!1){super(!0,t)}set(t,c){return process.env.NODE_ENV!==`production`&&warn$3(`Set operation on key "${String(c)}" failed: target is readonly.`,t),!0}deleteProperty(t,c){return process.env.NODE_ENV!==`production`&&warn$3(`Delete operation on key "${String(c)}" failed: target is readonly.`,t),!0}},mutableHandlers=new MutableReactiveHandler,readonlyHandlers=new ReadonlyReactiveHandler,shallowReactiveHandlers=new MutableReactiveHandler(!0),shallowReadonlyHandlers=new ReadonlyReactiveHandler(!0),toShallow=t=>t,getProto=t=>Reflect.getPrototypeOf(t),mutableCollectionHandlers={get:createInstrumentationGetter(!1,!1)},shallowCollectionHandlers={get:createInstrumentationGetter(!1,!0)},readonlyCollectionHandlers={get:createInstrumentationGetter(!0,!1)},shallowReadonlyCollectionHandlers={get:createInstrumentationGetter(!0,!0)},reactiveMap=new WeakMap,shallowReactiveMap=new WeakMap,readonlyMap=new WeakMap,shallowReadonlyMap=new WeakMap,toReactive=t=>isObject$1(t)?reactive(t):t,toReadonly=t=>isObject$1(t)?readonly(t):t,RefImpl=class{constructor(t,c){this.dep=new Dep,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=c?t:toRaw(t),this._value=c?t:toReactive(t),this.__v_isShallow=c}get value(){return process.env.NODE_ENV===`production`?this.dep.track():this.dep.track({target:this,type:`get`,key:`value`}),this._value}set value(t){let c=this._rawValue,u=this.__v_isShallow||isShallow(t)||isReadonly(t);t=u?t:toRaw(t),hasChanged(t,c)&&(this._rawValue=t,this._value=u?t:toReactive(t),process.env.NODE_ENV===`production`?this.dep.trigger():this.dep.trigger({target:this,type:`set`,key:`value`,newValue:t,oldValue:c}))}},shallowUnwrapHandlers={get:(t,c,u)=>c===`__v_raw`?t:unref(Reflect.get(t,c,u)),set:(t,c,u,d)=>{let m=t[c];return isRef(m)&&!isRef(u)?(m.value=u,!0):Reflect.set(t,c,u,d)}},CustomRefImpl=class{constructor(t){this.__v_isRef=!0,this._value=void 0;let c=this.dep=new Dep,{get:u,set:d}=t(c.track.bind(c),c.trigger.bind(c));this._get=u,this._set=d}get value(){return this._value=this._get()}set value(t){this._set(t)}},ObjectRefImpl=class{constructor(t,c,u){this._object=t,this._key=c,this._defaultValue=u,this.__v_isRef=!0,this._value=void 0}get value(){let t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return getDepFromReactive(toRaw(this._object),this._key)}},GetterRefImpl=class{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}},ComputedRefImpl=class{constructor(t,c,u){this.fn=t,this.setter=c,this._value=void 0,this.dep=new Dep(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=globalVersion-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!c,this.isSSR=u}notify(){if(this.flags|=16,!(this.flags&8)&&activeSub!==this)return batch(this,!0),!0;process.env.NODE_ENV}get value(){let t=process.env.NODE_ENV===`production`?this.dep.track():this.dep.track({target:this,type:`get`,key:`value`});return refreshComputed(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter?this.setter(t):process.env.NODE_ENV!==`production`&&warn$3(`Write operation failed: computed value is readonly`)}},__name$2(computed$1,`computed`),TrackOpTypes={GET:`get`,HAS:`has`,ITERATE:`iterate`},TriggerOpTypes={SET:`set`,ADD:`add`,DELETE:`delete`,CLEAR:`clear`},INITIAL_WATCHER_VALUE={},cleanupMap=new WeakMap,activeWatcher=void 0,__name$2(watch$1,`watch`)}));function pushWarningContext(t){stack$1.push(t)}function popWarningContext(){stack$1.pop()}function warn$1(t,...c){if(isWarning)return;isWarning=!0,pauseTracking();let u=stack$1.length?stack$1[stack$1.length-1].component:null,d=u&&u.appContext.config.warnHandler,m=getComponentTrace();if(d)callWithErrorHandling(d,u,11,[t+c.map(t=>{var c,u;return t.toString?.call(t)??JSON.stringify(t)}).join(``),u&&u.proxy,m.map(({vnode:t})=>`at <${formatComponentName(u,t.type)}>`).join(`
|
|
4
|
+
]))`;continue}}if(u.s&&d[t]===`.`){m+=b?`${d[t]}\r\n`:`[${d[t]}\r\n]`;continue}m+=d[t],d[t]===`\\`?g=!0:b&&d[t]===`]`?b=!1:!b&&d[t]===`[`&&(b=!0)}try{new RegExp(m)}catch{return console.warn(`Could not convert regex pattern at ${c.currentPath.join(`/`)} to a flag-independent form! Falling back to the flag-ignorant source`),t.source}return m}var emojiRegex,zodPatterns,ALPHA_NUMERIC,init_string=__esmMin((()=>{init_errorMessages(),emojiRegex=void 0,zodPatterns={cuid:/^[cC][^\s-]{8,}$/,cuid2:/^[0-9a-z]+$/,ulid:/^[0-9A-HJKMNP-TV-Z]{26}$/,email:/^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,emoji:()=>(emojiRegex===void 0&&(emojiRegex=RegExp(`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`,`u`)),emojiRegex),uuid:/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,ipv4:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,ipv4Cidr:/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ipv6:/^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,ipv6Cidr:/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,base64:/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,base64url:/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,nanoid:/^[a-zA-Z0-9_-]{21}$/,jwt:/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/},ALPHA_NUMERIC=new Set(`ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789`)}));function parseRecordDef(t,c){if(c.target===`openAi`&&console.warn(`Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.`),c.target===`openApi3`&&t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{type:`object`,required:t.keyType._def.values,properties:t.keyType._def.values.reduce((u,d)=>({...u,[d]:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`properties`,d]})??parseAnyDef(c)}),{}),additionalProperties:c.rejectedAdditionalProperties};let u={type:`object`,additionalProperties:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`additionalProperties`]})??c.allowedAdditionalProperties};if(c.target===`openApi3`)return u;if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodString&&t.keyType._def.checks?.length){let{type:d,...m}=parseStringDef(t.keyType._def,c);return{...u,propertyNames:m}}else if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodEnum)return{...u,propertyNames:{enum:t.keyType._def.values}};else if(t.keyType?._def.typeName===ZodFirstPartyTypeKind.ZodBranded&&t.keyType._def.type._def.typeName===ZodFirstPartyTypeKind.ZodString&&t.keyType._def.type._def.checks?.length){let{type:d,...m}=parseBrandedDef(t.keyType._def,c);return{...u,propertyNames:m}}return u}var init_record=__esmMin((()=>{init_zod(),init_parseDef(),init_string(),init_branded(),init_any()}));function parseMapDef(t,c){return c.mapStrategy===`record`?parseRecordDef(t,c):{type:`array`,maxItems:125,items:{type:`array`,items:[parseDef(t.keyType._def,{...c,currentPath:[...c.currentPath,`items`,`items`,`0`]})||parseAnyDef(c),parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`items`,`items`,`1`]})||parseAnyDef(c)],minItems:2,maxItems:2}}}var init_map=__esmMin((()=>{init_parseDef(),init_record(),init_any()}));function parseNativeEnumDef(t){let c=t.values,u=Object.keys(t.values).filter(t=>typeof c[c[t]]!=`number`).map(t=>c[t]),d=Array.from(new Set(u.map(t=>typeof t)));return{type:d.length===1?d[0]===`string`?`string`:`number`:[`string`,`number`],enum:u}}var init_nativeEnum=__esmMin((()=>{}));function parseNeverDef(t){return t.target===`openAi`?void 0:{not:parseAnyDef({...t,currentPath:[...t.currentPath,`not`]})}}var init_never=__esmMin((()=>{init_any()}));function parseNullDef(t){return t.target===`openApi3`?{enum:[`null`],nullable:!0}:{type:`null`}}var init_null=__esmMin((()=>{}));function parseUnionDef(t,c){if(c.target===`openApi3`)return asAnyOf(t,c);let u=t.options instanceof Map?Array.from(t.options.values()):t.options;if(u.every(t=>t._def.typeName in primitiveMappings&&(!t._def.checks||!t._def.checks.length))){let t=u.reduce((t,c)=>{let u=primitiveMappings[c._def.typeName];return u&&!t.includes(u)?[...t,u]:t},[]);return{type:t.length>1?t:t[0]}}else if(u.every(t=>t._def.typeName===`ZodLiteral`&&!t.description)){let t=u.reduce((t,c)=>{let u=typeof c._def.value;switch(u){case`string`:case`number`:case`boolean`:return[...t,u];case`bigint`:return[...t,`integer`];case`object`:if(c._def.value===null)return[...t,`null`];default:return t}},[]);if(t.length===u.length){let c=t.filter((t,c,u)=>u.indexOf(t)===c);return{type:c.length>1?c:c[0],enum:u.reduce((t,c)=>t.includes(c._def.value)?t:[...t,c._def.value],[])}}}else if(u.every(t=>t._def.typeName===`ZodEnum`))return{type:`string`,enum:u.reduce((t,c)=>[...t,...c._def.values.filter(c=>!t.includes(c))],[])};return asAnyOf(t,c)}var primitiveMappings,asAnyOf,init_union=__esmMin((()=>{init_parseDef(),primitiveMappings={ZodString:`string`,ZodNumber:`number`,ZodBigInt:`integer`,ZodBoolean:`boolean`,ZodNull:`null`},asAnyOf=(t,c)=>{let u=(t.options instanceof Map?Array.from(t.options.values()):t.options).map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`anyOf`,`${u}`]})).filter(t=>!!t&&(!c.strictUnions||typeof t==`object`&&Object.keys(t).length>0));return u.length?{anyOf:u}:void 0}}));function parseNullableDef(t,c){if([`ZodString`,`ZodNumber`,`ZodBigInt`,`ZodBoolean`,`ZodNull`].includes(t.innerType._def.typeName)&&(!t.innerType._def.checks||!t.innerType._def.checks.length))return c.target===`openApi3`?{type:primitiveMappings[t.innerType._def.typeName],nullable:!0}:{type:[primitiveMappings[t.innerType._def.typeName],`null`]};if(c.target===`openApi3`){let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath]});return u&&`$ref`in u?{allOf:[u],nullable:!0}:u&&{...u,nullable:!0}}let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath,`anyOf`,`0`]});return u&&{anyOf:[u,{type:`null`}]}}var init_nullable=__esmMin((()=>{init_parseDef(),init_union()}));function parseNumberDef(t,c){let u={type:`number`};if(!t.checks)return u;for(let d of t.checks)switch(d.kind){case`int`:u.type=`integer`,addErrorMessage(u,`type`,d.message,c);break;case`min`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`minimum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMinimum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMinimum=!0),setResponseValueAndErrors(u,`minimum`,d.value,d.message,c));break;case`max`:c.target===`jsonSchema7`?d.inclusive?setResponseValueAndErrors(u,`maximum`,d.value,d.message,c):setResponseValueAndErrors(u,`exclusiveMaximum`,d.value,d.message,c):(d.inclusive||(u.exclusiveMaximum=!0),setResponseValueAndErrors(u,`maximum`,d.value,d.message,c));break;case`multipleOf`:setResponseValueAndErrors(u,`multipleOf`,d.value,d.message,c);break}return u}var init_number=__esmMin((()=>{init_errorMessages()}));function parseObjectDef(t,c){let u=c.target===`openAi`,d={type:`object`,properties:{}},m=[],g=t.shape();for(let t in g){let b=g[t];if(b===void 0||b._def===void 0)continue;let S=safeIsOptional(b);S&&u&&(b._def.typeName===`ZodOptional`&&(b=b._def.innerType),b.isNullable()||(b=b.nullable()),S=!1);let C=parseDef(b._def,{...c,currentPath:[...c.currentPath,`properties`,t],propertyPath:[...c.currentPath,`properties`,t]});C!==void 0&&(d.properties[t]=C,S||m.push(t))}m.length&&(d.required=m);let b=decideAdditionalProperties(t,c);return b!==void 0&&(d.additionalProperties=b),d}function decideAdditionalProperties(t,c){if(t.catchall._def.typeName!==`ZodNever`)return parseDef(t.catchall._def,{...c,currentPath:[...c.currentPath,`additionalProperties`]});switch(t.unknownKeys){case`passthrough`:return c.allowedAdditionalProperties;case`strict`:return c.rejectedAdditionalProperties;case`strip`:return c.removeAdditionalStrategy===`strict`?c.allowedAdditionalProperties:c.rejectedAdditionalProperties}}function safeIsOptional(t){try{return t.isOptional()}catch{return!0}}var init_object=__esmMin((()=>{init_parseDef()})),parseOptionalDef,init_optional=__esmMin((()=>{init_parseDef(),init_any(),parseOptionalDef=(t,c)=>{if(c.currentPath.toString()===c.propertyPath?.toString())return parseDef(t.innerType._def,c);let u=parseDef(t.innerType._def,{...c,currentPath:[...c.currentPath,`anyOf`,`1`]});return u?{anyOf:[{not:parseAnyDef(c)},u]}:parseAnyDef(c)}})),parsePipelineDef,init_pipeline=__esmMin((()=>{init_parseDef(),parsePipelineDef=(t,c)=>{if(c.pipeStrategy===`input`)return parseDef(t.in._def,c);if(c.pipeStrategy===`output`)return parseDef(t.out._def,c);let u=parseDef(t.in._def,{...c,currentPath:[...c.currentPath,`allOf`,`0`]});return{allOf:[u,parseDef(t.out._def,{...c,currentPath:[...c.currentPath,`allOf`,u?`1`:`0`]})].filter(t=>t!==void 0)}}}));function parsePromiseDef(t,c){return parseDef(t.type._def,c)}var init_promise=__esmMin((()=>{init_parseDef()}));function parseSetDef(t,c){let u={type:`array`,uniqueItems:!0,items:parseDef(t.valueType._def,{...c,currentPath:[...c.currentPath,`items`]})};return t.minSize&&setResponseValueAndErrors(u,`minItems`,t.minSize.value,t.minSize.message,c),t.maxSize&&setResponseValueAndErrors(u,`maxItems`,t.maxSize.value,t.maxSize.message,c),u}var init_set=__esmMin((()=>{init_errorMessages(),init_parseDef()}));function parseTupleDef(t,c){return t.rest?{type:`array`,minItems:t.items.length,items:t.items.map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`items`,`${u}`]})).reduce((t,c)=>c===void 0?t:[...t,c],[]),additionalItems:parseDef(t.rest._def,{...c,currentPath:[...c.currentPath,`additionalItems`]})}:{type:`array`,minItems:t.items.length,maxItems:t.items.length,items:t.items.map((t,u)=>parseDef(t._def,{...c,currentPath:[...c.currentPath,`items`,`${u}`]})).reduce((t,c)=>c===void 0?t:[...t,c],[])}}var init_tuple=__esmMin((()=>{init_parseDef()}));function parseUndefinedDef(t){return{not:parseAnyDef(t)}}var init_undefined=__esmMin((()=>{init_any()}));function parseUnknownDef(t){return parseAnyDef(t)}var init_unknown=__esmMin((()=>{init_any()})),parseReadonlyDef,init_readonly=__esmMin((()=>{init_parseDef(),parseReadonlyDef=(t,c)=>parseDef(t.innerType._def,c)})),selectParser,init_selectParser=__esmMin((()=>{init_zod(),init_any(),init_array(),init_bigint(),init_boolean(),init_branded(),init_catch(),init_date(),init_default(),init_effects(),init_enum(),init_intersection(),init_literal(),init_map(),init_nativeEnum(),init_never(),init_null(),init_nullable(),init_number(),init_object(),init_optional(),init_pipeline(),init_promise(),init_record(),init_set(),init_string(),init_tuple(),init_undefined(),init_union(),init_unknown(),init_readonly(),selectParser=(t,c,u)=>{switch(c){case ZodFirstPartyTypeKind.ZodString:return parseStringDef(t,u);case ZodFirstPartyTypeKind.ZodNumber:return parseNumberDef(t,u);case ZodFirstPartyTypeKind.ZodObject:return parseObjectDef(t,u);case ZodFirstPartyTypeKind.ZodBigInt:return parseBigintDef(t,u);case ZodFirstPartyTypeKind.ZodBoolean:return parseBooleanDef();case ZodFirstPartyTypeKind.ZodDate:return parseDateDef(t,u);case ZodFirstPartyTypeKind.ZodUndefined:return parseUndefinedDef(u);case ZodFirstPartyTypeKind.ZodNull:return parseNullDef(u);case ZodFirstPartyTypeKind.ZodArray:return parseArrayDef(t,u);case ZodFirstPartyTypeKind.ZodUnion:case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:return parseUnionDef(t,u);case ZodFirstPartyTypeKind.ZodIntersection:return parseIntersectionDef(t,u);case ZodFirstPartyTypeKind.ZodTuple:return parseTupleDef(t,u);case ZodFirstPartyTypeKind.ZodRecord:return parseRecordDef(t,u);case ZodFirstPartyTypeKind.ZodLiteral:return parseLiteralDef(t,u);case ZodFirstPartyTypeKind.ZodEnum:return parseEnumDef(t);case ZodFirstPartyTypeKind.ZodNativeEnum:return parseNativeEnumDef(t);case ZodFirstPartyTypeKind.ZodNullable:return parseNullableDef(t,u);case ZodFirstPartyTypeKind.ZodOptional:return parseOptionalDef(t,u);case ZodFirstPartyTypeKind.ZodMap:return parseMapDef(t,u);case ZodFirstPartyTypeKind.ZodSet:return parseSetDef(t,u);case ZodFirstPartyTypeKind.ZodLazy:return()=>t.getter()._def;case ZodFirstPartyTypeKind.ZodPromise:return parsePromiseDef(t,u);case ZodFirstPartyTypeKind.ZodNaN:case ZodFirstPartyTypeKind.ZodNever:return parseNeverDef(u);case ZodFirstPartyTypeKind.ZodEffects:return parseEffectsDef(t,u);case ZodFirstPartyTypeKind.ZodAny:return parseAnyDef(u);case ZodFirstPartyTypeKind.ZodUnknown:return parseUnknownDef(u);case ZodFirstPartyTypeKind.ZodDefault:return parseDefaultDef(t,u);case ZodFirstPartyTypeKind.ZodBranded:return parseBrandedDef(t,u);case ZodFirstPartyTypeKind.ZodReadonly:return parseReadonlyDef(t,u);case ZodFirstPartyTypeKind.ZodCatch:return parseCatchDef(t,u);case ZodFirstPartyTypeKind.ZodPipeline:return parsePipelineDef(t,u);case ZodFirstPartyTypeKind.ZodFunction:case ZodFirstPartyTypeKind.ZodVoid:case ZodFirstPartyTypeKind.ZodSymbol:return;default:return(t=>void 0)(c)}}}));function parseDef(t,c,u=!1){let d=c.seen.get(t);if(c.override){let m=c.override?.(t,c,d,u);if(m!==ignoreOverride)return m}if(d&&!u){let t=get$ref(d,c);if(t!==void 0)return t}let m={def:t,path:c.currentPath,jsonSchema:void 0};c.seen.set(t,m);let g=selectParser(t,t.typeName,c),b=typeof g==`function`?parseDef(g(),c):g;if(b&&addMeta(t,c,b),c.postProcess){let u=c.postProcess(b,t,c);return m.jsonSchema=b,u}return m.jsonSchema=b,b}var get$ref,addMeta,init_parseDef=__esmMin((()=>{init_Options(),init_selectParser(),init_getRelativePath(),init_any(),get$ref=(t,c)=>{switch(c.$refStrategy){case`root`:return{$ref:t.path.join(`/`)};case`relative`:return{$ref:getRelativePath(c.currentPath,t.path)};case`none`:case`seen`:return t.path.length<c.currentPath.length&&t.path.every((t,u)=>c.currentPath[u]===t)?(console.warn(`Recursive reference detected at ${c.currentPath.join(`/`)}! Defaulting to any`),parseAnyDef(c)):c.$refStrategy===`seen`?parseAnyDef(c):void 0}},addMeta=(t,c,u)=>(t.description&&(u.description=t.description,c.markdownDescription&&(u.markdownDescription=t.description)),u)})),init_parseTypes=__esmMin((()=>{})),zodToJsonSchema,init_zodToJsonSchema=__esmMin((()=>{init_parseDef(),init_Refs(),init_any(),zodToJsonSchema=(t,c)=>{let u=getRefs(c),d=typeof c==`object`&&c.definitions?Object.entries(c.definitions).reduce((t,[c,d])=>({...t,[c]:parseDef(d._def,{...u,currentPath:[...u.basePath,u.definitionPath,c]},!0)??parseAnyDef(u)}),{}):void 0,m=typeof c==`string`?c:c?.nameStrategy===`title`?void 0:c?.name,g=parseDef(t._def,m===void 0?u:{...u,currentPath:[...u.basePath,u.definitionPath,m]},!1)??parseAnyDef(u),b=typeof c==`object`&&c.name!==void 0&&c.nameStrategy===`title`?c.name:void 0;b!==void 0&&(g.title=b),u.flags.hasReferencedOpenAiAnyType&&(d||(d={}),d[u.openAiAnyTypeName]||(d[u.openAiAnyTypeName]={type:[`string`,`number`,`integer`,`boolean`,`array`,`null`],items:{$ref:u.$refStrategy===`relative`?`1`:[...u.basePath,u.definitionPath,u.openAiAnyTypeName].join(`/`)}}));let S=m===void 0?d?{...g,[u.definitionPath]:d}:g:{$ref:[...u.$refStrategy===`relative`?[]:u.basePath,u.definitionPath,m].join(`/`),[u.definitionPath]:{...d,[m]:g}};return u.target===`jsonSchema7`?S.$schema=`http://json-schema.org/draft-07/schema#`:(u.target===`jsonSchema2019-09`||u.target===`openAi`)&&(S.$schema=`https://json-schema.org/draft/2019-09/schema#`),u.target===`openAi`&&(`anyOf`in S||`oneOf`in S||`allOf`in S||`type`in S&&Array.isArray(S.type))&&console.warn(`Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.`),S}})),init_esm=__esmMin((()=>{init_Options(),init_Refs(),init_errorMessages(),init_getRelativePath(),init_parseDef(),init_parseTypes(),init_any(),init_array(),init_bigint(),init_boolean(),init_branded(),init_catch(),init_date(),init_default(),init_effects(),init_enum(),init_intersection(),init_literal(),init_map(),init_nativeEnum(),init_never(),init_null(),init_nullable(),init_number(),init_object(),init_optional(),init_pipeline(),init_promise(),init_readonly(),init_record(),init_set(),init_string(),init_tuple(),init_undefined(),init_union(),init_unknown(),init_selectParser(),init_zodToJsonSchema()}));function fieldTypeToZodSchema(t){let c;switch(t.type){case FieldType.STRING:c=stringType().min(1,`${t.name} cannot be empty`);break;case FieldType.MARKDOWN:c=stringType().min(1,`${t.name} cannot be empty`),c=t.name===`Input`?c.refine(t=>typeof t==`string`&&t.includes(`{{`)&&t.includes(`}}`),`Must contain at least one blank in format {{answer}} or {{answer1|answer2||distractor}}`).describe(`Markdown text with blanks. Format: {{answer}} for fill-in or {{answer1|answer2||distractor1|distractor2}} for multiple choice. Use the 'fill-in-card-authoring' MCP prompt for detailed syntax guidance.`):c.describe(`Markdown content`);break;case FieldType.NUMBER:c=numberType().describe(`Numeric value for ${t.name}`);break;case FieldType.INT:c=numberType().int().describe(`Integer value for ${t.name}`);break;case FieldType.IMAGE:c=anyType().optional().describe(`Image file`);break;case FieldType.AUDIO:c=anyType().optional().describe(`Audio file`);break;case FieldType.MIDI:c=anyType().optional().describe(`MIDI file`);break;case FieldType.MEDIA_UPLOADS:c=arrayType(anyType()).optional().describe(`Optional media files (images, audio, etc.)`);break;case FieldType.CHESS_PUZZLE:c=stringType().min(1,`Chess puzzle cannot be empty`).describe(`Chess puzzle in FEN or PGN format`);break;default:c=anyType().describe(`Field of type ${t.type}`)}if(t.validator){let u=t.validator;c=c.refine(t=>{try{return u.test(String(t)).status===Status.ok}catch{return!1}},{message:u.instructions||`Validation failed for ${t.name}`}),u.instructions&&(c=c.describe(`${c.description||``}\nInstructions: ${u.instructions}`.trim()))}return c}function toZod(t){let c={};return t.fields.forEach(t=>{c[t.name]=fieldTypeToZodSchema(t)}),objectType(c).describe(`DataShape: ${t.name} - Schema for card creation`)}function toZodJSON(t){let c=zodToJsonSchema(toZod(t));return JSON.stringify(c,null,2)}var init_dataShapeToZod=__esmMin((()=>{init_zod(),init_esm(),init_dist$1()})),init_dist$1=__esmMin((()=>{init_wire_format(),init_course_data(),init_elo$1(),init_namespacer(),init_logshim(),init_validators(),init_fieldConverters(),init_db(),init_logger$1(),init_cardParser(),init_types$2(),init_interfaces$1(),init_enums(),init_dataShapeToZod()})),n,r,__name$1,i$1,a,o,s,__commonJSMin$1,__copyProps$1,__toESM$1,l,init_shapes_BQUVJdp5=__esmMin((()=>{init_dist$1(),n=Object.create,r=Object.defineProperty,__name$1=__name$2((t,c)=>r(t,`name`,{value:c,configurable:!0}),`__name`),i$1=Object.getOwnPropertyDescriptor,a=Object.getOwnPropertyNames,o=Object.getPrototypeOf,s=Object.prototype.hasOwnProperty,__commonJSMin$1=__name$2((t,c)=>()=>(c||t((c={exports:{}}).exports,c),c.exports),`__commonJSMin`),__copyProps$1=__name$2((t,c,u,d)=>{if(c&&typeof c==`object`||typeof c==`function`)for(var m=a(c),g=0,b=m.length,S;g<b;g++)S=m[g],!s.call(t,S)&&S!==u&&r(t,S,{get:(t=>c[t]).bind(null,S),enumerable:!(d=i$1(c,S))||d.enumerable});return t},`__copyProps`),__toESM$1=__name$2((t,c,u)=>(u=t==null?{}:n(o(t)),__copyProps$1(c||!t||!t.__esModule?r(u,`default`,{value:t,enumerable:!0}):u,t)),`__toESM`),l=[{name:DataShapeName.Blanks,fields:[{name:`Input`,type:FieldType.MARKDOWN},{name:`Uploads`,type:FieldType.MEDIA_UPLOADS}]}]})),shared_esm_bundler_exports=__exportAll$1({EMPTY_ARR:()=>EMPTY_ARR,EMPTY_OBJ:()=>EMPTY_OBJ,NO:()=>NO,NOOP:()=>NOOP,PatchFlagNames:()=>PatchFlagNames,PatchFlags:()=>PatchFlags,ShapeFlags:()=>ShapeFlags,SlotFlags:()=>SlotFlags,camelize:()=>camelize,capitalize:()=>capitalize,cssVarNameEscapeSymbolsRE:()=>cssVarNameEscapeSymbolsRE,def:()=>def,escapeHtml:()=>escapeHtml$1,escapeHtmlComment:()=>escapeHtmlComment,extend:()=>extend$2,genCacheKey:()=>genCacheKey,genPropsAccessExp:()=>genPropsAccessExp,generateCodeFrame:()=>generateCodeFrame,getEscapedCssVarName:()=>getEscapedCssVarName,getGlobalThis:()=>getGlobalThis,hasChanged:()=>hasChanged,hasOwn:()=>hasOwn,hyphenate:()=>hyphenate,includeBooleanAttr:()=>includeBooleanAttr,invokeArrayFns:()=>invokeArrayFns,isArray:()=>isArray$3,isBooleanAttr:()=>isBooleanAttr,isBuiltInDirective:()=>isBuiltInDirective,isDate:()=>isDate$1,isFunction:()=>isFunction$1,isGloballyAllowed:()=>isGloballyAllowed,isGloballyWhitelisted:()=>isGloballyWhitelisted,isHTMLTag:()=>isHTMLTag,isIntegerKey:()=>isIntegerKey,isKnownHtmlAttr:()=>isKnownHtmlAttr,isKnownMathMLAttr:()=>isKnownMathMLAttr,isKnownSvgAttr:()=>isKnownSvgAttr,isMap:()=>isMap,isMathMLTag:()=>isMathMLTag,isModelListener:()=>isModelListener,isObject:()=>isObject$1,isOn:()=>isOn,isPlainObject:()=>isPlainObject$3,isPromise:()=>isPromise,isRegExp:()=>isRegExp,isRenderableAttrValue:()=>isRenderableAttrValue,isReservedProp:()=>isReservedProp,isSSRSafeAttrName:()=>isSSRSafeAttrName,isSVGTag:()=>isSVGTag,isSet:()=>isSet,isSpecialBooleanAttr:()=>isSpecialBooleanAttr,isString:()=>isString$1,isSymbol:()=>isSymbol,isVoidTag:()=>isVoidTag,looseEqual:()=>looseEqual,looseIndexOf:()=>looseIndexOf,looseToNumber:()=>looseToNumber,makeMap:()=>makeMap,normalizeClass:()=>normalizeClass,normalizeProps:()=>normalizeProps,normalizeStyle:()=>normalizeStyle,objectToString:()=>objectToString,parseStringStyle:()=>parseStringStyle,propsToAttrMap:()=>propsToAttrMap,remove:()=>remove,slotFlagsText:()=>slotFlagsText,stringifyStyle:()=>stringifyStyle,toDisplayString:()=>toDisplayString,toHandlerKey:()=>toHandlerKey,toNumber:()=>toNumber,toRawType:()=>toRawType,toTypeString:()=>toTypeString});function makeMap(t){let c=Object.create(null);for(let u of t.split(`,`))c[u]=1;return t=>t in c}function genPropsAccessExp(t){return identRE.test(t)?`__props.${t}`:`__props[${JSON.stringify(t)}]`}function genCacheKey(t,c){return t+JSON.stringify(c,(t,c)=>typeof c==`function`?c.toString():c)}function generateCodeFrame(t,c=0,u=t.length){if(c=Math.max(0,Math.min(c,t.length)),u=Math.max(0,Math.min(u,t.length)),c>u)return``;let d=t.split(/(\r?\n)/),m=d.filter((t,c)=>c%2==1);d=d.filter((t,c)=>c%2==0);let g=0,b=[];for(let t=0;t<d.length;t++)if(g+=d[t].length+(m[t]&&m[t].length||0),g>=c){for(let S=t-range;S<=t+range||u>g;S++){if(S<0||S>=d.length)continue;let C=S+1;b.push(`${C}${` `.repeat(Math.max(3-String(C).length,0))}| ${d[S]}`);let w=d[S].length,T=m[S]&&m[S].length||0;if(S===t){let t=c-(g-(w+T)),d=Math.max(1,u>g?w-t:u-c);b.push(` | `+` `.repeat(t)+`^`.repeat(d))}else if(S>t){if(u>g){let t=Math.max(Math.min(u-g,w),1);b.push(` | `+`^`.repeat(t))}g+=w+T}}break}return b.join(`
|
|
5
|
+
`)}function normalizeStyle(t){if(isArray$3(t)){let c={};for(let u=0;u<t.length;u++){let d=t[u],m=isString$1(d)?parseStringStyle(d):normalizeStyle(d);if(m)for(let t in m)c[t]=m[t]}return c}else if(isString$1(t)||isObject$1(t))return t}function parseStringStyle(t){let c={};return t.replace(styleCommentRE,``).split(listDelimiterRE).forEach(t=>{if(t){let u=t.split(propertyDelimiterRE);u.length>1&&(c[u[0].trim()]=u[1].trim())}}),c}function stringifyStyle(t){if(!t)return``;if(isString$1(t))return t;let c=``;for(let u in t){let d=t[u];if(isString$1(d)||typeof d==`number`){let t=u.startsWith(`--`)?u:hyphenate(u);c+=`${t}:${d};`}}return c}function normalizeClass(t){let c=``;if(isString$1(t))c=t;else if(isArray$3(t))for(let u=0;u<t.length;u++){let d=normalizeClass(t[u]);d&&(c+=d+` `)}else if(isObject$1(t))for(let u in t)t[u]&&(c+=u+` `);return c.trim()}function normalizeProps(t){if(!t)return null;let{class:c,style:u}=t;return c&&!isString$1(c)&&(t.class=normalizeClass(c)),u&&(t.style=normalizeStyle(u)),t}function includeBooleanAttr(t){return!!t||t===``}function isSSRSafeAttrName(t){if(attrValidationCache.hasOwnProperty(t))return attrValidationCache[t];let c=unsafeAttrCharRE.test(t);return c&&console.error(`unsafe attribute name: ${t}`),attrValidationCache[t]=!c}function isRenderableAttrValue(t){if(t==null)return!1;let c=typeof t;return c===`string`||c===`number`||c===`boolean`}function escapeHtml$1(t){let c=``+t,u=escapeRE.exec(c);if(!u)return c;let d=``,m,g,b=0;for(g=u.index;g<c.length;g++){switch(c.charCodeAt(g)){case 34:m=`"`;break;case 38:m=`&`;break;case 39:m=`'`;break;case 60:m=`<`;break;case 62:m=`>`;break;default:continue}b!==g&&(d+=c.slice(b,g)),b=g+1,d+=m}return b===g?d:d+c.slice(b,g)}function escapeHtmlComment(t){return t.replace(commentStripRE,``)}function getEscapedCssVarName(t,c){return t.replace(cssVarNameEscapeSymbolsRE,t=>c?t===`"`?`\\\\\\"`:`\\\\${t}`:`\\${t}`)}function looseCompareArrays(t,c){if(t.length!==c.length)return!1;let u=!0;for(let d=0;u&&d<t.length;d++)u=looseEqual(t[d],c[d]);return u}function looseEqual(t,c){if(t===c)return!0;let u=isDate$1(t),d=isDate$1(c);if(u||d)return u&&d?t.getTime()===c.getTime():!1;if(u=isSymbol(t),d=isSymbol(c),u||d)return t===c;if(u=isArray$3(t),d=isArray$3(c),u||d)return u&&d?looseCompareArrays(t,c):!1;if(u=isObject$1(t),d=isObject$1(c),u||d){if(!u||!d||Object.keys(t).length!==Object.keys(c).length)return!1;for(let u in t){let d=t.hasOwnProperty(u),m=c.hasOwnProperty(u);if(d&&!m||!d&&m||!looseEqual(t[u],c[u]))return!1}}return String(t)===String(c)}function looseIndexOf(t,c){return t.findIndex(t=>looseEqual(t,c))}var EMPTY_OBJ,EMPTY_ARR,NOOP,NO,isOn,isModelListener,extend$2,remove,hasOwnProperty$1,hasOwn,isArray$3,isMap,isSet,isDate$1,isRegExp,isFunction$1,isString$1,isSymbol,isObject$1,isPromise,objectToString,toTypeString,toRawType,isPlainObject$3,isIntegerKey,isReservedProp,isBuiltInDirective,cacheStringFunction,camelizeRE,camelize,hyphenateRE,hyphenate,capitalize,toHandlerKey,hasChanged,invokeArrayFns,def,looseToNumber,toNumber,_globalThis,getGlobalThis,identRE,PatchFlags,PatchFlagNames,ShapeFlags,SlotFlags,slotFlagsText,isGloballyAllowed,isGloballyWhitelisted,range,listDelimiterRE,propertyDelimiterRE,styleCommentRE,HTML_TAGS,SVG_TAGS,MATH_TAGS,VOID_TAGS,isHTMLTag,isSVGTag,isMathMLTag,isVoidTag,specialBooleanAttrs,isSpecialBooleanAttr,isBooleanAttr,unsafeAttrCharRE,attrValidationCache,propsToAttrMap,isKnownHtmlAttr,isKnownSvgAttr,isKnownMathMLAttr,escapeRE,commentStripRE,cssVarNameEscapeSymbolsRE,isRef$1,toDisplayString,replacer,stringifySymbol,init_shared_esm_bundler=__esmMin((()=>{EMPTY_OBJ=process.env.NODE_ENV===`production`?{}:Object.freeze({}),EMPTY_ARR=process.env.NODE_ENV===`production`?[]:Object.freeze([]),NOOP=()=>{},NO=()=>!1,isOn=t=>t.charCodeAt(0)===111&&t.charCodeAt(1)===110&&(t.charCodeAt(2)>122||t.charCodeAt(2)<97),isModelListener=t=>t.startsWith(`onUpdate:`),extend$2=Object.assign,remove=(t,c)=>{let u=t.indexOf(c);u>-1&&t.splice(u,1)},hasOwnProperty$1=Object.prototype.hasOwnProperty,hasOwn=(t,c)=>hasOwnProperty$1.call(t,c),isArray$3=Array.isArray,isMap=t=>toTypeString(t)===`[object Map]`,isSet=t=>toTypeString(t)===`[object Set]`,isDate$1=__name$2(t=>toTypeString(t)===`[object Date]`,`isDate`),isRegExp=t=>toTypeString(t)===`[object RegExp]`,isFunction$1=__name$2(t=>typeof t==`function`,`isFunction`),isString$1=__name$2(t=>typeof t==`string`,`isString`),isSymbol=t=>typeof t==`symbol`,isObject$1=__name$2(t=>typeof t==`object`&&!!t,`isObject`),isPromise=t=>(isObject$1(t)||isFunction$1(t))&&isFunction$1(t.then)&&isFunction$1(t.catch),objectToString=Object.prototype.toString,toTypeString=t=>objectToString.call(t),toRawType=t=>toTypeString(t).slice(8,-1),isPlainObject$3=__name$2(t=>toTypeString(t)===`[object Object]`,`isPlainObject`),isIntegerKey=t=>isString$1(t)&&t!==`NaN`&&t[0]!==`-`&&``+parseInt(t,10)===t,isReservedProp=makeMap(`,key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted`),isBuiltInDirective=makeMap(`bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo`),cacheStringFunction=t=>{let c=Object.create(null);return u=>c[u]||(c[u]=t(u))},camelizeRE=/-(\w)/g,camelize=cacheStringFunction(t=>t.replace(camelizeRE,(t,c)=>c?c.toUpperCase():``)),hyphenateRE=/\B([A-Z])/g,hyphenate=cacheStringFunction(t=>t.replace(hyphenateRE,`-$1`).toLowerCase()),capitalize=cacheStringFunction(t=>t.charAt(0).toUpperCase()+t.slice(1)),toHandlerKey=cacheStringFunction(t=>t?`on${capitalize(t)}`:``),hasChanged=(t,c)=>!Object.is(t,c),invokeArrayFns=(t,...c)=>{for(let u=0;u<t.length;u++)t[u](...c)},def=(t,c,u,d=!1)=>{Object.defineProperty(t,c,{configurable:!0,enumerable:!1,writable:d,value:u})},looseToNumber=t=>{let c=parseFloat(t);return isNaN(c)?t:c},toNumber=t=>{let c=isString$1(t)?Number(t):NaN;return isNaN(c)?t:c},getGlobalThis=()=>_globalThis||(_globalThis=typeof globalThis<`u`?globalThis:typeof self<`u`?self:typeof window<`u`||typeof window<`u`?window:{}),identRE=/^[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*$/,PatchFlags={TEXT:1,1:`TEXT`,CLASS:2,2:`CLASS`,STYLE:4,4:`STYLE`,PROPS:8,8:`PROPS`,FULL_PROPS:16,16:`FULL_PROPS`,NEED_HYDRATION:32,32:`NEED_HYDRATION`,STABLE_FRAGMENT:64,64:`STABLE_FRAGMENT`,KEYED_FRAGMENT:128,128:`KEYED_FRAGMENT`,UNKEYED_FRAGMENT:256,256:`UNKEYED_FRAGMENT`,NEED_PATCH:512,512:`NEED_PATCH`,DYNAMIC_SLOTS:1024,1024:`DYNAMIC_SLOTS`,DEV_ROOT_FRAGMENT:2048,2048:`DEV_ROOT_FRAGMENT`,CACHED:-1,"-1":`CACHED`,BAIL:-2,"-2":`BAIL`},PatchFlagNames={1:`TEXT`,2:`CLASS`,4:`STYLE`,8:`PROPS`,16:`FULL_PROPS`,32:`NEED_HYDRATION`,64:`STABLE_FRAGMENT`,128:`KEYED_FRAGMENT`,256:`UNKEYED_FRAGMENT`,512:`NEED_PATCH`,1024:`DYNAMIC_SLOTS`,2048:`DEV_ROOT_FRAGMENT`,[-1]:`HOISTED`,[-2]:`BAIL`},ShapeFlags={ELEMENT:1,1:`ELEMENT`,FUNCTIONAL_COMPONENT:2,2:`FUNCTIONAL_COMPONENT`,STATEFUL_COMPONENT:4,4:`STATEFUL_COMPONENT`,TEXT_CHILDREN:8,8:`TEXT_CHILDREN`,ARRAY_CHILDREN:16,16:`ARRAY_CHILDREN`,SLOTS_CHILDREN:32,32:`SLOTS_CHILDREN`,TELEPORT:64,64:`TELEPORT`,SUSPENSE:128,128:`SUSPENSE`,COMPONENT_SHOULD_KEEP_ALIVE:256,256:`COMPONENT_SHOULD_KEEP_ALIVE`,COMPONENT_KEPT_ALIVE:512,512:`COMPONENT_KEPT_ALIVE`,COMPONENT:6,6:`COMPONENT`},SlotFlags={STABLE:1,1:`STABLE`,DYNAMIC:2,2:`DYNAMIC`,FORWARDED:3,3:`FORWARDED`},slotFlagsText={1:`STABLE`,2:`DYNAMIC`,3:`FORWARDED`},isGloballyAllowed=makeMap(`Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol`),isGloballyWhitelisted=isGloballyAllowed,range=2,listDelimiterRE=/;(?![^(]*\))/g,propertyDelimiterRE=/:([^]+)/,styleCommentRE=/\/\*[^]*?\*\//g,HTML_TAGS=`html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot`,SVG_TAGS=`svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view`,MATH_TAGS=`annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics`,VOID_TAGS=`area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr`,isHTMLTag=makeMap(HTML_TAGS),isSVGTag=makeMap(SVG_TAGS),isMathMLTag=makeMap(MATH_TAGS),isVoidTag=makeMap(VOID_TAGS),specialBooleanAttrs=`itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`,isSpecialBooleanAttr=makeMap(specialBooleanAttrs),isBooleanAttr=makeMap(specialBooleanAttrs+`,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`),unsafeAttrCharRE=/[>/="'\u0009\u000a\u000c\u0020]/,attrValidationCache={},propsToAttrMap={acceptCharset:`accept-charset`,className:`class`,htmlFor:`for`,httpEquiv:`http-equiv`},isKnownHtmlAttr=makeMap(`accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`),isKnownSvgAttr=makeMap(`xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`),isKnownMathMLAttr=makeMap(`accent,accentunder,actiontype,align,alignmentscope,altimg,altimg-height,altimg-valign,altimg-width,alttext,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,equalcolumns,equalrows,fence,fontstyle,fontweight,form,frame,framespacing,groupalign,height,href,id,indentalign,indentalignfirst,indentalignlast,indentshift,indentshiftfirst,indentshiftlast,indextype,justify,largetop,largeop,lquote,lspace,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minlabelspacing,mode,other,overflow,position,rowalign,rowlines,rowspan,rquote,rspace,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,shift,side,src,stackalign,stretchy,subscriptshift,superscriptshift,symmetric,voffset,width,widths,xlink:href,xlink:show,xlink:type,xmlns`),escapeRE=/["'&<>]/,__name$2(escapeHtml$1,`escapeHtml`),commentStripRE=/^-?>|<!--|-->|--!>|<!-$/g,cssVarNameEscapeSymbolsRE=/[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g,isRef$1=__name$2(t=>!!(t&&t.__v_isRef===!0),`isRef`),toDisplayString=t=>isString$1(t)?t:t==null?``:isArray$3(t)||isObject$1(t)&&(t.toString===objectToString||!isFunction$1(t.toString))?isRef$1(t)?toDisplayString(t.value):JSON.stringify(t,replacer,2):String(t),replacer=(t,c)=>isRef$1(c)?replacer(t,c.value):isMap(c)?{[`Map(${c.size})`]:[...c.entries()].reduce((t,[c,u],d)=>(t[stringifySymbol(c,d)+` =>`]=u,t),{})}:isSet(c)?{[`Set(${c.size})`]:[...c.values()].map(t=>stringifySymbol(t))}:isSymbol(c)?stringifySymbol(c):isObject$1(c)&&!isArray$3(c)&&!isPlainObject$3(c)?String(c):c,stringifySymbol=(t,c=``)=>{var u;return isSymbol(t)?`Symbol(${t.description??c})`:t}}));function warn$3(t,...c){console.warn(`[Vue warn] ${t}`,...c)}function effectScope(t){return new EffectScope(t)}function getCurrentScope(){return activeEffectScope}function onScopeDispose(t,c=!1){activeEffectScope?activeEffectScope.cleanups.push(t):process.env.NODE_ENV!==`production`&&!c&&warn$3(`onScopeDispose() is called when there is no active effect scope to be associated with.`)}function batch(t,c=!1){if(t.flags|=8,c){t.next=batchedComputed,batchedComputed=t;return}t.next=batchedSub,batchedSub=t}function startBatch(){batchDepth++}function endBatch(){if(--batchDepth>0)return;if(batchedComputed){let t=batchedComputed;for(batchedComputed=void 0;t;){let c=t.next;t.next=void 0,t.flags&=-9,t=c}}let t;for(;batchedSub;){let c=batchedSub;for(batchedSub=void 0;c;){let u=c.next;if(c.next=void 0,c.flags&=-9,c.flags&1)try{c.trigger()}catch(c){t||(t=c)}c=u}}if(t)throw t}function prepareDeps(t){for(let c=t.deps;c;c=c.nextDep)c.version=-1,c.prevActiveLink=c.dep.activeLink,c.dep.activeLink=c}function cleanupDeps(t){let c,u=t.depsTail,d=u;for(;d;){let t=d.prevDep;d.version===-1?(d===u&&(u=t),removeSub(d),removeDep(d)):c=d,d.dep.activeLink=d.prevActiveLink,d.prevActiveLink=void 0,d=t}t.deps=c,t.depsTail=u}function isDirty(t){for(let c=t.deps;c;c=c.nextDep)if(c.dep.version!==c.version||c.dep.computed&&(refreshComputed(c.dep.computed)||c.dep.version!==c.version))return!0;return!!t._dirty}function refreshComputed(t){if(t.flags&4&&!(t.flags&16)||(t.flags&=-17,t.globalVersion===globalVersion))return;t.globalVersion=globalVersion;let c=t.dep;if(t.flags|=2,c.version>0&&!t.isSSR&&t.deps&&!isDirty(t)){t.flags&=-3;return}let u=activeSub,d=shouldTrack;activeSub=t,shouldTrack=!0;try{prepareDeps(t);let u=t.fn(t._value);(c.version===0||hasChanged(u,t._value))&&(t._value=u,c.version++)}catch(t){throw c.version++,t}finally{activeSub=u,shouldTrack=d,cleanupDeps(t),t.flags&=-3}}function removeSub(t,c=!1){let{dep:u,prevSub:d,nextSub:m}=t;if(d&&(d.nextSub=m,t.prevSub=void 0),m&&(m.prevSub=d,t.nextSub=void 0),process.env.NODE_ENV!==`production`&&u.subsHead===t&&(u.subsHead=m),u.subs===t&&(u.subs=d,!d&&u.computed)){u.computed.flags&=-5;for(let t=u.computed.deps;t;t=t.nextDep)removeSub(t,!0)}!c&&!--u.sc&&u.map&&u.map.delete(u.key)}function removeDep(t){let{prevDep:c,nextDep:u}=t;c&&(c.nextDep=u,t.prevDep=void 0),u&&(u.prevDep=c,t.nextDep=void 0)}function effect(t,c){t.effect instanceof ReactiveEffect&&(t=t.effect.fn);let u=new ReactiveEffect(t);c&&extend$2(u,c);try{u.run()}catch(t){throw u.stop(),t}let d=u.run.bind(u);return d.effect=u,d}function stop(t){t.effect.stop()}function pauseTracking(){trackStack.push(shouldTrack),shouldTrack=!1}function resetTracking(){let t=trackStack.pop();shouldTrack=t===void 0?!0:t}function cleanupEffect(t){let{cleanup:c}=t;if(t.cleanup=void 0,c){let t=activeSub;activeSub=void 0;try{c()}finally{activeSub=t}}}function addSub(t){if(t.dep.sc++,t.sub.flags&4){let c=t.dep.computed;if(c&&!t.dep.subs){c.flags|=20;for(let t=c.deps;t;t=t.nextDep)addSub(t)}let u=t.dep.subs;u!==t&&(t.prevSub=u,u&&(u.nextSub=t)),process.env.NODE_ENV!==`production`&&t.dep.subsHead===void 0&&(t.dep.subsHead=t),t.dep.subs=t}}function track(t,c,u){if(shouldTrack&&activeSub){let d=targetMap.get(t);d||targetMap.set(t,d=new Map);let m=d.get(u);m||(d.set(u,m=new Dep),m.map=d,m.key=u),process.env.NODE_ENV===`production`?m.track():m.track({target:t,type:c,key:u})}}function trigger(t,c,u,d,m,g){let b=targetMap.get(t);if(!b){globalVersion++;return}let run=b=>{b&&(process.env.NODE_ENV===`production`?b.trigger():b.trigger({target:t,type:c,key:u,newValue:d,oldValue:m,oldTarget:g}))};if(startBatch(),c===`clear`)b.forEach(run);else{let m=isArray$3(t),g=m&&isIntegerKey(u);if(m&&u===`length`){let t=Number(d);b.forEach((c,u)=>{(u===`length`||u===ARRAY_ITERATE_KEY||!isSymbol(u)&&u>=t)&&run(c)})}else switch((u!==void 0||b.has(void 0))&&run(b.get(u)),g&&run(b.get(ARRAY_ITERATE_KEY)),c){case`add`:m?g&&run(b.get(`length`)):(run(b.get(ITERATE_KEY)),isMap(t)&&run(b.get(MAP_KEY_ITERATE_KEY)));break;case`delete`:m||(run(b.get(ITERATE_KEY)),isMap(t)&&run(b.get(MAP_KEY_ITERATE_KEY)));break;case`set`:isMap(t)&&run(b.get(ITERATE_KEY));break}}endBatch()}function getDepFromReactive(t,c){let u=targetMap.get(t);return u&&u.get(c)}function reactiveReadArray(t){let c=toRaw(t);return c===t?c:(track(c,`iterate`,ARRAY_ITERATE_KEY),isShallow(t)?c:c.map(toReactive))}function shallowReadArray(t){return track(t=toRaw(t),`iterate`,ARRAY_ITERATE_KEY),t}function iterator(t,c,u){let d=shallowReadArray(t),m=d[c]();return d!==t&&!isShallow(t)&&(m._next=m.next,m.next=()=>{let t=m._next();return t.value&&(t.value=u(t.value)),t}),m}function apply(t,c,u,d,m,g){let b=shallowReadArray(t),S=b!==t&&!isShallow(t),C=b[c];if(C!==arrayProto[c]){let c=C.apply(t,g);return S?toReactive(c):c}let wrappedFn=u;b!==t&&(S?wrappedFn=function(c,d){return u.call(this,toReactive(c),d,t)}:u.length>2&&(wrappedFn=function(c,d){return u.call(this,c,d,t)}));let w=C.call(b,wrappedFn,d);return S&&m?m(w):w}function reduce(t,c,u,d){let m=shallowReadArray(t),wrappedFn=u;return m!==t&&(isShallow(t)?u.length>3&&(wrappedFn=function(c,d,m){return u.call(this,c,d,m,t)}):wrappedFn=function(c,d,m){return u.call(this,c,toReactive(d),m,t)}),m[c](wrappedFn,...d)}function searchProxy(t,c,u){let d=toRaw(t);track(d,`iterate`,ARRAY_ITERATE_KEY);let m=d[c](...u);return(m===-1||m===!1)&&isProxy(u[0])?(u[0]=toRaw(u[0]),d[c](...u)):m}function noTracking(t,c,u=[]){pauseTracking(),startBatch();let d=toRaw(t)[c].apply(t,u);return endBatch(),resetTracking(),d}function hasOwnProperty(t){isSymbol(t)||(t=String(t));let c=toRaw(this);return track(c,`has`,t),c.hasOwnProperty(t)}function createIterableMethod(t,c,u){return function(...d){let m=this.__v_raw,g=toRaw(m),b=isMap(g),S=t===`entries`||t===Symbol.iterator&&b,C=t===`keys`&&b,w=m[t](...d),T=u?toShallow:c?toReadonly:toReactive;return!c&&track(g,`iterate`,C?MAP_KEY_ITERATE_KEY:ITERATE_KEY),{next(){let{value:t,done:c}=w.next();return c?{value:t,done:c}:{value:S?[T(t[0]),T(t[1])]:T(t),done:c}},[Symbol.iterator](){return this}}}}function createReadonlyMethod(t){return function(...c){if(process.env.NODE_ENV!==`production`){let u=c[0]?`on key "${c[0]}" `:``;warn$3(`${capitalize(t)} operation ${u}failed: target is readonly.`,toRaw(this))}return t===`delete`?!1:t===`clear`?void 0:this}}function createInstrumentations(t,c){let u={get(u){let d=this.__v_raw,m=toRaw(d),g=toRaw(u);t||(hasChanged(u,g)&&track(m,`get`,u),track(m,`get`,g));let{has:b}=getProto(m),S=c?toShallow:t?toReadonly:toReactive;if(b.call(m,u))return S(d.get(u));if(b.call(m,g))return S(d.get(g));d!==m&&d.get(u)},get size(){let c=this.__v_raw;return!t&&track(toRaw(c),`iterate`,ITERATE_KEY),Reflect.get(c,`size`,c)},has(c){let u=this.__v_raw,d=toRaw(u),m=toRaw(c);return t||(hasChanged(c,m)&&track(d,`has`,c),track(d,`has`,m)),c===m?u.has(c):u.has(c)||u.has(m)},forEach(u,d){let m=this,g=m.__v_raw,b=toRaw(g),S=c?toShallow:t?toReadonly:toReactive;return!t&&track(b,`iterate`,ITERATE_KEY),g.forEach((t,c)=>u.call(d,S(t),S(c),m))}};return extend$2(u,t?{add:createReadonlyMethod(`add`),set:createReadonlyMethod(`set`),delete:createReadonlyMethod(`delete`),clear:createReadonlyMethod(`clear`)}:{add(t){!c&&!isShallow(t)&&!isReadonly(t)&&(t=toRaw(t));let u=toRaw(this);return getProto(u).has.call(u,t)||(u.add(t),trigger(u,`add`,t,t)),this},set(t,u){!c&&!isShallow(u)&&!isReadonly(u)&&(u=toRaw(u));let d=toRaw(this),{has:m,get:g}=getProto(d),b=m.call(d,t);b?process.env.NODE_ENV!==`production`&&checkIdentityKeys(d,m,t):(t=toRaw(t),b=m.call(d,t));let S=g.call(d,t);return d.set(t,u),b?hasChanged(u,S)&&trigger(d,`set`,t,u,S):trigger(d,`add`,t,u),this},delete(t){let c=toRaw(this),{has:u,get:d}=getProto(c),m=u.call(c,t);m?process.env.NODE_ENV!==`production`&&checkIdentityKeys(c,u,t):(t=toRaw(t),m=u.call(c,t));let g=d?d.call(c,t):void 0,b=c.delete(t);return m&&trigger(c,`delete`,t,void 0,g),b},clear(){let t=toRaw(this),c=t.size!==0,u=process.env.NODE_ENV===`production`?void 0:isMap(t)?new Map(t):new Set(t),d=t.clear();return c&&trigger(t,`clear`,void 0,void 0,u),d}}),[`keys`,`values`,`entries`,Symbol.iterator].forEach(d=>{u[d]=createIterableMethod(d,t,c)}),u}function createInstrumentationGetter(t,c){let u=createInstrumentations(t,c);return(c,d,m)=>d===`__v_isReactive`?!t:d===`__v_isReadonly`?t:d===`__v_raw`?c:Reflect.get(hasOwn(u,d)&&d in c?u:c,d,m)}function checkIdentityKeys(t,c,u){let d=toRaw(u);if(d!==u&&c.call(t,d)){let c=toRawType(t);warn$3(`Reactive ${c} contains both the raw and reactive versions of the same object${c===`Map`?` as keys`:``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`)}}function targetTypeMap(t){switch(t){case`Object`:case`Array`:return 1;case`Map`:case`Set`:case`WeakMap`:case`WeakSet`:return 2;default:return 0}}function getTargetType(t){return t.__v_skip||!Object.isExtensible(t)?0:targetTypeMap(toRawType(t))}function reactive(t){return isReadonly(t)?t:createReactiveObject(t,!1,mutableHandlers,mutableCollectionHandlers,reactiveMap)}function shallowReactive(t){return createReactiveObject(t,!1,shallowReactiveHandlers,shallowCollectionHandlers,shallowReactiveMap)}function readonly(t){return createReactiveObject(t,!0,readonlyHandlers,readonlyCollectionHandlers,readonlyMap)}function shallowReadonly(t){return createReactiveObject(t,!0,shallowReadonlyHandlers,shallowReadonlyCollectionHandlers,shallowReadonlyMap)}function createReactiveObject(t,c,u,d,m){if(!isObject$1(t))return process.env.NODE_ENV!==`production`&&warn$3(`value cannot be made ${c?`readonly`:`reactive`}: ${String(t)}`),t;if(t.__v_raw&&!(c&&t.__v_isReactive))return t;let g=m.get(t);if(g)return g;let b=getTargetType(t);if(b===0)return t;let S=new Proxy(t,b===2?d:u);return m.set(t,S),S}function isReactive(t){return isReadonly(t)?isReactive(t.__v_raw):!!(t&&t.__v_isReactive)}function isReadonly(t){return!!(t&&t.__v_isReadonly)}function isShallow(t){return!!(t&&t.__v_isShallow)}function isProxy(t){return t?!!t.__v_raw:!1}function toRaw(t){let c=t&&t.__v_raw;return c?toRaw(c):t}function markRaw(t){return!hasOwn(t,`__v_skip`)&&Object.isExtensible(t)&&def(t,`__v_skip`,!0),t}function isRef(t){return t?t.__v_isRef===!0:!1}function ref(t){return createRef(t,!1)}function shallowRef(t){return createRef(t,!0)}function createRef(t,c){return isRef(t)?t:new RefImpl(t,c)}function triggerRef(t){t.dep&&(process.env.NODE_ENV===`production`?t.dep.trigger():t.dep.trigger({target:t,type:`set`,key:`value`,newValue:t._value}))}function unref(t){return isRef(t)?t.value:t}function toValue(t){return isFunction$1(t)?t():unref(t)}function proxyRefs(t){return isReactive(t)?t:new Proxy(t,shallowUnwrapHandlers)}function customRef(t){return new CustomRefImpl(t)}function toRefs(t){process.env.NODE_ENV!==`production`&&!isProxy(t)&&warn$3(`toRefs() expects a reactive object but received a plain one.`);let c=isArray$3(t)?Array(t.length):{};for(let u in t)c[u]=propertyToRef(t,u);return c}function toRef(t,c,u){return isRef(t)?t:isFunction$1(t)?new GetterRefImpl(t):isObject$1(t)&&arguments.length>1?propertyToRef(t,c,u):ref(t)}function propertyToRef(t,c,u){let d=t[c];return isRef(d)?d:new ObjectRefImpl(t,c,u)}function computed$1(t,c,u=!1){let d,m;isFunction$1(t)?d=t:(d=t.get,m=t.set);let g=new ComputedRefImpl(d,m,u);return process.env.NODE_ENV!==`production`&&c&&!u&&(g.onTrack=c.onTrack,g.onTrigger=c.onTrigger),g}function getCurrentWatcher(){return activeWatcher}function onWatcherCleanup(t,c=!1,u=activeWatcher){if(u){let c=cleanupMap.get(u);c||cleanupMap.set(u,c=[]),c.push(t)}else process.env.NODE_ENV!==`production`&&!c&&warn$3(`onWatcherCleanup() was called when there was no active watcher to associate with.`)}function watch$1(t,cb,c=EMPTY_OBJ){let{immediate:u,deep:d,once:m,scheduler:g,augmentJob:b,call:S}=c,warnInvalidSource=t=>{(c.onWarn||warn$3)(`Invalid watch source: `,t,`A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`)},reactiveGetter=t=>d?t:isShallow(t)||d===!1||d===0?traverse(t,1):traverse(t),C,getter,w,boundCleanup,T=!1,E=!1;if(isRef(t)?(getter=()=>t.value,T=isShallow(t)):isReactive(t)?(getter=()=>reactiveGetter(t),T=!0):isArray$3(t)?(E=!0,T=t.some(t=>isReactive(t)||isShallow(t)),getter=()=>t.map(t=>{if(isRef(t))return t.value;if(isReactive(t))return reactiveGetter(t);if(isFunction$1(t))return S?S(t,2):t();process.env.NODE_ENV!==`production`&&warnInvalidSource(t)})):isFunction$1(t)?getter=cb?S?()=>S(t,2):t:()=>{if(w){pauseTracking();try{w()}finally{resetTracking()}}let c=activeWatcher;activeWatcher=C;try{return S?S(t,3,[boundCleanup]):t(boundCleanup)}finally{activeWatcher=c}}:(getter=NOOP,process.env.NODE_ENV!==`production`&&warnInvalidSource(t)),cb&&d){let t=getter,c=d===!0?1/0:d;getter=()=>traverse(t(),c)}let D=getCurrentScope(),watchHandle=()=>{C.stop(),D&&D.active&&remove(D.effects,C)};if(m&&cb){let t=cb;cb=(...c)=>{t(...c),watchHandle()}}let O=E?Array(t.length).fill(INITIAL_WATCHER_VALUE):INITIAL_WATCHER_VALUE,job=t=>{if(!(!(C.flags&1)||!C.dirty&&!t))if(cb){let t=C.run();if(d||T||(E?t.some((t,c)=>hasChanged(t,O[c])):hasChanged(t,O))){w&&w();let c=activeWatcher;activeWatcher=C;try{let c=[t,O===INITIAL_WATCHER_VALUE?void 0:E&&O[0]===INITIAL_WATCHER_VALUE?[]:O,boundCleanup];S?S(cb,3,c):cb(...c),O=t}finally{activeWatcher=c}}}else C.run()};return b&&b(job),C=new ReactiveEffect(getter),C.scheduler=g?()=>g(job,!1):job,boundCleanup=t=>onWatcherCleanup(t,!1,C),w=C.onStop=()=>{let t=cleanupMap.get(C);if(t){if(S)S(t,4);else for(let c of t)c();cleanupMap.delete(C)}},process.env.NODE_ENV!==`production`&&(C.onTrack=c.onTrack,C.onTrigger=c.onTrigger),cb?u?job(!0):O=C.run():g?g(job.bind(null,!0),!0):C.run(),watchHandle.pause=C.pause.bind(C),watchHandle.resume=C.resume.bind(C),watchHandle.stop=watchHandle,watchHandle}function traverse(t,c=1/0,u){if(c<=0||!isObject$1(t)||t.__v_skip||(u=u||new Set,u.has(t)))return t;if(u.add(t),c--,isRef(t))traverse(t.value,c,u);else if(isArray$3(t))for(let d=0;d<t.length;d++)traverse(t[d],c,u);else if(isSet(t)||isMap(t))t.forEach(t=>{traverse(t,c,u)});else if(isPlainObject$3(t)){for(let d in t)traverse(t[d],c,u);for(let d of Object.getOwnPropertySymbols(t))Object.prototype.propertyIsEnumerable.call(t,d)&&traverse(t[d],c,u)}return t}var activeEffectScope,EffectScope,activeSub,pausedQueueEffects,ReactiveEffect,batchDepth,batchedSub,batchedComputed,shouldTrack,trackStack,globalVersion,Link,Dep,targetMap,ITERATE_KEY,MAP_KEY_ITERATE_KEY,ARRAY_ITERATE_KEY,arrayInstrumentations,arrayProto,isNonTrackableKeys,builtInSymbols,BaseReactiveHandler,MutableReactiveHandler,ReadonlyReactiveHandler,mutableHandlers,readonlyHandlers,shallowReactiveHandlers,shallowReadonlyHandlers,toShallow,getProto,mutableCollectionHandlers,shallowCollectionHandlers,readonlyCollectionHandlers,shallowReadonlyCollectionHandlers,reactiveMap,shallowReactiveMap,readonlyMap,shallowReadonlyMap,toReactive,toReadonly,RefImpl,shallowUnwrapHandlers,CustomRefImpl,ObjectRefImpl,GetterRefImpl,ComputedRefImpl,TrackOpTypes,TriggerOpTypes,INITIAL_WATCHER_VALUE,cleanupMap,activeWatcher,init_reactivity_esm_bundler=__esmMin((()=>{init_shared_esm_bundler(),__name$2(warn$3,`warn`),EffectScope=class{constructor(t=!1){this.detached=t,this._active=!0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.parent=activeEffectScope,!t&&activeEffectScope&&(this.index=(activeEffectScope.scopes||(activeEffectScope.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,c;if(this.scopes)for(t=0,c=this.scopes.length;t<c;t++)this.scopes[t].pause();for(t=0,c=this.effects.length;t<c;t++)this.effects[t].pause()}}resume(){if(this._active&&this._isPaused){this._isPaused=!1;let t,c;if(this.scopes)for(t=0,c=this.scopes.length;t<c;t++)this.scopes[t].resume();for(t=0,c=this.effects.length;t<c;t++)this.effects[t].resume()}}run(t){if(this._active){let c=activeEffectScope;try{return activeEffectScope=this,t()}finally{activeEffectScope=c}}else process.env.NODE_ENV!==`production`&&warn$3(`cannot run an inactive effect scope.`)}on(){activeEffectScope=this}off(){activeEffectScope=this.parent}stop(t){if(this._active){this._active=!1;let c,u;for(c=0,u=this.effects.length;c<u;c++)this.effects[c].stop();for(this.effects.length=0,c=0,u=this.cleanups.length;c<u;c++)this.cleanups[c]();if(this.cleanups.length=0,this.scopes){for(c=0,u=this.scopes.length;c<u;c++)this.scopes[c].stop(!0);this.scopes.length=0}if(!this.detached&&this.parent&&!t){let t=this.parent.scopes.pop();t&&t!==this&&(this.parent.scopes[this.index]=t,t.index=this.index)}this.parent=void 0}}},pausedQueueEffects=new WeakSet,ReactiveEffect=class{constructor(t){this.fn=t,this.deps=void 0,this.depsTail=void 0,this.flags=5,this.next=void 0,this.cleanup=void 0,this.scheduler=void 0,activeEffectScope&&activeEffectScope.active&&activeEffectScope.effects.push(this)}pause(){this.flags|=64}resume(){this.flags&64&&(this.flags&=-65,pausedQueueEffects.has(this)&&(pausedQueueEffects.delete(this),this.trigger()))}notify(){this.flags&2&&!(this.flags&32)||this.flags&8||batch(this)}run(){if(!(this.flags&1))return this.fn();this.flags|=2,cleanupEffect(this),prepareDeps(this);let t=activeSub,c=shouldTrack;activeSub=this,shouldTrack=!0;try{return this.fn()}finally{process.env.NODE_ENV!==`production`&&activeSub!==this&&warn$3(`Active effect was not restored correctly - this is likely a Vue internal bug.`),cleanupDeps(this),activeSub=t,shouldTrack=c,this.flags&=-3}}stop(){if(this.flags&1){for(let t=this.deps;t;t=t.nextDep)removeSub(t);this.deps=this.depsTail=void 0,cleanupEffect(this),this.onStop&&this.onStop(),this.flags&=-2}}trigger(){this.flags&64?pausedQueueEffects.add(this):this.scheduler?this.scheduler():this.runIfDirty()}runIfDirty(){isDirty(this)&&this.run()}get dirty(){return isDirty(this)}},batchDepth=0,shouldTrack=!0,trackStack=[],globalVersion=0,Link=class{constructor(t,c){this.sub=t,this.dep=c,this.version=c.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}},Dep=class{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,process.env.NODE_ENV!==`production`&&(this.subsHead=void 0)}track(t){if(!activeSub||!shouldTrack||activeSub===this.computed)return;let c=this.activeLink;if(c===void 0||c.sub!==activeSub)c=this.activeLink=new Link(activeSub,this),activeSub.deps?(c.prevDep=activeSub.depsTail,activeSub.depsTail.nextDep=c,activeSub.depsTail=c):activeSub.deps=activeSub.depsTail=c,addSub(c);else if(c.version===-1&&(c.version=this.version,c.nextDep)){let t=c.nextDep;t.prevDep=c.prevDep,c.prevDep&&(c.prevDep.nextDep=t),c.prevDep=activeSub.depsTail,c.nextDep=void 0,activeSub.depsTail.nextDep=c,activeSub.depsTail=c,activeSub.deps===c&&(activeSub.deps=t)}return process.env.NODE_ENV!==`production`&&activeSub.onTrack&&activeSub.onTrack(extend$2({effect:activeSub},t)),c}trigger(t){this.version++,globalVersion++,this.notify(t)}notify(t){startBatch();try{if(process.env.NODE_ENV!==`production`)for(let c=this.subsHead;c;c=c.nextSub)c.sub.onTrigger&&!(c.sub.flags&8)&&c.sub.onTrigger(extend$2({effect:c.sub},t));for(let t=this.subs;t;t=t.prevSub)t.sub.notify()&&t.sub.dep.notify()}finally{endBatch()}}},targetMap=new WeakMap,ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Object iterate`),MAP_KEY_ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Map keys iterate`),ARRAY_ITERATE_KEY=Symbol(process.env.NODE_ENV===`production`?``:`Array iterate`),arrayInstrumentations={__proto__:null,[Symbol.iterator](){return iterator(this,Symbol.iterator,toReactive)},concat(...t){return reactiveReadArray(this).concat(...t.map(t=>isArray$3(t)?reactiveReadArray(t):t))},entries(){return iterator(this,`entries`,t=>(t[1]=toReactive(t[1]),t))},every(t,c){return apply(this,`every`,t,c,void 0,arguments)},filter(t,c){return apply(this,`filter`,t,c,t=>t.map(toReactive),arguments)},find(t,c){return apply(this,`find`,t,c,toReactive,arguments)},findIndex(t,c){return apply(this,`findIndex`,t,c,void 0,arguments)},findLast(t,c){return apply(this,`findLast`,t,c,toReactive,arguments)},findLastIndex(t,c){return apply(this,`findLastIndex`,t,c,void 0,arguments)},forEach(t,c){return apply(this,`forEach`,t,c,void 0,arguments)},includes(...t){return searchProxy(this,`includes`,t)},indexOf(...t){return searchProxy(this,`indexOf`,t)},join(t){return reactiveReadArray(this).join(t)},lastIndexOf(...t){return searchProxy(this,`lastIndexOf`,t)},map(t,c){return apply(this,`map`,t,c,void 0,arguments)},pop(){return noTracking(this,`pop`)},push(...t){return noTracking(this,`push`,t)},reduce(t,...c){return reduce(this,`reduce`,t,c)},reduceRight(t,...c){return reduce(this,`reduceRight`,t,c)},shift(){return noTracking(this,`shift`)},some(t,c){return apply(this,`some`,t,c,void 0,arguments)},splice(...t){return noTracking(this,`splice`,t)},toReversed(){return reactiveReadArray(this).toReversed()},toSorted(t){return reactiveReadArray(this).toSorted(t)},toSpliced(...t){return reactiveReadArray(this).toSpliced(...t)},unshift(...t){return noTracking(this,`unshift`,t)},values(){return iterator(this,`values`,toReactive)}},arrayProto=Array.prototype,isNonTrackableKeys=makeMap(`__proto__,__v_isRef,__isVue`),builtInSymbols=new Set(Object.getOwnPropertyNames(Symbol).filter(t=>t!==`arguments`&&t!==`caller`).map(t=>Symbol[t]).filter(isSymbol)),BaseReactiveHandler=class{constructor(t=!1,c=!1){this._isReadonly=t,this._isShallow=c}get(t,c,u){if(c===`__v_skip`)return t.__v_skip;let d=this._isReadonly,m=this._isShallow;if(c===`__v_isReactive`)return!d;if(c===`__v_isReadonly`)return d;if(c===`__v_isShallow`)return m;if(c===`__v_raw`)return u===(d?m?shallowReadonlyMap:readonlyMap:m?shallowReactiveMap:reactiveMap).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(u)?t:void 0;let g=isArray$3(t);if(!d){let t;if(g&&(t=arrayInstrumentations[c]))return t;if(c===`hasOwnProperty`)return hasOwnProperty}let b=Reflect.get(t,c,isRef(t)?t:u);return(isSymbol(c)?builtInSymbols.has(c):isNonTrackableKeys(c))||(d||track(t,`get`,c),m)?b:isRef(b)?g&&isIntegerKey(c)?b:b.value:isObject$1(b)?d?readonly(b):reactive(b):b}},MutableReactiveHandler=class extends BaseReactiveHandler{constructor(t=!1){super(!1,t)}set(t,c,u,d){let m=t[c];if(!this._isShallow){let c=isReadonly(m);if(!isShallow(u)&&!isReadonly(u)&&(m=toRaw(m),u=toRaw(u)),!isArray$3(t)&&isRef(m)&&!isRef(u))return c?!1:(m.value=u,!0)}let g=isArray$3(t)&&isIntegerKey(c)?Number(c)<t.length:hasOwn(t,c),b=Reflect.set(t,c,u,isRef(t)?t:d);return t===toRaw(d)&&(g?hasChanged(u,m)&&trigger(t,`set`,c,u,m):trigger(t,`add`,c,u)),b}deleteProperty(t,c){let u=hasOwn(t,c),d=t[c],m=Reflect.deleteProperty(t,c);return m&&u&&trigger(t,`delete`,c,void 0,d),m}has(t,c){let u=Reflect.has(t,c);return(!isSymbol(c)||!builtInSymbols.has(c))&&track(t,`has`,c),u}ownKeys(t){return track(t,`iterate`,isArray$3(t)?`length`:ITERATE_KEY),Reflect.ownKeys(t)}},ReadonlyReactiveHandler=class extends BaseReactiveHandler{constructor(t=!1){super(!0,t)}set(t,c){return process.env.NODE_ENV!==`production`&&warn$3(`Set operation on key "${String(c)}" failed: target is readonly.`,t),!0}deleteProperty(t,c){return process.env.NODE_ENV!==`production`&&warn$3(`Delete operation on key "${String(c)}" failed: target is readonly.`,t),!0}},mutableHandlers=new MutableReactiveHandler,readonlyHandlers=new ReadonlyReactiveHandler,shallowReactiveHandlers=new MutableReactiveHandler(!0),shallowReadonlyHandlers=new ReadonlyReactiveHandler(!0),toShallow=t=>t,getProto=t=>Reflect.getPrototypeOf(t),mutableCollectionHandlers={get:createInstrumentationGetter(!1,!1)},shallowCollectionHandlers={get:createInstrumentationGetter(!1,!0)},readonlyCollectionHandlers={get:createInstrumentationGetter(!0,!1)},shallowReadonlyCollectionHandlers={get:createInstrumentationGetter(!0,!0)},reactiveMap=new WeakMap,shallowReactiveMap=new WeakMap,readonlyMap=new WeakMap,shallowReadonlyMap=new WeakMap,toReactive=t=>isObject$1(t)?reactive(t):t,toReadonly=t=>isObject$1(t)?readonly(t):t,RefImpl=class{constructor(t,c){this.dep=new Dep,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=c?t:toRaw(t),this._value=c?t:toReactive(t),this.__v_isShallow=c}get value(){return process.env.NODE_ENV===`production`?this.dep.track():this.dep.track({target:this,type:`get`,key:`value`}),this._value}set value(t){let c=this._rawValue,u=this.__v_isShallow||isShallow(t)||isReadonly(t);t=u?t:toRaw(t),hasChanged(t,c)&&(this._rawValue=t,this._value=u?t:toReactive(t),process.env.NODE_ENV===`production`?this.dep.trigger():this.dep.trigger({target:this,type:`set`,key:`value`,newValue:t,oldValue:c}))}},shallowUnwrapHandlers={get:(t,c,u)=>c===`__v_raw`?t:unref(Reflect.get(t,c,u)),set:(t,c,u,d)=>{let m=t[c];return isRef(m)&&!isRef(u)?(m.value=u,!0):Reflect.set(t,c,u,d)}},CustomRefImpl=class{constructor(t){this.__v_isRef=!0,this._value=void 0;let c=this.dep=new Dep,{get:u,set:d}=t(c.track.bind(c),c.trigger.bind(c));this._get=u,this._set=d}get value(){return this._value=this._get()}set value(t){this._set(t)}},ObjectRefImpl=class{constructor(t,c,u){this._object=t,this._key=c,this._defaultValue=u,this.__v_isRef=!0,this._value=void 0}get value(){let t=this._object[this._key];return this._value=t===void 0?this._defaultValue:t}set value(t){this._object[this._key]=t}get dep(){return getDepFromReactive(toRaw(this._object),this._key)}},GetterRefImpl=class{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}},ComputedRefImpl=class{constructor(t,c,u){this.fn=t,this.setter=c,this._value=void 0,this.dep=new Dep(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=globalVersion-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!c,this.isSSR=u}notify(){if(this.flags|=16,!(this.flags&8)&&activeSub!==this)return batch(this,!0),!0;process.env.NODE_ENV}get value(){let t=process.env.NODE_ENV===`production`?this.dep.track():this.dep.track({target:this,type:`get`,key:`value`});return refreshComputed(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter?this.setter(t):process.env.NODE_ENV!==`production`&&warn$3(`Write operation failed: computed value is readonly`)}},__name$2(computed$1,`computed`),TrackOpTypes={GET:`get`,HAS:`has`,ITERATE:`iterate`},TriggerOpTypes={SET:`set`,ADD:`add`,DELETE:`delete`,CLEAR:`clear`},INITIAL_WATCHER_VALUE={},cleanupMap=new WeakMap,activeWatcher=void 0,__name$2(watch$1,`watch`)}));function pushWarningContext(t){stack$1.push(t)}function popWarningContext(){stack$1.pop()}function warn$1(t,...c){if(isWarning)return;isWarning=!0,pauseTracking();let u=stack$1.length?stack$1[stack$1.length-1].component:null,d=u&&u.appContext.config.warnHandler,m=getComponentTrace();if(d)callWithErrorHandling(d,u,11,[t+c.map(t=>{var c,u;return t.toString?.call(t)??JSON.stringify(t)}).join(``),u&&u.proxy,m.map(({vnode:t})=>`at <${formatComponentName(u,t.type)}>`).join(`
|
|
6
6
|
`),m]);else{let u=[`[Vue warn]: ${t}`,...c];m.length&&u.push(`
|
|
7
7
|
`,...formatTrace(m)),console.warn(...u)}resetTracking(),isWarning=!1}function getComponentTrace(){let t=stack$1[stack$1.length-1];if(!t)return[];let c=[];for(;t;){let u=c[0];u&&u.vnode===t?u.recurseCount++:c.push({vnode:t,recurseCount:0});let d=t.component&&t.component.parent;t=d&&d.vnode}return c}function formatTrace(t){let c=[];return t.forEach((t,u)=>{c.push(...u===0?[]:[`
|
|
8
8
|
`],...formatTraceEntry(t))}),c}function formatTraceEntry({vnode:t,recurseCount:c}){let u=c>0?`... (${c} recursive calls)`:``,d=t.component?t.component.parent==null:!1,m=` at <${formatComponentName(t.component,t.type,d)}`,g=`>`+u;return t.props?[m,...formatProps(t.props),g]:[m+g]}function formatProps(t){let c=[],u=Object.keys(t);return u.slice(0,3).forEach(u=>{c.push(...formatProp(u,t[u]))}),u.length>3&&c.push(` ...`),c}function formatProp(t,c,u){return isString$1(c)?(c=JSON.stringify(c),u?c:[`${t}=${c}`]):typeof c==`number`||typeof c==`boolean`||c==null?u?c:[`${t}=${c}`]:isRef(c)?(c=formatProp(t,toRaw(c.value),!0),u?c:[`${t}=Ref<`,c,`>`]):isFunction$1(c)?[`${t}=fn${c.name?`<${c.name}>`:``}`]:(c=toRaw(c),u?c:[`${t}=`,c])}function assertNumber(t,c){process.env.NODE_ENV!==`production`&&t!==void 0&&(typeof t==`number`?isNaN(t)&&warn$1(`${c} is NaN - the duration expression might be incorrect.`):warn$1(`${c} is not a valid number - got ${JSON.stringify(t)}.`))}function callWithErrorHandling(t,c,u,d){try{return d?t(...d):t()}catch(t){handleError(t,c,u)}}function callWithAsyncErrorHandling(t,c,u,d){if(isFunction$1(t)){let m=callWithErrorHandling(t,c,u,d);return m&&isPromise(m)&&m.catch(t=>{handleError(t,c,u)}),m}if(isArray$3(t)){let m=[];for(let g=0;g<t.length;g++)m.push(callWithAsyncErrorHandling(t[g],c,u,d));return m}else process.env.NODE_ENV!==`production`&&warn$1(`Invalid value type passed to callWithAsyncErrorHandling(): ${typeof t}`)}function handleError(t,c,u,d=!0){let m=c?c.vnode:null,{errorHandler:g,throwUnhandledErrorInProduction:b}=c&&c.appContext.config||EMPTY_OBJ;if(c){let d=c.parent,m=c.proxy,b=process.env.NODE_ENV===`production`?`https://vuejs.org/error-reference/#runtime-${u}`:ErrorTypeStrings$1[u];for(;d;){let c=d.ec;if(c){for(let u=0;u<c.length;u++)if(c[u](t,m,b)===!1)return}d=d.parent}if(g){pauseTracking(),callWithErrorHandling(g,null,10,[t,m,b]),resetTracking();return}}logError(t,u,m,d,b)}function logError(t,c,u,d=!0,m=!1){if(process.env.NODE_ENV!==`production`){let m=ErrorTypeStrings$1[c];if(u&&pushWarningContext(u),warn$1(`Unhandled error${m?` during execution of ${m}`:``}`),u&&popWarningContext(),d)throw t;console.error(t)}else if(m)throw t;else console.error(t)}function nextTick$2(t){let c=currentFlushPromise||resolvedPromise;return t?c.then(this?t.bind(this):t):c}function findInsertionIndex(t){let c=flushIndex+1,u=queue$1.length;for(;c<u;){let d=c+u>>>1,m=queue$1[d],g=getId(m);g<t||g===t&&m.flags&2?c=d+1:u=d}return c}function queueJob(t){if(!(t.flags&1)){let c=getId(t),u=queue$1[queue$1.length-1];!u||!(t.flags&2)&&c>=getId(u)?queue$1.push(t):queue$1.splice(findInsertionIndex(c),0,t),t.flags|=1,queueFlush()}}function queueFlush(){currentFlushPromise||(currentFlushPromise=resolvedPromise.then(flushJobs))}function queuePostFlushCb(t){isArray$3(t)?pendingPostFlushCbs.push(...t):activePostFlushCbs&&t.id===-1?activePostFlushCbs.splice(postFlushIndex+1,0,t):t.flags&1||(pendingPostFlushCbs.push(t),t.flags|=1),queueFlush()}function flushPreFlushCbs(t,c,u=flushIndex+1){for(process.env.NODE_ENV!==`production`&&(c=c||new Map);u<queue$1.length;u++){let d=queue$1[u];if(d&&d.flags&2){if(t&&d.id!==t.uid||process.env.NODE_ENV!==`production`&&checkRecursiveUpdates(c,d))continue;queue$1.splice(u,1),u--,d.flags&4&&(d.flags&=-2),d(),d.flags&4||(d.flags&=-2)}}}function flushPostFlushCbs(t){if(pendingPostFlushCbs.length){let c=[...new Set(pendingPostFlushCbs)].sort((t,c)=>getId(t)-getId(c));if(pendingPostFlushCbs.length=0,activePostFlushCbs){activePostFlushCbs.push(...c);return}for(activePostFlushCbs=c,process.env.NODE_ENV!==`production`&&(t=t||new Map),postFlushIndex=0;postFlushIndex<activePostFlushCbs.length;postFlushIndex++){let c=activePostFlushCbs[postFlushIndex];process.env.NODE_ENV!==`production`&&checkRecursiveUpdates(t,c)||(c.flags&4&&(c.flags&=-2),c.flags&8||c(),c.flags&=-2)}activePostFlushCbs=null,postFlushIndex=0}}function flushJobs(t){process.env.NODE_ENV!==`production`&&(t=t||new Map);let c=process.env.NODE_ENV===`production`?NOOP:c=>checkRecursiveUpdates(t,c);try{for(flushIndex=0;flushIndex<queue$1.length;flushIndex++){let t=queue$1[flushIndex];if(t&&!(t.flags&8)){if(process.env.NODE_ENV!==`production`&&c(t))continue;t.flags&4&&(t.flags&=-2),callWithErrorHandling(t,t.i,t.i?15:14),t.flags&4||(t.flags&=-2)}}}finally{for(;flushIndex<queue$1.length;flushIndex++){let t=queue$1[flushIndex];t&&(t.flags&=-2)}flushIndex=-1,queue$1.length=0,flushPostFlushCbs(t),currentFlushPromise=null,(queue$1.length||pendingPostFlushCbs.length)&&flushJobs(t)}}function checkRecursiveUpdates(t,c){let u=t.get(c)||0;if(u>RECURSION_LIMIT){let t=c.i,u=t&&getComponentName(t.type);return handleError(`Maximum recursive updates exceeded${u?` in component <${u}>`:``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,null,10),!0}return t.set(c,u+1),!1}function registerHMR(t){let c=t.type.__hmrId,u=map$1.get(c);u||(createRecord(c,t.type),u=map$1.get(c)),u.instances.add(t)}function unregisterHMR(t){map$1.get(t.type.__hmrId).instances.delete(t)}function createRecord(t,c){return map$1.has(t)?!1:(map$1.set(t,{initialDef:normalizeClassComponent(c),instances:new Set}),!0)}function normalizeClassComponent(t){return isClassComponent(t)?t.__vccOpts:t}function rerender(t,c){let u=map$1.get(t);u&&(u.initialDef.render=c,[...u.instances].forEach(t=>{c&&(t.render=c,normalizeClassComponent(t.type).render=c),t.renderCache=[],isHmrUpdating=!0,t.update(),isHmrUpdating=!1}))}function reload(t,c){let u=map$1.get(t);if(!u)return;c=normalizeClassComponent(c),updateComponentDef(u.initialDef,c);let d=[...u.instances];for(let t=0;t<d.length;t++){let m=d[t],g=normalizeClassComponent(m.type),b=hmrDirtyComponents.get(g);b||(g!==u.initialDef&&updateComponentDef(g,c),hmrDirtyComponents.set(g,b=new Set)),b.add(m),m.appContext.propsCache.delete(m.type),m.appContext.emitsCache.delete(m.type),m.appContext.optionsCache.delete(m.type),m.ceReload?(b.add(m),m.ceReload(c.styles),b.delete(m)):m.parent?queueJob(()=>{isHmrUpdating=!0,m.parent.update(),isHmrUpdating=!1,b.delete(m)}):m.appContext.reload?m.appContext.reload():typeof window<`u`?window.location.reload():console.warn(`[HMR] Root or manually mounted instance modified. Full reload required.`),m.root.ce&&m!==m.root&&m.root.ce._removeChildStyle(g)}queuePostFlushCb(()=>{hmrDirtyComponents.clear()})}function updateComponentDef(t,c){extend$2(t,c);for(let u in t)u!==`__file`&&!(u in c)&&delete t[u]}function tryWrap(t){return(c,u)=>{try{return t(c,u)}catch(t){console.error(t),console.warn(`[HMR] Something went wrong during Vue component hot-reload. Full reload required.`)}}}function emit$1(t,...c){devtools$1?devtools$1.emit(t,...c):devtoolsNotInstalled||buffer.push({event:t,args:c})}function setDevtoolsHook$1(t,c){var u,d;devtools$1=t,devtools$1?(devtools$1.enabled=!0,buffer.forEach(({event:t,args:c})=>devtools$1.emit(t,...c)),buffer=[]):typeof window<`u`&&window.HTMLElement&&!(window.navigator?.userAgent)?.includes(`jsdom`)?((c.__VUE_DEVTOOLS_HOOK_REPLAY__=c.__VUE_DEVTOOLS_HOOK_REPLAY__||[]).push(t=>{setDevtoolsHook$1(t,c)}),setTimeout(()=>{devtools$1||(c.__VUE_DEVTOOLS_HOOK_REPLAY__=null,devtoolsNotInstalled=!0,buffer=[])},3e3)):(devtoolsNotInstalled=!0,buffer=[])}function devtoolsInitApp(t,c){emit$1(`app:init`,t,c,{Fragment,Text,Comment,Static})}function devtoolsUnmountApp(t){emit$1(`app:unmount`,t)}function createDevtoolsComponentHook(t){return c=>{emit$1(t,c.appContext.app,c.uid,c.parent?c.parent.uid:void 0,c)}}function createDevtoolsPerformanceHook(t){return(c,u,d)=>{emit$1(t,c.appContext.app,c.uid,c,u,d)}}function devtoolsComponentEmit(t,c,u){emit$1(`component:emit`,t.appContext.app,t,c,u)}function setCurrentRenderingInstance(t){let c=currentRenderingInstance;return currentRenderingInstance=t,currentScopeId=t&&t.type.__scopeId||null,c}function pushScopeId(t){currentScopeId=t}function popScopeId(){currentScopeId=null}function withCtx(t,c=currentRenderingInstance,u){if(!c||t._n)return t;let renderFnWithContext=(...u)=>{renderFnWithContext._d&&setBlockTracking(-1);let d=setCurrentRenderingInstance(c),m;try{m=t(...u)}finally{setCurrentRenderingInstance(d),renderFnWithContext._d&&setBlockTracking(1)}return process.env.NODE_ENV!==`production`&&devtoolsComponentUpdated(c),m};return renderFnWithContext._n=!0,renderFnWithContext._c=!0,renderFnWithContext._d=!0,renderFnWithContext}function validateDirectiveName(t){isBuiltInDirective(t)&&warn$1(`Do not use built-in directive ids as custom directive id: `+t)}function withDirectives(t,c){if(currentRenderingInstance===null)return process.env.NODE_ENV!==`production`&&warn$1(`withDirectives can only be used inside render functions.`),t;let u=getComponentPublicInstance(currentRenderingInstance),d=t.dirs||(t.dirs=[]);for(let t=0;t<c.length;t++){let[m,g,b,S=EMPTY_OBJ]=c[t];m&&(isFunction$1(m)&&(m={mounted:m,updated:m}),m.deep&&traverse(g),d.push({dir:m,instance:u,value:g,oldValue:void 0,arg:b,modifiers:S}))}return t}function invokeDirectiveHook(t,c,u,d){let m=t.dirs,g=c&&c.dirs;for(let b=0;b<m.length;b++){let S=m[b];g&&(S.oldValue=g[b].value);let C=S.dir[d];C&&(pauseTracking(),callWithAsyncErrorHandling(C,u,8,[t.el,S,t,c]),resetTracking())}}function moveTeleport(t,c,u,{o:{insert:d},m},g=2){g===0&&d(t.targetAnchor,c,u);let{el:b,anchor:S,shapeFlag:C,children:w,props:T}=t,E=g===2;if(E&&d(b,c,u),(!E||isTeleportDisabled(T))&&C&16)for(let t=0;t<w.length;t++)m(w[t],c,u,2);E&&d(S,c,u)}function hydrateTeleport(t,c,u,d,m,g,{o:{nextSibling:b,parentNode:S,querySelector:C,insert:w,createText:T}},E){let D=c.target=resolveTarget(c.props,C);if(D){let C=isTeleportDisabled(c.props),O=D._lpa||D.firstChild;if(c.shapeFlag&16)if(C)c.anchor=E(b(t),c,S(t),u,d,m,g),c.targetStart=O,c.targetAnchor=O&&b(O);else{c.anchor=b(t);let S=O;for(;S;){if(S&&S.nodeType===8){if(S.data===`teleport start anchor`)c.targetStart=S;else if(S.data===`teleport anchor`){c.targetAnchor=S,D._lpa=c.targetAnchor&&b(c.targetAnchor);break}}S=b(S)}c.targetAnchor||prepareAnchor(D,c,T,w),E(O&&b(O),c,D,u,d,m,g)}updateCssVars(c,C)}return c.anchor&&b(c.anchor)}function updateCssVars(t,c){let u=t.ctx;if(u&&u.ut){let d,m;for(c?(d=t.el,m=t.anchor):(d=t.targetStart,m=t.targetAnchor);d&&d!==m;)d.nodeType===1&&d.setAttribute(`data-v-owner`,u.uid),d=d.nextSibling;u.ut()}}function prepareAnchor(t,c,u,d){let m=c.targetStart=u(``),g=c.targetAnchor=u(``);return m[TeleportEndKey]=g,t&&(d(m,t),d(g,t)),g}function useTransitionState(){let t={isMounted:!1,isLeaving:!1,isUnmounting:!1,leavingVNodes:new Map};return onMounted(()=>{t.isMounted=!0}),onBeforeUnmount(()=>{t.isUnmounting=!0}),t}function findNonCommentChild(t){let c=t[0];if(t.length>1){let u=!1;for(let d of t)if(d.type!==Comment){if(process.env.NODE_ENV!==`production`&&u){warn$1(`<transition> can only be used on a single element or component. Use <transition-group> for lists.`);break}if(c=d,u=!0,process.env.NODE_ENV===`production`)break}}return c}function getLeavingNodesForType(t,c){let{leavingVNodes:u}=t,d=u.get(c.type);return d||(d=Object.create(null),u.set(c.type,d)),d}function resolveTransitionHooks(t,c,u,d,m){let{appear:g,mode:b,persisted:S=!1,onBeforeEnter:C,onEnter:w,onAfterEnter:T,onEnterCancelled:E,onBeforeLeave:D,onLeave:O,onAfterLeave:Or,onLeaveCancelled:kr,onBeforeAppear:Ar,onAppear:jr,onAfterAppear:Mr,onAppearCancelled:Nr}=c,Pr=String(t.key),Fr=getLeavingNodesForType(u,t),callHook=(t,c)=>{t&&callWithAsyncErrorHandling(t,d,9,c)},callAsyncHook=(t,c)=>{let u=c[1];callHook(t,c),isArray$3(t)?t.every(t=>t.length<=1)&&u():t.length<=1&&u()},Ir={mode:b,persisted:S,beforeEnter(c){let d=C;if(!u.isMounted)if(g)d=Ar||C;else return;c[leaveCbKey]&&c[leaveCbKey](!0);let m=Fr[Pr];m&&isSameVNodeType(t,m)&&m.el[leaveCbKey]&&m.el[leaveCbKey](),callHook(d,[c])},enter(t){let c=w,d=T,m=E;if(!u.isMounted)if(g)c=jr||w,d=Mr||T,m=Nr||E;else return;let b=!1,S=t[enterCbKey$1]=c=>{b||(b=!0,callHook(c?m:d,[t]),Ir.delayedLeave&&Ir.delayedLeave(),t[enterCbKey$1]=void 0)};c?callAsyncHook(c,[t,S]):S()},leave(c,d){let m=String(t.key);if(c[enterCbKey$1]&&c[enterCbKey$1](!0),u.isUnmounting)return d();callHook(D,[c]);let g=!1,b=c[leaveCbKey]=u=>{g||(g=!0,d(),callHook(u?kr:Or,[c]),c[leaveCbKey]=void 0,Fr[m]===t&&delete Fr[m])};Fr[m]=t,O?callAsyncHook(O,[c,b]):b()},clone(t){let g=resolveTransitionHooks(t,c,u,d,m);return m&&m(g),g}};return Ir}function emptyPlaceholder(t){if(isKeepAlive(t))return t=cloneVNode(t),t.children=null,t}function getInnerChild$1(t){if(!isKeepAlive(t))return isTeleport(t.type)&&t.children?findNonCommentChild(t.children):t;if(process.env.NODE_ENV!==`production`&&t.component)return t.component.subTree;let{shapeFlag:c,children:u}=t;if(u){if(c&16)return u[0];if(c&32&&isFunction$1(u.default))return u.default()}}function setTransitionHooks(t,c){t.shapeFlag&6&&t.component?(t.transition=c,setTransitionHooks(t.component.subTree,c)):t.shapeFlag&128?(t.ssContent.transition=c.clone(t.ssContent),t.ssFallback.transition=c.clone(t.ssFallback)):t.transition=c}function getTransitionRawChildren(t,c=!1,u){let d=[],m=0;for(let g=0;g<t.length;g++){let b=t[g],S=u==null?b.key:String(u)+String(b.key==null?g:b.key);b.type===Fragment?(b.patchFlag&128&&m++,d=d.concat(getTransitionRawChildren(b.children,c,S))):(c||b.type!==Comment)&&d.push(S==null?b:cloneVNode(b,{key:S}))}if(m>1)for(let t=0;t<d.length;t++)d[t].patchFlag=-2;return d}function defineComponent(t,c){return isFunction$1(t)?extend$2({name:t.name},c,{setup:t}):t}function useId(){let t=getCurrentInstance();return t?(t.appContext.config.idPrefix||`v`)+`-`+t.ids[0]+ t.ids[1]++:(process.env.NODE_ENV!==`production`&&warn$1(`useId() is called when there is no active component instance to be associated with.`),``)}function markAsyncBoundary(t){t.ids=[t.ids[0]+ t.ids[2]+++`-`,0,0]}function useTemplateRef(t){let c=getCurrentInstance(),u=shallowRef(null);if(c){let d=c.refs===EMPTY_OBJ?c.refs={}:c.refs,m;process.env.NODE_ENV!==`production`&&(m=Object.getOwnPropertyDescriptor(d,t))&&!m.configurable?warn$1(`useTemplateRef('${t}') already exists.`):Object.defineProperty(d,t,{enumerable:!0,get:()=>u.value,set:t=>u.value=t})}else process.env.NODE_ENV!==`production`&&warn$1(`useTemplateRef() is called when there is no active component instance to be associated with.`);let d=process.env.NODE_ENV===`production`?u:readonly(u);return process.env.NODE_ENV!==`production`&&knownTemplateRefs.add(d),d}function setRef(t,c,u,d,m=!1){if(isArray$3(t)){t.forEach((t,g)=>setRef(t,c&&(isArray$3(c)?c[g]:c),u,d,m));return}if(isAsyncWrapper(d)&&!m){d.shapeFlag&512&&d.type.__asyncResolved&&d.component.subTree.component&&setRef(t,c,u,d.component.subTree);return}let g=d.shapeFlag&4?getComponentPublicInstance(d.component):d.el,b=m?null:g,{i:S,r:C}=t;if(process.env.NODE_ENV!==`production`&&!S){warn$1(`Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.`);return}let w=c&&c.r,T=S.refs===EMPTY_OBJ?S.refs={}:S.refs,E=S.setupState,D=toRaw(E),O=E===EMPTY_OBJ?()=>!1:t=>process.env.NODE_ENV!==`production`&&(hasOwn(D,t)&&!isRef(D[t])&&warn$1(`Template ref "${t}" used on a non-ref value. It will not work in the production build.`),knownTemplateRefs.has(D[t]))?!1:hasOwn(D,t);if(w!=null&&w!==C&&(isString$1(w)?(T[w]=null,O(w)&&(E[w]=null)):isRef(w)&&(w.value=null)),isFunction$1(C))callWithErrorHandling(C,S,12,[b,T]);else{let c=isString$1(C),d=isRef(C);if(c||d){let doSet=()=>{if(t.f){let u=c?O(C)?E[C]:T[C]:C.value;m?isArray$3(u)&&remove(u,g):isArray$3(u)?u.includes(g)||u.push(g):c?(T[C]=[g],O(C)&&(E[C]=T[C])):(C.value=[g],t.k&&(T[t.k]=C.value))}else c?(T[C]=b,O(C)&&(E[C]=b)):d?(C.value=b,t.k&&(T[t.k]=b)):process.env.NODE_ENV!==`production`&&warn$1(`Invalid template ref type:`,C,`(${typeof C})`)};b?(doSet.id=-1,queuePostRenderEffect(doSet,u)):doSet()}else process.env.NODE_ENV!==`production`&&warn$1(`Invalid template ref type:`,C,`(${typeof C})`)}}function createHydrationFunctions(t){let{mt:c,p:u,o:{patchProp:d,createText:m,nextSibling:g,parentNode:b,remove:S,insert:C,createComment:w}}=t,hydrate=(t,c)=>{if(!c.hasChildNodes()){process.env.NODE_ENV!==`production`&&warn$1(`Attempting to hydrate existing markup but container is empty. Performing full mount instead.`),u(null,t,c),flushPostFlushCbs(),c._vnode=t;return}hydrateNode(c.firstChild,t,null,null,null),flushPostFlushCbs(),c._vnode=t},hydrateNode=(u,d,S,w,T,E=!1)=>{E=E||!!d.dynamicChildren;let D=isComment(u)&&u.data===`[`,onMismatch=()=>handleMismatch(u,d,S,w,T,D),{type:O,ref:Or,shapeFlag:kr,patchFlag:Ar}=d,jr=u.nodeType;d.el=u,process.env.NODE_ENV!==`production`&&(def(u,`__vnode`,d,!0),def(u,`__vueParentComponent`,S,!0)),Ar===-2&&(E=!1,d.dynamicChildren=null);let Mr=null;switch(O){case Text:jr===3?(u.data!==d.children&&(process.env.NODE_ENV!==`production`&&warn$1(`Hydration text mismatch in`,u.parentNode,`
|
|
@@ -94,8 +94,8 @@ Please double-check your map/reduce function.`),guardedConsole(`error`,c,u)}}fun
|
|
|
94
94
|
`)===0?t.substr(1,t.length):t}).forEach(function(t){var u=t.split(`:`),d=u.shift().trim();if(d){var m=u.join(`:`).trim();try{c.append(d,m)}catch(t){console.warn(`Response `+t.message)}}}),c}Body.call(Request.prototype);function Response(t,c){if(!(this instanceof Response))throw TypeError(`Please use the "new" operator, this DOM object constructor cannot be called as a function.`);if(c||(c={}),this.type=`default`,this.status=c.status===void 0?200:c.status,this.status<200||this.status>599)throw RangeError(`Failed to construct 'Response': The status provided (0) is outside the range [200, 599].`);this.ok=this.status>=200&&this.status<300,this.statusText=c.statusText===void 0?``:``+c.statusText,this.headers=new Headers(c.headers),this.url=c.url||``,this._initBody(t)}Body.call(Response.prototype),Response.prototype.clone=function(){return new Response(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new Headers(this.headers),url:this.url})},Response.error=function(){var t=new Response(null,{status:200,statusText:``});return t.ok=!1,t.status=0,t.type=`error`,t};var S=[301,302,303,307,308];Response.redirect=function(t,c){if(S.indexOf(c)===-1)throw RangeError(`Invalid status code`);return new Response(null,{status:c,headers:{location:t}})},c.DOMException=u.DOMException;try{new c.DOMException}catch{c.DOMException=function(t,c){this.message=t,this.name=c,this.stack=Error(t).stack},c.DOMException.prototype=Object.create(Error.prototype),c.DOMException.prototype.constructor=c.DOMException}function fetch(t,m){return new Promise(function(g,b){var S=new Request(t,m);if(S.signal&&S.signal.aborted)return b(new c.DOMException(`Aborted`,`AbortError`));var C=new XMLHttpRequest;function abortXhr(){C.abort()}C.onload=function(){var t={statusText:C.statusText,headers:parseHeaders(C.getAllResponseHeaders()||``)};S.url.indexOf(`file://`)===0&&(C.status<200||C.status>599)?t.status=200:t.status=C.status,t.url=`responseURL`in C?C.responseURL:t.headers.get(`X-Request-URL`);var c=`response`in C?C.response:C.responseText;setTimeout(function(){g(new Response(c,t))},0)},C.onerror=function(){setTimeout(function(){b(TypeError(`Network request failed`))},0)},C.ontimeout=function(){setTimeout(function(){b(TypeError(`Network request timed out`))},0)},C.onabort=function(){setTimeout(function(){b(new c.DOMException(`Aborted`,`AbortError`))},0)};function fixUrl(t){try{return t===``&&u.location.href?u.location.href:t}catch{return t}}if(C.open(S.method,fixUrl(S.url),!0),S.credentials===`include`?C.withCredentials=!0:S.credentials===`omit`&&(C.withCredentials=!1),`responseType`in C&&(d.blob?C.responseType=`blob`:d.arrayBuffer&&(C.responseType=`arraybuffer`)),m&&typeof m.headers==`object`&&!(m.headers instanceof Headers||u.Headers&&m.headers instanceof u.Headers)){var w=[];Object.getOwnPropertyNames(m.headers).forEach(function(t){w.push(normalizeName(t)),C.setRequestHeader(t,normalizeValue(m.headers[t]))}),S.headers.forEach(function(t,c){w.indexOf(c)===-1&&C.setRequestHeader(c,t)})}else S.headers.forEach(function(t,c){C.setRequestHeader(c,t)});S.signal&&(S.signal.addEventListener(`abort`,abortXhr),C.onreadystatechange=function(){C.readyState===4&&S.signal.removeEventListener(`abort`,abortXhr)}),C.send(S._bodyInit===void 0?null:S._bodyInit)})}return fetch.polyfill=!0,u.fetch||(u.fetch=fetch,u.Headers=Headers,u.Request=Request,u.Response=Response),c.Headers=Headers,c.Request=Request,c.Response=Response,c.fetch=fetch,c})({})})(d),d.fetch.ponyfill=!0,delete d.fetch.polyfill;var m=u.fetch?u:d;t=m.fetch,t.default=m.fetch,t.fetch=m.fetch,t.Headers=m.Headers,t.Request=m.Request,t.Response=m.Response,c.exports=t})),require_browser=__commonJSMin$2(((t,c)=>{var u=c.exports={},d,m;function defaultSetTimout(){throw Error(`setTimeout has not been defined`)}function defaultClearTimeout(){throw Error(`clearTimeout has not been defined`)}(function(){try{d=typeof setTimeout==`function`?setTimeout:defaultSetTimout}catch{d=defaultSetTimout}try{m=typeof clearTimeout==`function`?clearTimeout:defaultClearTimeout}catch{m=defaultClearTimeout}})();function runTimeout(t){if(d===setTimeout)return setTimeout(t,0);if((d===defaultSetTimout||!d)&&setTimeout)return d=setTimeout,setTimeout(t,0);try{return d(t,0)}catch{try{return d.call(null,t,0)}catch{return d.call(this,t,0)}}}function runClearTimeout(t){if(m===clearTimeout)return clearTimeout(t);if((m===defaultClearTimeout||!m)&&clearTimeout)return m=clearTimeout,clearTimeout(t);try{return m(t)}catch{try{return m.call(null,t)}catch{return m.call(this,t)}}}var g=[],b=!1,S,C=-1;function cleanUpNextTick(){!b||!S||(b=!1,S.length?g=S.concat(g):C=-1,g.length&&drainQueue())}function drainQueue(){if(!b){var t=runTimeout(cleanUpNextTick);b=!0;for(var c=g.length;c;){for(S=g,g=[];++C<c;)S&&S[C].run();C=-1,c=g.length}S=null,b=!1,runClearTimeout(t)}}u.nextTick=function(t){var c=Array(arguments.length-1);if(arguments.length>1)for(var u=1;u<arguments.length;u++)c[u-1]=arguments[u];g.push(new Item(t,c)),g.length===1&&!b&&runTimeout(drainQueue)};function Item(t,c){this.fun=t,this.array=c}Item.prototype.run=function(){this.fun.apply(null,this.array)},u.title=`browser`,u.browser=!0,u.env={},u.argv=[],u.version=``,u.versions={};function noop(){}u.on=noop,u.addListener=noop,u.once=noop,u.off=noop,u.removeListener=noop,u.removeAllListeners=noop,u.emit=noop,u.prependListener=noop,u.prependOnceListener=noop,u.listeners=function(t){return[]},u.binding=function(t){throw Error(`process.binding is not supported`)},u.cwd=function(){return`/`},u.chdir=function(t){throw Error(`process.chdir is not supported`)},u.umask=function(){return 0}})),dist_exports=__exportAll$1({ContentNavigator:()=>ContentNavigator,CouchDBToStaticPacker:()=>CouchDBToStaticPacker,CourseLookup:()=>CourseLookup,DocType:()=>DocType,DocTypePrefixes:()=>DocTypePrefixes,ENV:()=>ENV,FileSystemError:()=>FileSystemError,GuestUsername:()=>GuestUsername,Loggable:()=>Loggable,NOT_SET:()=>NOT_SET,NavigatorRole:()=>NavigatorRole,NavigatorRoles:()=>NavigatorRoles,Navigators:()=>Navigators,QuotaRoundRobinMixer:()=>QuotaRoundRobinMixer,SessionController:()=>SessionController,StaticToCouchDBMigrator:()=>StaticToCouchDBMigrator,TagFilteredContentSource:()=>TagFilteredContentSource,_resetDataLayer:()=>_resetDataLayer,aggregateOutcomesForGradient:()=>aggregateOutcomesForGradient,areQuestionRecords:()=>areQuestionRecords,buildStrategyStateId:()=>buildStrategyStateId,captureMixerRun:()=>captureMixerRun,computeDeviation:()=>computeDeviation,computeEffectiveWeight:()=>computeEffectiveWeight,computeOutcomeSignal:()=>computeOutcomeSignal,computeSpread:()=>computeSpread,computeStrategyGradient:()=>computeStrategyGradient,createOrchestrationContext:()=>createOrchestrationContext,docIsDeleted:()=>docIsDeleted,endSessionTracking:()=>endSessionTracking,ensureAppDataDirectory:()=>ensureAppDataDirectory,getAppDataDirectory:()=>getAppDataDirectory,getCardHistoryID:()=>getCardHistoryID,getCardOrigin:()=>getCardOrigin,getDataLayer:()=>getDataLayer,getDbPath:()=>getDbPath,getDefaultLearnableWeight:()=>getDefaultLearnableWeight,getRegisteredNavigator:()=>getRegisteredNavigator,getRegisteredNavigatorNames:()=>getRegisteredNavigatorNames,getRegisteredNavigatorRole:()=>getRegisteredNavigatorRole,getStudySource:()=>getStudySource,hasRegisteredNavigator:()=>hasRegisteredNavigator,importParsedCards:()=>importParsedCards,initializeDataDirectory:()=>initializeDataDirectory,initializeDataLayer:()=>initializeDataLayer,initializeNavigatorRegistry:()=>initializeNavigatorRegistry,isDataShapeRegistered:()=>isDataShapeRegistered,isDataShapeSchemaAvailable:()=>isDataShapeSchemaAvailable,isFilter:()=>isFilter,isGenerator:()=>isGenerator,isQuestionRecord:()=>isQuestionRecord,isQuestionTypeRegistered:()=>isQuestionTypeRegistered,isReview:()=>isReview,log:()=>log,mixerDebugAPI:()=>mixerDebugAPI,mountMixerDebugger:()=>mountMixerDebugger,mountPipelineDebugger:()=>mountPipelineDebugger,mountSessionDebugger:()=>mountSessionDebugger,mountUserDBDebugger:()=>mountUserDBDebugger,newInterval:()=>newInterval,parseCardHistoryID:()=>parseCardHistoryID,pipelineDebugAPI:()=>pipelineDebugAPI,processCustomQuestionsData:()=>processCustomQuestionsData,recordCardPresentation:()=>recordCardPresentation,recordUserOutcome:()=>recordUserOutcome,registerBlanksCard:()=>registerBlanksCard,registerCustomQuestionTypes:()=>registerCustomQuestionTypes,registerDataShape:()=>registerDataShape,registerNavigator:()=>registerNavigator,registerQuestionType:()=>registerQuestionType,registerSeedData:()=>registerSeedData,removeCustomQuestionTypes:()=>removeCustomQuestionTypes,removeDataShape:()=>removeDataShape,removeQuestionType:()=>removeQuestionType,runPeriodUpdate:()=>runPeriodUpdate,scoreAccuracyInZone:()=>scoreAccuracyInZone,sessionDebugAPI:()=>sessionDebugAPI,snapshotQueues:()=>snapshotQueues,startSessionTracking:()=>startSessionTracking,updateLearningState:()=>updateLearningState,updateStrategyWeight:()=>updateStrategyWeight,userDBDebugAPI:()=>userDBDebugAPI,validateMigration:()=>validateMigration,validateProcessorConfig:()=>validateProcessorConfig,validateStaticCourse:()=>validateStaticCourse});function areQuestionRecords(t){return isQuestionRecord(t.records[0])}function isQuestionRecord(t){return t.userAnswer!==void 0}function getCardHistoryID(t,c){return`${DocTypePrefixes.CARDRECORD}-${t}-${c}`}function parseCardHistoryID(t){let c=t.split(`-`),u=``;if(u+=c.length===3?``:`
|
|
95
95
|
given ID has incorrect number of '-' characters`,u+=c[0]===DocTypePrefixes.CARDRECORD?``:`
|
|
96
96
|
given ID does not start with ${DocTypePrefixes.CARDRECORD}`,c.length===3&&c[0]===DocTypePrefixes.CARDRECORD)return{courseID:c[1],cardID:c[2]};throw Error(`parseCardHistory Error:`+u)}function docIsDeleted(t){return t?.error===`not_found`&&t?.reason===`deleted`}function getAppDataDirectory(){return ENV.LOCAL_STORAGE_PREFIX?import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`,ENV.LOCAL_STORAGE_PREFIX):import___vite_browser_external$1.join(import___vite_browser_external$2.homedir(),`.tuilder`)}async function ensureAppDataDirectory(){let t=getAppDataDirectory();try{await import___vite_browser_external.promises.mkdir(t,{recursive:!0})}catch(c){if(c.code!==`EEXIST`)throw Error(`Failed to create app data directory ${t}: ${c.message}`)}return t}function getDbPath(t){return import___vite_browser_external$1.join(getAppDataDirectory(),t)}async function initializeDataDirectory(){await ensureAppDataDirectory(),logger.info(`PouchDB data directory initialized: ${getAppDataDirectory()}`)}function hexEncode(t){let c,u=``;for(let d=0;d<t.length;d++)c=t.charCodeAt(d).toString(16),u+=(`000`+c).slice(3);return u}function filterAllDocsByPrefix(t,c,u){let d={startkey:c,endkey:c+``,include_docs:!0};return u&&Object.assign(d,u),t.allDocs(d)}function getStartAndEndKeys(t){return{startkey:t,endkey:t+``}}function updateGuestAccountExpirationDate(t){let c=hooks.utc().add(2,`months`).toISOString(),u=`GuestAccountExpirationDate`;t.get(u).then(d=>t.put({_id:u,_rev:d._rev,date:c})).catch(()=>t.put({_id:u,date:c}))}function getLocalUserDB(t){let c=`userdb-${t}`;return typeof window>`u`?new pouchdb_setup_default(getDbPath(c),{}):new pouchdb_setup_default(c,{})}function scheduleCardReviewLocal(t,c){let u=hooks.utc();logger.info(`Scheduling for review in: ${c.time.diff(u,`h`)/24} days`),t.put({_id:DocTypePrefixes.SCHEDULED_CARD+c.time.format(REVIEW_TIME_FORMAT),cardId:c.card_id,reviewTime:c.time.toISOString(),courseId:c.course_id,scheduledAt:u.toISOString(),scheduledFor:c.scheduledFor,schedulingAgentId:c.schedulingAgentId})}async function removeScheduledCardReviewLocal(t,c){let u=await t.get(c);t.remove(u).then(t=>{t.ok&&log2(`Removed Review Doc: ${c}`)}).catch(t=>{log2(`Failed to remove Review Doc: ${c},
|
|
97
|
-
${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?CLIENT_CACHE[t]:(CLIENT_CACHE[t]=c?await c(t):await GET_ITEM(t),GET_CACHED(t))}async function GET_ITEM(t){throw Error(`No implementation found for GET_CACHED(${t})`)}async function addNote55(t,c,u,d,m,g,b,S=blankCourseElo()){let C=getCourseDB(t),w=prepareNote55(t,c,u,d,m,g,b),T=`${DocTypePrefixes.DISPLAYABLE_DATA}-${v4()}`,E=await C.put({...w,_id:T}),D=NameSpacer.getDataShapeString({course:c,dataShape:u.name});if(E.ok)try{await createCards(t,D,E.id,g,S,m)}catch(t){let c=`Unknown error`;c=t instanceof Error?t.message:t&&typeof t==`object`&&`reason`in t?t.reason:t&&typeof t==`object`&&`message`in t?t.message:String(t),logger.error(`[addNote55] Failed to create cards for note ${E.id}: ${c}`),E.cardCreationFailed=!0,E.cardCreationError=c}else logger.error(`[addNote55] Error adding note. Result: ${JSON.stringify(E)}`);return E}async function createCards(t,c,u,d,m=blankCourseElo(),g){let b=await getCredentialledCourseConfig(t),S=NameSpacer.getDataShapeDescriptor(c),C=[];for(let t of b.dataShapes)t.name===c&&(C=t.questionTypes);if(C.length===0){let t=`No questionViewTypes found for datashapeID: ${c} in course config. Cards cannot be created.`;throw logger.error(t),Error(t)}for(let c of C)await createCard(c,t,S,u,d,m,g)}async function createCard(t,c,u,d,m,g=blankCourseElo(),b){let S=NameSpacer.getQuestionDescriptor(t),C=await getCredentialledCourseConfig(c);for(let w of C.questionTypes)if(w.name===t)for(let t of w.viewList)await addCard(c,u.course,[d],NameSpacer.getViewString({course:S.course,questionType:S.questionType,view:t}),g,m,b)}async function addCard(t,c,u,d,m,g,b){let S=getCourseDB(t),C=`${DocTypePrefixes.CARD}-${v4()}`,w=await S.put({_id:C,course:c,id_displayable_data:u,id_view:d,docType:`CARD`,elo:m||toCourseElo(990+Math.round(20*Math.random())),author:b});for(let c of g)logger.info(`adding tag: ${c} to card ${w.id}`),await addTagToCard(t,w.id,c,b,!1);return w}async function getCredentialledCourseConfig(t){try{let c=await getCourseDB(t).get(`CourseConfig`);return c.courseID=t,logger.info(`Returning course config: ${JSON.stringify(c)}`),c}catch(c){throw logger.error(`Error fetching config for ${t}:`,c),c}}async function addTagToCard(t,c,u,d,m=!0){let g=getTagID(u),b=getCourseDB(t),S=new CourseDB(t,async()=>BaseUser.Dummy({setupRemoteDB:()=>null,startSync:()=>{},canCreateAccount:()=>!1,canAuthenticate:()=>!1,getCurrentUsername:async()=>`DummyUser`}));try{logger.info(`Applying tag ${u} to card ${t+`-`+c}...`);let d=await b.get(g);if(d.taggedCards.includes(c))throw new AlreadyTaggedErr(`Card ${c} is already tagged with ${u}`);if(d.taggedCards.push(c),m)try{let d=(await S.getCardEloData([c]))[0];d.tags[u]={count:0,score:d.global.score},await updateCardElo(t,c,d)}catch(t){logger.error(`Failed to update ELO data for card:`,c,t)}return b.put(d)}catch(g){if(g instanceof AlreadyTaggedErr)throw g;return await createTag(t,u,d),addTagToCard(t,c,u,d,m)}}async function updateCardElo(t,c,u){if(u){let d=getCourseDB(t),m=await d.get(c);return logger.debug(`Replacing ${JSON.stringify(m.elo)} with ${JSON.stringify(u)}`),m.elo=u,d.put(m)}}function getTagID(t){let c=`TAG`.valueOf()+`-`;return t.indexOf(c)===0?t:c+t}function getCourseDB(t){let c=`coursedb-${t}`;return new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+c,createPouchDBConfig())}function registerPipelineForDebug(t){_activePipeline=t}function getOrigin(t){let c=t.provenance[0];if(!c)return`unknown`;let u=c.reason?.toLowerCase()||``,d=c.strategy?.toLowerCase()||``;return u.includes(`new card`)||d.includes(`elo`)?`new`:u.includes(`review`)||d.includes(`srs`)?`review`:`unknown`}function captureRun(t){let c={...t,runId:`run-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date};runHistory.unshift(c),runHistory.length>MAX_RUNS&&runHistory.pop()}function parseCardElo(t){let c=t.find(t=>t.strategy===`elo`);if(!c?.reason)return;let u=c.reason.match(/card:\s*(\d+)/);return u?parseInt(u[1],10):void 0}function buildRunReport(t,c,u,d,m,g,b,S,C,w){let T=new Set(S.map(t=>t.cardId)),
|
|
98
|
-
`)}function printRunSummary(t){if(console.group(`\u{1F50D} Pipeline Run: ${t.courseId} (${t.courseName||`unnamed`})`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`User ELO: ${t.userElo??`unknown`}`),logger.info(`Generator: ${t.generatorName} \u2192 ${t.generatedCount} candidates`),t.generators&&t.generators.length>0){console.group(`Generator breakdown:`);for(let c of t.generators)logger.info(` ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews, top: ${c.topScore.toFixed(2)})`);console.groupEnd()}if(t.filters.length>0){console.group(`Filter impact:`);for(let c of t.filters)logger.info(` ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`);console.groupEnd()}logger.info(`Result: ${t.finalCount} cards selected (${t.newSelected} new, ${t.reviewsSelected} reviews)`),console.groupEnd()}function renderUI(){if(!_uiContainer)return;let t=runHistory,c=_selectedRunIndex===null?null:t[_selectedRunIndex],u=`
|
|
97
|
+
${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?CLIENT_CACHE[t]:(CLIENT_CACHE[t]=c?await c(t):await GET_ITEM(t),GET_CACHED(t))}async function GET_ITEM(t){throw Error(`No implementation found for GET_CACHED(${t})`)}async function addNote55(t,c,u,d,m,g,b,S=blankCourseElo()){let C=getCourseDB(t),w=prepareNote55(t,c,u,d,m,g,b),T=`${DocTypePrefixes.DISPLAYABLE_DATA}-${v4()}`,E=await C.put({...w,_id:T}),D=NameSpacer.getDataShapeString({course:c,dataShape:u.name});if(E.ok)try{await createCards(t,D,E.id,g,S,m)}catch(t){let c=`Unknown error`;c=t instanceof Error?t.message:t&&typeof t==`object`&&`reason`in t?t.reason:t&&typeof t==`object`&&`message`in t?t.message:String(t),logger.error(`[addNote55] Failed to create cards for note ${E.id}: ${c}`),E.cardCreationFailed=!0,E.cardCreationError=c}else logger.error(`[addNote55] Error adding note. Result: ${JSON.stringify(E)}`);return E}async function createCards(t,c,u,d,m=blankCourseElo(),g){let b=await getCredentialledCourseConfig(t),S=NameSpacer.getDataShapeDescriptor(c),C=[];for(let t of b.dataShapes)t.name===c&&(C=t.questionTypes);if(C.length===0){let t=`No questionViewTypes found for datashapeID: ${c} in course config. Cards cannot be created.`;throw logger.error(t),Error(t)}for(let c of C)await createCard(c,t,S,u,d,m,g)}async function createCard(t,c,u,d,m,g=blankCourseElo(),b){let S=NameSpacer.getQuestionDescriptor(t),C=await getCredentialledCourseConfig(c);for(let w of C.questionTypes)if(w.name===t)for(let t of w.viewList)await addCard(c,u.course,[d],NameSpacer.getViewString({course:S.course,questionType:S.questionType,view:t}),g,m,b)}async function addCard(t,c,u,d,m,g,b){let S=getCourseDB(t),C=`${DocTypePrefixes.CARD}-${v4()}`,w=await S.put({_id:C,course:c,id_displayable_data:u,id_view:d,docType:`CARD`,elo:m||toCourseElo(990+Math.round(20*Math.random())),author:b});for(let c of g)logger.info(`adding tag: ${c} to card ${w.id}`),await addTagToCard(t,w.id,c,b,!1);return w}async function getCredentialledCourseConfig(t){try{let c=await getCourseDB(t).get(`CourseConfig`);return c.courseID=t,logger.info(`Returning course config: ${JSON.stringify(c)}`),c}catch(c){throw logger.error(`Error fetching config for ${t}:`,c),c}}async function addTagToCard(t,c,u,d,m=!0){let g=getTagID(u),b=getCourseDB(t),S=new CourseDB(t,async()=>BaseUser.Dummy({setupRemoteDB:()=>null,startSync:()=>{},canCreateAccount:()=>!1,canAuthenticate:()=>!1,getCurrentUsername:async()=>`DummyUser`}));try{logger.info(`Applying tag ${u} to card ${t+`-`+c}...`);let d=await b.get(g);if(d.taggedCards.includes(c))throw new AlreadyTaggedErr(`Card ${c} is already tagged with ${u}`);if(d.taggedCards.push(c),m)try{let d=(await S.getCardEloData([c]))[0];d.tags[u]={count:0,score:d.global.score},await updateCardElo(t,c,d)}catch(t){logger.error(`Failed to update ELO data for card:`,c,t)}return b.put(d)}catch(g){if(g instanceof AlreadyTaggedErr)throw g;return await createTag(t,u,d),addTagToCard(t,c,u,d,m)}}async function updateCardElo(t,c,u){if(u){let d=getCourseDB(t),m=await d.get(c);return logger.debug(`Replacing ${JSON.stringify(m.elo)} with ${JSON.stringify(u)}`),m.elo=u,d.put(m)}}function getTagID(t){let c=`TAG`.valueOf()+`-`;return t.indexOf(c)===0?t:c+t}function getCourseDB(t){let c=`coursedb-${t}`;return new pouchdb_setup_default(ENV.COUCHDB_SERVER_PROTOCOL+`://`+ENV.COUCHDB_SERVER_URL+c,createPouchDBConfig())}function registerPipelineForDebug(t){_activePipeline=t}function clearRunHistory(){runHistory.length=0}function getOrigin(t){let c=t.provenance[0];if(!c)return`unknown`;let u=c.reason?.toLowerCase()||``,d=c.strategy?.toLowerCase()||``;return u.includes(`new card`)||d.includes(`elo`)?`new`:u.includes(`review`)||d.includes(`srs`)?`review`:`unknown`}function captureRun(t){let c={...t,runId:`run-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date};runHistory.unshift(c),runHistory.length>MAX_RUNS&&runHistory.pop()}function parseCardElo(t){let c=t.find(t=>t.strategy===`elo`);if(!c?.reason)return;let u=c.reason.match(/card:\s*(\d+)/);return u?parseInt(u[1],10):void 0}function buildRunReport(t,c,u,d,m,g,b,S,C,w){let T=new Set(S.map(t=>t.cardId)),toReport=t=>({cardId:t.cardId,courseId:t.courseId,origin:getOrigin(t),generator:t.provenance[0]?.strategyName||t.provenance[0]?.strategy,finalScore:t.score,cardElo:parseCardElo(t.provenance),provenance:t.provenance,tags:t.tags,selected:T.has(t.cardId)}),E=[],D=[],O=[],Or=0;for(let t of b)T.has(t.cardId)?E.push(toReport(t)):Or<DISCARDED_KEEP_TOP?(D.push(toReport(t)),Or++):O.push(t);let kr=[...E,...D],Ar;if(O.length>0){let t=1/0,c=-1/0,u=1/0,d=-1/0,m=!1;for(let g of O){g.score<t&&(t=g.score),g.score>c&&(c=g.score);let b=parseCardElo(g.provenance);b!==void 0&&(m=!0,b<u&&(u=b),b>d&&(d=b))}let g=m?`, ELO ${u}\u2013${d}`:``;Ar={count:O.length,scoreRange:[t,c],eloRange:m?[u,d]:void 0,note:`${O.length} additional candidate(s) scored below the top ${DISCARDED_KEEP_TOP} near-misses and were not retained (score ${t.toExponential(2)}\u2013${c.toExponential(2)}${g}). Likely ELO-window pull remnants filtered out by hierarchy/lesson/priority gates.`}}let jr=S.filter(t=>getOrigin(t)===`review`).length,Mr=S.filter(t=>getOrigin(t)===`new`).length;return{courseId:t,courseName:c,userElo:C,generatorName:u,generators:d,generatedCount:m,filters:g,hints:w,finalCount:S.length,reviewsSelected:jr,newSelected:Mr,cards:kr,discardedTail:Ar}}function formatProvenance(t){return t.map(t=>` ${t.action===`generated`?`🎲`:t.action===`boosted`?`⬆️`:t.action===`penalized`?`⬇️`:`➡️`} ${t.strategyName}: ${t.score.toFixed(3)} - ${t.reason}`).join(`
|
|
98
|
+
`)}function printRunSummary(t){if(console.group(`\u{1F50D} Pipeline Run: ${t.courseId} (${t.courseName||`unnamed`})`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`User ELO: ${t.userElo??`unknown`}`),logger.info(`Generator: ${t.generatorName} \u2192 ${t.generatedCount} candidates`),t.generators&&t.generators.length>0){console.group(`Generator breakdown:`);for(let c of t.generators)logger.info(` ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews, top: ${c.topScore.toFixed(2)})`);console.groupEnd()}if(t.filters.length>0){console.group(`Filter impact:`);for(let c of t.filters)logger.info(` ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`);console.groupEnd()}logger.info(`Result: ${t.finalCount} cards selected (${t.newSelected} new, ${t.reviewsSelected} reviews)`),console.groupEnd()}function escapeHtml(t){return t.replace(/&/g,`&`).replace(/</g,`<`).replace(/>/g,`>`)}function escapeAttr(t){return escapeHtml(t).replace(/"/g,`"`)}function copyTextToClipboard(t,c){let done=()=>{if(!c)return;let t=c.textContent??`Copy`;c.textContent=`Copied!`,c.classList.add(`copied`),setTimeout(()=>{c.textContent=t,c.classList.remove(`copied`)},1200)},fallback=()=>{let c=document.createElement(`textarea`);c.value=t,c.style.position=`fixed`,c.style.opacity=`0`,document.body.appendChild(c),c.select();try{document.execCommand(`copy`)}catch(t){logger.warn(`[Pipeline Debug] Copy failed: ${t}`)}document.body.removeChild(c),done()};navigator.clipboard?.writeText?navigator.clipboard.writeText(t).then(done).catch(fallback):fallback()}function renderUI(){if(!_uiContainer)return;let t=runHistory,c=_selectedRunIndex===null?null:t[_selectedRunIndex],u=`
|
|
99
99
|
#sk-pipeline-debugger {
|
|
100
100
|
position: fixed;
|
|
101
101
|
top: 0;
|
|
@@ -149,17 +149,26 @@ ${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?C
|
|
|
149
149
|
#sk-pipeline-debugger .close-btn { background: #dc3545; color: white; border: none; padding: 0.5rem 1rem; border-radius: 4px; cursor: pointer; }
|
|
150
150
|
#sk-pipeline-debugger .search-box { margin-bottom: 1rem; width: 100%; padding: 0.5rem; border: 1px solid #ced4da; border-radius: 4px; }
|
|
151
151
|
#sk-pipeline-debugger .provenance { font-size: 12px; color: #666; margin-top: 0.25rem; white-space: pre-wrap; font-family: monospace; background: #f8f9fa; padding: 0.5rem; border-radius: 4px; }
|
|
152
|
+
#sk-pipeline-debugger .run-label { display: inline-block; margin-top: 0.25rem; padding: 0.1rem 0.4rem; background: #fff3cd; color: #664d03; border-radius: 3px; font-family: monospace; font-size: 11px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }
|
|
153
|
+
#sk-pipeline-debugger .label-banner { display: inline-block; padding: 0.25rem 0.6rem; background: #fff3cd; color: #664d03; border-radius: 4px; font-family: monospace; font-size: 13px; margin: 0 0 0.75rem 0; }
|
|
154
|
+
#sk-pipeline-debugger .copy-btn { background: #0d6efd; color: white; border: none; padding: 0.25rem 0.6rem; border-radius: 3px; cursor: pointer; font-size: 12px; margin-left: 0.5rem; }
|
|
155
|
+
#sk-pipeline-debugger .copy-btn:hover { background: #0b5ed7; }
|
|
156
|
+
#sk-pipeline-debugger .copy-btn.copied { background: #198754; }
|
|
157
|
+
#sk-pipeline-debugger .section-head { display: flex; align-items: center; justify-content: space-between; margin-top: 1rem; }
|
|
158
|
+
#sk-pipeline-debugger .section-head h3 { margin: 0; }
|
|
152
159
|
`,d=t.length===0?`<div style="padding: 1rem;">No runs captured yet.</div>`:t.map((t,c)=>`
|
|
153
160
|
<div class="run-item ${c===_selectedRunIndex?`active`:``}" onclick="window.skuilder.pipeline._selectRun(${c})">
|
|
154
161
|
<strong>${t.timestamp.toLocaleTimeString()}</strong><br/>
|
|
155
162
|
<small>${t.courseName||t.courseId.slice(0,8)}</small><br/>
|
|
156
163
|
<small>${t.finalCount} cards selected</small>
|
|
164
|
+
${t.hints?._label?`<br/><span class="run-label" title="${escapeAttr(t.hints._label)}">${escapeHtml(t.hints._label)}</span>`:``}
|
|
157
165
|
</div>
|
|
158
|
-
`).join(``),m=`<div style="color: #6c757d; text-align: center; margin-top: 5rem;">Select a run to see details</div>`;if(c){let t=c.cards.filter(t=>!_cardSearchQuery||t.cardId.toLowerCase().includes(_cardSearchQuery.toLowerCase()))
|
|
166
|
+
`).join(``),m=`<div style="color: #6c757d; text-align: center; margin-top: 5rem;">Select a run to see details</div>`;if(c){let t=c.cards.filter(t=>!_cardSearchQuery||t.cardId.toLowerCase().includes(_cardSearchQuery.toLowerCase())),u=c.hints?._label??`(no label)`;m=`
|
|
159
167
|
<h2>Run: ${c.runId}</h2>
|
|
168
|
+
<div class="label-banner" title="${escapeAttr(u)}">${escapeHtml(u)}</div>
|
|
160
169
|
<p>
|
|
161
|
-
<strong>Time:</strong> ${c.timestamp.toLocaleString()} |
|
|
162
|
-
<strong>Course:</strong> ${c.courseName||c.courseId} |
|
|
170
|
+
<strong>Time:</strong> ${c.timestamp.toLocaleString()} |
|
|
171
|
+
<strong>Course:</strong> ${c.courseName||c.courseId} |
|
|
163
172
|
<strong>User ELO:</strong> ${c.userElo??`unknown`}
|
|
164
173
|
</p>
|
|
165
174
|
|
|
@@ -172,7 +181,10 @@ ${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?C
|
|
|
172
181
|
</table>
|
|
173
182
|
|
|
174
183
|
${c.hints?`
|
|
175
|
-
<
|
|
184
|
+
<div class="section-head">
|
|
185
|
+
<h3>Ephemeral Hints</h3>
|
|
186
|
+
<button class="copy-btn" onclick="window.skuilder.pipeline._copyConfig('${c.runId}', this)">Copy config</button>
|
|
187
|
+
</div>
|
|
176
188
|
<table>
|
|
177
189
|
${c.hints._label?`<tr><th>Label</th><td>${c.hints._label}</td></tr>`:``}
|
|
178
190
|
${c.hints.boostTags?`<tr><th>Boost Tags</th><td><pre style="margin:0">${JSON.stringify(c.hints.boostTags,null,2)}</pre></td></tr>`:``}
|
|
@@ -194,7 +206,10 @@ ${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?C
|
|
|
194
206
|
</tbody>
|
|
195
207
|
</table>
|
|
196
208
|
|
|
197
|
-
<
|
|
209
|
+
<div class="section-head">
|
|
210
|
+
<h3>Cards (${c.finalCount} selected / ${c.cards.length} total)</h3>
|
|
211
|
+
<button class="copy-btn" onclick="window.skuilder.pipeline._copyResults('${c.runId}', this)">Copy results</button>
|
|
212
|
+
</div>
|
|
198
213
|
<input type="text" class="search-box" placeholder="Search Card ID..." value="${_cardSearchQuery}" oninput="window.skuilder.pipeline._setSearch(this.value)">
|
|
199
214
|
|
|
200
215
|
<table>
|
|
@@ -273,6 +288,13 @@ ${JSON.stringify(t)}`)})}async function GET_CACHED(t,c){return CLIENT_CACHE[t]?C
|
|
|
273
288
|
#sk-pipeline-debugger .close-btn { background: #dc3545; color: white; border: none; padding: 0.5rem 1rem; border-radius: 4px; cursor: pointer; }
|
|
274
289
|
#sk-pipeline-debugger .search-box { margin-bottom: 1rem; width: 100%; padding: 0.5rem; border: 1px solid #ced4da; border-radius: 4px; }
|
|
275
290
|
#sk-pipeline-debugger .provenance { font-size: 12px; color: #666; margin-top: 0.25rem; white-space: pre-wrap; font-family: monospace; background: #f8f9fa; padding: 0.5rem; border-radius: 4px; }
|
|
291
|
+
#sk-pipeline-debugger .run-label { display: inline-block; margin-top: 0.25rem; padding: 0.1rem 0.4rem; background: #fff3cd; color: #664d03; border-radius: 3px; font-family: monospace; font-size: 11px; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; vertical-align: bottom; }
|
|
292
|
+
#sk-pipeline-debugger .label-banner { display: inline-block; padding: 0.25rem 0.6rem; background: #fff3cd; color: #664d03; border-radius: 4px; font-family: monospace; font-size: 13px; margin: 0 0 0.75rem 0; }
|
|
293
|
+
#sk-pipeline-debugger .copy-btn { background: #0d6efd; color: white; border: none; padding: 0.25rem 0.6rem; border-radius: 3px; cursor: pointer; font-size: 12px; margin-left: 0.5rem; }
|
|
294
|
+
#sk-pipeline-debugger .copy-btn:hover { background: #0b5ed7; }
|
|
295
|
+
#sk-pipeline-debugger .copy-btn.copied { background: #198754; }
|
|
296
|
+
#sk-pipeline-debugger .section-head { display: flex; align-items: center; justify-content: space-between; margin-top: 1rem; }
|
|
297
|
+
#sk-pipeline-debugger .section-head h3 { margin: 0; }
|
|
276
298
|
</style>
|
|
277
299
|
<header>
|
|
278
300
|
<strong>Pipeline Debugger</strong>
|
|
@@ -296,10 +318,10 @@ tags: ${m.tags.join(`, `)}`),m.elo!==void 0&&(c+=`
|
|
|
296
318
|
elo: ${m.elo}`),d.push({originalText:c,status:`error`,message:`Error processing card: ${t instanceof Error?t.message:`Unknown error`}`})}return d}async function processCard(t,c,u){let{markdown:d,tags:m,elo:g}=t,b=d;m.length>0&&(b+=`
|
|
297
319
|
tags: ${m.join(`, `)}`),g!==void 0&&(b+=`
|
|
298
320
|
elo: ${g}`);let S={Input:d,Uploads:[]},C={};for(let t of m)C[t]={score:g||0,count:1};try{let t=await c.addNote(u.courseCode,u.dataShape,S,u.userName,m,void 0,g?{global:{score:g,count:1},tags:C,misc:{}}:void 0);return t.status===Status.ok?{originalText:b,status:`success`,message:`Card added successfully.`,cardId:t.id?t.id:`(unknown)`}:{originalText:b,status:`error`,message:t.message||`Failed to add card to database. Unknown error.`}}catch(t){return logger.error(`Error adding note:`,t),{originalText:b,status:`error`,message:`Error adding card: ${t instanceof Error?t.message:`Unknown error`}`}}}function validateProcessorConfig(t){return t.dataShape?t.courseCode?t.userName?{isValid:!0}:{isValid:!1,errorMessage:`No user name provided for card processing`}:{isValid:!1,errorMessage:`No course code provided for card processing`}:{isValid:!1,errorMessage:`No data shape provided for card processing`}}function getUserDB(){try{return getDataLayer().getUserDB()}catch{return logger.info(`[UserDB Debug] Data layer not initialized yet.`),null}}function getRawDB(){let t=getUserDB();return t?t.localDB||(logger.info(`[UserDB Debug] Unable to access raw database instance.`),null):null}function formatTimestamp(t){return new Date(t).toLocaleString()}function mountUserDBDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.userdb=userDBDebugAPI}function isDataShapeRegistered(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course});return c.dataShapes.find(t=>t.name===u)!==void 0}function isDataShapeSchemaAvailable(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course}),d=c.dataShapes.find(t=>t.name===u);return d!==void 0&&d.serializedZodSchema!==void 0}function isQuestionTypeRegistered(t,c){let u=NameSpacer.getQuestionString({course:t.course,questionType:t.name});return c.questionTypes.some(t=>t.name===u)}function processCustomQuestionsData(t){let c=[],u=[],d=t.courses.map(t=>t.name);return t.questionClasses.forEach(m=>{let g=d.length>0?d[0]:t.meta.packageName;m.dataShapes&&Array.isArray(m.dataShapes)&&m.dataShapes.forEach(t=>{c.push({name:t.name,course:g,dataShape:t})}),u.push({name:m.name,course:g,questionClass:m,dataShapes:m.dataShapes||[],views:m.views||[]})}),{dataShapes:c,questions:u}}function registerDataShape(t,c){let u=NameSpacer.getDataShapeString({dataShape:t.name,course:t.course}),d;try{d=toZodJSON(t.dataShape)}catch(t){logger.warn(`Failed to generate schema for ${u}:`,t),d=void 0}let m=c.dataShapes.findIndex(t=>t.name===u);if(m!==-1){let g=c.dataShapes[m];return g.serializedZodSchema===d?(logger.info(`DataShape '${t.name}' from '${t.course}' already registered with identical schema`),!1):(g.serializedZodSchema?logger.info(`DataShape '${t.name}' from '${t.course}' schema has changed, updating...`):logger.info(`DataShape '${t.name}' from '${t.course}' already registered, but with no schema. Adding schema to existing entry`),c.dataShapes[m]={name:u,questionTypes:g.questionTypes,serializedZodSchema:d},logger.info(`Updated DataShape: ${u}`),!0)}return c.dataShapes.push({name:u,questionTypes:[],serializedZodSchema:d}),logger.info(`Registered DataShape: ${u}`),!0}function registerQuestionType(t,c){if(isQuestionTypeRegistered(t,c))return logger.info(`QuestionType '${t.name}' from '${t.course}' already registered`),!1;let u=NameSpacer.getQuestionString({course:t.course,questionType:t.name}),d=t.views.map(t=>t.name?t.name:`unnamedComponent`),m=t.dataShapes.map(c=>NameSpacer.getDataShapeString({course:t.course,dataShape:c.name}));return c.questionTypes.push({name:u,viewList:d,dataShapeList:m}),t.dataShapes.forEach(d=>{let m=NameSpacer.getDataShapeString({course:t.course,dataShape:d.name});for(let t of c.dataShapes)t.name===m&&t.questionTypes.push(u)}),logger.info(`Registered QuestionType: ${u}`),!0}function removeDataShape(t,c){let u=c.dataShapes.findIndex(c=>c.name===t);return u===-1?(logger.info(`DataShape '${t}' not found in course config`),!1):(c.dataShapes.splice(u,1),c.questionTypes.forEach(c=>{let u=c.dataShapeList.indexOf(t);u!==-1&&c.dataShapeList.splice(u,1)}),logger.info(`Removed DataShape: ${t}`),!0)}function removeQuestionType(t,c){let u=c.questionTypes.findIndex(c=>c.name===t);return u===-1?(logger.info(`QuestionType '${t}' not found in course config`),!1):(c.questionTypes.splice(u,1),c.dataShapes.forEach(c=>{let u=c.questionTypes.indexOf(t);u!==-1&&c.questionTypes.splice(u,1)}),logger.info(`Removed QuestionType: ${t}`),!0)}async function removeCustomQuestionTypes(t,c,u,d){try{logger.info(`Beginning custom question removal`),logger.info(`Removing ${t.length} data shapes and ${c.length} question types`);let m=0;for(let t of c)removeQuestionType(t,u)&&m++;for(let c of t)removeDataShape(c,u)&&m++;logger.info(`Updating course configuration...`);let g=await d.updateCourseConfig(u);if(!g.ok)throw Error(`Failed to update course config: ${JSON.stringify(g)}`);return logger.info(`Custom question removal complete: ${m} items removed`),{success:!0,removedCount:m}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`Custom question removal failed: ${c}`),{success:!1,removedCount:0,errorMessage:c}}}async function registerSeedData(t,c,u){if(t.questionClass.seedData&&Array.isArray(t.questionClass.seedData)){logger.info(`Registering seed data for question: ${t.name}`);try{let d=t.questionClass.seedData.filter(()=>t.dataShapes.length>0).map(d=>c.addNote(t.course,t.dataShapes[0],d,u,[]));await Promise.all(d),logger.info(`Seed data registered for question: ${t.name}`)}catch(c){logger.warn(`Failed to register seed data for question '${t.name}': ${c instanceof Error?c.message:String(c)}`)}}}async function registerBlanksCard(t,c,u,d,m){try{logger.info(`Registering BlanksCard data shapes and question type...`);let g=0,b=`default`;for(let t of c)registerDataShape({name:t.name,course:b,dataShape:t},u)&&g++;let S={name:t.name,course:b,questionClass:{name:t.name,dataShapes:c,views:t.views||[]},dataShapes:c,views:t.views||[]};registerQuestionType(S,u)&&g++,logger.info(`Updating course configuration with BlanksCard...`);let C=await d.updateCourseConfig(u);if(!C.ok)throw Error(`Failed to update course config: ${JSON.stringify(C)}`);return m&&await registerSeedData(S,d,m),logger.info(`BlanksCard registration complete: ${g} items registered`),{success:!0}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`BlanksCard registration failed: ${c}`),{success:!1,errorMessage:c}}}async function registerCustomQuestionTypes(t,c,u,d){try{logger.info(`Beginning custom question registration`),logger.info(`Processing ${t.questionClasses.length} question classes`);let{dataShapes:m,questions:g}=processCustomQuestionsData(t);logger.info(`Found ${m.length} data shapes and ${g.length} questions`);let b=0;logger.info(`Registering data shapes...`);for(let t of m)registerDataShape(t,c)&&b++;logger.info(`Registering question types...`);for(let t of g)registerQuestionType(t,c)&&b++;logger.info(`Updating course configuration...`);let S=await u.updateCourseConfig(c);if(!S.ok)throw Error(`Failed to update course config: ${JSON.stringify(S)}`);if(d){logger.info(`Registering seed data...`);for(let t of g)await registerSeedData(t,u,d)}return logger.info(`Custom question registration complete: ${b} items registered`),{success:!0,registeredCount:b}}catch(t){let c=t instanceof Error?t.message:String(t);return logger.error(`Custom question registration failed: ${c}`),{success:!1,registeredCount:0,errorMessage:c}}}function newInterval(t,c){return areQuestionRecords(c)?newQuestionInterval(t,c):1e5}function newQuestionInterval(t,c){let u=c.records,d=u[u.length-1],m=lastSuccessfulInterval(u);if(m>c.bestInterval&&(c.bestInterval=m,t.update(c._id,{bestInterval:m}).catch(t=>{logger.warn(`[SpacedRepetition] Failed to update bestInterval for ${c._id}: ${t?.message??t}`)})),d.isCorrect){let t=d.performance,u=isTaggedPerformance(t)?t._global:t,g=Math.min(1,Math.max(0,u));logger.debug(`Demontrated skill: ${g}`);let b=m*(.75+g);if(c.lapses=getLapses(c.records),c.streak=getStreak(c.records),c.lapses&&c.streak&&c.bestInterval&&(c.lapses>=0||c.streak>=0)){let t=(c.lapses*b+c.streak*c.bestInterval)/(c.lapses+c.streak);return logger.debug(`Weighted average interval calculation:
|
|
299
|
-
(${c.lapses} * ${b} + ${c.streak} * ${c.bestInterval}) / (${c.lapses} + ${c.streak}) = ${t}`),t}else return b}else return 0}function lastSuccessfulInterval(t){for(let c=t.length-1;c>=1;c--)if(t[c].priorAttemps===0&&t[c].isCorrect){let u=secondsBetween(t[c-1].timeStamp,t[c].timeStamp),d=Math.max(u,1200*60);return logger.debug(`Last interval w/ this card was: ${u}s, returning ${d}s`),d}return getInitialInterval(t)}function getStreak(t){let c=0,u=t.length-1;for(;u>=0&&t[u].isCorrect;)u--,c++;return c}function getLapses(t){return t.filter(t=>t.isCorrect===!1).length}function getInitialInterval(t){return logger.warn(`history of length: ${t.length} ignored!`),3600*24*3}function secondsBetween(t,c){return t=hooks(t),c=hooks(c),duration(c.diff(t)).asSeconds()}function parseAudioURIs(t){return typeof t==`string`?t.match(/https?:\/\/[^\s"'<>]+\.(wav|mp3|ogg|m4a|aac|webm)/gi)??[]:[]}function prefetchAudio(t){return new Promise(c=>{let u=new Audio;u.preload=`auto`;let cleanup=()=>{u.oncanplaythrough=null,u.onerror=null};u.oncanplaythrough=()=>{cleanup(),c()},u.onerror=()=>{cleanup(),logger.warn(`[CardHydrationService] Failed to prefetch audio: ${t}`),c()},u.src=t})}async function validateStaticCourse(t,c){let u={valid:!0,manifestExists:!1,chunksExist:!1,attachmentsExist:!1,errors:[],warnings:[]};try{if(c){if(!(await c.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u}else if(!nodeFS2)return u.errors.push(`File system access not available - validation skipped`),u.valid=!1,u;else if(!(await nodeFS2.promises.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u;let d=`${t}/manifest.json`;try{if(c)if(d=c.joinPath(t,`manifest.json`),await c.exists(d)){u.manifestExists=!0;let t=await c.readFile(d),m=JSON.parse(t);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}else u.errors.push(`Manifest not found: ${d}`),u.valid=!1;else{d=`${t}/manifest.json`,await nodeFS2.promises.access(d),u.manifestExists=!0;let c=await nodeFS2.promises.readFile(d,`utf8`),m=JSON.parse(c);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}}catch(t){let c=t instanceof FileSystemError?t.message:`Manifest not found or invalid: ${d}`;u.errors.push(c),u.valid=!1}let m=`${t}/chunks`;try{c?(m=c.joinPath(t,`chunks`),await c.exists(m)?(await c.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1):(u.errors.push(`Chunks directory not found: ${m}`),u.valid=!1)):(m=`${t}/chunks`,(await nodeFS2.promises.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1))}catch(t){let c=t instanceof FileSystemError?t.message:`Chunks directory not found: ${m}`;u.errors.push(c),u.valid=!1}let g;try{c?(g=c.joinPath(t,`attachments`),await c.exists(g)?(await c.stat(g)).isDirectory()&&(u.attachmentsExist=!0):u.warnings.push(`Attachments directory not found: ${g} (this is OK if course has no attachments)`)):(g=`${t}/attachments`,(await nodeFS2.promises.stat(g)).isDirectory()&&(u.attachmentsExist=!0))}catch(c){g=g||`${t}/attachments`;let d=c instanceof FileSystemError?c.message:`Attachments directory not found: ${g} (this is OK if course has no attachments)`;u.warnings.push(d)}}catch(t){u.errors.push(`Failed to validate static course: ${t instanceof Error?t.message:String(t)}`),u.valid=!1}return u}async function validateMigration(t,c,u){let d={valid:!0,documentCountMatch:!1,attachmentIntegrity:!1,viewFunctionality:!1,issues:[]};try{logger.info(`Starting migration validation...`),d.documentCountMatch=compareDocumentCounts(c,await getActualDocumentCounts(t),d.issues),await validateCourseConfig(t,u,d.issues),d.viewFunctionality=await validateViews(t,u,d.issues),d.attachmentIntegrity=await validateAttachmentIntegrity(t,d.issues),d.valid=d.documentCountMatch&&d.viewFunctionality&&d.attachmentIntegrity,logger.info(`Migration validation completed. Valid: ${d.valid}`),d.issues.length>0&&(logger.info(`Validation issues: ${d.issues.length}`),d.issues.forEach(t=>{t.type===`error`?logger.error(`${t.category}: ${t.message}`):logger.warn(`${t.category}: ${t.message}`)}))}catch(t){d.valid=!1,d.issues.push({type:`error`,category:`metadata`,message:`Validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function getActualDocumentCounts(t){let c={};try{let u=await t.allDocs({include_docs:!0});for(let t of u.rows){if(t.id.startsWith(`_design/`)){c._design=(c._design||0)+1;continue}let u=t.doc;u&&u.docType?c[u.docType]=(c[u.docType]||0)+1:c.unknown=(c.unknown||0)+1}}catch(t){logger.error(`Failed to get actual document counts:`,t)}return c}function compareDocumentCounts(t,c,u){let d=!0;for(let[m,g]of Object.entries(t)){let t=c[m]||0;t!==g&&(d=!1,u.push({type:`error`,category:`documents`,message:`Document count mismatch for ${m}: expected ${g}, got ${t}`}))}for(let[d,m]of Object.entries(c))!t[d]&&d!==`_design`&&u.push({type:`warning`,category:`documents`,message:`Unexpected document type found: ${d} (${m} documents)`});return d}async function validateCourseConfig(t,c,u){try{let d=await t.get(`CourseConfig`);if(!d){u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found after migration`});return}d.courseID||u.push({type:`warning`,category:`course_config`,message:`CourseConfig document missing courseID field`}),d.courseID!==c.courseId&&u.push({type:`warning`,category:`course_config`,message:`CourseConfig courseID mismatch: expected ${c.courseId}, got ${d.courseID}`}),logger.debug(`CourseConfig document validation passed`)}catch(t){t.status===404?u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found in database`}):u.push({type:`error`,category:`course_config`,message:`Failed to validate CourseConfig document: ${t instanceof Error?t.message:String(t)}`})}}async function validateViews(t,c,u){let d=!0;try{for(let m of c.designDocs)try{if(!await t.get(m._id)){d=!1,u.push({type:`error`,category:`views`,message:`Design document not found: ${m._id}`});continue}for(let c of Object.keys(m.views))try{let u=`${m._id}/${c}`;await t.query(u,{limit:1})}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View not accessible: ${m._id}/${c} - ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`Failed to validate design document ${m._id}: ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function validateAttachmentIntegrity(t,c){let u=!0;try{let d=await t.allDocs({include_docs:!0,limit:10}),m=0,g=0;for(let b of d.rows){let d=b.doc;if(d&&d._attachments)for(let[b,S]of Object.entries(d._attachments)){m++;try{await t.getAttachment(d._id,b)&&g++}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment not accessible: ${d._id}/${b} - ${t}`})}}}m===0?c.push({type:`warning`,category:`attachments`,message:`No attachments found in sampled documents`}):logger.info(`Validated ${g}/${m} sampled attachments`)}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment validation failed: ${t instanceof Error?t.message:String(t)}`})}return u}function buildSourceSummary(t,c,u){let d=t.weighted.map(t=>t.score),m=t.weighted.filter(t=>getCardOrigin(t)===`review`).length,g=t.weighted.filter(t=>getCardOrigin(t)===`new`).length;return{sourceIndex:t.sourceIndex,sourceId:c,sourceName:u,totalCards:t.weighted.length,reviewCount:m,newCount:g,topScore:d.length>0?Math.max(...d):0,bottomScore:d.length>0?Math.min(...d):0,scoreRange:d.length>0?[Math.min(...d),Math.max(...d)]:[0,0],avgScore:d.length>0?d.reduce((t,c)=>t+c,0)/d.length:0}}function buildSourceBreakdown(t,c,u){let d=u.filter(c=>c.courseId===t),m=d.filter(t=>t.selected);return{sourceId:t,sourceName:c,reviewsProvided:d.filter(t=>t.origin===`review`).length,newProvided:d.filter(t=>t.origin===`new`).length,reviewsSelected:m.filter(t=>t.origin===`review`).length,newSelected:m.filter(t=>t.origin===`new`).length,totalSelected:m.length,selectionRate:d.length>0?m.length/d.length*100:0}}function captureMixerRun(t,c,u,d,m,g,b){let S=c.map((t,c)=>buildSourceSummary(t,u[c]||`source-${c}`,d[c])),C=new Set(b.map(t=>t.cardId)),w=new Map;c.forEach(t=>{let c=[...t.weighted].sort((t,c)=>c.score-t.score),d=new Map;c.forEach((t,c)=>{d.set(t.cardId,c+1)}),w.set(u[t.sourceIndex]||`source-${t.sourceIndex}`,d)});let T=new Map;b.forEach((t,c)=>{T.set(t.cardId,c+1)});let E=new Map;c.forEach(t=>{t.weighted.forEach(t=>{E.set(t.cardId,t)})});let D=Array.from(E.values()).map(t=>({cardId:t.cardId,courseId:t.courseId,origin:getCardOrigin(t),score:t.score,sourceIndex:c.findIndex(c=>c.weighted.some(c=>c.cardId===t.cardId)),selected:C.has(t.cardId),rankInSource:w.get(t.courseId)?.get(t.cardId),rankInMix:T.get(t.cardId)})),O=Array.from(new Set(u.filter(t=>t))).map((t,c)=>buildSourceBreakdown(t,d[c],D)),Or={runId:`mix-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date,mixerType:t,requestedLimit:m,quotaPerSource:g,sourceSummaries:S,cards:D,finalCount:b.length,reviewsSelected:b.filter(t=>getCardOrigin(t)===`review`).length,newSelected:b.filter(t=>getCardOrigin(t)===`new`).length,sourceBreakdowns:O};runHistory2.unshift(Or),runHistory2.length>MAX_RUNS2&&runHistory2.pop()}function printMixerSummary(t){console.group(`\u{1F3A8} Mixer Run: ${t.mixerType}`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`Config: limit=${t.requestedLimit}${t.quotaPerSource?`, quota/source=${t.quotaPerSource}`:``}`),console.group(`\u{1F4E5} Input: ${t.sourceSummaries.length} sources`);for(let c of t.sourceSummaries)logger.info(` ${c.sourceName||c.sourceId}: ${c.totalCards} cards (${c.reviewCount} reviews, ${c.newCount} new)`),logger.info(` Score range: [${c.scoreRange[0].toFixed(2)}, ${c.scoreRange[1].toFixed(2)}], avg: ${c.avgScore.toFixed(2)}`);console.groupEnd(),console.group(`\u{1F4E4} Output: ${t.finalCount} cards selected (${t.reviewsSelected} reviews, ${t.newSelected} new)`);for(let c of t.sourceBreakdowns){let t=c.sourceName||c.sourceId;logger.info(` ${t}: ${c.totalSelected} selected (${c.reviewsSelected} reviews, ${c.newSelected} new) - ${c.selectionRate.toFixed(1)}% selection rate`)}console.groupEnd(),console.groupEnd()}function mountMixerDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.mixer=mixerDebugAPI}function startSessionTracking(t,c,u){let d=`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;activeSession={sessionId:d,startTime:new Date,initialQueues:{timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u},presentations:[],queueSnapshots:[]},logger.debug(`[SessionDebugger] Started tracking session: ${d}`)}function recordCardPresentation(t,c,u,d,m,g){if(!activeSession){logger.warn(`[SessionDebugger] No active session to record presentation`);return}activeSession.presentations.push({timestamp:new Date,sequenceNumber:activeSession.presentations.length+1,cardId:t,courseId:c,courseName:u,origin:d,queueSource:m,score:g})}function snapshotQueues(t,c,u,d,m){activeSession&&activeSession.queueSnapshots.push({timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u,reviewQNext3:d,newQNext3:m})}function endSessionTracking(){activeSession&&(activeSession.endTime=new Date,sessionHistory.unshift(activeSession),sessionHistory.length>MAX_HISTORY&&sessionHistory.pop(),logger.debug(`[SessionDebugger] Ended session: ${activeSession.sessionId}`),activeSession=null)}function showCurrentQueue(){if(!activeSession){logger.info(`[Session Debug] No active session.`);return}let t=activeSession.queueSnapshots[activeSession.queueSnapshots.length-1]||activeSession.initialQueues;console.group(`📊 Current Queue State`),logger.info(`Review Queue: ${t.reviewQLength} cards`),t.reviewQNext3&&t.reviewQNext3.length>0&&logger.info(` Next: ${t.reviewQNext3.join(`, `)}`),logger.info(`New Queue: ${t.newQLength} cards`),t.newQNext3&&t.newQNext3.length>0&&logger.info(` Next: ${t.newQNext3.join(`, `)}`),logger.info(`Failed Queue: ${t.failedQLength} cards`),console.groupEnd()}function showPresentationHistory(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`\u{1F4DC} Session History: ${c.sessionId}`),logger.info(`Started: ${c.startTime.toLocaleTimeString()}`),c.endTime&&logger.info(`Ended: ${c.endTime.toLocaleTimeString()}`),logger.info(`Cards presented: ${c.presentations.length}`),c.presentations.length>0&&console.table(c.presentations.map(t=>({"#":t.sequenceNumber,course:t.courseName||t.courseId.slice(0,8),origin:t.origin,queue:t.queueSource,score:t.score?.toFixed(3)||`-`,time:t.timestamp.toLocaleTimeString()}))),console.groupEnd()}function showInterleaving(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`🔀 Interleaving Analysis`);let u=new Map,d=new Map;if(c.presentations.forEach(t=>{let c=t.courseName||t.courseId;u.set(c,(u.get(c)||0)+1),d.has(c)||d.set(c,{review:0,new:0,failed:0});let m=d.get(c);m[t.origin]++}),logger.info(`Course distribution:`),console.table(Array.from(u.entries()).map(([t,u])=>{let m=d.get(t);return{course:t,total:u,reviews:m.review,new:m.new,failed:m.failed,percentage:(u/c.presentations.length*100).toFixed(1)+`%`}})),c.presentations.length>0){logger.info(`
|
|
321
|
+
(${c.lapses} * ${b} + ${c.streak} * ${c.bestInterval}) / (${c.lapses} + ${c.streak}) = ${t}`),t}else return b}else return 0}function lastSuccessfulInterval(t){for(let c=t.length-1;c>=1;c--)if(t[c].priorAttemps===0&&t[c].isCorrect){let u=secondsBetween(t[c-1].timeStamp,t[c].timeStamp),d=Math.max(u,1200*60);return logger.debug(`Last interval w/ this card was: ${u}s, returning ${d}s`),d}return getInitialInterval(t)}function getStreak(t){let c=0,u=t.length-1;for(;u>=0&&t[u].isCorrect;)u--,c++;return c}function getLapses(t){return t.filter(t=>t.isCorrect===!1).length}function getInitialInterval(t){return logger.warn(`history of length: ${t.length} ignored!`),3600*24*3}function secondsBetween(t,c){return t=hooks(t),c=hooks(c),duration(c.diff(t)).asSeconds()}function parseAudioURIs(t){return typeof t==`string`?t.match(/https?:\/\/[^\s"'<>]+\.(wav|mp3|ogg|m4a|aac|webm)/gi)??[]:[]}function prefetchAudio(t){return new Promise(c=>{let u=new Audio;u.preload=`auto`;let cleanup=()=>{u.oncanplaythrough=null,u.onerror=null};u.oncanplaythrough=()=>{cleanup(),c()},u.onerror=()=>{cleanup(),logger.warn(`[CardHydrationService] Failed to prefetch audio: ${t}`),c()},u.src=t})}async function validateStaticCourse(t,c){let u={valid:!0,manifestExists:!1,chunksExist:!1,attachmentsExist:!1,errors:[],warnings:[]};try{if(c){if(!(await c.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u}else if(!nodeFS2)return u.errors.push(`File system access not available - validation skipped`),u.valid=!1,u;else if(!(await nodeFS2.promises.stat(t)).isDirectory())return u.errors.push(`Path is not a directory: ${t}`),u.valid=!1,u;let d=`${t}/manifest.json`;try{if(c)if(d=c.joinPath(t,`manifest.json`),await c.exists(d)){u.manifestExists=!0;let t=await c.readFile(d),m=JSON.parse(t);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}else u.errors.push(`Manifest not found: ${d}`),u.valid=!1;else{d=`${t}/manifest.json`,await nodeFS2.promises.access(d),u.manifestExists=!0;let c=await nodeFS2.promises.readFile(d,`utf8`),m=JSON.parse(c);u.courseId=m.courseId,u.courseName=m.courseName,(!m.version||!m.courseId||!m.chunks||!Array.isArray(m.chunks))&&(u.errors.push(`Invalid manifest structure`),u.valid=!1)}}catch(t){let c=t instanceof FileSystemError?t.message:`Manifest not found or invalid: ${d}`;u.errors.push(c),u.valid=!1}let m=`${t}/chunks`;try{c?(m=c.joinPath(t,`chunks`),await c.exists(m)?(await c.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1):(u.errors.push(`Chunks directory not found: ${m}`),u.valid=!1)):(m=`${t}/chunks`,(await nodeFS2.promises.stat(m)).isDirectory()?u.chunksExist=!0:(u.errors.push(`Chunks path is not a directory: ${m}`),u.valid=!1))}catch(t){let c=t instanceof FileSystemError?t.message:`Chunks directory not found: ${m}`;u.errors.push(c),u.valid=!1}let g;try{c?(g=c.joinPath(t,`attachments`),await c.exists(g)?(await c.stat(g)).isDirectory()&&(u.attachmentsExist=!0):u.warnings.push(`Attachments directory not found: ${g} (this is OK if course has no attachments)`)):(g=`${t}/attachments`,(await nodeFS2.promises.stat(g)).isDirectory()&&(u.attachmentsExist=!0))}catch(c){g=g||`${t}/attachments`;let d=c instanceof FileSystemError?c.message:`Attachments directory not found: ${g} (this is OK if course has no attachments)`;u.warnings.push(d)}}catch(t){u.errors.push(`Failed to validate static course: ${t instanceof Error?t.message:String(t)}`),u.valid=!1}return u}async function validateMigration(t,c,u){let d={valid:!0,documentCountMatch:!1,attachmentIntegrity:!1,viewFunctionality:!1,issues:[]};try{logger.info(`Starting migration validation...`),d.documentCountMatch=compareDocumentCounts(c,await getActualDocumentCounts(t),d.issues),await validateCourseConfig(t,u,d.issues),d.viewFunctionality=await validateViews(t,u,d.issues),d.attachmentIntegrity=await validateAttachmentIntegrity(t,d.issues),d.valid=d.documentCountMatch&&d.viewFunctionality&&d.attachmentIntegrity,logger.info(`Migration validation completed. Valid: ${d.valid}`),d.issues.length>0&&(logger.info(`Validation issues: ${d.issues.length}`),d.issues.forEach(t=>{t.type===`error`?logger.error(`${t.category}: ${t.message}`):logger.warn(`${t.category}: ${t.message}`)}))}catch(t){d.valid=!1,d.issues.push({type:`error`,category:`metadata`,message:`Validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function getActualDocumentCounts(t){let c={};try{let u=await t.allDocs({include_docs:!0});for(let t of u.rows){if(t.id.startsWith(`_design/`)){c._design=(c._design||0)+1;continue}let u=t.doc;u&&u.docType?c[u.docType]=(c[u.docType]||0)+1:c.unknown=(c.unknown||0)+1}}catch(t){logger.error(`Failed to get actual document counts:`,t)}return c}function compareDocumentCounts(t,c,u){let d=!0;for(let[m,g]of Object.entries(t)){let t=c[m]||0;t!==g&&(d=!1,u.push({type:`error`,category:`documents`,message:`Document count mismatch for ${m}: expected ${g}, got ${t}`}))}for(let[d,m]of Object.entries(c))!t[d]&&d!==`_design`&&u.push({type:`warning`,category:`documents`,message:`Unexpected document type found: ${d} (${m} documents)`});return d}async function validateCourseConfig(t,c,u){try{let d=await t.get(`CourseConfig`);if(!d){u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found after migration`});return}d.courseID||u.push({type:`warning`,category:`course_config`,message:`CourseConfig document missing courseID field`}),d.courseID!==c.courseId&&u.push({type:`warning`,category:`course_config`,message:`CourseConfig courseID mismatch: expected ${c.courseId}, got ${d.courseID}`}),logger.debug(`CourseConfig document validation passed`)}catch(t){t.status===404?u.push({type:`error`,category:`course_config`,message:`CourseConfig document not found in database`}):u.push({type:`error`,category:`course_config`,message:`Failed to validate CourseConfig document: ${t instanceof Error?t.message:String(t)}`})}}async function validateViews(t,c,u){let d=!0;try{for(let m of c.designDocs)try{if(!await t.get(m._id)){d=!1,u.push({type:`error`,category:`views`,message:`Design document not found: ${m._id}`});continue}for(let c of Object.keys(m.views))try{let u=`${m._id}/${c}`;await t.query(u,{limit:1})}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View not accessible: ${m._id}/${c} - ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`Failed to validate design document ${m._id}: ${t}`})}}catch(t){d=!1,u.push({type:`error`,category:`views`,message:`View validation failed: ${t instanceof Error?t.message:String(t)}`})}return d}async function validateAttachmentIntegrity(t,c){let u=!0;try{let d=await t.allDocs({include_docs:!0,limit:10}),m=0,g=0;for(let b of d.rows){let d=b.doc;if(d&&d._attachments)for(let[b,S]of Object.entries(d._attachments)){m++;try{await t.getAttachment(d._id,b)&&g++}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment not accessible: ${d._id}/${b} - ${t}`})}}}m===0?c.push({type:`warning`,category:`attachments`,message:`No attachments found in sampled documents`}):logger.info(`Validated ${g}/${m} sampled attachments`)}catch(t){u=!1,c.push({type:`error`,category:`attachments`,message:`Attachment validation failed: ${t instanceof Error?t.message:String(t)}`})}return u}function buildSourceSummary(t,c,u){let d=t.weighted.map(t=>t.score),m=t.weighted.filter(t=>getCardOrigin(t)===`review`).length,g=t.weighted.filter(t=>getCardOrigin(t)===`new`).length;return{sourceIndex:t.sourceIndex,sourceId:c,sourceName:u,totalCards:t.weighted.length,reviewCount:m,newCount:g,topScore:d.length>0?Math.max(...d):0,bottomScore:d.length>0?Math.min(...d):0,scoreRange:d.length>0?[Math.min(...d),Math.max(...d)]:[0,0],avgScore:d.length>0?d.reduce((t,c)=>t+c,0)/d.length:0}}function buildSourceBreakdown(t,c,u){let d=u.filter(c=>c.courseId===t),m=d.filter(t=>t.selected);return{sourceId:t,sourceName:c,reviewsProvided:d.filter(t=>t.origin===`review`).length,newProvided:d.filter(t=>t.origin===`new`).length,reviewsSelected:m.filter(t=>t.origin===`review`).length,newSelected:m.filter(t=>t.origin===`new`).length,totalSelected:m.length,selectionRate:d.length>0?m.length/d.length*100:0}}function captureMixerRun(t,c,u,d,m,g,b){let S=c.map((t,c)=>buildSourceSummary(t,u[c]||`source-${c}`,d[c])),C=new Set(b.map(t=>t.cardId)),w=new Map;c.forEach(t=>{let c=[...t.weighted].sort((t,c)=>c.score-t.score),d=new Map;c.forEach((t,c)=>{d.set(t.cardId,c+1)}),w.set(u[t.sourceIndex]||`source-${t.sourceIndex}`,d)});let T=new Map;b.forEach((t,c)=>{T.set(t.cardId,c+1)});let E=new Map;c.forEach(t=>{t.weighted.forEach(t=>{E.set(t.cardId,t)})});let D=Array.from(E.values()).map(t=>({cardId:t.cardId,courseId:t.courseId,origin:getCardOrigin(t),score:t.score,sourceIndex:c.findIndex(c=>c.weighted.some(c=>c.cardId===t.cardId)),selected:C.has(t.cardId),rankInSource:w.get(t.courseId)?.get(t.cardId),rankInMix:T.get(t.cardId)})),O=Array.from(new Set(u.filter(t=>t))).map((t,c)=>buildSourceBreakdown(t,d[c],D)),Or={runId:`mix-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,timestamp:new Date,mixerType:t,requestedLimit:m,quotaPerSource:g,sourceSummaries:S,cards:D,finalCount:b.length,reviewsSelected:b.filter(t=>getCardOrigin(t)===`review`).length,newSelected:b.filter(t=>getCardOrigin(t)===`new`).length,sourceBreakdowns:O};runHistory2.unshift(Or),runHistory2.length>MAX_RUNS2&&runHistory2.pop()}function printMixerSummary(t){console.group(`\u{1F3A8} Mixer Run: ${t.mixerType}`),logger.info(`Run ID: ${t.runId}`),logger.info(`Time: ${t.timestamp.toISOString()}`),logger.info(`Config: limit=${t.requestedLimit}${t.quotaPerSource?`, quota/source=${t.quotaPerSource}`:``}`),console.group(`\u{1F4E5} Input: ${t.sourceSummaries.length} sources`);for(let c of t.sourceSummaries)logger.info(` ${c.sourceName||c.sourceId}: ${c.totalCards} cards (${c.reviewCount} reviews, ${c.newCount} new)`),logger.info(` Score range: [${c.scoreRange[0].toFixed(2)}, ${c.scoreRange[1].toFixed(2)}], avg: ${c.avgScore.toFixed(2)}`);console.groupEnd(),console.group(`\u{1F4E4} Output: ${t.finalCount} cards selected (${t.reviewsSelected} reviews, ${t.newSelected} new)`);for(let c of t.sourceBreakdowns){let t=c.sourceName||c.sourceId;logger.info(` ${t}: ${c.totalSelected} selected (${c.reviewsSelected} reviews, ${c.newSelected} new) - ${c.selectionRate.toFixed(1)}% selection rate`)}console.groupEnd(),console.groupEnd()}function mountMixerDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.mixer=mixerDebugAPI}function startSessionTracking(t,c,u){clearRunHistory();let d=`session-${Date.now()}-${Math.random().toString(36).slice(2,8)}`;activeSession={sessionId:d,startTime:new Date,initialQueues:{timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u},presentations:[],queueSnapshots:[]},logger.debug(`[SessionDebugger] Started tracking session: ${d}`)}function recordCardPresentation(t,c,u,d,m,g){if(!activeSession){logger.warn(`[SessionDebugger] No active session to record presentation`);return}activeSession.presentations.push({timestamp:new Date,sequenceNumber:activeSession.presentations.length+1,cardId:t,courseId:c,courseName:u,origin:d,queueSource:m,score:g})}function snapshotQueues(t,c,u,d,m){activeSession&&activeSession.queueSnapshots.push({timestamp:new Date,reviewQLength:t,newQLength:c,failedQLength:u,reviewQNext3:d,newQNext3:m})}function endSessionTracking(){activeSession&&(activeSession.endTime=new Date,sessionHistory.unshift(activeSession),sessionHistory.length>MAX_HISTORY&&sessionHistory.pop(),logger.debug(`[SessionDebugger] Ended session: ${activeSession.sessionId}`),activeSession=null)}function showCurrentQueue(){if(!activeSession){logger.info(`[Session Debug] No active session.`);return}let t=activeSession.queueSnapshots[activeSession.queueSnapshots.length-1]||activeSession.initialQueues;console.group(`📊 Current Queue State`),logger.info(`Review Queue: ${t.reviewQLength} cards`),t.reviewQNext3&&t.reviewQNext3.length>0&&logger.info(` Next: ${t.reviewQNext3.join(`, `)}`),logger.info(`New Queue: ${t.newQLength} cards`),t.newQNext3&&t.newQNext3.length>0&&logger.info(` Next: ${t.newQNext3.join(`, `)}`),logger.info(`Failed Queue: ${t.failedQLength} cards`),console.groupEnd()}function showPresentationHistory(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`\u{1F4DC} Session History: ${c.sessionId}`),logger.info(`Started: ${c.startTime.toLocaleTimeString()}`),c.endTime&&logger.info(`Ended: ${c.endTime.toLocaleTimeString()}`),logger.info(`Cards presented: ${c.presentations.length}`),c.presentations.length>0&&console.table(c.presentations.map(t=>({"#":t.sequenceNumber,course:t.courseName||t.courseId.slice(0,8),origin:t.origin,queue:t.queueSource,score:t.score?.toFixed(3)||`-`,time:t.timestamp.toLocaleTimeString()}))),console.groupEnd()}function showInterleaving(t=0){let c=t===0&&activeSession?activeSession:sessionHistory[t];if(!c){logger.info(`[Session Debug] No session found at index ${t}`);return}console.group(`🔀 Interleaving Analysis`);let u=new Map,d=new Map;if(c.presentations.forEach(t=>{let c=t.courseName||t.courseId;u.set(c,(u.get(c)||0)+1),d.has(c)||d.set(c,{review:0,new:0,failed:0});let m=d.get(c);m[t.origin]++}),logger.info(`Course distribution:`),console.table(Array.from(u.entries()).map(([t,u])=>{let m=d.get(t);return{course:t,total:u,reviews:m.review,new:m.new,failed:m.failed,percentage:(u/c.presentations.length*100).toFixed(1)+`%`}})),c.presentations.length>0){logger.info(`
|
|
300
322
|
Presentation sequence (first 20):`);let t=c.presentations.slice(0,20).map((t,c)=>`${c+1}. ${t.courseName||t.courseId.slice(0,8)} (${t.origin})`).join(`
|
|
301
323
|
`);logger.info(t)}let m=0,g=1,b=c.presentations[0]?.courseId;for(let t=1;t<c.presentations.length;t++)c.presentations[t].courseId===b?(g++,m=Math.max(m,g)):(b=c.presentations[t].courseId,g=1);m>3&&(logger.info(`
|
|
302
|
-
\u26A0\uFE0F Detected clustering: max ${m} cards from same course in a row`),logger.info(`This suggests cards are sorted by score rather than round-robin by course.`)),console.groupEnd()}function mountSessionDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.session=sessionDebugAPI}var import___vite_browser_external,import___vite_browser_external$1,import___vite_browser_external$2,import_browser_ponyfill,import_browser_ponyfill$1,import_browser,_SessionController2,__defProp,__getOwnPropNames,__glob,__esm,__export,init_adminDB,init_classroomDB,init_SyncStrategy,isDevelopment,logger,init_logger,GuestUsername,log,DocType,DocTypePrefixes,init_types_legacy,init_util,pouchdb_setup_default,init_pouchdb_setup,init_dataDirectory,REVIEW_TIME_FORMAT,log2,init_userDBHelpers,Loggable,init_Loggable,UpdateQueue,init_updateQueue,UsrCrsData,init_user_course_relDB,CLIENT_CACHE,init_clientCache,AlreadyTaggedErr,init_courseAPI,courseLookupDBTitle,CourseLookup,init_courseLookupDB,PipelineDebugger_exports,_activePipeline,MAX_RUNS,runHistory,_uiContainer,_selectedRunIndex,_cardSearchQuery,pipelineDebugAPI,init_PipelineDebugger,CompositeGenerator_exports,AggregationMode,DEFAULT_AGGREGATION_MODE,FREQUENCY_BOOST_FACTOR,CompositeGenerator,init_CompositeGenerator,elo_exports,ELONavigator,init_elo,generators_exports,init_generators,prescribed_exports,DEFAULT_FRESHNESS_WINDOW,DEFAULT_MAX_DIRECT_PER_RUN,DEFAULT_MAX_SUPPORT_PER_RUN,DEFAULT_HIERARCHY_DEPTH,DEFAULT_MIN_COUNT,BASE_TARGET_SCORE,BASE_SUPPORT_SCORE,DISCOVERED_SUPPORT_SCORE,MAX_TARGET_MULTIPLIER,MAX_SUPPORT_MULTIPLIER,PRESCRIBED_DEBUG_VERSION,PrescribedCardsGenerator,init_prescribed,srs_exports,DEFAULT_HEALTHY_BACKLOG,MAX_BACKLOG_PRESSURE,SRSNavigator,init_srs,types_exports,init_types,globImport_generators,init_,DEFAULT_LEARNABLE_WEIGHT,init_contentNavigationStrategy,WeightedFilter_exports,WeightedFilter,init_WeightedFilter,eloDistance_exports,DEFAULT_HALF_LIFE,DEFAULT_MIN_MULTIPLIER,DEFAULT_MAX_MULTIPLIER,init_eloDistance,hierarchyDefinition_exports,DEFAULT_MIN_COUNT2,HierarchyDefinitionNavigator,init_hierarchyDefinition,userTagPreference_exports,UserTagPreferenceFilter,init_userTagPreference,filters_exports,init_filters,inferredPreferenceStub_exports,INFERRED_PREFERENCE_NAVIGATOR_STUB,init_inferredPreferenceStub,interferenceMitigator_exports,DEFAULT_MIN_COUNT3,DEFAULT_MIN_ELAPSED_DAYS,DEFAULT_INTERFERENCE_DECAY,InterferenceMitigatorNavigator,init_interferenceMitigator,relativePriority_exports,DEFAULT_PRIORITY,DEFAULT_PRIORITY_INFLUENCE,DEFAULT_COMBINE_MODE,RelativePriorityNavigator,init_relativePriority,types_exports2,init_types2,userGoalStub_exports,USER_GOAL_NAVIGATOR_STUB,init_userGoalStub,globImport_filters,init_2,init_gradient,MIN_OBSERVATIONS_FOR_UPDATE,LEARNING_RATE,MAX_WEIGHT_DELTA,MIN_R_SQUARED_FOR_GRADIENT,FLAT_GRADIENT_THRESHOLD,MAX_HISTORY_LENGTH,init_learning,init_signal,init_recording,MIN_SPREAD,MAX_SPREAD,MIN_WEIGHT,MAX_WEIGHT,init_orchestration,Pipeline_exports,VERBOSE_RESULTS,Pipeline,init_Pipeline,defaults_exports,init_defaults,PipelineAssembler_exports,PipelineAssembler,init_PipelineAssembler,globImport,init_3,navigators_exports,navigatorRegistry,Navigators,NavigatorRole,NavigatorRoles,ContentNavigator,init_navigators,CoursesDB,CourseDB,init_courseDB,classroomLookupDBTitle,CLASSROOM_CONFIG,ClassroomDBBase,StudentClassroomDB,TeacherClassroomDB,ClassroomLookupDB,init_classroomDB2,AdminDB,init_adminDB2,CourseSyncService,init_CourseSyncService,init_auth,CouchDBSyncStrategy_exports,log3,CouchDBSyncStrategy,init_CouchDBSyncStrategy,isBrowser,GUEST_LOCAL_DB,localUserDB,pouchDBincludeCredentialsConfig,REVIEW_TIME_FORMAT2,init_couch,log4,BaseUser,userCoursesDoc,userClassroomsDoc,init_BaseUserDB,init_common,PouchDataLayerProvider_exports,CouchDataLayerProvider,init_PouchDataLayerProvider,pathUtils,nodeFS,StaticDataUnpacker,init_StaticDataUnpacker,StaticCourseDB,init_courseDB2,StaticCoursesDB,init_coursesDB,NoOpSyncStrategy,init_NoOpSyncStrategy,StaticDataLayerProvider_exports,StaticDataLayerProvider,init_StaticDataLayerProvider,NOT_SET,ENV,dataLayerInstance,init_factory,TagFilteredContentSource,init_TagFilteredContentSource,init_contentSource,init_courseDB3,init_dataLayerProvider,init_userDB,init_interfaces,init_user,init_strategyState,init_userOutcome,init_cardProcessor,init_types3,init_bulkImport,userDBDebugAPI,init_UserDBDebugger,init_core,duration,SrsService,EloService,ResponseProcessor,CardHydrationService,ItemQueue,CouchDBToStaticPacker,DEFAULT_MIGRATION_OPTIONS,FileSystemError,nodeFS2,nodeFS3,nodePath,StaticToCouchDBMigrator,QuotaRoundRobinMixer,MAX_RUNS2,runHistory2,mixerDebugAPI,activeSession,sessionHistory,MAX_HISTORY,sessionDebugAPI,SessionController,init_dist=__esmMin((()=>{init_defineProperty(),init_index_browser_es$5(),init_index_browser_es(),init_index_es(),import___vite_browser_external=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$1=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$2=__toESM$2(require___vite_browser_external(),1),init_moment(),init_dist$1(),init_esm_browser(),import_browser_ponyfill=__toESM$2(require_browser_ponyfill(),1),import_browser_ponyfill$1=__toESM$2(require_browser_ponyfill(),1),import_browser=__toESM$2(require_browser(),1),__defProp=Object.defineProperty,__getOwnPropNames=Object.getOwnPropertyNames,__glob=t=>c=>{var u=t[c];if(u)return u();throw Error(`Module not found in bundle: `+c)},__esm=(t,c)=>function __init(){return t&&(c=(0,t[__getOwnPropNames(t)[0]])(t=0)),c},__export=(t,c)=>{for(var u in c)__defProp(t,u,{get:c[u],enumerable:!0})},init_adminDB=__esm({"src/core/interfaces/adminDB.ts"(){"use strict";}}),init_classroomDB=__esm({"src/core/interfaces/classroomDB.ts"(){"use strict";}}),init_SyncStrategy=__esm({"src/impl/common/SyncStrategy.ts"(){"use strict";}}),init_logger=__esm({"src/util/logger.ts"(){"use strict";isDevelopment=typeof process<`u`&&process.env.NODE_ENV===`development`,logger={debug:(t,...c)=>{isDevelopment&&console.debug(`[DB:DEBUG] ${t}`,...c)},info:(t,...c)=>{console.info(`[DB:INFO] ${t}`,...c)},warn:(t,...c)=>{console.warn(`[DB:WARN] ${t}`,...c)},error:(t,...c)=>{console.error(`[DB:ERROR] ${t}`,...c)},log:(t,...c)=>{isDevelopment&&console.log(`[DB:LOG] ${t}`,...c)}}}}),init_types_legacy=__esm({"src/core/types/types-legacy.ts"(){"use strict";init_logger(),GuestUsername=`sk-guest-`,log=t=>{logger.log(t)},DocType=(t=>(t.DISPLAYABLE_DATA=`DISPLAYABLE_DATA`,t.CARD=`CARD`,t.DATASHAPE=`DATASHAPE`,t.QUESTIONTYPE=`QUESTION`,t.VIEW=`VIEW`,t.PEDAGOGY=`PEDAGOGY`,t.CARDRECORD=`CARDRECORD`,t.SCHEDULED_CARD=`SCHEDULED_CARD`,t.TAG=`TAG`,t.NAVIGATION_STRATEGY=`NAVIGATION_STRATEGY`,t.STRATEGY_STATE=`STRATEGY_STATE`,t.USER_OUTCOME=`USER_OUTCOME`,t.STRATEGY_LEARNING_STATE=`STRATEGY_LEARNING_STATE`,t))(DocType||{}),DocTypePrefixes={CARD:`c`,DISPLAYABLE_DATA:`dd`,TAG:`TAG`,CARDRECORD:`cardH`,SCHEDULED_CARD:`card_review_`,DATASHAPE:`DATASHAPE`,QUESTION:`QUESTION`,VIEW:`VIEW`,PEDAGOGY:`PEDAGOGY`,NAVIGATION_STRATEGY:`NAVIGATION_STRATEGY`,STRATEGY_STATE:`STRATEGY_STATE`,USER_OUTCOME:`USER_OUTCOME`,STRATEGY_LEARNING_STATE:`STRATEGY_LEARNING_STATE`}}}),init_util=__esm({"src/core/util/index.ts"(){"use strict";init_types_legacy()}}),init_pouchdb_setup=__esm({"src/impl/couch/pouchdb-setup.ts"(){"use strict";PouchDB.plugin(plugin$1),PouchDB.plugin(plugin),PouchDB.debug!==void 0&&PouchDB.debug.disable(),PouchDB.defaults({}),pouchdb_setup_default=PouchDB}}),init_dataDirectory=__esm({"src/util/dataDirectory.ts"(){"use strict";init_logger(),init_factory()}}),init_userDBHelpers=__esm({"src/impl/common/userDBHelpers.ts"(){"use strict";init_core(),init_logger(),init_pouchdb_setup(),init_dataDirectory(),REVIEW_TIME_FORMAT=`YYYY-MM-DD--kk:mm:ss-SSS`,log2=t=>{logger.info(t)}}}),init_Loggable=__esm({"src/util/Loggable.ts"(){"use strict";Loggable=class{log(...t){console.log(`LOG-${this._className}@${new Date}:`,...t)}error(...t){console.error(`ERROR-${this._className}@${new Date}:`,...t)}}}}),init_updateQueue=__esm({"src/impl/couch/updateQueue.ts"(){"use strict";init_Loggable(),init_logger(),UpdateQueue=class extends Loggable{update(t,c){return logger.debug(`Update requested on doc: ${t}`),this.pendingUpdates[t]?this.pendingUpdates[t].push(c):this.pendingUpdates[t]=[c],this.applyUpdates(t)}constructor(t,c){super(),_defineProperty$2(this,`_className`,`UpdateQueue`),_defineProperty$2(this,`pendingUpdates`,{}),_defineProperty$2(this,`inprogressUpdates`,{}),_defineProperty$2(this,`readDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),this.readDB=t,this.writeDB=c||t,logger.debug(`UpdateQ initialized...`),this.readDB.info().then(t=>{logger.debug(`db info: ${JSON.stringify(t)}`)})}async applyUpdates(t){if(logger.debug(`Applying updates on doc: ${t}`),this.inprogressUpdates[t]){for(;this.inprogressUpdates[t];)await new Promise(t=>setTimeout(t,Math.random()*50));return this.applyUpdates(t)}else if(this.pendingUpdates[t]&&this.pendingUpdates[t].length>0){this.inprogressUpdates[t]=!0;let c=5;for(let c=0;c<5;c++)try{let c={...await this.readDB.get(t)},u=[...this.pendingUpdates[t]];for(let t of u)c=typeof t==`function`?{...c,...t(c)}:{...c,...t};if(await this.writeDB.put(c),this.pendingUpdates[t].splice(0,u.length),this.pendingUpdates[t].length===0)this.inprogressUpdates[t]=!1,delete this.inprogressUpdates[t];else return this.applyUpdates(t);return c}catch(u){if(u.name===`conflict`&&c<4)logger.warn(`Conflict on update for doc ${t}, retry #${c+1}`),await new Promise(t=>setTimeout(t,50*Math.random()));else if(u.name===`not_found`&&c===0)throw logger.warn(`Update failed for ${t} - does not exist. Throwing to caller.`),delete this.inprogressUpdates[t],u;else throw delete this.inprogressUpdates[t],this.pendingUpdates[t]&&delete this.pendingUpdates[t],logger.error(`Error on attemped update (retry ${c}): ${JSON.stringify(u)}`),u}throw Error(`UpdateQueue failed for doc ${t} after 5 retries.`)}else throw Error(`Empty Updates Queue Triggered`)}}}}),init_user_course_relDB=__esm({"src/impl/couch/user-course-relDB.ts"(){"use strict";init_logger(),UsrCrsData=class{constructor(t,c){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`_courseId`,void 0),this.user=t,this._courseId=c}async getReviewsForcast(t){let c=hooks.utc().add(t,`days`);return this.getReviewstoDate(c)}async getPendingReviews(){let t=hooks.utc();return this.getReviewstoDate(t)}async getScheduledReviewCount(){return(await this.getPendingReviews()).length}async getCourseSettings(){let t=(await this.user.getCourseRegistrationsDoc()).courses.find(t=>t.courseID===this._courseId);return t&&t.settings?t.settings:(logger.warn(`no settings found during lookup on course ${this._courseId}`),{})}updateCourseSettings(t){`updateCourseSettings`in this.user&&this.user.updateCourseSettings(this._courseId,t)}async getStrategyState(t){return this.user.getStrategyState(this._courseId,t)}async putStrategyState(t,c){return this.user.putStrategyState(this._courseId,t,c)}async deleteStrategyState(t){return this.user.deleteStrategyState(this._courseId,t)}async getReviewstoDate(t){let c=await this.user.getPendingReviews(this._courseId);return logger.debug(`Fetching ${this.user.getUsername()}'s scheduled reviews for course ${this._courseId}.`),c.filter(c=>{let u=hooks.utc(c.reviewTime);return t.isAfter(u)})}}}}),init_clientCache=__esm({"src/impl/couch/clientCache.ts"(){"use strict";CLIENT_CACHE={}}}),init_courseAPI=__esm({"src/impl/couch/courseAPI.ts"(){"use strict";init_pouchdb_setup(),init_couch(),init_factory(),init_courseDB(),init_types_legacy(),init_common(),init_logger(),AlreadyTaggedErr=class extends Error{constructor(t){super(t),this.name=`AlreadyTaggedErr`}}}}),init_courseLookupDB=__esm({"src/impl/couch/courseLookupDB.ts"(){"use strict";var t;init_pouchdb_setup(),init_factory(),init_logger(),courseLookupDBTitle=`coursedb-lookup`,logger.debug(`COURSELOOKUP FILE RUNNING`),CourseLookup=(t=class _CourseLookup{static get _db(){if(this._dbInstance)return this._dbInstance;if(ENV.COUCHDB_SERVER_URL===`NOT_SET`||!ENV.COUCHDB_SERVER_URL)throw Error(`CourseLookup.db: COUCHDB_SERVER_URL is not set. Ensure initializeDataLayer has been called with valid configuration.`);if(ENV.COUCHDB_SERVER_PROTOCOL===`NOT_SET`||!ENV.COUCHDB_SERVER_PROTOCOL)throw Error(`CourseLookup.db: COUCHDB_SERVER_PROTOCOL is not set. Ensure initializeDataLayer has been called with valid configuration.`);let t=`${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}/${courseLookupDBTitle}`,c={};ENV.COUCHDB_USERNAME&&ENV.COUCHDB_PASSWORD?(c.auth={username:ENV.COUCHDB_USERNAME,password:ENV.COUCHDB_PASSWORD},logger.info(`CourseLookup: Connecting to ${t} with authentication.`)):logger.info(`CourseLookup: Connecting to ${t} without authentication.`);try{return this._dbInstance=new pouchdb_setup_default(t,c),logger.info(`CourseLookup: Database instance created for ${courseLookupDBTitle}.`),this._dbInstance}catch(c){throw logger.error(`CourseLookup: Failed to create PouchDB instance for ${t}`,c),this._dbInstance=null,Error(`CourseLookup: Failed to initialize database connection: ${c instanceof Error?c.message:String(c)}`)}}static async add(t){return(await _CourseLookup._db.post({name:t})).id}static async addWithId(t,c,u){let d={_id:t,name:c};u&&(d.disambiguator=u),await _CourseLookup._db.put(d)}static async delete(t){let c=await _CourseLookup._db.get(t);return await _CourseLookup._db.remove(c)}static async allCourseWare(){return(await _CourseLookup._db.allDocs({include_docs:!0})).rows.map(t=>t.doc)}static async updateDisambiguator(t,c){let u=await _CourseLookup._db.get(t);return u.disambiguator=c,await _CourseLookup._db.put(u)}static async isCourse(t){try{return await _CourseLookup._db.get(t),!0}catch(t){return logger.info(`Courselookup failed:`,t),!1}}},_defineProperty$2(t,`_dbInstance`,null),t)}}),PipelineDebugger_exports={},__export(PipelineDebugger_exports,{buildRunReport:()=>buildRunReport,captureRun:()=>captureRun,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerPipelineForDebug:()=>registerPipelineForDebug}),init_PipelineDebugger=__esm({"src/core/navigators/PipelineDebugger.ts"(){"use strict";init_navigators(),init_logger(),_activePipeline=null,MAX_RUNS=10,runHistory=[],_uiContainer=null,_selectedRunIndex=null,_cardSearchQuery=``,pipelineDebugAPI={get runs(){return[...runHistory]},showRun(t=0){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c;if(typeof t==`number`){if(c=runHistory[t],!c){logger.info(`[Pipeline Debug] No run found at index ${t}. History length: ${runHistory.length}`);return}}else if(c=runHistory.find(c=>c.runId.endsWith(t)),!c){logger.info(`[Pipeline Debug] No run found matching ID '${t}'.`);return}printRunSummary(c)},showLastRun(){this.showRun(0)},showCard(t){for(let c of runHistory){let u=c.cards.find(c=>c.cardId===t);if(u){console.group(`\u{1F3B4} Card: ${t}`),logger.info(`Course: ${u.courseId}`),logger.info(`Origin: ${u.origin}`),logger.info(`Card ELO: ${u.cardElo??`unknown`} | User ELO: ${c.userElo??`unknown`}`),logger.info(`Final score: ${u.finalScore.toFixed(3)}`),logger.info(`Selected: ${u.selected?`Yes ✅`:`No ❌`}`),u.tags&&u.tags.length>0&&logger.info(`Tags (${u.tags.length}): ${u.tags.join(`, `)}`),logger.info(`Provenance:`),logger.info(formatProvenance(u.provenance)),console.groupEnd();return}}logger.info(`[Pipeline Debug] Card '${t}' not found in recent runs.`)},explainReviews(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.group(`📋 Review Selection Analysis`);for(let t of runHistory){console.group(`Run: ${t.courseId} @ ${t.timestamp.toLocaleTimeString()}`);let c=t.cards.filter(t=>t.origin===`review`),u=c.filter(t=>t.selected);if(c.length===0)logger.info(`❌ No reviews were generated. Check SRS logs for why.`);else if(u.length===0){logger.info(`\u26A0\uFE0F ${c.length} reviews generated but none selected.`),logger.info(`Possible reasons:`);let u=Math.max(...t.cards.filter(t=>t.origin===`new`&&t.selected).map(t=>t.finalScore),0),d=Math.max(...c.map(t=>t.finalScore),0);d<u&&logger.info(` - New cards scored higher (top new: ${u.toFixed(2)}, top review: ${d.toFixed(2)})`);let m=c.sort((t,c)=>c.finalScore-t.finalScore)[0];m&&(logger.info(` - Top review score: ${m.finalScore.toFixed(3)}`),logger.info(` - Its provenance:`),logger.info(formatProvenance(m.provenance)))}else{logger.info(`\u2705 ${u.length}/${c.length} reviews selected.`),logger.info(`Top selected review:`);let t=u.sort((t,c)=>c.finalScore-t.finalScore)[0];logger.info(formatProvenance(t.provenance))}console.groupEnd()}console.groupEnd()},showPrescribed(t){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c=runHistory[0],u=c.cards.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`));if(console.group(`\u{1F9ED} Prescribed Debug (${c.courseId})`),u.length===0){logger.info(`No prescribed-generated cards were present in the most recent run.`),console.groupEnd();return}let d=u.map(t=>{let c=t.provenance.find(t=>t.strategy===`prescribed`)?.reason??``,u=c.match(/group=([^;]+)/)?.[1]??`unknown`,d=c.match(/mode=([^;]+)/)?.[1]??`unknown`,m=c.match(/blocked=([^;]+)/)?.[1]??`unknown`,g=c.match(/blockedTargets=([^;]+)/)?.[1]??`none`,b=c.match(/supportCard=([^;]+)/)?.[1]??`none`,S=c.match(/supportTags=([^;]+)/)?.[1]??`none`,C=c.match(/multiplier=([^;]+)/)?.[1]??`unknown`;return{group:u,mode:d,supportSource:d===`discovered-support`?`discovered`:d===`support`?`authored`:`n/a`,cardId:t.cardId,selected:t.selected?`yes`:`no`,finalScore:t.finalScore.toFixed(3),blocked:m,blockedTargets:g,supportCard:b,supportTags:S,multiplier:C}}).filter(c=>!t||c.group===t).sort((t,c)=>Number(c.finalScore)-Number(t.finalScore));if(d.length===0){logger.info(`[Pipeline Debug] No prescribed cards matched group '${t}' in the most recent run.`),console.groupEnd();return}console.table(d);let m=d.filter(t=>t.selected===`yes`),g=new Set,b=new Set,S=new Set,C=new Set;for(let t of d)t.blockedTargets&&t.blockedTargets!==`none`&&t.blockedTargets.split(`|`).filter(Boolean).forEach(t=>g.add(t)),t.supportTags&&t.supportTags!==`none`&&t.supportTags.split(`|`).filter(Boolean).forEach(t=>b.add(t)),t.supportCard&&t.supportCard!==`none`&&(t.supportSource===`discovered`?C.add(t.supportCard):t.supportSource===`authored`&&S.add(t.supportCard));logger.info(`Prescribed cards in run: ${d.length}`),logger.info(`Selected prescribed cards: ${m.length}`),logger.info(`Blocked prescribed targets referenced: ${g.size>0?[...g].join(`, `):`none`}`),logger.info(`Resolved support tags referenced: ${b.size>0?[...b].join(`, `):`none`}`),logger.info(`Authored support cards emitted: ${S.size>0?[...S].join(`, `):`none`}`),logger.info(`Discovered support cards emitted: ${C.size>0?[...C].join(`, `):`none`}`),console.groupEnd()},listRuns(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.table(runHistory.map(t=>({id:t.runId.slice(-8),time:t.timestamp.toLocaleTimeString(),course:t.courseName||t.courseId.slice(0,8),generated:t.generatedCount,selected:t.finalCount,new:t.newSelected,reviews:t.reviewsSelected})))},export(){let t=JSON.stringify(runHistory,null,2);return logger.info(`[Pipeline Debug] Run history exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.pipeline.export())`),t},clear(){runHistory.length=0,logger.info(`[Pipeline Debug] Run history cleared.`)},showRegistry(){let t=getRegisteredNavigatorNames();if(t.length===0){logger.info(`[Pipeline Debug] Navigator registry is empty.`);return}console.group(`📦 Navigator Registry`),console.table(t.map(t=>{let c=getRegisteredNavigatorRole(t),u=NavigatorRoles[t];return{name:t,role:u||c||`⚠️ NONE`,source:u?`built-in`:c?`consumer`:`unclassified`,isGenerator:isGenerator(t),isFilter:isFilter(t)}})),console.groupEnd()},showStrategies(){if(this.showRegistry(),runHistory.length===0){logger.info(`[Pipeline Debug] No pipeline runs captured yet — cannot show strategy doc mapping.`);return}let t=runHistory[0];if(console.group(`🔌 Pipeline Strategy Mapping (last run)`),logger.info(`Generator: ${t.generatorName}`),t.generators&&t.generators.length>0)for(let c of t.generators)logger.info(` \u{1F4E5} ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews)`);if(t.filters.length>0){logger.info(`Filters:`);for(let c of t.filters)logger.info(` \u{1F538} ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`)}else logger.info(`Filters: (none)`);console.groupEnd()},async diagnoseCardSpace(t){return _activePipeline?_activePipeline.diagnoseCardSpace({threshold:t}):(logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`),null)},async showTagElo(t){if(!_activePipeline){logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`);return}let c=await _activePipeline.getTagEloStatus(t),u=Object.entries(c).sort(([t],[c])=>t.localeCompare(c));if(u.length===0){logger.info(`[Pipeline Debug] No tag ELO data found${t?` for pattern: ${t}`:``}.`);return}console.table(Object.fromEntries(u.map(([t,c])=>[t,{score:Math.round(c.score),count:c.count}])))},ui(){if(_uiContainer){document.body.removeChild(_uiContainer),_uiContainer=null;return}_uiContainer=document.createElement(`div`),_uiContainer.id=`sk-pipeline-debugger`,document.body.appendChild(_uiContainer),_selectedRunIndex===null&&runHistory.length>0&&(_selectedRunIndex=0),renderUI()},_selectRun(t){_selectedRunIndex=t,renderUI()},_setSearch(t){_cardSearchQuery=t,renderUI()},help(){logger.info(`
|
|
324
|
+
\u26A0\uFE0F Detected clustering: max ${m} cards from same course in a row`),logger.info(`This suggests cards are sorted by score rather than round-robin by course.`)),console.groupEnd()}function mountSessionDebugger(){if(typeof window>`u`)return;let t=window;t.skuilder=t.skuilder||{},t.skuilder.session=sessionDebugAPI}var import___vite_browser_external,import___vite_browser_external$1,import___vite_browser_external$2,import_browser_ponyfill,import_browser_ponyfill$1,import_browser,_SessionController2,__defProp,__getOwnPropNames,__glob,__esm,__export,init_adminDB,init_classroomDB,init_SyncStrategy,isDevelopment,logger,init_logger,GuestUsername,log,DocType,DocTypePrefixes,init_types_legacy,init_util,pouchdb_setup_default,init_pouchdb_setup,init_dataDirectory,REVIEW_TIME_FORMAT,log2,init_userDBHelpers,Loggable,init_Loggable,UpdateQueue,init_updateQueue,UsrCrsData,init_user_course_relDB,CLIENT_CACHE,init_clientCache,AlreadyTaggedErr,init_courseAPI,courseLookupDBTitle,CourseLookup,init_courseLookupDB,PipelineDebugger_exports,_activePipeline,MAX_RUNS,runHistory,DISCARDED_KEEP_TOP,_uiContainer,_selectedRunIndex,_cardSearchQuery,pipelineDebugAPI,init_PipelineDebugger,CompositeGenerator_exports,AggregationMode,DEFAULT_AGGREGATION_MODE,FREQUENCY_BOOST_FACTOR,CompositeGenerator,init_CompositeGenerator,elo_exports,ELONavigator,init_elo,generators_exports,init_generators,prescribed_exports,DEFAULT_FRESHNESS_WINDOW,DEFAULT_MAX_DIRECT_PER_RUN,DEFAULT_MAX_SUPPORT_PER_RUN,DEFAULT_HIERARCHY_DEPTH,DEFAULT_MIN_COUNT,BASE_TARGET_SCORE,BASE_SUPPORT_SCORE,DISCOVERED_SUPPORT_SCORE,MAX_TARGET_MULTIPLIER,MAX_SUPPORT_MULTIPLIER,PRESCRIBED_DEBUG_VERSION,PrescribedCardsGenerator,init_prescribed,srs_exports,DEFAULT_HEALTHY_BACKLOG,MAX_BACKLOG_PRESSURE,SRSNavigator,init_srs,types_exports,init_types,globImport_generators,init_,DEFAULT_LEARNABLE_WEIGHT,init_contentNavigationStrategy,WeightedFilter_exports,WeightedFilter,init_WeightedFilter,eloDistance_exports,DEFAULT_HALF_LIFE,DEFAULT_MIN_MULTIPLIER,DEFAULT_MAX_MULTIPLIER,init_eloDistance,hierarchyDefinition_exports,DEFAULT_MIN_COUNT2,HierarchyDefinitionNavigator,init_hierarchyDefinition,userTagPreference_exports,UserTagPreferenceFilter,init_userTagPreference,filters_exports,init_filters,inferredPreferenceStub_exports,INFERRED_PREFERENCE_NAVIGATOR_STUB,init_inferredPreferenceStub,interferenceMitigator_exports,DEFAULT_MIN_COUNT3,DEFAULT_MIN_ELAPSED_DAYS,DEFAULT_INTERFERENCE_DECAY,InterferenceMitigatorNavigator,init_interferenceMitigator,relativePriority_exports,DEFAULT_PRIORITY,DEFAULT_PRIORITY_INFLUENCE,DEFAULT_COMBINE_MODE,RelativePriorityNavigator,init_relativePriority,types_exports2,init_types2,userGoalStub_exports,USER_GOAL_NAVIGATOR_STUB,init_userGoalStub,globImport_filters,init_2,init_gradient,MIN_OBSERVATIONS_FOR_UPDATE,LEARNING_RATE,MAX_WEIGHT_DELTA,MIN_R_SQUARED_FOR_GRADIENT,FLAT_GRADIENT_THRESHOLD,MAX_HISTORY_LENGTH,init_learning,init_signal,init_recording,MIN_SPREAD,MAX_SPREAD,MIN_WEIGHT,MAX_WEIGHT,init_orchestration,Pipeline_exports,VERBOSE_RESULTS,Pipeline,init_Pipeline,defaults_exports,init_defaults,PipelineAssembler_exports,PipelineAssembler,init_PipelineAssembler,globImport,init_3,navigators_exports,navigatorRegistry,Navigators,NavigatorRole,NavigatorRoles,ContentNavigator,init_navigators,CoursesDB,CourseDB,init_courseDB,classroomLookupDBTitle,CLASSROOM_CONFIG,ClassroomDBBase,StudentClassroomDB,TeacherClassroomDB,ClassroomLookupDB,init_classroomDB2,AdminDB,init_adminDB2,CourseSyncService,init_CourseSyncService,init_auth,CouchDBSyncStrategy_exports,log3,CouchDBSyncStrategy,init_CouchDBSyncStrategy,isBrowser,GUEST_LOCAL_DB,localUserDB,pouchDBincludeCredentialsConfig,REVIEW_TIME_FORMAT2,init_couch,log4,BaseUser,userCoursesDoc,userClassroomsDoc,init_BaseUserDB,init_common,PouchDataLayerProvider_exports,CouchDataLayerProvider,init_PouchDataLayerProvider,pathUtils,nodeFS,StaticDataUnpacker,init_StaticDataUnpacker,StaticCourseDB,init_courseDB2,StaticCoursesDB,init_coursesDB,NoOpSyncStrategy,init_NoOpSyncStrategy,StaticDataLayerProvider_exports,StaticDataLayerProvider,init_StaticDataLayerProvider,NOT_SET,ENV,dataLayerInstance,init_factory,TagFilteredContentSource,init_TagFilteredContentSource,init_contentSource,init_courseDB3,init_dataLayerProvider,init_userDB,init_interfaces,init_user,init_strategyState,init_userOutcome,init_cardProcessor,init_types3,init_bulkImport,userDBDebugAPI,init_UserDBDebugger,init_core,duration,SrsService,EloService,ResponseProcessor,CardHydrationService,ItemQueue,CouchDBToStaticPacker,DEFAULT_MIGRATION_OPTIONS,FileSystemError,nodeFS2,nodeFS3,nodePath,StaticToCouchDBMigrator,QuotaRoundRobinMixer,MAX_RUNS2,runHistory2,mixerDebugAPI,activeSession,sessionHistory,MAX_HISTORY,sessionDebugAPI,SessionController,init_dist=__esmMin((()=>{init_defineProperty(),init_index_browser_es$5(),init_index_browser_es(),init_index_es(),import___vite_browser_external=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$1=__toESM$2(require___vite_browser_external(),1),import___vite_browser_external$2=__toESM$2(require___vite_browser_external(),1),init_moment(),init_dist$1(),init_esm_browser(),import_browser_ponyfill=__toESM$2(require_browser_ponyfill(),1),import_browser_ponyfill$1=__toESM$2(require_browser_ponyfill(),1),import_browser=__toESM$2(require_browser(),1),__defProp=Object.defineProperty,__getOwnPropNames=Object.getOwnPropertyNames,__glob=t=>c=>{var u=t[c];if(u)return u();throw Error(`Module not found in bundle: `+c)},__esm=(t,c)=>function __init(){return t&&(c=(0,t[__getOwnPropNames(t)[0]])(t=0)),c},__export=(t,c)=>{for(var u in c)__defProp(t,u,{get:c[u],enumerable:!0})},init_adminDB=__esm({"src/core/interfaces/adminDB.ts"(){"use strict";}}),init_classroomDB=__esm({"src/core/interfaces/classroomDB.ts"(){"use strict";}}),init_SyncStrategy=__esm({"src/impl/common/SyncStrategy.ts"(){"use strict";}}),init_logger=__esm({"src/util/logger.ts"(){"use strict";isDevelopment=typeof process<`u`&&process.env.NODE_ENV===`development`,logger={debug:(t,...c)=>{isDevelopment&&console.debug(`[DB:DEBUG] ${t}`,...c)},info:(t,...c)=>{console.info(`[DB:INFO] ${t}`,...c)},warn:(t,...c)=>{console.warn(`[DB:WARN] ${t}`,...c)},error:(t,...c)=>{console.error(`[DB:ERROR] ${t}`,...c)},log:(t,...c)=>{isDevelopment&&console.log(`[DB:LOG] ${t}`,...c)}}}}),init_types_legacy=__esm({"src/core/types/types-legacy.ts"(){"use strict";init_logger(),GuestUsername=`sk-guest-`,log=t=>{logger.log(t)},DocType=(t=>(t.DISPLAYABLE_DATA=`DISPLAYABLE_DATA`,t.CARD=`CARD`,t.DATASHAPE=`DATASHAPE`,t.QUESTIONTYPE=`QUESTION`,t.VIEW=`VIEW`,t.PEDAGOGY=`PEDAGOGY`,t.CARDRECORD=`CARDRECORD`,t.SCHEDULED_CARD=`SCHEDULED_CARD`,t.TAG=`TAG`,t.NAVIGATION_STRATEGY=`NAVIGATION_STRATEGY`,t.STRATEGY_STATE=`STRATEGY_STATE`,t.USER_OUTCOME=`USER_OUTCOME`,t.STRATEGY_LEARNING_STATE=`STRATEGY_LEARNING_STATE`,t))(DocType||{}),DocTypePrefixes={CARD:`c`,DISPLAYABLE_DATA:`dd`,TAG:`TAG`,CARDRECORD:`cardH`,SCHEDULED_CARD:`card_review_`,DATASHAPE:`DATASHAPE`,QUESTION:`QUESTION`,VIEW:`VIEW`,PEDAGOGY:`PEDAGOGY`,NAVIGATION_STRATEGY:`NAVIGATION_STRATEGY`,STRATEGY_STATE:`STRATEGY_STATE`,USER_OUTCOME:`USER_OUTCOME`,STRATEGY_LEARNING_STATE:`STRATEGY_LEARNING_STATE`}}}),init_util=__esm({"src/core/util/index.ts"(){"use strict";init_types_legacy()}}),init_pouchdb_setup=__esm({"src/impl/couch/pouchdb-setup.ts"(){"use strict";PouchDB.plugin(plugin$1),PouchDB.plugin(plugin),PouchDB.debug!==void 0&&PouchDB.debug.disable(),PouchDB.defaults({}),pouchdb_setup_default=PouchDB}}),init_dataDirectory=__esm({"src/util/dataDirectory.ts"(){"use strict";init_logger(),init_factory()}}),init_userDBHelpers=__esm({"src/impl/common/userDBHelpers.ts"(){"use strict";init_core(),init_logger(),init_pouchdb_setup(),init_dataDirectory(),REVIEW_TIME_FORMAT=`YYYY-MM-DD--kk:mm:ss-SSS`,log2=t=>{logger.info(t)}}}),init_Loggable=__esm({"src/util/Loggable.ts"(){"use strict";Loggable=class{log(...t){console.log(`LOG-${this._className}@${new Date}:`,...t)}error(...t){console.error(`ERROR-${this._className}@${new Date}:`,...t)}}}}),init_updateQueue=__esm({"src/impl/couch/updateQueue.ts"(){"use strict";init_Loggable(),init_logger(),UpdateQueue=class extends Loggable{update(t,c){return logger.debug(`Update requested on doc: ${t}`),this.pendingUpdates[t]?this.pendingUpdates[t].push(c):this.pendingUpdates[t]=[c],this.applyUpdates(t)}constructor(t,c){super(),_defineProperty$2(this,`_className`,`UpdateQueue`),_defineProperty$2(this,`pendingUpdates`,{}),_defineProperty$2(this,`inprogressUpdates`,{}),_defineProperty$2(this,`readDB`,void 0),_defineProperty$2(this,`writeDB`,void 0),this.readDB=t,this.writeDB=c||t,logger.debug(`UpdateQ initialized...`),this.readDB.info().then(t=>{logger.debug(`db info: ${JSON.stringify(t)}`)})}async applyUpdates(t){if(logger.debug(`Applying updates on doc: ${t}`),this.inprogressUpdates[t]){for(;this.inprogressUpdates[t];)await new Promise(t=>setTimeout(t,Math.random()*50));return this.applyUpdates(t)}else if(this.pendingUpdates[t]&&this.pendingUpdates[t].length>0){this.inprogressUpdates[t]=!0;let c=5;for(let c=0;c<5;c++)try{let c={...await this.readDB.get(t)},u=[...this.pendingUpdates[t]];for(let t of u)c=typeof t==`function`?{...c,...t(c)}:{...c,...t};if(await this.writeDB.put(c),this.pendingUpdates[t].splice(0,u.length),this.pendingUpdates[t].length===0)this.inprogressUpdates[t]=!1,delete this.inprogressUpdates[t];else return this.applyUpdates(t);return c}catch(u){if(u.name===`conflict`&&c<4)logger.warn(`Conflict on update for doc ${t}, retry #${c+1}`),await new Promise(t=>setTimeout(t,50*Math.random()));else if(u.name===`not_found`&&c===0)throw logger.warn(`Update failed for ${t} - does not exist. Throwing to caller.`),delete this.inprogressUpdates[t],u;else throw delete this.inprogressUpdates[t],this.pendingUpdates[t]&&delete this.pendingUpdates[t],logger.error(`Error on attemped update (retry ${c}): ${JSON.stringify(u)}`),u}throw Error(`UpdateQueue failed for doc ${t} after 5 retries.`)}else throw Error(`Empty Updates Queue Triggered`)}}}}),init_user_course_relDB=__esm({"src/impl/couch/user-course-relDB.ts"(){"use strict";init_logger(),UsrCrsData=class{constructor(t,c){_defineProperty$2(this,`user`,void 0),_defineProperty$2(this,`_courseId`,void 0),this.user=t,this._courseId=c}async getReviewsForcast(t){let c=hooks.utc().add(t,`days`);return this.getReviewstoDate(c)}async getPendingReviews(){let t=hooks.utc();return this.getReviewstoDate(t)}async getScheduledReviewCount(){return(await this.getPendingReviews()).length}async getCourseSettings(){let t=(await this.user.getCourseRegistrationsDoc()).courses.find(t=>t.courseID===this._courseId);return t&&t.settings?t.settings:(logger.warn(`no settings found during lookup on course ${this._courseId}`),{})}updateCourseSettings(t){`updateCourseSettings`in this.user&&this.user.updateCourseSettings(this._courseId,t)}async getStrategyState(t){return this.user.getStrategyState(this._courseId,t)}async putStrategyState(t,c){return this.user.putStrategyState(this._courseId,t,c)}async deleteStrategyState(t){return this.user.deleteStrategyState(this._courseId,t)}async getReviewstoDate(t){let c=await this.user.getPendingReviews(this._courseId);return logger.debug(`Fetching ${this.user.getUsername()}'s scheduled reviews for course ${this._courseId}.`),c.filter(c=>{let u=hooks.utc(c.reviewTime);return t.isAfter(u)})}}}}),init_clientCache=__esm({"src/impl/couch/clientCache.ts"(){"use strict";CLIENT_CACHE={}}}),init_courseAPI=__esm({"src/impl/couch/courseAPI.ts"(){"use strict";init_pouchdb_setup(),init_couch(),init_factory(),init_courseDB(),init_types_legacy(),init_common(),init_logger(),AlreadyTaggedErr=class extends Error{constructor(t){super(t),this.name=`AlreadyTaggedErr`}}}}),init_courseLookupDB=__esm({"src/impl/couch/courseLookupDB.ts"(){"use strict";var t;init_pouchdb_setup(),init_factory(),init_logger(),courseLookupDBTitle=`coursedb-lookup`,logger.debug(`COURSELOOKUP FILE RUNNING`),CourseLookup=(t=class _CourseLookup{static get _db(){if(this._dbInstance)return this._dbInstance;if(ENV.COUCHDB_SERVER_URL===`NOT_SET`||!ENV.COUCHDB_SERVER_URL)throw Error(`CourseLookup.db: COUCHDB_SERVER_URL is not set. Ensure initializeDataLayer has been called with valid configuration.`);if(ENV.COUCHDB_SERVER_PROTOCOL===`NOT_SET`||!ENV.COUCHDB_SERVER_PROTOCOL)throw Error(`CourseLookup.db: COUCHDB_SERVER_PROTOCOL is not set. Ensure initializeDataLayer has been called with valid configuration.`);let t=`${ENV.COUCHDB_SERVER_PROTOCOL}://${ENV.COUCHDB_SERVER_URL}/${courseLookupDBTitle}`,c={};ENV.COUCHDB_USERNAME&&ENV.COUCHDB_PASSWORD?(c.auth={username:ENV.COUCHDB_USERNAME,password:ENV.COUCHDB_PASSWORD},logger.info(`CourseLookup: Connecting to ${t} with authentication.`)):logger.info(`CourseLookup: Connecting to ${t} without authentication.`);try{return this._dbInstance=new pouchdb_setup_default(t,c),logger.info(`CourseLookup: Database instance created for ${courseLookupDBTitle}.`),this._dbInstance}catch(c){throw logger.error(`CourseLookup: Failed to create PouchDB instance for ${t}`,c),this._dbInstance=null,Error(`CourseLookup: Failed to initialize database connection: ${c instanceof Error?c.message:String(c)}`)}}static async add(t){return(await _CourseLookup._db.post({name:t})).id}static async addWithId(t,c,u){let d={_id:t,name:c};u&&(d.disambiguator=u),await _CourseLookup._db.put(d)}static async delete(t){let c=await _CourseLookup._db.get(t);return await _CourseLookup._db.remove(c)}static async allCourseWare(){return(await _CourseLookup._db.allDocs({include_docs:!0})).rows.map(t=>t.doc)}static async updateDisambiguator(t,c){let u=await _CourseLookup._db.get(t);return u.disambiguator=c,await _CourseLookup._db.put(u)}static async isCourse(t){try{return await _CourseLookup._db.get(t),!0}catch(t){return logger.info(`Courselookup failed:`,t),!1}}},_defineProperty$2(t,`_dbInstance`,null),t)}}),PipelineDebugger_exports={},__export(PipelineDebugger_exports,{buildRunReport:()=>buildRunReport,captureRun:()=>captureRun,clearRunHistory:()=>clearRunHistory,mountPipelineDebugger:()=>mountPipelineDebugger,pipelineDebugAPI:()=>pipelineDebugAPI,registerPipelineForDebug:()=>registerPipelineForDebug}),init_PipelineDebugger=__esm({"src/core/navigators/PipelineDebugger.ts"(){"use strict";init_navigators(),init_logger(),_activePipeline=null,MAX_RUNS=10,runHistory=[],DISCARDED_KEEP_TOP=25,_uiContainer=null,_selectedRunIndex=null,_cardSearchQuery=``,pipelineDebugAPI={get runs(){return[...runHistory]},showRun(t=0){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c;if(typeof t==`number`){if(c=runHistory[t],!c){logger.info(`[Pipeline Debug] No run found at index ${t}. History length: ${runHistory.length}`);return}}else if(c=runHistory.find(c=>c.runId.endsWith(t)),!c){logger.info(`[Pipeline Debug] No run found matching ID '${t}'.`);return}printRunSummary(c)},showLastRun(){this.showRun(0)},showCard(t){for(let c of runHistory){let u=c.cards.find(c=>c.cardId===t);if(u){console.group(`\u{1F3B4} Card: ${t}`),logger.info(`Course: ${u.courseId}`),logger.info(`Origin: ${u.origin}`),logger.info(`Card ELO: ${u.cardElo??`unknown`} | User ELO: ${c.userElo??`unknown`}`),logger.info(`Final score: ${u.finalScore.toFixed(3)}`),logger.info(`Selected: ${u.selected?`Yes ✅`:`No ❌`}`),u.tags&&u.tags.length>0&&logger.info(`Tags (${u.tags.length}): ${u.tags.join(`, `)}`),logger.info(`Provenance:`),logger.info(formatProvenance(u.provenance)),console.groupEnd();return}}let c=runHistory.filter(t=>t.discardedTail&&t.discardedTail.count>0);c.length>0?logger.info(`[Pipeline Debug] Card '${t}' not found in retained cards. ${c.length} run(s) have discarded tails that were not retained \u2014 the card may have been a low-score candidate. See run.discardedTail for ranges.`):logger.info(`[Pipeline Debug] Card '${t}' not found in recent runs.`)},explainReviews(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.group(`📋 Review Selection Analysis`);for(let t of runHistory){console.group(`Run: ${t.courseId} @ ${t.timestamp.toLocaleTimeString()}`);let c=t.cards.filter(t=>t.origin===`review`),u=c.filter(t=>t.selected);if(c.length===0)logger.info(`❌ No reviews were generated. Check SRS logs for why.`);else if(u.length===0){logger.info(`\u26A0\uFE0F ${c.length} reviews generated but none selected.`),logger.info(`Possible reasons:`);let u=Math.max(...t.cards.filter(t=>t.origin===`new`&&t.selected).map(t=>t.finalScore),0),d=Math.max(...c.map(t=>t.finalScore),0);d<u&&logger.info(` - New cards scored higher (top new: ${u.toFixed(2)}, top review: ${d.toFixed(2)})`);let m=c.sort((t,c)=>c.finalScore-t.finalScore)[0];m&&(logger.info(` - Top review score: ${m.finalScore.toFixed(3)}`),logger.info(` - Its provenance:`),logger.info(formatProvenance(m.provenance)))}else{logger.info(`\u2705 ${u.length}/${c.length} reviews selected.`),logger.info(`Top selected review:`);let t=u.sort((t,c)=>c.finalScore-t.finalScore)[0];logger.info(formatProvenance(t.provenance))}console.groupEnd()}console.groupEnd()},showPrescribed(t){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}let c=runHistory[0],u=c.cards.filter(t=>t.provenance.some(t=>t.strategy===`prescribed`));if(console.group(`\u{1F9ED} Prescribed Debug (${c.courseId})`),u.length===0){logger.info(`No prescribed-generated cards were present in the most recent run.`),console.groupEnd();return}let d=u.map(t=>{let c=t.provenance.find(t=>t.strategy===`prescribed`)?.reason??``,u=c.match(/group=([^;]+)/)?.[1]??`unknown`,d=c.match(/mode=([^;]+)/)?.[1]??`unknown`,m=c.match(/blocked=([^;]+)/)?.[1]??`unknown`,g=c.match(/blockedTargets=([^;]+)/)?.[1]??`none`,b=c.match(/supportCard=([^;]+)/)?.[1]??`none`,S=c.match(/supportTags=([^;]+)/)?.[1]??`none`,C=c.match(/multiplier=([^;]+)/)?.[1]??`unknown`;return{group:u,mode:d,supportSource:d===`discovered-support`?`discovered`:d===`support`?`authored`:`n/a`,cardId:t.cardId,selected:t.selected?`yes`:`no`,finalScore:t.finalScore.toFixed(3),blocked:m,blockedTargets:g,supportCard:b,supportTags:S,multiplier:C}}).filter(c=>!t||c.group===t).sort((t,c)=>Number(c.finalScore)-Number(t.finalScore));if(d.length===0){logger.info(`[Pipeline Debug] No prescribed cards matched group '${t}' in the most recent run.`),console.groupEnd();return}console.table(d);let m=d.filter(t=>t.selected===`yes`),g=new Set,b=new Set,S=new Set,C=new Set;for(let t of d)t.blockedTargets&&t.blockedTargets!==`none`&&t.blockedTargets.split(`|`).filter(Boolean).forEach(t=>g.add(t)),t.supportTags&&t.supportTags!==`none`&&t.supportTags.split(`|`).filter(Boolean).forEach(t=>b.add(t)),t.supportCard&&t.supportCard!==`none`&&(t.supportSource===`discovered`?C.add(t.supportCard):t.supportSource===`authored`&&S.add(t.supportCard));logger.info(`Prescribed cards in run: ${d.length}`),logger.info(`Selected prescribed cards: ${m.length}`),logger.info(`Blocked prescribed targets referenced: ${g.size>0?[...g].join(`, `):`none`}`),logger.info(`Resolved support tags referenced: ${b.size>0?[...b].join(`, `):`none`}`),logger.info(`Authored support cards emitted: ${S.size>0?[...S].join(`, `):`none`}`),logger.info(`Discovered support cards emitted: ${C.size>0?[...C].join(`, `):`none`}`),console.groupEnd()},listRuns(){if(runHistory.length===0){logger.info(`[Pipeline Debug] No runs captured yet.`);return}console.table(runHistory.map(t=>({id:t.runId.slice(-8),time:t.timestamp.toLocaleTimeString(),course:t.courseName||t.courseId.slice(0,8),generated:t.generatedCount,selected:t.finalCount,new:t.newSelected,reviews:t.reviewsSelected})))},export(){let t=JSON.stringify(runHistory,null,2);return logger.info(`[Pipeline Debug] Run history exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.pipeline.export())`),t},clear(){runHistory.length=0,logger.info(`[Pipeline Debug] Run history cleared.`)},showRegistry(){let t=getRegisteredNavigatorNames();if(t.length===0){logger.info(`[Pipeline Debug] Navigator registry is empty.`);return}console.group(`📦 Navigator Registry`),console.table(t.map(t=>{let c=getRegisteredNavigatorRole(t),u=NavigatorRoles[t];return{name:t,role:u||c||`⚠️ NONE`,source:u?`built-in`:c?`consumer`:`unclassified`,isGenerator:isGenerator(t),isFilter:isFilter(t)}})),console.groupEnd()},showStrategies(){if(this.showRegistry(),runHistory.length===0){logger.info(`[Pipeline Debug] No pipeline runs captured yet — cannot show strategy doc mapping.`);return}let t=runHistory[0];if(console.group(`🔌 Pipeline Strategy Mapping (last run)`),logger.info(`Generator: ${t.generatorName}`),t.generators&&t.generators.length>0)for(let c of t.generators)logger.info(` \u{1F4E5} ${c.name}: ${c.cardCount} cards (${c.newCount} new, ${c.reviewCount} reviews)`);if(t.filters.length>0){logger.info(`Filters:`);for(let c of t.filters)logger.info(` \u{1F538} ${c.name}: \u2191${c.boosted} \u2193${c.penalized} =${c.passed} \u2715${c.removed}`)}else logger.info(`Filters: (none)`);console.groupEnd()},async diagnoseCardSpace(t){return _activePipeline?_activePipeline.diagnoseCardSpace({threshold:t}):(logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`),null)},async showTagElo(t){if(!_activePipeline){logger.info(`[Pipeline Debug] No active pipeline. Run a session first.`);return}let c=await _activePipeline.getTagEloStatus(t),u=Object.entries(c).sort(([t],[c])=>t.localeCompare(c));if(u.length===0){logger.info(`[Pipeline Debug] No tag ELO data found${t?` for pattern: ${t}`:``}.`);return}console.table(Object.fromEntries(u.map(([t,c])=>[t,{score:Math.round(c.score),count:c.count}])))},ui(){if(_uiContainer){document.body.removeChild(_uiContainer),_uiContainer=null;return}_uiContainer=document.createElement(`div`),_uiContainer.id=`sk-pipeline-debugger`,document.body.appendChild(_uiContainer),_selectedRunIndex===null&&runHistory.length>0&&(_selectedRunIndex=0),renderUI()},_selectRun(t){_selectedRunIndex=t,renderUI()},_setSearch(t){_cardSearchQuery=t,renderUI()},_copyConfig(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d={runId:u.runId,timestamp:u.timestamp.toISOString(),courseId:u.courseId,courseName:u.courseName,hints:u.hints??null};copyTextToClipboard(JSON.stringify(d,null,2),c)},_copyResults(t,c){let u=runHistory.find(c=>c.runId===t);if(!u)return;let d=u.cards.filter(t=>t.selected).sort((t,c)=>c.finalScore-t.finalScore).map(t=>({cardId:t.cardId,generator:t.generator,origin:t.origin,score:Number(t.finalScore.toFixed(3)),topReason:t.provenance[0]?.reason??``})),m={runId:u.runId,label:u.hints?._label??null,finalCount:u.finalCount,newSelected:u.newSelected,reviewsSelected:u.reviewsSelected,selected:d};copyTextToClipboard(JSON.stringify(m,null,2),c)},help(){logger.info(`
|
|
303
325
|
🔧 Pipeline Debug API
|
|
304
326
|
|
|
305
327
|
Commands:
|
|
@@ -404,7 +426,7 @@ Example:
|
|
|
404
426
|
window.skuilder.mixer.showLastMix()
|
|
405
427
|
window.skuilder.mixer.explainSourceBalance()
|
|
406
428
|
window.skuilder.mixer.compareScores()
|
|
407
|
-
`)}},mountMixerDebugger(),init_logger(),activeSession=null,sessionHistory=[],MAX_HISTORY=5,sessionDebugAPI={get sessions(){return[...sessionHistory]},get active(){return activeSession},showQueue(){showCurrentQueue()},showHistory(t=0){showPresentationHistory(t)},showInterleaving(t=0){showInterleaving(t)},listSessions(){if(activeSession&&logger.info(`Active session: ${activeSession.sessionId} (${activeSession.presentations.length} cards presented)`),sessionHistory.length===0){logger.info(`[Session Debug] No completed sessions in history.`);return}console.table(sessionHistory.map((t,c)=>({index:c,id:t.sessionId.slice(-8),started:t.startTime.toLocaleTimeString(),ended:t.endTime?.toLocaleTimeString()||`incomplete`,cards:t.presentations.length})))},export(){let t={active:activeSession,history:sessionHistory},c=JSON.stringify(t,null,2);return logger.info(`[Session Debug] Session data exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.session.export())`),c},clear(){sessionHistory.length=0,logger.info(`[Session Debug] Session history cleared.`)},help(){logger.info(`
|
|
429
|
+
`)}},mountMixerDebugger(),init_logger(),init_PipelineDebugger(),activeSession=null,sessionHistory=[],MAX_HISTORY=5,sessionDebugAPI={get sessions(){return[...sessionHistory]},get active(){return activeSession},showQueue(){showCurrentQueue()},showHistory(t=0){showPresentationHistory(t)},showInterleaving(t=0){showInterleaving(t)},listSessions(){if(activeSession&&logger.info(`Active session: ${activeSession.sessionId} (${activeSession.presentations.length} cards presented)`),sessionHistory.length===0){logger.info(`[Session Debug] No completed sessions in history.`);return}console.table(sessionHistory.map((t,c)=>({index:c,id:t.sessionId.slice(-8),started:t.startTime.toLocaleTimeString(),ended:t.endTime?.toLocaleTimeString()||`incomplete`,cards:t.presentations.length})))},export(){let t={active:activeSession,history:sessionHistory},c=JSON.stringify(t,null,2);return logger.info(`[Session Debug] Session data exported. Copy the returned string or use:`),logger.info(` copy(window.skuilder.session.export())`),c},clear(){sessionHistory.length=0,logger.info(`[Session Debug] Session history cleared.`)},help(){logger.info(`
|
|
408
430
|
🎯 Session Debug API
|
|
409
431
|
|
|
410
432
|
Commands:
|
|
@@ -428,7 +450,7 @@ Example:
|
|
|
428
450
|
startTime: ${this.startTime}
|
|
429
451
|
endTime: ${this.endTime}
|
|
430
452
|
defaultBatchLimit: ${this._defaultBatchLimit}
|
|
431
|
-
initialReviewCap: ${this._initialReviewCap}`)}tick(){this._secondsRemaining=Math.floor((this.endTime.valueOf()-Date.now())/1e3),this._secondsRemaining<=0&&clearInterval(this._intervalHandle)}estimateCleanupTime(){let t=0;for(let c=0;c<this.failedQ.length;c++){let u=this.failedQ.peek(c),d=this._sessionRecord.find(t=>t.item.cardID===u.cardID),m=0;if(d){for(let t=0;t<d.records.length;t++)m+=d.records[t].timeSpent;m/=d.records.length,t+=m}}let c=t/1e3;return this.log(`Failed card cleanup estimate: ${Math.round(c)}`),c}estimateReviewTime(){let t=5*this.reviewQ.length;return this.log(`Review card time estimate: ${t}`),t}async prepareSession(){if(this.sources.some(t=>typeof t.getWeightedCards!=`function`))throw Error(`[SessionController] All content sources must implement getWeightedCards().`);let t=await this.getWeightedContent();this._wellIndicatedRemaining=t,t>=0&&t<_SessionController.MIN_WELL_INDICATED&&this.log(`[Init] Only ${t}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards in initial load`),await this.hydrationService.ensureHydratedCards(),startSessionTracking(this.reviewQ.length,this.newQ.length,this.failedQ.length),this._intervalHandle=setInterval(()=>{this.tick()},1e3)}async requestReplan(t){let c=this.normalizeReplanOptions(t);
|
|
453
|
+
initialReviewCap: ${this._initialReviewCap}`)}tick(){this._secondsRemaining=Math.floor((this.endTime.valueOf()-Date.now())/1e3),this._secondsRemaining<=0&&clearInterval(this._intervalHandle)}estimateCleanupTime(){let t=0;for(let c=0;c<this.failedQ.length;c++){let u=this.failedQ.peek(c),d=this._sessionRecord.find(t=>t.item.cardID===u.cardID),m=0;if(d){for(let t=0;t<d.records.length;t++)m+=d.records[t].timeSpent;m/=d.records.length,t+=m}}let c=t/1e3;return this.log(`Failed card cleanup estimate: ${Math.round(c)}`),c}estimateReviewTime(){let t=5*this.reviewQ.length;return this.log(`Review card time estimate: ${t}`),t}async prepareSession(){if(this.sources.some(t=>typeof t.getWeightedCards!=`function`))throw Error(`[SessionController] All content sources must implement getWeightedCards().`);let t=await this.getWeightedContent();this._wellIndicatedRemaining=t,t>=0&&t<_SessionController.MIN_WELL_INDICATED&&this.log(`[Init] Only ${t}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards in initial load`),await this.hydrationService.ensureHydratedCards(),startSessionTracking(this.reviewQ.length,this.newQ.length,this.failedQ.length),this._intervalHandle=setInterval(()=>{this.tick()},1e3)}async requestReplan(t){let c=this.normalizeReplanOptions(t);(c.hints||c.label||c.limit)&&(this._depletionReplanAttempted=!1);let u=this._replanHasIntent(c);if(this._replanPromise){if(!u)return this.log(`Replan already in progress, coalescing unhinted auto-replan`),this._replanPromise;let t=c.label?` [${c.label}]`:``;this.log(`Replan in progress; queueing hint-bearing replan${t} behind in-flight run`);let d=this._replanPromise.catch(()=>void 0).then(()=>this._runReplan(c));return this._replanPromise=d.finally(()=>{this._replanPromise===d&&(this._replanPromise=null)}),d}let d=this._runReplan(c);this._replanPromise=d.finally(()=>{this._replanPromise===d&&(this._replanPromise=null)}),await d}_replanHasIntent(t){return!!(t.label||t.limit!==void 0||t.minFollowUpCards!==void 0||t.mode&&t.mode!==`replace`||t.hints&&Object.keys(t.hints).length>0)}async _runReplan(t){t.hints||(t.hints={});let c=t.hints,u=new Set(c.excludeCards??[]);this._currentCard?.item.cardID&&u.add(this._currentCard.item.cardID);for(let t of this._sessionRecord)u.add(t.card.card_id);if(this.newQ.length>0&&u.add(this.newQ.peek(0).cardID),c.excludeCards=[...u],t.hints){let c=t.label?{...t.hints,_label:t.label}:t.hints;for(let t of this.sources)t.setEphemeralHints?.(c)}let d=t.label?` [${t.label}]`:``;this.log(`Mid-session replan requested${d} (limit: ${t.limit??`default`}, mode: ${t.mode??`replace`}${t.hints?`, with hints`:``})`),t.minFollowUpCards!==void 0&&t.minFollowUpCards>0&&(this._minCardsGuarantee=Math.max(this._minCardsGuarantee,t.minFollowUpCards),this.log(`[Replan] Card guarantee set to ${this._minCardsGuarantee}`)),await this._executeReplan(t)}normalizeReplanOptions(t){if(!t)return{};let c=[`hints`,`limit`,`mode`,`label`,`minFollowUpCards`];return Object.keys(t).some(t=>c.includes(t))?t:{hints:t}}async _executeReplan(t={}){let c=t.limit,u=t.mode??`replace`,d=await this.getWeightedContent({replan:!0,additive:u===`merge`,limit:c});this._wellIndicatedRemaining=d,c!==void 0&&c<this._defaultBatchLimit?(this._suppressQualityReplan=!0,this.log(`[Replan] Burst mode (limit=${c}): suppressing quality-based auto-replan`)):this._suppressQualityReplan=!1,d>=0&&d<_SessionController.MIN_WELL_INDICATED&&this.log(`[Replan] Only ${d}/${_SessionController.MIN_WELL_INDICATED} well-indicated cards after replan`),this.newQ.length>0&&(this._depletionReplanAttempted=!1),await this.hydrationService.ensureHydratedCards();let m=t.label?` [${t.label}]`:``;this.log(`Replan complete${m}: newQ now has ${this.newQ.length} cards (mode=${u})`),snapshotQueues(this.reviewQ.length,this.newQ.length,this.failedQ.length)}addTime(t){this.endTime=new Date(this.endTime.valueOf()+1e3*t)}get failedCount(){return this.failedQ.length}toString(){return`Session: ${this.reviewQ.length} Reviews, ${this.newQ.length} New, ${this.failedQ.length} failed`}reportString(){return`${this.reviewQ.dequeueCount} Reviews, ${this.newQ.dequeueCount} New, ${this.failedQ.dequeueCount} failed`}getDebugInfo(){let t=this.sources.some(t=>typeof t.getWeightedCards==`function`),extractQueueItems=(t,c=10)=>{let u=[];for(let d=0;d<Math.min(t.length,c);d++){let c=t.peek(d);u.push({courseID:c.courseID||`unknown`,cardID:c.cardID||`unknown`,status:c.status||`unknown`})}return u};return{api:{mode:t?`weighted`:`legacy`,description:t?`Using getWeightedCards() API with scored candidates`:`ERROR: getWeightedCards() not a function.`},reviewQueue:{length:this.reviewQ.length,dequeueCount:this.reviewQ.dequeueCount,items:extractQueueItems(this.reviewQ)},newQueue:{length:this.newQ.length,dequeueCount:this.newQ.dequeueCount,items:extractQueueItems(this.newQ)},failedQueue:{length:this.failedQ.length,dequeueCount:this.failedQ.dequeueCount,items:extractQueueItems(this.failedQ)},hydratedCache:{count:this.hydrationService.hydratedCount,cardIds:this.hydrationService.getHydratedCardIds()},replan:{inProgress:this._replanPromise!==null,suppressQualityReplan:this._suppressQualityReplan,defaultBatchLimit:this._defaultBatchLimit,minCardsGuarantee:this._minCardsGuarantee}}}async getWeightedContent(t){let c=t?.replan??!1,u=t?.additive??!1,d=t?.limit??this._defaultBatchLimit,m=c?d:d+this._initialReviewCap,g=[];for(let t=0;t<this.sources.length;t++){let c=this.sources[t];try{let u=(await c.getWeightedCards(m)).cards;g.push({sourceIndex:t,weighted:u})}catch(c){if(this.error(`Failed to get content from source ${t}:`,c),this.sources.length===1)throw Error(`Cannot start session: failed to load content from source ${t}`)}}if(g.length===0){if(c)return this.log(`Replan: no content from any source, keeping existing newQ`),-1;throw Error(`Cannot start session: failed to load content from all ${this.sources.length} source(s). Check logs for details.`)}let b=this.mixer.mix(g,m*this.sources.length),S=g.map(t=>t.weighted[0]?.courseId||`source-${t.sourceIndex}`);await Promise.all(S.map(async t=>{if(!this.courseNameCache.has(t))try{let c=await this.dataLayer.getCoursesDB().getCourseConfig(t);this.courseNameCache.set(t,c.name)}catch{}}));let C=S.map(t=>this.courseNameCache.get(t)),w=this.mixer instanceof QuotaRoundRobinMixer?Math.ceil(m*this.sources.length/g.length):void 0;captureMixerRun(this.mixer.constructor.name,g,S,C,m*this.sources.length,w,b);let T=b.filter(t=>getCardOrigin(t)===`review`).slice(0,this._initialReviewCap),E=b.filter(t=>getCardOrigin(t)===`new`).slice(0,d);logger.debug(`[reviews] got ${T.length} reviews from mixer`);let D=c?`Replan content:
|
|
432
454
|
`:`Mixed content session created with:
|
|
433
455
|
`;if(!c)for(let t of T){let c={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,reviewID:t.reviewID,status:`review`};this.reviewQ.add(c,c.cardID),D+=`Review: ${t.courseId}::${t.cardId} (score: ${t.score.toFixed(2)})
|
|
434
456
|
`}let O=E.filter(t=>t.score>=_SessionController.WELL_INDICATED_SCORE).length,Or=[];for(let t of E){let c={cardID:t.cardId,courseID:t.courseId,contentSourceType:`course`,contentSourceID:t.courseId,status:`new`};Or.push(c),D+=`New: ${t.courseId}::${t.cardId} (score: ${t.score.toFixed(2)})
|
|
@@ -469,7 +491,7 @@ Student: ${this.student}
|
|
|
469
491
|
Teacher: ${this.teacher}
|
|
470
492
|
Author: ${this.author}
|
|
471
493
|
`),this.password===this.retypedPassword){if(!this.user){console.error(`ERROR: No user object available`);return}this.user.createAccount(this.username,this.password).then(async t=>{if(t.status===Status.ok){if(this.authStore.loginAndRegistration.loggedIn=!0,this.authStore.loginAndRegistration.init=!1,this.authStore.loginAndRegistration.init=!0,this.email)try{await(await getCurrentUser()).setConfig({email:this.email});let t=typeof window<`u`?window.location.origin:void 0,c=await sendVerificationEmail(this.username,this.email,t);c.ok?Z$2({text:`Account created! Please check your email to verify your account.`,status:Status.ok}):log$2(`Warning: Failed to send verification email: ${c.error}`)}catch(t){console.error(`Email save/send error:`,t),log$2(`Warning: Failed to save email or send verification: ${t}`)}this.onSignupSuccess&&(console.log(`[UserRegistration] Calling onSignupSuccess callback`),this.onSignupSuccess({username:this.username})),this.$emit(`signup-success`,{username:this.username})}else t.error===`This username is taken!`?(this.usernameError=!0,this.usernameHint=`Try a different name.`,this.$refs.userNameTextField.focus(),Z$2({text:`The name ${this.username} is taken!`,status:t.status})):Z$2({text:t.error,status:t.status})}).catch(t=>{console.error(`[UserRegistration] .catch() called with error:`,t),t&&Z$2({text:t?.message||t?.error||t?.toString()||`Account creation failed`,status:Status.error})}),this.awaitingResponse=!1}else Z$2({text:`Passwords do not match.`,status:Status.error}),this.awaitingResponse=!1}}}),__name(_sfc_render$9,`_sfc_render`),Tn=F$3(wn,[[`render`,_sfc_render$9]]),En=defineComponent({name:`RequestPasswordReset`,emits:[`cancel`,`success`],data(){return{email:``,emailError:!1,emailHint:``,isSubmitting:!1,requestSent:!1}},methods:{validateEmail(){this.emailError=!1,this.emailHint=``,this.email&&(/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(this.email)||(this.emailError=!0,this.emailHint=`Please enter a valid email address`))},async handleSubmit(){if(this.validateEmail(),!(this.emailError||!this.email)){this.isSubmitting=!0;try{let t=typeof window<`u`?window.location.origin:void 0,c=await requestPasswordReset(this.email,t);c.ok?(this.requestSent=!0,this.$emit(`success`,this.email)):Z$2({text:c.error||`Failed to send reset email`,status:Status.error})}catch{Z$2({text:`An unexpected error occurred`,status:Status.error})}finally{this.isSubmitting=!1}}}}}),Dn={key:1,class:`text-center`},__name(_sfc_render$8,`_sfc_render`),On=F$3(En,[[`render`,_sfc_render$8]]),kn={key:0},An={key:`login-buttons`},jn={key:`user-chip`},Mn=F$3(defineComponent({__name:`UserLoginAndRegistrationContainer`,props:{showLoginButton:{type:Boolean},redirectToPath:{},showRegistration:{type:Boolean},onSignupSuccess:{type:Function}},emits:[`signup-success`],setup(t,{emit:c}){let u=t,d=c,m=useRoute(),g=useAuthStore(),b=useAuthUI();onMounted(async()=>{await b.detectSyncStrategy()});let S=computed(()=>{if(!m.name||typeof m.name!=`string`)return!0;let t=m.name.toLowerCase();return!(t===`login`||t===`signup`)}),C=computed(()=>g.onLoadComplete),w=computed(()=>g._user?g._user.getUsername().startsWith(GuestUsername):!g.loginAndRegistration.loggedIn),T=computed(()=>({...b.config.value||{showLoginRegistration:!0,showLogout:!0,showResetData:!1,logoutLabel:`Log out`,resetLabel:``},...u.showRegistration!==void 0&&{showLoginRegistration:u.showRegistration}})),E=computed({get:()=>g.loginAndRegistration.regDialogOpen,set:t=>{g.loginAndRegistration.regDialogOpen=t}}),D=computed({get:()=>g.loginAndRegistration.loginDialogOpen,set:t=>{g.loginAndRegistration.loginDialogOpen=t}}),O=ref(!1),toggle=()=>{if(E.value&&D.value)throw Error(`Registration / Login dialogs both activated.`);if(E.value===D.value)throw Error(`Registration / Login dialogs toggled while both were dormant.`);E.value=!E.value,D.value=!D.value},openResetDialog=()=>{D.value=!1,O.value=!0},closeResetDialog=()=>{O.value=!1},handleSignupSuccess=t=>{E.value=!1,u.onSignupSuccess&&u.onSignupSuccess(t),d(`signup-success`,t)};return(t,c)=>{let u=resolveComponent(`v-btn`),d=resolveComponent(`v-dialog`);return C.value&&S.value?(openBlock(),createElementBlock(`div`,kn,[createVNode(Transition,{name:`component-fade`,mode:`out-in`},{default:withCtx(()=>[w.value?(openBlock(),createElementBlock(`div`,An,[T.value.showLoginRegistration?(openBlock(),createBlock(d,{key:0,modelValue:E.value,"onUpdate:modelValue":c[0]||(c[0]=t=>E.value=t),width:`500px`},{activator:withCtx(({props:t})=>[createVNode(u,mergeProps({class:`mr-2`,size:`small`,color:`success`},t),{default:withCtx(()=>c[3]||(c[3]=[createTextVNode(`Sign Up`)])),_:2},1040)]),default:withCtx(()=>[createVNode(Tn,{onToggle:toggle,onSignupSuccess:handleSignupSuccess,"on-signup-success":handleSignupSuccess})]),_:1},8,[`modelValue`])):createCommentVNode(``,!0),createVNode(d,{modelValue:D.value,"onUpdate:modelValue":c[1]||(c[1]=t=>D.value=t),width:`500px`},{activator:withCtx(({props:t})=>[createVNode(u,mergeProps({size:`small`,color:`success`},t),{default:withCtx(()=>c[4]||(c[4]=[createTextVNode(`Log In`)])),_:2},1040)]),default:withCtx(()=>[createVNode(Cn,{onToggle:toggle,onForgotPassword:openResetDialog})]),_:1},8,[`modelValue`]),createVNode(d,{modelValue:O.value,"onUpdate:modelValue":c[2]||(c[2]=t=>O.value=t),width:`500px`},{default:withCtx(()=>[createVNode(On,{onCancel:closeResetDialog,onSuccess:closeResetDialog})]),_:1},8,[`modelValue`])])):(openBlock(),createElementBlock(`div`,jn,[createVNode(bn)]))]),_:1})])):createCommentVNode(``,!0)}}}),[[`__scopeId`,`data-v-5a55bdf0`]]),Nn=defineComponent({name:`VerifyEmail`,emits:[`verified`,`error`],props:{token:{type:String,default:null}},data(){return{isVerifying:!1,verificationStatus:null,errorMessage:``,username:``}},async mounted(){await this.performVerification()},methods:{async performVerification(){let t=this.token||this.getTokenFromURL();if(!t){this.verificationStatus=`error`,this.errorMessage=`No verification token provided`;return}this.isVerifying=!0;try{let c=await verifyEmail(t);c.ok?(this.verificationStatus=`success`,this.username=c.username||``,Z$2({text:`Email verified successfully!`,status:Status.ok})):(this.verificationStatus=`error`,this.errorMessage=c.error||`Verification failed`,Z$2({text:c.error||`Verification failed`,status:Status.error}))}catch{this.verificationStatus=`error`,this.errorMessage=`An unexpected error occurred`,Z$2({text:`An unexpected error occurred`,status:Status.error})}finally{this.isVerifying=!1}},getTokenFromURL(){return typeof window>`u`?null:new URLSearchParams(window.location.search).get(`token`)}}}),Pn={key:0,class:`text-center`},Fn={key:1,class:`text-center`},In={key:0},Ln={key:2,class:`text-center`},Rn={key:3,class:`text-center`},__name(_sfc_render$7,`_sfc_render`),zn=F$3(Nn,[[`render`,_sfc_render$7]]),Bn=defineComponent({name:`ResetPassword`,emits:[`complete`,`error`],props:{token:{type:String,default:null}},data(){return{password:``,confirmPassword:``,passwordVisible:!1,confirmPasswordError:!1,confirmPasswordHint:``,isSubmitting:!1,isComplete:!1}},computed:{canSubmit(){return this.password.length>=4&&this.confirmPassword.length>=4&&this.password===this.confirmPassword&&!this.confirmPasswordError}},methods:{validateConfirmPassword(){this.confirmPasswordError=!1,this.confirmPasswordHint=``,this.confirmPassword&&this.password!==this.confirmPassword&&(this.confirmPasswordError=!0,this.confirmPasswordHint=`Passwords do not match`)},async handleSubmit(){if(this.validateConfirmPassword(),!this.canSubmit)return;let t=this.token||this.getTokenFromURL();if(!t){Z$2({text:`No reset token provided. Please use the link from your email.`,status:Status.error}),this.$emit(`error`,`No token`);return}this.isSubmitting=!0;try{let c=await resetPassword(t,this.password);c.ok?(this.isComplete=!0,Z$2({text:`Password reset successfully!`,status:Status.ok})):(Z$2({text:c.error||`Failed to reset password`,status:Status.error}),this.$emit(`error`,c.error))}catch{Z$2({text:`An unexpected error occurred`,status:Status.error}),this.$emit(`error`,`Unexpected error`)}finally{this.isSubmitting=!1}},getTokenFromURL(){return typeof window>`u`?null:new URLSearchParams(window.location.search).get(`token`)}}}),Vn={key:1,class:`text-center`},__name(_sfc_render$6,`_sfc_render`),Hn=F$3(Bn,[[`render`,_sfc_render$6]]),Un=defineComponent({name:`SkTagsInput`,components:{VueTagsInput:$$3},props:{courseID:{type:String,required:!0,default:``},cardID:{type:String,required:!1,default:``},hideSubmit:{type:Boolean,required:!1,default:!1}},data(){return{loading:!0,tag:``,tags:[],initialTags:[],availableCourseTags:[],separators:[`;`,`,`,` `],courseDB:null}},computed:{autoCompleteSuggestions(){return this.availableCourseTags.filter(t=>t.name.toLowerCase().indexOf(this.tag.toLowerCase())!==-1).map(t=>({text:t.name,data:{snippet:t.snippet}}))}},watch:{async cardID(){await this.getAppliedTags()},async courseID(){this.courseDB=getDataLayer().getCourseDB(this.courseID),await this.updateAvailableCourseTags()}},async created(){this.courseDB=getDataLayer().getCourseDB(this.courseID),await this.updateAvailableCourseTags(),await this.getAppliedTags()},methods:{tagsChanged(t){console.log(`[TagsInput] Tags changing: ${JSON.stringify(t)}`),this.tags=t},async getAppliedTags(){this.initialTags=[],this.tags=[];try{(await this.courseDB.getAppliedTags(this.cardID)).rows.forEach(t=>{console.log(`[TagsInput] The following tag is applied:
|
|
472
|
-
\t${JSON.stringify(t)}`),this.tags.push({text:t.value.name,style:``,classes:``})}),this.initialTags=this.tags.map(t=>t.text)}catch(t){console.error(`Error in init-getAppliedTags: ${JSON.stringify(t)}, ${t}`)}finally{this.loading=!1}},async updateAvailableCourseTags(){try{this.availableCourseTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc)}catch(t){console.error(`Error in init-availableCourseTags: ${JSON.stringify(t)}`)}},async submit(){console.log(`[TagsInput] tagsInput is submitting...`),this.loading=!0;try{await Promise.all(this.tags.map(async t=>{if(!this.initialTags.includes(t.text))try{await this.courseDB.addTagToCard(this.cardID,t.text),console.log(`[TagsInput] Successfully added tag: ${t.text}`)}catch(c){console.error(`Failed to add tag ${t.text}:`,c)}}))}catch(t){console.error(`Exception adding tags: ${JSON.stringify(t)}`)}try{await Promise.all(this.initialTags.map(async t=>{if(this.tags.filter(c=>c.text===t).length===0)try{await this.courseDB.removeTagFromCard(this.cardID,t),console.log(`[TagsInput] Successfully removed tag: ${t}`)}catch(c){console.error(`Failed to remove tag ${t}:`,c)}}))}catch(t){console.error(`Exception removing tags: ${JSON.stringify(t)}`)}this.loading=!1}}}),Wn={"data-cy":`tags-input`},Gn={class:`tag-name`},Kn={key:0,class:`tag-snippet`},__name(_sfc_render$5,`_sfc_render`),qn=F$3(Un,[[`render`,_sfc_render$5],[`__scopeId`,`data-v-f7373dc0`]]),Jn=defineComponent({name:`CourseCardBrowser`,components:{CardLoader:yn,TagsInput:qn,PaginatingToolbar:Ue$1},props:{courseId:{type:String,required:!0},tagId:{type:String,required:!1,default:``},viewLookupFunction:{type:Function,required:!0,default:()=>(console.warn(`No viewLookupFunction provided to CourseCardBrowser`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,page:1,pages:[],cards:[],cardData:{},cardPreview:{},cardElos:{},cardTags:{},internalEditMode:`none`,delBtn:!1,updatePending:!0,userIsRegistered:!1,questionCount:0,tags:[],viewLookup:this.viewLookupFunction}},async created(){try{this.courseDB=getDataLayer().getCourseDB(this.courseId),this.tagId?this.questionCount=(await this.courseDB.getTag(this.tagId)).taggedCards.length:this.questionCount=(await this.courseDB.getCourseInfo()).cardCount;for(let t=1;(t-1)*25<this.questionCount;t++)this.pages.push(t);await this.populateTableData()}catch(t){console.error(`Error initializing CourseCardBrowser:`,t)}finally{this.updatePending=!1}},methods:{idQualify(t){return t.includes(`-`)?t:`${this.courseId}-${t}`},idToQualifiedObject(t){if(t.includes(`-`)){let c=t.split(`-`);return{courseID:c[0],cardID:c[1]}}else return{courseID:this.courseId,cardID:t}},first(){this.page=1,this.populateTableData()},prev(){this.page--,this.populateTableData()},next(){this.page++,this.populateTableData()},last(){this.page=this.pages.length,this.populateTableData()},setPage(t){this.page=t,this.populateTableData()},async loadCardTags(t){try{await Promise.all(t.map(async t=>{let c=await this.courseDB.getAppliedTags(t);this.cardTags[t]=c.rows.map(t=>({name:t.value.name,snippet:t.value.snippet,count:t.value.count}))}))}catch(t){console.error(`Error loading card tags:`,t)}},clearSelections(t=``){this.cards.forEach(c=>{c.card.cardID!==t&&(c.isOpen=!1)}),this.internalEditMode=`none`,this.delBtn=!1},async deleteCard(t){console.log(`Deleting card ${t}`);let c=await this.courseDB.removeCard(t);c.ok?(this.cards=this.cards.filter(c=>c.card.cardID!=t),this.clearSelections()):(console.error(`Failed to delete card:\n\n${JSON.stringify(c)}`),Z$2({text:`Failed to delete card`,status:Status.error}))},async populateTableData(){this.updatePending=!0,this.tagId?this.cards=(await this.courseDB.getTag(this.tagId)).taggedCards.map(t=>({card:{cardID:t,courseID:this.courseId},isOpen:!1,delBtn:!1})):this.cards=(await this.courseDB.getCardsByELO(0,25)).map(t=>({card:t,isOpen:!1,delBtn:!1}));let t=[],c=(await this.courseDB.getCourseDocs(this.cards.map(t=>t.card.cardID),{include_docs:!0})).rows.filter(t=>t.doc?!0:(console.error(`Card ${t.id}.doc not found.\ncard: ${JSON.stringify(t)}`),!1)).map(t=>t.doc);this.cards=this.cards.filter(c=>!t.includes(c.card.cardID)),c.forEach(t=>{t&&t.id_displayable_data&&(this.cardData[t._id]=t.id_displayable_data)});try{await Promise.all(this.cards.map(async t=>{let u=t.card.cardID,d=c.find(t=>t._id==u);if(!d||!d.id_displayable_data){console.error(`No valid data found for card ${u}`);return}let m=this.viewLookupFunction(d.id_view||`default.question.BlanksCard.FillInView`),g=d.id_displayable_data.map(t=>this.courseDB.getCourseDoc(t,{attachments:!1,binary:!0})),b=await Promise.all(g);await Promise.all(b.map(c=>{[].unshift(displayableDataToViewData(c)),this.cardPreview[t.card.cardID]=m.name?m.name:`Unknown`}))}));let t=this.cards.map(t=>t.card.cardID),u=await this.courseDB.getCardEloData(t);t.forEach((t,c)=>{this.cardElos[t]=u[c]}),await this.loadCardTags(t)}catch(t){console.error(`Error populating table data:`,t)}finally{this.updatePending=!1,this.$forceUpdate()}}}}),Yn={key:0,class:`d-flex justify-center align-center pa-6`},Xn={key:1},Zn={key:0,class:`px-4 py-2 bg-blue-grey-lighten-5`},Qn={key:0,class:`mt-4`},$n={class:`mt-4`},er={key:0,class:`ml-4`},__name$2(_sfc_render$4$1,`_sfc_render$4`),__name(_sfc_render$4$1,`_sfc_render`),tr=F$3(Jn,[[`render`,_sfc_render$4$1],[`__scopeId`,`data-v-5ecc9d21`]]),nr=defineComponent({name:`CourseInformation`,components:{CourseCardBrowser:tr},props:{courseId:{type:String,required:!0},viewLookupFunction:{type:Function,required:!1,default:t=>(console.warn(`No viewLookupFunction provided to CourseInformation`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,nameRules:[t=>t.length>30?`Course name must be 30 characters or less`:!0],updatePending:!0,courseConfig:{},userIsRegistered:!1,tags:[],user:null}},computed:{},async created(){this.courseDB=getDataLayer().getCourseDB(this.courseId),this.user=await getCurrentUser();let t=await this.user.getCourseRegistrationsDoc();this.user.getUsername()===`admin`?this.userIsRegistered=!0:this.userIsRegistered=t.courses.filter(t=>t.courseID===this.courseId&&(t.status===`active`||t.status===void 0)).length===1,this.courseConfig=await this.courseDB.getCourseConfig(),this.tags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc),this.updatePending=!1},methods:{async register(){log$2(`Registering for ${this.courseId}`),(await this.user.registerForCourse(this.courseId)).ok&&(this.userIsRegistered=!0)},async drop(){log$2(`Dropping course ${this.courseId}`),(await this.user.dropCourse(this.courseId)).ok&&(this.userIsRegistered=!1)}}}),rr={key:0},ir={class:`text-h4 mb-2`},ar={class:`text-body-2`},or={key:0},sr={key:1},__name$2(_sfc_render$3$2,`_sfc_render$3`),__name(_sfc_render$3$2,`_sfc_render`),cr=F$3(nr,[[`render`,_sfc_render$3$2],[`__scopeId`,`data-v-38e9efe1`]]),lr=defineComponent({name:`CardBrowser`,components:{CardViewer:Q$1},props:{views:{type:Array,required:!0},data:{type:Array,required:!0},suppressSpinner:{type:Boolean,default:!1}},data(){return{viewIndex:0,previewMode:useCardPreviewModeStore()}},computed:{spinner(){return this.views.length>1}},created(){console.log(`[CardBrowser] Card browser created. Cards now in 'prewviewMode'`),this.previewMode.setPreviewMode(!0)},unmounted(){console.log(`[CardBrowser] Card browser unmounted. Cards no longer in 'prewviewMode'`),this.previewMode.setPreviewMode(!1)},methods:{incrementView(){this.viewIndex++,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length},decrementView(){this.viewIndex--,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length}}}),ur={key:0,class:`text-subtitle-1 pa-2`},__name$2(_sfc_render$2$2,`_sfc_render$2`),__name(_sfc_render$2$2,`_sfc_render`),dr=F$3(lr,[[`render`,_sfc_render$2$2]]),fr=defineComponent({name:`CourseTagFilterWidget`,props:{courseId:{type:String,required:!0},modelValue:{type:Object,default:void 0}},emits:[`update:modelValue`],setup(t,{emit:c}){let u=ref(!0),d=ref([]),m=ref({}),g=ref(t.modelValue?{...t.modelValue}:emptyTagFilter()),b=computed(()=>d.value.filter(t=>!g.value.include.includes(t))),S=computed(()=>hasActiveFilter(g.value)),fuzzyFilter=(t,c)=>{if(!c)return!0;let u=c.toLowerCase(),d=t.toLowerCase(),m=0;for(let t=0;t<d.length&&m<u.length;t++)d[t]===u[m]&&m++;return m===u.length};watch(()=>t.modelValue,t=>{t?g.value={...t}:g.value=emptyTagFilter()},{deep:!0}),watch(g,t=>{c(`update:modelValue`,{...t})},{deep:!0}),watch(()=>t.courseId,async t=>{t&&await loadTags()});async function loadTags(){u.value=!0;try{let c=await getDataLayer().getCourseDB(t.courseId).getCourseTagStubs();d.value=[],m.value={};for(let t of c.rows)if(t.doc){let c=t.doc;d.value.push(c.name),c.snippet&&(m.value[c.name]=c.snippet)}d.value.sort((t,c)=>t.localeCompare(c))}catch(t){console.error(`[CourseTagFilterWidget] Failed to load tags:`,t),d.value=[],m.value={}}finally{u.value=!1}}return onMounted(()=>{t.courseId&&loadTags()}),{loading:u,availableTags:d,availableTagsForExclude:b,tagSnippets:m,localFilter:g,hasActiveFilter:S,fuzzyFilter}}}),pr={class:`course-tag-filter-widget`},mr={key:0,class:`filter-summary text-caption mt-2`},hr={key:0},gr={key:1},_r={key:2},__name$2(_sfc_render$1$5,`_sfc_render$1`),__name(_sfc_render$1$5,`_sfc_render`),vr=F$3(fr,[[`render`,_sfc_render$1$5],[`__scopeId`,`data-v-e1ba963b`]]),$$2={min:0,startingMax:2,absoluteMax:10},yr=`UserTagPreferenceFilter`,br=defineComponent({name:`UserTagPreferences`,props:{courseId:{type:String,required:!1,default:``},sliderConfig:{type:Object,required:!1,default:()=>({})}},emits:[`preferences-saved`,`preferences-changed`],data(){return{loading:!0,saving:!1,saveError:``,saveSuccess:!1,preferences:{boost:{}},savedPreferences:{boost:{}},tagMaxRanges:{},availableTags:[],tagToAdd:null,courseDB:null,user:null}},computed:{sliderConfigResolved(){return{min:this.sliderConfig.min??$$2.min,startingMax:this.sliderConfig.startingMax??$$2.startingMax,absoluteMax:this.sliderConfig.absoluteMax??$$2.absoluteMax}},tagNames(){return Object.keys(this.preferences.boost).sort()},globalSliderMax(){let t=Object.values(this.tagMaxRanges);return t.length===0?this.sliderConfigResolved.startingMax:Math.max(...t)},availableTagsToAdd(){let t=new Set(Object.keys(this.preferences.boost));return this.availableTags.filter(c=>!t.has(c.name))},hasChanges(){let t=Object.keys(this.preferences.boost).sort(),c=Object.keys(this.savedPreferences.boost).sort();return t.length!==c.length||t.join(`,`)!==c.join(`,`)?!0:t.some(t=>this.preferences.boost[t]!==this.savedPreferences.boost[t])}},watch:{courseId:{immediate:!0,async handler(t){t?await this.loadPreferences():this.loading=!1}}},methods:{async loadPreferences(){this.loading=!0,this.saveError=``;try{if(this.user=await getCurrentUser()??null,!this.user)throw Error(`User not available`);this.courseDB=getDataLayer().getCourseDB(this.courseId),this.availableTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc).filter(Boolean);let t=await this.user.getStrategyState(this.courseId,yr);t?this.preferences.boost={...t.boost}:this.preferences.boost={},this.savedPreferences.boost={...this.preferences.boost},this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let c=this.preferences.boost[t],u=this.sliderConfigResolved.startingMax;c>u?this.tagMaxRanges[t]=Math.min(Math.ceil(c),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=u})}catch(t){console.error(`Failed to load preferences:`,t),this.saveError=`Failed to load preferences. Please try again.`}finally{this.loading=!1}},addTag(t){t&&!(t in this.preferences.boost)&&(this.preferences.boost[t]=1,this.tagMaxRanges[t]=this.sliderConfigResolved.startingMax,this.$emit(`preferences-changed`,this.preferences)),this.$nextTick(()=>{this.tagToAdd=null})},removeTag(t){delete this.preferences.boost[t],delete this.tagMaxRanges[t],this.$emit(`preferences-changed`,this.preferences)},updateBoost(t,c){this.preferences.boost[t]=c,this.$emit(`preferences-changed`,this.preferences)},expandSliderRange(t){let c=this.globalSliderMax;if(c<this.sliderConfigResolved.absoluteMax){let u=c+1;Object.keys(this.tagMaxRanges).forEach(t=>{this.tagMaxRanges[t]=Math.max(this.tagMaxRanges[t],u)}),this.preferences.boost[t]=u,this.$emit(`preferences-changed`,this.preferences)}},formatMultiplier(t){return t===0?`0x`:t<.1?t.toFixed(2)+`x`:t.toFixed(1)+`x`},resetToSaved(){this.preferences.boost={...this.savedPreferences.boost},this.saveSuccess=!1,this.saveError=``,this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let c=this.preferences.boost[t],u=this.sliderConfigResolved.startingMax;c>u?this.tagMaxRanges[t]=Math.min(Math.ceil(c),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=u})},async savePreferences(){if(!this.user||!this.courseId){this.saveError=`Unable to save - user or course not available`;return}this.saving=!0,this.saveError=``,this.saveSuccess=!1;try{let t={boost:{...this.preferences.boost},updatedAt:new Date().toISOString()};await this.user.putStrategyState(this.courseId,yr,t),this.savedPreferences.boost={...this.preferences.boost},this.saveSuccess=!0,this.$emit(`preferences-saved`,t)}catch(t){console.error(`Failed to save preferences:`,t),this.saveError=`Failed to save preferences. Please try again.`}finally{this.saving=!1}}}}),xr={key:1},Sr={class:`mb-6`},Cr={class:`text-subtitle-1 font-weight-bold mb-2`},wr={class:`d-flex align-center ga-3 w-100`},Tr={class:`text-body-2 flex-shrink-0`,style:{"min-width":`60px`,"text-align":`right`}},Er={key:2,class:`d-flex justify-center py-8`},__name$2(_sfc_render$27,`_sfc_render`),Dr=F$3(br,[[`render`,_sfc_render$27],[`__scopeId`,`data-v-8fb14605`]])}));function randomInt(t,c){return Math.floor(Math.random()*(c-t+1))+t}function shuffle(t){let c=[...t];for(let t=c.length-1;t>0;t--){let u=Math.floor(Math.random()*(t+1));[c[t],c[u]]=[c[u],c[t]]}return c}function gradeSpellingAttempt(t,c){let u=Array(c.length).fill(`_`),d=t.split(``);console.log(t,c),console.log(`Attempt char codes:`,t.split(``).map(t=>t.charCodeAt(0))),console.log(`Answer char codes:`,c.split(``).map(t=>t.charCodeAt(0)));for(let t=0;t<c.length;t++)t<d.length&&d[t]===c[t]&&(u[t]=d[t],d[t]=``);for(let t=c.length-1;t>=0;t--)if(u[t]===`_`){let m=d.findIndex(u=>u===c[t]);m!==-1&&(u[t]=c[t],d[m]=``)}return console.log(u.join(` `)),u.join(` `)}function _sfc_render$4(t,c,u,d,m,g){let b=resolveComponent(`audio-auto-player`),S=resolveComponent(`markdown-renderer`),C=resolveComponent(`radio-multiple-choice`),w=resolveComponent(`v-spacer`),T=resolveComponent(`v-btn`),E=resolveComponent(`v-card-actions`);return openBlock(),createElementBlock(`div`,j$1,[t.hasAudio?(openBlock(),createBlock(b,{key:0,src:t.audioURL},null,8,[`src`])):createCommentVNode(``,!0),t.hasImage?(openBlock(!0),createElementBlock(Fragment,{key:1},renderList(t.imageURLs,(t,c)=>(openBlock(),createElementBlock(`img`,{key:c,src:t},null,8,M$1))),128)):createCommentVNode(``,!0),t.markdownText?(openBlock(),createBlock(S,{key:2,md:t.markdownText},null,8,[`md`])):createCommentVNode(``,!0),t.question?.options?(openBlock(),createBlock(C,{key:3,"choice-list":t.truncatedOptions},null,8,[`choice-list`])):t.priorAttempts==1?(openBlock(),createElementBlock(`div`,N$1,[createBaseVNode(`span`,null,toDisplayString(t.obscuredAnswer),1)])):t.priorAttempts==2?(openBlock(),createElementBlock(`div`,P$1,[createBaseVNode(`span`,null,toDisplayString(t.someAnswer),1)])):createCommentVNode(``,!0),t.isQuestion?createCommentVNode(``,!0):(openBlock(),createBlock(E,{key:6},{default:withCtx(()=>[createVNode(w),createVNode(T,{color:`primary`,autofocus:`autofocus`,onClick:t.handleNext},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(` Next `)])),_:1},8,[`onClick`])]),_:1}))])}function splitText(t,c,u){let d=t.split(c),m=d[0],g=d[1].split(u);return{left:m,middle:g[0],right:g[1]}}var _BlanksCard,k,A,j$1,M$1,N$1,P$1,F$1,I$1,CourseWare,init_CourseWare_BTFRjgBR=__esmMin((()=>{init_shapes_BQUVJdp5(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_defineProperty(),k=defineComponent({name:`FillInView`,components:{MarkdownRenderer:defineAsyncComponent(()=>Promise.resolve().then(()=>(init_common_ui_es(),common_ui_es_exports)).then(t=>t.MarkdownRenderer)),RadioMultipleChoice:fn,AudioAutoPlayer:ut$2},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`FillInView`),d=useQuestionView(u);d.question.value=new I$1(t.data);let m=ref(),g=computed(()=>{if(!d.question.value)throw u.logger.error(`Question not initialized`),Error(`Question not initialized`);return d.question.value});onMounted(()=>{try{d.question.value||(d.question.value=new I$1(t.data)),d.question.value.options&&(m.value=shuffle(getTruncatedList()))}catch(t){u.logger.error(`Failed to initialize question:`,t)}}),onUnmounted(()=>{d.question.value=void 0});let b=computed(()=>m.value??[]),S=computed(()=>!!t.data[0][`image-1`]),C=computed(()=>{if(!S.value)return[``];let c=[],u=1;for(;t.data[0][`image-${u}`];)c.push(URL.createObjectURL(t.data[0][`image-${u}`])),u++;return c}),w=computed(()=>!!t.data[0][`audio-1`]),T=computed(()=>g.value?.mdText||``),E=computed(()=>{if(!w.value)return[``];let c=[],u=1;for(;t.data[0][`audio-${u}`];)c.push(URL.createObjectURL(t.data[0][`audio-${u}`])),u++;return c}),D=computed(()=>{if(g.value.answers)return g.value.answers[Math.floor(g.value.answers.length*Math.random())];throw Error(`No answers provided`)}),O=computed(()=>{let t=D.value;if(console.log(`Prior answers: ${d.priorAnswers.value}`),t&&d.priorAnswers.value[0]?.[0]&&d.priorAnswers.value[0][1]===`UserInputString`)return gradeSpellingAttempt(d.priorAnswers.value[0][0],t);if(console.log(`found no UserInputString`),D.value){let t=``;for(let c=0;c<D.value.length;c++)t+=`_ `;return t}return``}),Or=computed(()=>!!(g.value.answers&&g.value.answers.length>0)),getTruncatedList=()=>{if(!g.value?.options)return;if(g.value.options.length<=6)return g.value.options;let c=[];c.push(g.value.answers[Math.floor(Math.random()*g.value.answers.length)]);let u=shuffle(g.value.options.filter(t=>g.value.answers?.indexOf(t)===-1));return t.modifyDifficulty&&(console.log(`Modifying difficulty: ${t.modifyDifficulty}`),u=t.modifyDifficulty<-200?u.slice(0,1):t.modifyDifficulty<-150?u.slice(0,2):t.modifyDifficulty<-100?u.slice(0,3):t.modifyDifficulty<-50?u.slice(0,4):u.slice(0,5)),c.push(...u.slice(0,5)),c},handleNext=()=>{d.submitAnswer(``)};return watch(()=>t.data,t=>{try{d.question.value=new I$1(t),d.question.value?.options&&(m.value=shuffle(getTruncatedList()))}catch(t){u.logger.error(`Failed to initialize/update question:`,t)}},{deep:!0}),{...u,...d,question:g,truncatedOptions:b,hasImage:S,imageURLs:C,hasAudio:w,audioURL:E,obscuredAnswer:O,someAnswer:D,isQuestion:Or,handleNext,markdownText:T}}}),A=__name$1((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`default`),j$1={"data-viewable":`FillInView`},M$1=[`src`],N$1={key:4,class:`text-center text-h6`},P$1={key:5,class:`text-center text-h6`},__name$2(_sfc_render$4,`_sfc_render`),F$1=A(k,[[`render`,_sfc_render$4],[`__scopeId`,`data-v-f91502f8`]]),I$1=(_BlanksCard=class BlanksCard extends Question{splitTextToken(t){if(containsComponent(t)){let c=splitText(t.text,`{{`,`}}`),u=splitText(t.raw,`{{`,`}}`),d=[];return u.left.length>0&&d.push({type:`text`,raw:u.left,text:c.left}),u.middle.length>0&&d.push({type:`text`,raw:`{{`+u.middle+`}}`,text:`{{`+c.middle+`}}`}),u.right.length>0&&d.push({type:`text`,raw:u.right,text:c.right}),d}else return[t]}optionsFromString(t){if(!t.startsWith(`{{`)||!t.endsWith(`}}`))throw Error(`string ${t} is not fill-in text - must look like "{{someText}}"`);t=t.substring(2,t.length-2);let c=t.split(`||`);if(c.length>1){let t=c[0].split(`|`).map(t=>t.trim()),u=c[1].split(`|`).map(t=>t.trim()).filter(c=>!t.includes(c));return u.push(t[randomInt(0,t.length-1)]),{answers:t,options:shuffle(u)}}else return{answers:[t.trim()],options:null}}constructor(t){var _super=(...t)=>(super(...t),_defineProperty$2(this,`mdText`,``),_defineProperty$2(this,`answers`,null),_defineProperty$2(this,`options`,null),this);_super(t),this.mdText=t[0].Input,this.mdText===void 0&&(this.mdText=``);let c=splitByDelimiters(this.mdText,`{{`,`}}`),u=[];for(let t=0;t<c.length;t++){let d=c[t],m=d.trim();if(m.startsWith(`{{`)&&m.endsWith(`}}`))if(isInlineComponent(m.slice(2,-2).trim()))u.push(d);else try{let t=this.optionsFromString(d);this.answers=t.answers,this.options=t.options,this.options?.length?u.push(`{{ || }}`):u.push(`{{ }}`)}catch{u.push(d)}else u.push(d)}this.mdText=u.join(``)}isCorrect(t){if(console.log(`answers:${this.answers}\nuser answer: ${JSON.stringify(t)}`),typeof t==`string`){if(this.answers)return this.answers.includes(t);if(t===``)return!0;throw Error(`Question has no configured answers!`)}else if(Array.isArray(t)){if(this.answers)return t.every(t=>this.answers.includes(t));throw Error(`Question has no configured answers!`)}else return this.isCorrectRadio(t)}dataShapes(){return BlanksCard.dataShapes}views(){return BlanksCard.views}isCorrectRadio(t){return this.answers?this.answers.includes(t.choiceList[t.selection]):!1}},_defineProperty$2(_BlanksCard,`dataShapes`,l),_defineProperty$2(_BlanksCard,`views`,[F$1]),_BlanksCard),CourseWare=class{get questions(){return this.questionList}get allViews(){let t=[];return this.questionList.forEach(c=>{c.views.forEach(c=>{t.push(c)})}),t}get allViewsMap(){let t={};return this.allViews.forEach(c=>{if(c.name)t[c.name]=c;else throw Error(`View has no name`)}),t}constructor(t,c){_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`questionList`,void 0),this.name=t,this.questionList=c,this.questionList=this.questionList.concat(this.getBaseQTypes())}getQuestion(t){let c=t.replace(/^_/,``).replace(/\d+$/,``),u=this.questionList.map(t=>t.name),d=this.questionList.find(u=>{let d=u.name.replace(/^_/,``).replace(/\d+$/,``);return u.name===t||d===c});if(d)return d.name!==t&&console.debug(`[CourseWare.getQuestion] stripped-exact: "${t}" → "${d.name}" (registered: ${u.join(`, `)})`),d;let m=this.questionList.filter(u=>{let d=u.name.replace(/^_/,``).replace(/\d+$/,``);return u.name.includes(c)||t.includes(d)});if(m.length===0){console.warn(`[CourseWare.getQuestion] NO MATCH: "${t}" (base: "${c}") not found in [${u.join(`, `)}]`);return}m.sort((c,u)=>Math.abs(c.name.length-t.length)-Math.abs(u.name.length-t.length));let g=m[0];return console.warn(`[CourseWare.getQuestion] FUZZY: "${t}" → "${g.name}" (candidates: ${m.map(t=>t.name).join(`, `)}; registered: ${u.join(`, `)})`),g}getBaseQTypes(){return[I$1]}}}));function isNamed(t){return!!(typeof t==`object`&&t&&typeof t.name==`string`)}function isPitch(t){return!!(typeof t==`object`&&t&&typeof t.step==`number`&&typeof t.alt==`number`)}function encode(t){let{step:c,alt:u,oct:d,dir:m=1}=t,g=j[c]+7*u;if(d===void 0)return[m*g];let b=d-ne$1[c]-4*u;return[m*g,m*b]}function decode(t){let[c,u,d]=t,m=re$1[unaltered(c)],g=Math.floor((c+1)/7);return u===void 0?{step:m,alt:g,dir:d}:{step:m,alt:g,oct:u+4*g+ne$1[m],dir:d}}function unaltered(t){let c=(t+1)%7;return c<0?7+c:c}function note(t){let c=M.get(t);if(c)return c;let u=typeof t==`string`?parse$1(t):isPitch(t)?note(pitchName(t)):isNamed(t)?note(t.name):ie$1;return M.set(t,u),u}function tokenizeNote(t){let c=ae$1.exec(t);return[c[1].toUpperCase(),c[2].replace(/x/g,`##`),c[3],c[4]]}function coordToNote(t){return note(decode(t))}function parse$1(t){let c=tokenizeNote(t);if(c[0]===``||c[3]!==``)return ie$1;let u=c[0],d=c[1],m=c[2],g=(u.charCodeAt(0)+3)%7,b=accToAlt(d),S=m.length?+m:void 0,C=encode({step:g,alt:b,oct:S}),w=u+d+m,T=u+d,E=(N[g]+b+120)%12,D=S===void 0?mod(N[g]+b,12)-1188:N[g]+b+12*(S+1),O=D>=0&&D<=127?D:null;return{empty:!1,acc:d,alt:b,chroma:E,coord:C,freq:S===void 0?null:2**((D-69)/12)*440,height:D,letter:u,midi:O,name:w,oct:S,pc:T,step:g}}function pitchName(t){let{step:c,alt:u,oct:d}=t,m=stepToLetter(c);if(!m)return``;let g=m+altToAcc(u);return d||d===0?g+d:g}function tokenizeInterval(t){let c=oe$1.exec(`${t}`);return c===null?[``,``]:c[1]?[c[1],c[2]]:[c[4],c[3]]}function interval(t){return typeof t==`string`?F[t]||(F[t]=parse$1$1(t)):isPitch(t)?interval(pitchName$1(t)):isNamed(t)?interval(t.name):P}function parse$1$1(t){let c=tokenizeInterval(t);if(c[0]===``)return P;let u=+c[0],d=c[1],m=(Math.abs(u)-1)%7,g=L[m];if(g===`M`&&d===`P`)return P;let b=g===`M`?`majorable`:`perfectable`,S=``+u+d,C=u<0?-1:1,w=u===8||u===-8?u:C*(m+1),T=qToAlt(b,d),E=Math.floor((Math.abs(u)-1)/7);return{empty:!1,name:S,num:u,q:d,step:m,alt:T,dir:C,type:b,simple:w,semitones:C*(I[m]+T+12*E),chroma:(C*(I[m]+T)%12+12)%12,coord:encode({step:m,alt:T,oct:E,dir:C}),oct:E}}function coordToInterval(t){let[c,u=0]=t;return interval(decode(c*7+u*12<0?[-c,-u,-1]:[c,u,1]))}function qToAlt(t,c){return c===`M`&&t===`majorable`||c===`P`&&t===`perfectable`?0:c===`m`&&t===`majorable`?-1:/^A+$/.test(c)?c.length:/^d+$/.test(c)?-1*(t===`perfectable`?c.length:c.length+1):0}function pitchName$1(t){let{step:c,alt:u,oct:d=0,dir:m}=t;if(!m)return``;let g=c+1+7*d,b=m<0?`-`:``,S=L[c]===`M`?`majorable`:`perfectable`;return b+g+altToQ(S,u)}function altToQ(t,c){return c===0?t===`majorable`?`M`:`P`:c===-1&&t===`majorable`?`m`:c>0?fillStr(`A`,c):fillStr(`d`,t===`perfectable`?c:c+1)}function transpose$2(t,c){let u=note(t),d=interval(c);if(u.empty||d.empty)return``;let m=u.coord,g=d.coord;return coordToNote(m.length===1?[m[0]+g[0]]:[m[0]+g[0],m[1]+g[1]]).name}function distance$1(t,c){let u=note(t),d=note(c);if(u.empty||d.empty)return``;let m=u.coord,g=d.coord,b=g[0]-m[0];return coordToInterval([b,m.length===2&&g.length===2?g[1]-m[1]:-Math.floor(b*7/12)]).name}function rotate(t,c){let u=c.length,d=(t%u+u)%u;return c.slice(d,u).concat(c.slice(0,d))}function isChroma(t){return se$1.test(t)}function get$8(t){let c=isChroma(t)?t:isPcsetNum(t)?setNumToChroma(t):Array.isArray(t)?listToChroma(t):isPcset(t)?t.chroma:R.chroma;return z[c]=z[c]||chromaToPcset(c)}function chromaToIntervals(t){let c=[];for(let u=0;u<12;u++)t.charAt(u)===`1`&&c.push(ce$1[u]);return c}function chromaRotations(t){let c=t.split(``);return c.map((t,u)=>rotate(u,c).join(``))}function chromaToPcset(t){let c=chromaToNumber(t),u=chromaRotations(t).map(chromaToNumber).filter(t=>t>=2048).sort()[0];return{empty:!1,name:``,setNum:c,chroma:t,normalized:setNumToChroma(u),intervals:chromaToIntervals(t)}}function listToChroma(t){if(t.length===0)return R.chroma;let c,u=[0,0,0,0,0,0,0,0,0,0,0,0];for(let d=0;d<t.length;d++)c=note(t[d]),c.empty&&(c=interval(t[d])),c.empty||(u[c.chroma]=1);return u.join(``)}function get$7(t){return V[t]||ue}function all$2(){return B.slice()}function add$3(t,c,u){let d=getQuality(t),m={...get$8(t),name:u||``,quality:d,intervals:t,aliases:c};B.push(m),m.name&&(V[m.name]=m),V[m.setNum]=m,V[m.chroma]=m,m.aliases.forEach(t=>addAlias$1(m,t))}function addAlias$1(t,c){V[c]=t}function getQuality(t){let has=c=>t.indexOf(c)!==-1;return has(`5A`)?`Augmented`:has(`3M`)?`Major`:has(`5d`)?`Diminished`:has(`3m`)?`Minor`:`Unknown`}function get$6(t){return U$1[t]||fe}function all$1(){return H.slice()}function add$2(t,c,u=[]){let d={...get$8(t),name:c,intervals:t,aliases:u};return H.push(d),U$1[d.name]=d,U$1[d.setNum]=d,U$1[d.chroma]=d,d.aliases.forEach(t=>addAlias(d,t)),d}function addAlias(t,c){U$1[c]=t}function tokenize$2(t){let[c,u,d,m]=tokenizeNote(t);return c===``?[``,t]:c===`A`&&m===`ug`?[``,`aug`]:!m&&(d===`4`||d===`5`)?[c+u,d]:pe$1.test(d)?[c+u,d+m]:[c+u+d,m]}function get$5(t){if(t===``)return W$1;if(Array.isArray(t)&&t.length===2)return getChord(t[1],t[0]);{let[c,u]=tokenize$2(t),d=getChord(u,c);return d.empty?getChord(t):d}}function getChord(t,c,u){let d=get$7(t),m=note(c||``),g=note(u||``);if(d.empty||c&&m.empty||u&&g.empty)return W$1;let b=distance$1(m.pc,g.pc),S=d.intervals.indexOf(b)+1;if(!g.empty&&!S)return W$1;let C=Array.from(d.intervals);for(let t=1;t<S;t++){let t=C[0][0],c=C[0][1],u=parseInt(t,10)+7;C.push(`${u}${c}`),C.shift()}let w=m.empty?[]:C.map(t=>transpose$2(m,t));t=d.aliases.indexOf(t)===-1?d.aliases[0]:t;let T=`${m.empty?``:m.pc}${t}${g.empty||S<=1?``:`/`+g.pc}`,E=`${c?m.pc+` `:``}${d.name}${S>1&&u?` over `+g.pc:``}`;return{...d,name:E,symbol:T,type:d.name,root:g.name,intervals:C,rootDegree:S,tonic:m.name,notes:w}}function add$1(t,c,u){he.push({empty:!1,dots:``,name:``,value:1/t,fraction:t<1?[1/t,1]:[1,t],shorthand:c,names:u})}function names$1(){return`1P 2M 3M 4P 5P 6m 7m`.split(` `)}function simplify$1(t){let c=interval(t);return c.empty?``:c.simple+c.q}function invert(t){let c=interval(t);return c.empty?``:interval({step:(7-c.step)%7,alt:c.type===`perfectable`?-c.alt:-(c.alt+1),oct:c.oct,dir:c.dir}).name}function fromSemitones(t){let c=t<0?-1:1,u=Math.abs(t),d=u%12,m=Math.floor(u/12);return c*(ve[d]+7*m)+ye[d]}function combinator(t){return(c,u)=>{let d=interval(c).coord,m=interval(u).coord;if(d&&m)return coordToInterval(t(d,m)).name}}function freqToMidi(t){let c=12*(Math.log(t)-we)/Ce+69;return Math.round(c*100)/100}function midiToNoteName(t,c={}){if(isNaN(t)||t===-1/0||t===1/0)return``;t=Math.round(t);let u=(c.sharps===!0?Te:Ee)[t%12];return c.pitchClass?u:u+(Math.floor(t/12)-1)}function names(t){return t===void 0?De.slice():Array.isArray(t)?onlyNotes(t).map(toName):[]}function fromMidi(t){return midiToNoteName(t)}function fromFreq(t){return midiToNoteName(freqToMidi(t))}function fromFreqSharps(t){return midiToNoteName(freqToMidi(t),{sharps:!0})}function fromMidiSharps(t){return midiToNoteName(t,{sharps:!0})}function transposeFifths(t,c){let u=G$1(t);if(u.empty)return``;let[d,m]=u.coord;return coordToNote(m===void 0?[d+c]:[d+c,m]).name}function sortedNames(t,c){return c||(c=ascending),onlyNotes(t).sort(c).map(toName)}function sortedUniqNames(t){return sortedNames(t,ascending).filter((t,c,u)=>c===0||t!==u[c-1])}function nameBuilder(t){return c=>{let u=G$1(c);if(u.empty)return``;let d=t?u.alt>0:u.alt<0,m=u.midi===null;return midiToNoteName(u.midi||u.chroma,{sharps:d,pitchClass:m})}}function get$2(t){return typeof t==`string`?Fe[t]||(Fe[t]=parse(t)):typeof t==`number`?get$2(J$1[t]||``):isPitch(t)?fromPitch(t):isNamed(t)?get$2(t.name):Pe}function fromPitch(t){return get$2(altToAcc(t.alt)+J$1[t.step])}function tokenize$1(t){return Ie.exec(t)||[``,``,``,``]}function parse(t){let[c,u,d,m]=tokenize$1(t);if(!d)return Pe;let g=d.toUpperCase(),b=J$1.indexOf(g),S=accToAlt(u);return{empty:!1,name:c,roman:d,interval:interval({step:b,alt:S,dir:1}).name,acc:u,chordType:m,alt:S,step:b,major:d===g,oct:0,dir:1}}function get$1(t){return typeof t==`string`?Y$1[t.toLowerCase()]||ze:t&&t.name?get$1(t.name):ze}function toMode(t){let[c,u,d,m,g,b,S]=t,C=S?[S]:[],w=Number(u).toString(2);return{empty:!1,intervals:chromaToIntervals(w),modeNum:c,chroma:w,normalized:w,name:m,setNum:u,alt:d,triad:g,seventh:b,aliases:C}}function eventsToSyllableSequence(t){let c=[];t=t.filter(t=>t.type===`noteon`).sort((t,c)=>t.timestamp-c.timestamp);for(let u=10;u>0;u--)for(let d=0;d<t.length-u+1;d++)try{c.push(new X$1(t.slice(d,d+u))),t.splice(d,u),d=-1}catch{}return new He(c)}function _sfc_render$3(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,null,[(openBlock(),createElementBlock(`svg`,{width:510,height:Math.max(3*(t.high-t.low)+10,0)},[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.seq.syllables,c=>(openBlock(),createElementBlock(Fragment,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(c.notes,u=>(openBlock(),createElementBlock(`circle`,{key:c.timestamp+`-`+u.note.number,cx:(c.timestamp-t.firstTS)*500/(t.lastTS-t.firstTS)+4,cy:3*(t.high-u.note.number)+4,alt:u.note.name,r:`3`,fill:u.isCorrect?`black`:u.isMissing?`none`:`red`,stroke:u.isMissing?`red`:`none`,onMouseenter:c=>t.sayNote(u)},null,40,Ge))),128))],64))),256))],8,We))])}function _sfc_render$2(t,c,u,d,m,g){let b=resolveComponent(`sodipodi:namedview`),S=resolveComponent(`dc:format`),C=resolveComponent(`dc:type`),w=resolveComponent(`dc:title`),T=resolveComponent(`cc:Work`),E=resolveComponent(`rdf:RDF`);return openBlock(),createElementBlock(`svg`,Je,[c[1]||(c[1]=createBaseVNode(`defs`,{id:`defs2`},null,-1)),createVNode(b,{id:`base`,"inkscape:window-maximized":`1`,"inkscape:window-y":`726`,"inkscape:window-x":`1491`,"inkscape:window-height":`1321`,"inkscape:window-width":`2400`,showborder:`false`,showgrid:`false`,"inkscape:document-rotation":`0`,"inkscape:current-layer":`layer1`,"inkscape:document-units":`mm`,"inkscape:cy":`255.88343`,"inkscape:cx":`754.94284`,"inkscape:zoom":`0.98994949`,"inkscape:pageshadow":`2`,"inkscape:pageopacity":`0.0`,borderopacity:`1.0`,bordercolor:`#666666`,pagecolor:`#ffffff`}),createBaseVNode(`metadata`,Ye,[createVNode(E,null,{default:withCtx(()=>[createVNode(T,{"rdf:about":``},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`image/svg+xml`)])),_:1}),createVNode(C,{"rdf:resource":`http://purl.org/dc/dcmitype/StillImage`}),createVNode(w)]),_:1})]),_:1})]),createBaseVNode(`g`,Xe,[createBaseVNode(`rect`,{id:`rect845`,y:`152.19064`,x:`-150.12129`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(0))},null,4),createBaseVNode(`rect`,{id:`rect845-9`,style:normalizeStyle(t.style(2)),width:`17.486626`,height:`73.220116`,x:`-132.63466`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-6`,style:normalizeStyle(t.style(4)),width:`17.486626`,height:`73.220116`,x:`-115.14803`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-4`,style:normalizeStyle(t.style(5)),width:`17.486626`,height:`73.220116`,x:`-97.661407`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-92`,style:normalizeStyle(t.style(7)),width:`17.486626`,height:`73.220116`,x:`-80.174782`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-3`,style:normalizeStyle(t.style(9)),width:`17.486626`,height:`73.220116`,x:`-62.688156`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-0`,style:normalizeStyle(t.style(11)),width:`17.486626`,height:`73.220116`,x:`-45.20153`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-30`,style:normalizeStyle(t.style(t.white)),width:`17.486626`,height:`73.220116`,x:`-27.714905`,y:`152.10745`},null,4),createBaseVNode(`rect`,{id:`rect898`,ry:`0`,y:`152.10744`,x:`-138.43532`,height:`54.415863`,width:`10.466455`,style:normalizeStyle(t.style(1))},null,4),createBaseVNode(`rect`,{id:`rect898-3`,style:normalizeStyle(t.style(3)),width:`10.466455`,height:`54.415863`,x:`-120.84978`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-7`,style:normalizeStyle(t.style(6)),width:`10.466455`,height:`54.415863`,x:`-85.678711`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-8`,style:normalizeStyle(t.style(8)),width:`10.466455`,height:`54.415863`,x:`-68.09317`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-1`,style:normalizeStyle(t.style(10)),width:`10.466455`,height:`54.415863`,x:`-50.507633`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect845-30-1`,y:`152.10745`,x:`-10.228278`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(t.white))},null,4),createBaseVNode(`rect`,{id:`rect845-30-9`,y:`152.10744`,x:`-167.60791`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(t.white))},null,4),createBaseVNode(`rect`,{id:`rect898-4`,style:normalizeStyle(t.style(t.black)),width:`10.466455`,height:`54.415863`,x:`-15.336554`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-74`,style:normalizeStyle(t.style(t.black)),width:`4.4679713`,height:`54.415863`,x:`-167.60791`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-10`,style:normalizeStyle(t.style(t.black)),width:`5.1863246`,height:`54.507248`,x:`2.2092075`,y:`152.06175`,ry:`0`},null,4)])])}function _sfc_render$1$1(t,c,u,d,m,g){let b=resolveComponent(`note-display`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-btn`),w=resolveComponent(`syllable-seq-vis`);return t.initialized?(openBlock(),createElementBlock(`div`,Qe,[t.state===`ready`?(openBlock(),createElementBlock(`div`,$e,[createBaseVNode(`div`,et,[createTextVNode(toDisplayString(t.promptText)+` `,1),createVNode(b,{chroma:t.firstNoteChroma},null,8,[`chroma`])]),createBaseVNode(`div`,tt,[c[0]||(c[0]=createTextVNode(`Listen...`)),t.recording?(openBlock(),createElementBlock(`span`,nt,` and Repeat`)):createCommentVNode(``,!0)]),createBaseVNode(`div`,rt,[createBaseVNode(`div`,it,null,512)]),createVNode(C,{color:`primary`,autofocus:``,onClick:t.clearAttempt},{default:withCtx(()=>[c[2]||(c[2]=createTextVNode(` Play again `)),createVNode(S,{end:``},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`volume_up`)])),_:1})]),_:1},8,[`onClick`]),(openBlock(),createBlock(w,{key:0,ref:`inputVisRef`,seq:t.inputSeq,"last-t-ssuggestion":t.lastTSsuggestion},null,8,[`seq`,`last-t-ssuggestion`])),t.graded?(openBlock(),createBlock(w,{key:1,seq:t.gradedSeq},null,8,[`seq`])):createCommentVNode(``,!0)])):t.state===`nodevice`?(openBlock(),createElementBlock(`div`,at,`No midi device detected. Please attach one!`)):t.state===`notsupported`?(openBlock(),createElementBlock(`div`,ot,c[3]||(c[3]=[createBaseVNode(`p`,null,`This exercise requires a midi input device, which is not supported by this browser ☹`,-1),createBaseVNode(`div`,null,[createBaseVNode(`p`,null,`Please try again with one of the following browsers:`),createBaseVNode(`ul`,null,[createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)]))):createCommentVNode(``,!0)])):createCommentVNode(``,!0)}function _sfc_render(t,c,u,d,m,g){let b=resolveComponent(`sodipodi:namedview`),S=resolveComponent(`dc:format`),C=resolveComponent(`dc:type`),w=resolveComponent(`dc:title`),T=resolveComponent(`cc:Work`),E=resolveComponent(`rdf:RDF`);return openBlock(),createElementBlock(`div`,ut,[createBaseVNode(`div`,dt,[c[0]||(c[0]=createTextVNode(` Play the note: `)),createBaseVNode(`span`,ft,toDisplayString(t.note),1)]),t.graded?(openBlock(),createElementBlock(`svg`,pt,[c[2]||(c[2]=createBaseVNode(`defs`,{id:`defs2`},null,-1)),createVNode(b,{id:`base`,"inkscape:window-maximized":`1`,"inkscape:window-y":`726`,"inkscape:window-x":`1491`,"inkscape:window-height":`1321`,"inkscape:window-width":`2400`,showborder:`false`,showgrid:`false`,"inkscape:document-rotation":`0`,"inkscape:current-layer":`layer1`,"inkscape:document-units":`mm`,"inkscape:cy":`255.88343`,"inkscape:cx":`754.94284`,"inkscape:zoom":`0.98994949`,"inkscape:pageshadow":`2`,"inkscape:pageopacity":`0.0`,borderopacity:`1.0`,bordercolor:`#666666`,pagecolor:`#ffffff`}),createBaseVNode(`metadata`,mt,[createVNode(E,null,{default:withCtx(()=>[createVNode(T,{"rdf:about":``},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`image/svg+xml`)])),_:1}),createVNode(C,{"rdf:resource":`http://purl.org/dc/dcmitype/StillImage`}),createVNode(w)]),_:1})]),_:1})]),c[3]||(c[3]=createBaseVNode(`g`,{id:`layer1`,transform:`translate(167.75219,-151.96011)`,"inkscape:groupmode":`layer`,"inkscape:label":`Layer 1`},[createBaseVNode(`rect`,{id:`rect845`,y:`152.19064`,x:`-150.12129`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect845-9`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-132.63466`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-6`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-115.14803`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-0`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-45.20153`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-92`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-80.174782`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-3`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-62.688156`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-4`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-97.661407`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-30`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-27.714905`,y:`152.10745`}),createBaseVNode(`rect`,{id:`rect898`,ry:`0`,y:`152.10744`,x:`-138.43532`,height:`54.415863`,width:`10.466455`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect898-3`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-120.84978`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-7`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-85.678711`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-8`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-68.09317`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-1`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-50.507633`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect845-30-1`,y:`152.10745`,x:`-10.228278`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect845-30-9`,y:`152.10744`,x:`-167.60791`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect898-4`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-15.336554`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-74`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`4.4679713`,height:`54.415863`,x:`-167.60791`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-10`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`5.1863246`,height:`54.507248`,x:`2.2092075`,y:`152.06175`,ry:`0`})],-1))])):createCommentVNode(``,!0)])}var _SkMidi,_EchoQuestion,_PlayNote,te,fillStr,j,ne$1,re$1,ie$1,M,stepToLetter,altToAcc,accToAlt,ae$1,mod,N,P,oe$1,F,I,L,R,setNumToChroma,chromaToNumber,se$1,isPcsetNum,isPcset,z,ce$1,le$1,ue,B,V,de,fe,H,U$1,W$1,pe$1,me,he,ge,_e,semitones,quality,num,ve,ye,be,xe,addTo,Se,Ce,we,Te,Ee,De,toName,onlyNotes,G$1,name,pitchClass,accidentals,octave,midi,freq,chroma,K$1,Oe,transposeBy,ke,transposeFrom,Ae,je,ascending,descending,Me,Ne,q$1,Pe,Fe,Ie,Le,J$1,Re,ze,Be,Y$1,Ve,He,X$1,Z$1,Ue,We,Ge,Ke,qe,Je,Ye,Xe,Ze,Qe,$e,et,tt,nt,rt,it,at,ot,st,ct,Q,lt,ut,dt,ft,pt,mt,ht,gt,$$1,vt,init_piano_DF1g6yaX=__esmMin((()=>{init_shapes_BQUVJdp5(),init_CourseWare_BTFRjgBR(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_moment(),init_defineProperty(),te=__commonJSMin$1(((t,c)=>{(function(t){function WebMidi(){if(WebMidi.prototype._singleton)throw Error(`WebMidi is a singleton, it cannot be instantiated directly.`);(WebMidi.prototype._singleton=this)._inputs=[],this._outputs=[],this._userHandlers={},this._stateChangeQueue=[],this._processingStateChange=!1,this._midiInterfaceEvents=[`connected`,`disconnected`],this._nrpnBuffer=[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],this._nrpnEventsEnabled=!0,this._nrpnTypes=[`entry`,`increment`,`decrement`],this._notes=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],this._semitones={C:0,D:2,E:4,F:5,G:7,A:9,B:11},Object.defineProperties(this,{MIDI_SYSTEM_MESSAGES:{value:{sysex:240,timecode:241,songposition:242,songselect:243,tuningrequest:246,sysexend:247,clock:248,start:250,continue:251,stop:252,activesensing:254,reset:255,midimessage:0,unknownsystemmessage:-1},writable:!1,enumerable:!0,configurable:!1},MIDI_CHANNEL_MESSAGES:{value:{noteoff:8,noteon:9,keyaftertouch:10,controlchange:11,channelmode:11,nrpn:11,programchange:12,channelaftertouch:13,pitchbend:14},writable:!1,enumerable:!0,configurable:!1},MIDI_REGISTERED_PARAMETER:{value:{pitchbendrange:[0,0],channelfinetuning:[0,1],channelcoarsetuning:[0,2],tuningprogram:[0,3],tuningbank:[0,4],modulationrange:[0,5],azimuthangle:[61,0],elevationangle:[61,1],gain:[61,2],distanceratio:[61,3],maximumdistance:[61,4],maximumdistancegain:[61,5],referencedistanceratio:[61,6],panspreadangle:[61,7],rollangle:[61,8]},writable:!1,enumerable:!0,configurable:!1},MIDI_CONTROL_CHANGE_MESSAGES:{value:{bankselectcoarse:0,modulationwheelcoarse:1,breathcontrollercoarse:2,footcontrollercoarse:4,portamentotimecoarse:5,dataentrycoarse:6,volumecoarse:7,balancecoarse:8,pancoarse:10,expressioncoarse:11,effectcontrol1coarse:12,effectcontrol2coarse:13,generalpurposeslider1:16,generalpurposeslider2:17,generalpurposeslider3:18,generalpurposeslider4:19,bankselectfine:32,modulationwheelfine:33,breathcontrollerfine:34,footcontrollerfine:36,portamentotimefine:37,dataentryfine:38,volumefine:39,balancefine:40,panfine:42,expressionfine:43,effectcontrol1fine:44,effectcontrol2fine:45,holdpedal:64,portamento:65,sustenutopedal:66,softpedal:67,legatopedal:68,hold2pedal:69,soundvariation:70,resonance:71,soundreleasetime:72,soundattacktime:73,brightness:74,soundcontrol6:75,soundcontrol7:76,soundcontrol8:77,soundcontrol9:78,soundcontrol10:79,generalpurposebutton1:80,generalpurposebutton2:81,generalpurposebutton3:82,generalpurposebutton4:83,reverblevel:91,tremololevel:92,choruslevel:93,celestelevel:94,phaserlevel:95,databuttonincrement:96,databuttondecrement:97,nonregisteredparametercoarse:98,nonregisteredparameterfine:99,registeredparametercoarse:100,registeredparameterfine:101},writable:!1,enumerable:!0,configurable:!1},MIDI_NRPN_MESSAGES:{value:{entrymsb:6,entrylsb:38,increment:96,decrement:97,paramlsb:98,parammsb:99,nullactiveparameter:127},writable:!1,enumerable:!0,configurable:!1},MIDI_CHANNEL_MODE_MESSAGES:{value:{allsoundoff:120,resetallcontrollers:121,localcontrol:122,allnotesoff:123,omnimodeoff:124,omnimodeon:125,monomodeon:126,polymodeon:127},writable:!1,enumerable:!0,configurable:!1},octaveOffset:{value:0,writable:!0,enumerable:!0,configurable:!1}}),Object.defineProperties(this,{supported:{enumerable:!0,get:function(){return`requestMIDIAccess`in navigator}},enabled:{enumerable:!0,get:function(){return this.interface!==void 0}.bind(this)},inputs:{enumerable:!0,get:function(){return this._inputs}.bind(this)},outputs:{enumerable:!0,get:function(){return this._outputs}.bind(this)},sysexEnabled:{enumerable:!0,get:function(){return!(!this.interface||!this.interface.sysexEnabled)}.bind(this)},nrpnEventsEnabled:{enumerable:!0,get:function(){return!!this._nrpnEventsEnabled}.bind(this),set:function(t){return this._nrpnEventsEnabled=t,this._nrpnEventsEnabled}},nrpnTypes:{enumerable:!0,get:function(){return this._nrpnTypes}.bind(this)},time:{enumerable:!0,get:function(){return performance.now()}}})}var u=new WebMidi;function Input(t){var c=this;this._userHandlers={channel:{},system:{}},this._midiInput=t,Object.defineProperties(this,{connection:{enumerable:!0,get:function(){return c._midiInput.connection}},id:{enumerable:!0,get:function(){return c._midiInput.id}},manufacturer:{enumerable:!0,get:function(){return c._midiInput.manufacturer}},name:{enumerable:!0,get:function(){return c._midiInput.name}},state:{enumerable:!0,get:function(){return c._midiInput.state}},type:{enumerable:!0,get:function(){return c._midiInput.type}}}),this._initializeUserHandlers(),this._midiInput.onmidimessage=this._onMidiMessage.bind(this)}function Output(t){var c=this;this._midiOutput=t,Object.defineProperties(this,{connection:{enumerable:!0,get:function(){return c._midiOutput.connection}},id:{enumerable:!0,get:function(){return c._midiOutput.id}},manufacturer:{enumerable:!0,get:function(){return c._midiOutput.manufacturer}},name:{enumerable:!0,get:function(){return c._midiOutput.name}},state:{enumerable:!0,get:function(){return c._midiOutput.state}},type:{enumerable:!0,get:function(){return c._midiOutput.type}}})}WebMidi.prototype.enable=function(t,c){this.enabled||(this.supported?navigator.requestMIDIAccess({sysex:c}).then(function(c){var u,d=[],m=[];this.interface=c,this._resetInterfaceUserHandlers(),this.interface.onstatechange=function(t){d.push(t)};for(var g=c.inputs.values(),b=g.next();b&&!b.done;b=g.next())m.push(b.value.open());for(var S=c.outputs.values(),C=S.next();C&&!C.done;C=S.next())m.push(C.value.open());function onPortsOpen(){clearTimeout(u),this._updateInputsAndOutputs(),this.interface.onstatechange=this._onInterfaceStateChange.bind(this),typeof t==`function`&&t.call(this),d.forEach(function(t){this._onInterfaceStateChange(t)}.bind(this))}u=setTimeout(onPortsOpen.bind(this),200),Promise&&Promise.all(m).catch(function(t){}).then(onPortsOpen.bind(this))}.bind(this),function(c){typeof t==`function`&&t.call(this,c)}.bind(this)):typeof t==`function`&&t(Error(`The Web MIDI API is not supported by your browser.`)))},WebMidi.prototype.disable=function(){if(!this.supported)throw Error(`The Web MIDI API is not supported by your browser.`);this.enabled&&(this.removeListener(),this.inputs.forEach(function(t){t.removeListener()})),this.interface&&(this.interface.onstatechange=void 0),this.interface=void 0,this._inputs=[],this._outputs=[],this._nrpnEventsEnabled=!0,this._resetInterfaceUserHandlers()},WebMidi.prototype.addListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before adding event listeners.`);if(typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(!(0<=this._midiInterfaceEvents.indexOf(t)))throw TypeError(`The specified event type is not supported.`);return this._userHandlers[t].push(c),this},WebMidi.prototype.hasListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before checking event listeners.`);if(typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(!(0<=this._midiInterfaceEvents.indexOf(t)))throw TypeError(`The specified event type is not supported.`);for(var u=0;u<this._userHandlers[t].length;u++)if(this._userHandlers[t][u]===c)return!0;return!1},WebMidi.prototype.removeListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before removing event listeners.`);if(c!==void 0&&typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(0<=this._midiInterfaceEvents.indexOf(t))if(c)for(var u=0;u<this._userHandlers[t].length;u++)this._userHandlers[t][u]===c&&this._userHandlers[t].splice(u,1);else this._userHandlers[t]=[];else{if(t!==void 0)throw TypeError(`The specified event type is not supported.`);this._resetInterfaceUserHandlers()}return this},WebMidi.prototype.toMIDIChannels=function(t){var c;if(t===`all`||t===void 0)c=[`all`];else{if(t===`none`)return c=[];c=Array.isArray(t)?t:[t]}return-1<c.indexOf(`all`)&&(c=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),c.map(function(t){return parseInt(t)}).filter(function(t){return 1<=t&&t<=16})},WebMidi.prototype.getInputById=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);t=String(t);for(var c=0;c<this.inputs.length;c++)if(this.inputs[c].id===t)return this.inputs[c];return!1},WebMidi.prototype.getOutputById=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);t=String(t);for(var c=0;c<this.outputs.length;c++)if(this.outputs[c].id===t)return this.outputs[c];return!1},WebMidi.prototype.getInputByName=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);for(var c=0;c<this.inputs.length;c++)if(~this.inputs[c].name.indexOf(t))return this.inputs[c];return!1},WebMidi.prototype.getOctave=function(t){if(t!=null&&0<=t&&t<=127)return Math.floor(Math.floor(t)/12-1)+Math.floor(u.octaveOffset)},WebMidi.prototype.getOutputByName=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);for(var c=0;c<this.outputs.length;c++)if(~this.outputs[c].name.indexOf(t))return this.outputs[c];return!1},WebMidi.prototype.guessNoteNumber=function(t){var c=!1;if(t&&t.toFixed&&0<=t&&t<=127?c=Math.round(t):0<=parseInt(t)&&parseInt(t)<=127?c=parseInt(t):(typeof t==`string`||t instanceof String)&&(c=this.noteNameToNumber(t)),!1===c)throw Error(`Invalid input value (`+t+`).`);return c},WebMidi.prototype.noteNameToNumber=function(t){typeof t!=`string`&&(t=``);var c=t.match(/([CDEFGAB])(#{0,2}|b{0,2})(-?\d+)/i);if(!c)throw RangeError(`Invalid note name.`);var d=u._semitones[c[1].toUpperCase()],m=12*(parseInt(c[3])+1-Math.floor(u.octaveOffset))+d;if(-1<c[2].toLowerCase().indexOf(`b`)?m-=c[2].length:-1<c[2].toLowerCase().indexOf(`#`)&&(m+=c[2].length),m<0||127<m)throw RangeError(`Invalid note name or note outside valid range.`);return m},WebMidi.prototype._updateInputsAndOutputs=function(){this._updateInputs(),this._updateOutputs()},WebMidi.prototype._updateInputs=function(){for(var t=0;t<this._inputs.length;t++){for(var c=!0,u=this.interface.inputs.values(),d=u.next();d&&!d.done;d=u.next())if(this._inputs[t]._midiInput===d.value){c=!1;break}c&&this._inputs.splice(t,1)}this.interface&&this.interface.inputs.forEach(function(t){for(var c=!0,u=0;u<this._inputs.length;u++)this._inputs[u]._midiInput===t&&(c=!1);c&&this._inputs.push(new Input(t))}.bind(this))},WebMidi.prototype._updateOutputs=function(){for(var t=0;t<this._outputs.length;t++){for(var c=!0,u=this.interface.outputs.values(),d=u.next();d&&!d.done;d=u.next())if(this._outputs[t]._midiOutput===d.value){c=!1;break}c&&this._outputs.splice(t,1)}this.interface&&this.interface.outputs.forEach(function(t){for(var c=!0,u=0;u<this._outputs.length;u++)this._outputs[u]._midiOutput===t&&(c=!1);c&&this._outputs.push(new Output(t))}.bind(this))},WebMidi.prototype._onInterfaceStateChange=function(t){this._updateInputsAndOutputs();var c={timestamp:t.timeStamp,type:t.port.state};this.interface&&t.port.state===`connected`?t.port.type===`output`?c.port=this.getOutputById(t.port.id):t.port.type===`input`&&(c.port=this.getInputById(t.port.id)):c.port={connection:`closed`,id:t.port.id,manufacturer:t.port.manufacturer,name:t.port.name,state:t.port.state,type:t.port.type},this._userHandlers[t.port.state].forEach(function(t){t(c)})},WebMidi.prototype._resetInterfaceUserHandlers=function(){for(var t=0;t<this._midiInterfaceEvents.length;t++)this._userHandlers[this._midiInterfaceEvents[t]]=[]},Input.prototype.on=Input.prototype.addListener=function(t,c,d){var m=this;if(c===void 0&&(c=`all`),Array.isArray(c)||(c=[c]),c.forEach(function(t){if(t!==`all`&&!(1<=t&&t<=16))throw RangeError(`The 'channel' parameter is invalid.`)}),typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(u.MIDI_SYSTEM_MESSAGES[t]!==void 0)this._userHandlers.system[t]||(this._userHandlers.system[t]=[]),this._userHandlers.system[t].push(d);else{if(u.MIDI_CHANNEL_MESSAGES[t]===void 0)throw TypeError(`The specified event type is not supported.`);if(-1<c.indexOf(`all`)){c=[];for(var g=1;g<=16;g++)c.push(g)}this._userHandlers.channel[t]||(this._userHandlers.channel[t]=[]),c.forEach(function(c){m._userHandlers.channel[t][c]||(m._userHandlers.channel[t][c]=[]),m._userHandlers.channel[t][c].push(d)})}return this},Input.prototype.hasListener=function(t,c,d){var m=this;if(typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(c===void 0&&(c=`all`),c.constructor!==Array&&(c=[c]),u.MIDI_SYSTEM_MESSAGES[t]!==void 0){for(var g=0;g<this._userHandlers.system[t].length;g++)if(this._userHandlers.system[t][g]===d)return!0}else if(u.MIDI_CHANNEL_MESSAGES[t]!==void 0){if(-1<c.indexOf(`all`)){c=[];for(var b=1;b<=16;b++)c.push(b)}return!!this._userHandlers.channel[t]&&c.every(function(c){var u=m._userHandlers.channel[t][c];return u&&-1<u.indexOf(d)})}return!1},Input.prototype.removeListener=function(t,c,d){var m=this;if(d!==void 0&&typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(c===void 0&&(c=`all`),c.constructor!==Array&&(c=[c]),u.MIDI_SYSTEM_MESSAGES[t]!==void 0)if(d===void 0)this._userHandlers.system[t]=[];else for(var g=0;g<this._userHandlers.system[t].length;g++)this._userHandlers.system[t][g]===d&&this._userHandlers.system[t].splice(g,1);else if(u.MIDI_CHANNEL_MESSAGES[t]!==void 0){if(-1<c.indexOf(`all`)){c=[];for(var b=1;b<=16;b++)c.push(b)}if(!this._userHandlers.channel[t])return this;c.forEach(function(c){var u=m._userHandlers.channel[t][c];if(u)if(d===void 0)m._userHandlers.channel[t][c]=[];else for(var g=0;g<u.length;g++)u[g]===d&&u.splice(g,1)})}else{if(t!==void 0)throw TypeError(`The specified event type is not supported.`);this._initializeUserHandlers()}return this},Input.prototype._initializeUserHandlers=function(){for(var t in u.MIDI_CHANNEL_MESSAGES)Object.prototype.hasOwnProperty.call(u.MIDI_CHANNEL_MESSAGES,t)&&(this._userHandlers.channel[t]={});for(var c in u.MIDI_SYSTEM_MESSAGES)Object.prototype.hasOwnProperty.call(u.MIDI_SYSTEM_MESSAGES,c)&&(this._userHandlers.system[c]=[])},Input.prototype._onMidiMessage=function(t){if(0<this._userHandlers.system.midimessage.length){var c={target:this,data:t.data,timestamp:t.timeStamp,type:`midimessage`};this._userHandlers.system.midimessage.forEach(function(t){t(c)})}t.data[0]<240?(this._parseChannelEvent(t),this._parseNrpnEvent(t)):t.data[0]<=255&&this._parseSystemEvent(t)},Input.prototype._parseNrpnEvent=function(t){var c,d,m=t.data[0]>>4,g=15&t.data[0],b=1+g;if(1<t.data.length&&(c=t.data[1],d=2<t.data.length?t.data[2]:void 0),u.nrpnEventsEnabled&&m===u.MIDI_CHANNEL_MESSAGES.controlchange&&(c>=u.MIDI_NRPN_MESSAGES.increment&&c<=u.MIDI_NRPN_MESSAGES.parammsb||c===u.MIDI_NRPN_MESSAGES.entrymsb||c===u.MIDI_NRPN_MESSAGES.entrylsb)){var S={target:this,type:`controlchange`,data:t.data,timestamp:t.timeStamp,channel:b,controller:{number:c,name:this.getCcNameByNumber(c)},value:d};if(S.controller.number===u.MIDI_NRPN_MESSAGES.parammsb&&S.value!=u.MIDI_NRPN_MESSAGES.nullactiveparameter)u._nrpnBuffer[g]=[],u._nrpnBuffer[g][0]=S;else if(u._nrpnBuffer[g].length===1&&S.controller.number===u.MIDI_NRPN_MESSAGES.paramlsb)u._nrpnBuffer[g].push(S);else if(u._nrpnBuffer[g].length!==2||S.controller.number!==u.MIDI_NRPN_MESSAGES.increment&&S.controller.number!==u.MIDI_NRPN_MESSAGES.decrement&&S.controller.number!==u.MIDI_NRPN_MESSAGES.entrymsb)if(u._nrpnBuffer[g].length===3&&u._nrpnBuffer[g][2].number===u.MIDI_NRPN_MESSAGES.entrymsb&&S.controller.number===u.MIDI_NRPN_MESSAGES.entrylsb)u._nrpnBuffer[g].push(S);else if(3<=u._nrpnBuffer[g].length&&u._nrpnBuffer[g].length<=4&&S.controller.number===u.MIDI_NRPN_MESSAGES.parammsb&&S.value===u.MIDI_NRPN_MESSAGES.nullactiveparameter)u._nrpnBuffer[g].push(S);else if(4<=u._nrpnBuffer[g].length&&u._nrpnBuffer[g].length<=5&&S.controller.number===u.MIDI_NRPN_MESSAGES.paramlsb&&S.value===u.MIDI_NRPN_MESSAGES.nullactiveparameter){u._nrpnBuffer[g].push(S);var C=[];u._nrpnBuffer[g].forEach(function(t){C.push(t.data)});var w=u._nrpnBuffer[g][0].value<<7|u._nrpnBuffer[g][1].value,T=u._nrpnBuffer[g][2].value;u._nrpnBuffer[g].length===6&&(T=u._nrpnBuffer[g][2].value<<7|u._nrpnBuffer[g][3].value);var E=``;switch(u._nrpnBuffer[g][2].controller.number){case u.MIDI_NRPN_MESSAGES.entrymsb:E=u._nrpnTypes[0];break;case u.MIDI_NRPN_MESSAGES.increment:E=u._nrpnTypes[1];break;case u.MIDI_NRPN_MESSAGES.decrement:E=u._nrpnTypes[2];break;default:throw Error(`The NPRN type was unidentifiable.`)}var D={timestamp:S.timestamp,channel:S.channel,type:`nrpn`,data:C,controller:{number:w,type:E,name:`Non-Registered Parameter `+w},value:T};u._nrpnBuffer[g]=[],this._userHandlers.channel[D.type]&&this._userHandlers.channel[D.type][D.channel]&&this._userHandlers.channel[D.type][D.channel].forEach(function(t){t(D)})}else u._nrpnBuffer[g]=[];else u._nrpnBuffer[g].push(S)}},Input.prototype._parseChannelEvent=function(t){var c,d,m=t.data[0]>>4,g=1+(15&t.data[0]);1<t.data.length&&(c=t.data[1],d=2<t.data.length?t.data[2]:void 0);var b={target:this,data:t.data,timestamp:t.timeStamp,channel:g};m===u.MIDI_CHANNEL_MESSAGES.noteoff||m===u.MIDI_CHANNEL_MESSAGES.noteon&&d===0?(b.type=`noteoff`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.velocity=d/127,b.rawVelocity=d):m===u.MIDI_CHANNEL_MESSAGES.noteon?(b.type=`noteon`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.velocity=d/127,b.rawVelocity=d):m===u.MIDI_CHANNEL_MESSAGES.keyaftertouch?(b.type=`keyaftertouch`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.value=d/127):m===u.MIDI_CHANNEL_MESSAGES.controlchange&&0<=c&&c<=119?(b.type=`controlchange`,b.controller={number:c,name:this.getCcNameByNumber(c)},b.value=d):m===u.MIDI_CHANNEL_MESSAGES.channelmode&&120<=c&&c<=127?(b.type=`channelmode`,b.controller={number:c,name:this.getChannelModeByNumber(c)},b.value=d):m===u.MIDI_CHANNEL_MESSAGES.programchange?(b.type=`programchange`,b.value=c):m===u.MIDI_CHANNEL_MESSAGES.channelaftertouch?(b.type=`channelaftertouch`,b.value=c/127):m===u.MIDI_CHANNEL_MESSAGES.pitchbend?(b.type=`pitchbend`,b.value=((d<<7)+c-8192)/8192):b.type=`unknownchannelmessage`,this._userHandlers.channel[b.type]&&this._userHandlers.channel[b.type][g]&&this._userHandlers.channel[b.type][g].forEach(function(t){t(b)})},Input.prototype.getCcNameByNumber=function(t){if(!(0<=(t=Math.floor(t))&&t<=119))throw RangeError(`The control change number must be between 0 and 119.`);for(var c in u.MIDI_CONTROL_CHANGE_MESSAGES)if(Object.prototype.hasOwnProperty.call(u.MIDI_CONTROL_CHANGE_MESSAGES,c)&&t===u.MIDI_CONTROL_CHANGE_MESSAGES[c])return c},Input.prototype.getChannelModeByNumber=function(t){if(!(120<=(t=Math.floor(t))&&status<=127))throw RangeError(`The control change number must be between 120 and 127.`);for(var c in u.MIDI_CHANNEL_MODE_MESSAGES)if(Object.prototype.hasOwnProperty.call(u.MIDI_CHANNEL_MODE_MESSAGES,c)&&t===u.MIDI_CHANNEL_MODE_MESSAGES[c])return c},Input.prototype._parseSystemEvent=function(t){var c=t.data[0],d={target:this,data:t.data,timestamp:t.timeStamp};c===u.MIDI_SYSTEM_MESSAGES.sysex?d.type=`sysex`:c===u.MIDI_SYSTEM_MESSAGES.timecode?d.type=`timecode`:c===u.MIDI_SYSTEM_MESSAGES.songposition?d.type=`songposition`:c===u.MIDI_SYSTEM_MESSAGES.songselect?(d.type=`songselect`,d.song=t.data[1]):c===u.MIDI_SYSTEM_MESSAGES.tuningrequest?d.type=`tuningrequest`:c===u.MIDI_SYSTEM_MESSAGES.clock?d.type=`clock`:c===u.MIDI_SYSTEM_MESSAGES.start?d.type=`start`:c===u.MIDI_SYSTEM_MESSAGES.continue?d.type=`continue`:c===u.MIDI_SYSTEM_MESSAGES.stop?d.type=`stop`:c===u.MIDI_SYSTEM_MESSAGES.activesensing?d.type=`activesensing`:c===u.MIDI_SYSTEM_MESSAGES.reset?d.type=`reset`:d.type=`unknownsystemmessage`,this._userHandlers.system[d.type]&&this._userHandlers.system[d.type].forEach(function(t){t(d)})},Output.prototype.send=function(t,c,u){if(!(128<=t&&t<=255))throw RangeError(`The status byte must be an integer between 128 (0x80) and 255 (0xFF).`);c===void 0&&(c=[]),Array.isArray(c)||(c=[c]);var d=[];return c.forEach(function(t){var c=Math.floor(t);if(!(0<=c&&c<=255))throw RangeError(`Data bytes must be integers between 0 (0x00) and 255 (0xFF).`);d.push(c)}),this._midiOutput.send([t].concat(d),parseFloat(u)||0),this},Output.prototype.sendSysex=function(t,c,d){if(!u.sysexEnabled)throw Error(`Sysex message support must first be activated.`);return d||(d={}),t=[].concat(t),c.forEach(function(t){if(t<0||127<t)throw RangeError(`The data bytes of a sysex message must be integers between 0 (0x00) and 127 (0x7F).`)}),c=t.concat(c,u.MIDI_SYSTEM_MESSAGES.sysexend),this.send(u.MIDI_SYSTEM_MESSAGES.sysex,c,this._parseTimeParameter(d.time)),this},Output.prototype.sendTimecodeQuarterFrame=function(t,c){return c||(c={}),this.send(u.MIDI_SYSTEM_MESSAGES.timecode,t,this._parseTimeParameter(c.time)),this},Output.prototype.sendSongPosition=function(t,c){c||(c={});var d=(t=Math.floor(t)||0)>>7&127,m=127&t;return this.send(u.MIDI_SYSTEM_MESSAGES.songposition,[d,m],this._parseTimeParameter(c.time)),this},Output.prototype.sendSongSelect=function(t,c){if(c||(c={}),!(0<=(t=Math.floor(t))&&t<=127))throw RangeError(`The song number must be between 0 and 127.`);return this.send(u.MIDI_SYSTEM_MESSAGES.songselect,[t],this._parseTimeParameter(c.time)),this},Output.prototype.sendTuningRequest=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.tuningrequest,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendClock=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.clock,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendStart=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.start,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendContinue=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.continue,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendStop=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.stop,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendActiveSensing=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.activesensing,[],this._parseTimeParameter(t.time)),this},Output.prototype.sendReset=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.reset,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.stopNote=function(t,c,d){if(t===`all`)return this.sendChannelMode(`allnotesoff`,0,c,d);var m=64;return(d||(d={})).rawVelocity?!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=127&&(m=d.velocity):!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=1&&(m=127*d.velocity),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteoff<<4)+(c-1),[t,Math.round(m)],this._parseTimeParameter(d.time))}.bind(this))}.bind(this)),this},Output.prototype.playNote=function(t,c,d){var m,g=64;if((d||(d={})).rawVelocity?!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=127&&(g=d.velocity):!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=1&&(g=127*d.velocity),m=this._parseTimeParameter(d.time),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteon<<4)+(c-1),[t,Math.round(g)],m)}.bind(this))}.bind(this)),!isNaN(d.duration)){d.duration<=0&&(d.duration=0);var b=64;d.rawVelocity?!isNaN(d.release)&&0<=d.release&&d.release<=127&&(b=d.release):!isNaN(d.release)&&0<=d.release&&d.release<=1&&(b=127*d.release),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteoff<<4)+(c-1),[t,Math.round(b)],(m||u.time)+d.duration)}.bind(this))}.bind(this))}return this},Output.prototype.sendKeyAftertouch=function(t,c,d,m){var g=this;if(m||(m={}),c<1||16<c)throw RangeError(`The channel must be between 1 and 16.`);(isNaN(d)||d<0||1<d)&&(d=.5);var b=Math.round(127*d);return this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){g.send((u.MIDI_CHANNEL_MESSAGES.keyaftertouch<<4)+(c-1),[t,b],g._parseTimeParameter(m.time))})}),this},Output.prototype.sendControlChange=function(t,c,d,m){if(m||(m={}),typeof t==`string`){if((t=u.MIDI_CONTROL_CHANGE_MESSAGES[t])===void 0)throw TypeError(`Invalid controller name.`)}else if(!(0<=(t=Math.floor(t))&&t<=119))throw RangeError(`Controller numbers must be between 0 and 119.`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`Controller value must be between 0 and 127.`);return u.toMIDIChannels(d).forEach(function(d){this.send((u.MIDI_CHANNEL_MESSAGES.controlchange<<4)+(d-1),[t,c],this._parseTimeParameter(m.time))}.bind(this)),this},Output.prototype._selectRegisteredParameter=function(t,c,d){var m=this;if(t[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The control65 value must be between 0 and 127`);if(t[1]=Math.floor(t[1]),!(0<=t[1]&&t[1]<=127))throw RangeError(`The control64 value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(101,t[0],c,{time:d}),m.sendControlChange(100,t[1],c,{time:d})}),this},Output.prototype._selectNonRegisteredParameter=function(t,c,d){var m=this;if(t[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The control63 value must be between 0 and 127`);if(t[1]=Math.floor(t[1]),!(0<=t[1]&&t[1]<=127))throw RangeError(`The control62 value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(99,t[0],c,{time:d}),m.sendControlChange(98,t[1],c,{time:d})}),this},Output.prototype._setCurrentRegisteredParameter=function(t,c,d){var m=this;if((t=[].concat(t))[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The msb value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(6,t[0],c,{time:d})}),t[1]=Math.floor(t[1]),0<=t[1]&&t[1]<=127&&u.toMIDIChannels(c).forEach(function(){m.sendControlChange(38,t[1],c,{time:d})}),this},Output.prototype._deselectRegisteredParameter=function(t,c){var d=this;return u.toMIDIChannels(t).forEach(function(){d.sendControlChange(101,127,t,{time:c}),d.sendControlChange(100,127,t,{time:c})}),this},Output.prototype.setRegisteredParameter=function(t,c,d,m){var g=this;if(m||(m={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw Error(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(d).forEach(function(){g._selectRegisteredParameter(t,d,m.time),g._setCurrentRegisteredParameter(c,d,m.time),g._deselectRegisteredParameter(d,m.time)}),this},Output.prototype.setNonRegisteredParameter=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=t[0]&&t[0]<=127&&0<=t[1]&&t[1]<=127))throw Error(`Position 0 and 1 of the 2-position parameter array must both be between 0 and 127.`);return c=[].concat(c),u.toMIDIChannels(d).forEach(function(){g._selectNonRegisteredParameter(t,d,m.time),g._setCurrentRegisteredParameter(c,d,m.time),g._deselectRegisteredParameter(d,m.time)}),this},Output.prototype.incrementRegisteredParameter=function(t,c,d){var m=this;if(d||(d={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw Error(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(c).forEach(function(){m._selectRegisteredParameter(t,c,d.time),m.sendControlChange(96,0,c,{time:d.time}),m._deselectRegisteredParameter(c,d.time)}),this},Output.prototype.decrementRegisteredParameter=function(t,c,d){if(d||(d={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw TypeError(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(c).forEach(function(){this._selectRegisteredParameter(t,c,d.time),this.sendControlChange(97,0,c,{time:d.time}),this._deselectRegisteredParameter(c,d.time)}.bind(this)),this},Output.prototype.setPitchBendRange=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The semitones value must be between 0 and 127`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`The cents value must be between 0 and 127`);return u.toMIDIChannels(d).forEach(function(){g.setRegisteredParameter(`pitchbendrange`,[t,c],d,{time:m.time})}),this},Output.prototype.setModulationRange=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The semitones value must be between 0 and 127`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`The cents value must be between 0 and 127`);return u.toMIDIChannels(d).forEach(function(){g.setRegisteredParameter(`modulationrange`,[t,c],d,{time:m.time})}),this},Output.prototype.setMasterTuning=function(t,c,d){var m=this;if(d||(d={}),(t=parseFloat(t)||0)<=-65||64<=t)throw RangeError(`The value must be a decimal number larger than -65 and smaller than 64.`);var g=Math.floor(t)+64,b=t-Math.floor(t),S=(b=Math.round((b+1)/2*16383))>>7&127,C=127&b;return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`channelcoarsetuning`,g,c,{time:d.time}),m.setRegisteredParameter(`channelfinetuning`,[S,C],c,{time:d.time})}),this},Output.prototype.setTuningProgram=function(t,c,d){var m=this;if(d||(d={}),!(0<=(t=Math.floor(t))&&t<=127))throw RangeError(`The program value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`tuningprogram`,t,c,{time:d.time})}),this},Output.prototype.setTuningBank=function(t,c,d){var m=this;if(d||(d={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The bank value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`tuningbank`,t,c,{time:d.time})}),this},Output.prototype.sendChannelMode=function(t,c,d,m){if(m||(m={}),typeof t==`string`){if(!(t=u.MIDI_CHANNEL_MODE_MESSAGES[t]))throw TypeError(`Invalid channel mode message name.`)}else if(!(120<=(t=Math.floor(t))&&t<=127))throw RangeError(`Channel mode numerical identifiers must be between 120 and 127.`);if((c=Math.floor(c)||0)<0||127<c)throw RangeError(`Value must be an integer between 0 and 127.`);return u.toMIDIChannels(d).forEach(function(d){this.send((u.MIDI_CHANNEL_MESSAGES.channelmode<<4)+(d-1),[t,c],this._parseTimeParameter(m.time))}.bind(this)),this},Output.prototype.sendProgramChange=function(t,c,d){var m=this;if(d||(d={}),t=Math.floor(t),isNaN(t)||t<0||127<t)throw RangeError(`Program numbers must be between 0 and 127.`);return u.toMIDIChannels(c).forEach(function(c){m.send((u.MIDI_CHANNEL_MESSAGES.programchange<<4)+(c-1),[t],m._parseTimeParameter(d.time))}),this},Output.prototype.sendChannelAftertouch=function(t,c,d){var m=this;d||(d={}),t=parseFloat(t),(isNaN(t)||t<0||1<t)&&(t=.5);var g=Math.round(127*t);return u.toMIDIChannels(c).forEach(function(t){m.send((u.MIDI_CHANNEL_MESSAGES.channelaftertouch<<4)+(t-1),[g],m._parseTimeParameter(d.time))}),this},Output.prototype.sendPitchBend=function(t,c,d){var m=this;if(d||(d={}),isNaN(t)||t<-1||1<t)throw RangeError(`Pitch bend value must be between -1 and 1.`);var g=Math.round((t+1)/2*16383),b=g>>7&127,S=127&g;return u.toMIDIChannels(c).forEach(function(t){m.send((u.MIDI_CHANNEL_MESSAGES.pitchbend<<4)+(t-1),[S,b],m._parseTimeParameter(d.time))}),this},Output.prototype._parseTimeParameter=function(t){var c,d=parseFloat(t);return typeof t==`string`&&t.substring(0,1)===`+`?d&&0<d&&(c=u.time+d):d>u.time&&(c=d),c},Output.prototype._convertNoteToArray=function(t){var c=[];return Array.isArray(t)||(t=[t]),t.forEach(function(t){c.push(u.guessNoteNumber(t))}),c},typeof define==`function`&&typeof define.amd==`object`?define([],function(){return u}):c!==void 0&&c.exports?c.exports=u:t.WebMidi||(t.WebMidi=u)})(t)})),fillStr=(t,c)=>Array(Math.abs(c)+1).join(t),j=[0,2,4,-1,1,3,5],ne$1=j.map(t=>Math.floor(t*7/12)),re$1=[3,0,4,1,5,2,6],ie$1={empty:!0,name:``,pc:``,acc:``},M=new Map,stepToLetter=t=>`CDEFGAB`.charAt(t),altToAcc=t=>t<0?fillStr(`b`,-t):fillStr(`#`,t),accToAlt=t=>t[0]===`b`?-t.length:t.length,ae$1=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/,mod=(t,c)=>(t%c+c)%c,N=[0,2,4,5,7,9,11],__name$1(parse$1,`parse`),P={empty:!0,name:``,acc:``},oe$1=RegExp(`^([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})|(AA|A|P|M|m|d|dd)([-+]?\\d+)$`),F={},I=[0,2,4,5,7,9,11],L=`PMMPPMM`,__name$1(parse$1$1,`parse$1`),__name$1(transpose$2,`transpose`),__name$1(distance$1,`distance`),R={empty:!0,name:``,setNum:0,chroma:`000000000000`,normalized:`000000000000`,intervals:[]},setNumToChroma=t=>Number(t).toString(2),chromaToNumber=t=>parseInt(t,2),se$1=/^[01]{12}$/,isPcsetNum=t=>typeof t==`number`&&t>=0&&t<=4095,isPcset=t=>t&&isChroma(t.chroma),z={[R.chroma]:R},__name$1(get$8,`get`),ce$1=[`1P`,`2m`,`2M`,`3m`,`3M`,`4P`,`5d`,`5P`,`6m`,`6M`,`7m`,`7M`],le$1=[[`1P 3M 5P`,`major`,`M ^ `],[`1P 3M 5P 7M`,`major seventh`,`maj7 Δ ma7 M7 Maj7 ^7`],[`1P 3M 5P 7M 9M`,`major ninth`,`maj9 Δ9 ^9`],[`1P 3M 5P 7M 9M 13M`,`major thirteenth`,`maj13 Maj13 ^13`],[`1P 3M 5P 6M`,`sixth`,`6 add6 add13 M6`],[`1P 3M 5P 6M 9M`,`sixth/ninth`,`6/9 69 M69`],[`1P 3M 6m 7M`,`major seventh flat sixth`,`M7b6 ^7b6`],[`1P 3M 5P 7M 11A`,`major seventh sharp eleventh`,`maj#4 Δ#4 Δ#11 M7#11 ^7#11 maj7#11`],[`1P 3m 5P`,`minor`,`m min -`],[`1P 3m 5P 7m`,`minor seventh`,`m7 min7 mi7 -7`],[`1P 3m 5P 7M`,`minor/major seventh`,`m/ma7 m/maj7 mM7 mMaj7 m/M7 -Δ7 mΔ -^7`],[`1P 3m 5P 6M`,`minor sixth`,`m6 -6`],[`1P 3m 5P 7m 9M`,`minor ninth`,`m9 -9`],[`1P 3m 5P 7M 9M`,`minor/major ninth`,`mM9 mMaj9 -^9`],[`1P 3m 5P 7m 9M 11P`,`minor eleventh`,`m11 -11`],[`1P 3m 5P 7m 9M 13M`,`minor thirteenth`,`m13 -13`],[`1P 3m 5d`,`diminished`,`dim ° o`],[`1P 3m 5d 7d`,`diminished seventh`,`dim7 °7 o7`],[`1P 3m 5d 7m`,`half-diminished`,`m7b5 ø -7b5 h7 h`],[`1P 3M 5P 7m`,`dominant seventh`,`7 dom`],[`1P 3M 5P 7m 9M`,`dominant ninth`,`9`],[`1P 3M 5P 7m 9M 13M`,`dominant thirteenth`,`13`],[`1P 3M 5P 7m 11A`,`lydian dominant seventh`,`7#11 7#4`],[`1P 3M 5P 7m 9m`,`dominant flat ninth`,`7b9`],[`1P 3M 5P 7m 9A`,`dominant sharp ninth`,`7#9`],[`1P 3M 7m 9m`,`altered`,`alt7`],[`1P 4P 5P`,`suspended fourth`,`sus4 sus`],[`1P 2M 5P`,`suspended second`,`sus2`],[`1P 4P 5P 7m`,`suspended fourth seventh`,`7sus4 7sus`],[`1P 5P 7m 9M 11P`,`eleventh`,`11`],[`1P 4P 5P 7m 9m`,`suspended fourth flat ninth`,`b9sus phryg 7b9sus 7b9sus4`],[`1P 5P`,`fifth`,`5`],[`1P 3M 5A`,`augmented`,`aug + +5 ^#5`],[`1P 3m 5A`,`minor augmented`,`m#5 -#5 m+`],[`1P 3M 5A 7M`,`augmented seventh`,`maj7#5 maj7+5 +maj7 ^7#5`],[`1P 3M 5P 7M 9M 11A`,`major sharp eleventh (lydian)`,`maj9#11 Δ9#11 ^9#11`],[`1P 2M 4P 5P`,``,`sus24 sus4add9`],[`1P 3M 5A 7M 9M`,``,`maj9#5 Maj9#5`],[`1P 3M 5A 7m`,``,`7#5 +7 7+ 7aug aug7`],[`1P 3M 5A 7m 9A`,``,`7#5#9 7#9#5 7alt`],[`1P 3M 5A 7m 9M`,``,`9#5 9+`],[`1P 3M 5A 7m 9M 11A`,``,`9#5#11`],[`1P 3M 5A 7m 9m`,``,`7#5b9 7b9#5`],[`1P 3M 5A 7m 9m 11A`,``,`7#5b9#11`],[`1P 3M 5A 9A`,``,`+add#9`],[`1P 3M 5A 9M`,``,`M#5add9 +add9`],[`1P 3M 5P 6M 11A`,``,`M6#11 M6b5 6#11 6b5`],[`1P 3M 5P 6M 7M 9M`,``,`M7add13`],[`1P 3M 5P 6M 9M 11A`,``,`69#11`],[`1P 3m 5P 6M 9M`,``,`m69 -69`],[`1P 3M 5P 6m 7m`,``,`7b6`],[`1P 3M 5P 7M 9A 11A`,``,`maj7#9#11`],[`1P 3M 5P 7M 9M 11A 13M`,``,`M13#11 maj13#11 M13+4 M13#4`],[`1P 3M 5P 7M 9m`,``,`M7b9`],[`1P 3M 5P 7m 11A 13m`,``,`7#11b13 7b5b13`],[`1P 3M 5P 7m 13M`,``,`7add6 67 7add13`],[`1P 3M 5P 7m 9A 11A`,``,`7#9#11 7b5#9 7#9b5`],[`1P 3M 5P 7m 9A 11A 13M`,``,`13#9#11`],[`1P 3M 5P 7m 9A 11A 13m`,``,`7#9#11b13`],[`1P 3M 5P 7m 9A 13M`,``,`13#9`],[`1P 3M 5P 7m 9A 13m`,``,`7#9b13`],[`1P 3M 5P 7m 9M 11A`,``,`9#11 9+4 9#4`],[`1P 3M 5P 7m 9M 11A 13M`,``,`13#11 13+4 13#4`],[`1P 3M 5P 7m 9M 11A 13m`,``,`9#11b13 9b5b13`],[`1P 3M 5P 7m 9m 11A`,``,`7b9#11 7b5b9 7b9b5`],[`1P 3M 5P 7m 9m 11A 13M`,``,`13b9#11`],[`1P 3M 5P 7m 9m 11A 13m`,``,`7b9b13#11 7b9#11b13 7b5b9b13`],[`1P 3M 5P 7m 9m 13M`,``,`13b9`],[`1P 3M 5P 7m 9m 13m`,``,`7b9b13`],[`1P 3M 5P 7m 9m 9A`,``,`7b9#9`],[`1P 3M 5P 9M`,``,`Madd9 2 add9 add2`],[`1P 3M 5P 9m`,``,`Maddb9`],[`1P 3M 5d`,``,`Mb5`],[`1P 3M 5d 6M 7m 9M`,``,`13b5`],[`1P 3M 5d 7M`,``,`M7b5`],[`1P 3M 5d 7M 9M`,``,`M9b5`],[`1P 3M 5d 7m`,``,`7b5`],[`1P 3M 5d 7m 9M`,``,`9b5`],[`1P 3M 7m`,``,`7no5`],[`1P 3M 7m 13m`,``,`7b13`],[`1P 3M 7m 9M`,``,`9no5`],[`1P 3M 7m 9M 13M`,``,`13no5`],[`1P 3M 7m 9M 13m`,``,`9b13`],[`1P 3m 4P 5P`,``,`madd4`],[`1P 3m 5P 6m 7M`,``,`mMaj7b6`],[`1P 3m 5P 6m 7M 9M`,``,`mMaj9b6`],[`1P 3m 5P 7m 11P`,``,`m7add11 m7add4`],[`1P 3m 5P 9M`,``,`madd9`],[`1P 3m 5d 6M 7M`,``,`o7M7`],[`1P 3m 5d 7M`,``,`oM7`],[`1P 3m 6m 7M`,``,`mb6M7`],[`1P 3m 6m 7m`,``,`m7#5`],[`1P 3m 6m 7m 9M`,``,`m9#5`],[`1P 3m 5A 7m 9M 11P`,``,`m11A`],[`1P 3m 6m 9m`,``,`mb6b9`],[`1P 2M 3m 5d 7m`,``,`m9b5`],[`1P 4P 5A 7M`,``,`M7#5sus4`],[`1P 4P 5A 7M 9M`,``,`M9#5sus4`],[`1P 4P 5A 7m`,``,`7#5sus4`],[`1P 4P 5P 7M`,``,`M7sus4`],[`1P 4P 5P 7M 9M`,``,`M9sus4`],[`1P 4P 5P 7m 9M`,``,`9sus4 9sus`],[`1P 4P 5P 7m 9M 13M`,``,`13sus4 13sus`],[`1P 4P 5P 7m 9m 13m`,``,`7sus4b9b13 7b9b13sus4`],[`1P 4P 7m 10m`,``,`4 quartal`],[`1P 5P 7m 9m 11P`,``,`11b9`]],ue={...R,name:``,quality:`Unknown`,intervals:[],aliases:[]},B=[],V={},__name$1(get$7,`get`),__name$1(all$2,`all`),__name$1(add$3,`add`),__name$1(addAlias$1,`addAlias`),le$1.forEach(([t,c,u])=>add$3(t.split(` `),u.split(` `),c)),B.sort((t,c)=>t.setNum-c.setNum),de=[[`1P 2M 3M 5P 6M`,`major pentatonic`,`pentatonic`],[`1P 3M 4P 5P 7M`,`ionian pentatonic`],[`1P 3M 4P 5P 7m`,`mixolydian pentatonic`,`indian`],[`1P 2M 4P 5P 6M`,`ritusen`],[`1P 2M 4P 5P 7m`,`egyptian`],[`1P 3M 4P 5d 7m`,`neopolitan major pentatonic`],[`1P 3m 4P 5P 6m`,`vietnamese 1`],[`1P 2m 3m 5P 6m`,`pelog`],[`1P 2m 4P 5P 6m`,`kumoijoshi`],[`1P 2M 3m 5P 6m`,`hirajoshi`],[`1P 2m 4P 5d 7m`,`iwato`],[`1P 2m 4P 5P 7m`,`in-sen`],[`1P 3M 4A 5P 7M`,`lydian pentatonic`,`chinese`],[`1P 3m 4P 6m 7m`,`malkos raga`],[`1P 3m 4P 5d 7m`,`locrian pentatonic`,`minor seven flat five pentatonic`],[`1P 3m 4P 5P 7m`,`minor pentatonic`,`vietnamese 2`],[`1P 3m 4P 5P 6M`,`minor six pentatonic`],[`1P 2M 3m 5P 6M`,`flat three pentatonic`,`kumoi`],[`1P 2M 3M 5P 6m`,`flat six pentatonic`],[`1P 2m 3M 5P 6M`,`scriabin`],[`1P 3M 5d 6m 7m`,`whole tone pentatonic`],[`1P 3M 4A 5A 7M`,`lydian #5P pentatonic`],[`1P 3M 4A 5P 7m`,`lydian dominant pentatonic`],[`1P 3m 4P 5P 7M`,`minor #7M pentatonic`],[`1P 3m 4d 5d 7m`,`super locrian pentatonic`],[`1P 2M 3m 4P 5P 7M`,`minor hexatonic`],[`1P 2A 3M 5P 5A 7M`,`augmented`],[`1P 2M 3m 3M 5P 6M`,`major blues`],[`1P 2M 4P 5P 6M 7m`,`piongio`],[`1P 2m 3M 4A 6M 7m`,`prometheus neopolitan`],[`1P 2M 3M 4A 6M 7m`,`prometheus`],[`1P 2m 3M 5d 6m 7m`,`mystery #1`],[`1P 2m 3M 4P 5A 6M`,`six tone symmetric`],[`1P 2M 3M 4A 5A 7m`,`whole tone`,`messiaen's mode #1`],[`1P 2m 4P 4A 5P 7M`,`messiaen's mode #5`],[`1P 3m 4P 5d 5P 7m`,`minor blues`,`blues`],[`1P 2M 3M 4P 5d 6m 7m`,`locrian major`,`arabian`],[`1P 2m 3M 4A 5P 6m 7M`,`double harmonic lydian`],[`1P 2M 3m 4P 5P 6m 7M`,`harmonic minor`],[`1P 2m 3m 4d 5d 6m 7m`,`altered`,`super locrian`,`diminished whole tone`,`pomeroy`],[`1P 2M 3m 4P 5d 6m 7m`,`locrian #2`,`half-diminished`,`aeolian b5`],[`1P 2M 3M 4P 5P 6m 7m`,`mixolydian b6`,`melodic minor fifth mode`,`hindu`],[`1P 2M 3M 4A 5P 6M 7m`,`lydian dominant`,`lydian b7`,`overtone`],[`1P 2M 3M 4A 5P 6M 7M`,`lydian`],[`1P 2M 3M 4A 5A 6M 7M`,`lydian augmented`],[`1P 2m 3m 4P 5P 6M 7m`,`dorian b2`,`phrygian #6`,`melodic minor second mode`],[`1P 2M 3m 4P 5P 6M 7M`,`melodic minor`],[`1P 2m 3m 4P 5d 6m 7m`,`locrian`],[`1P 2m 3m 4d 5d 6m 7d`,`ultralocrian`,`superlocrian bb7`,`·superlocrian diminished`],[`1P 2m 3m 4P 5d 6M 7m`,`locrian 6`,`locrian natural 6`,`locrian sharp 6`],[`1P 2A 3M 4P 5P 5A 7M`,`augmented heptatonic`],[`1P 2M 3m 5d 5P 6M 7m`,`romanian minor`],[`1P 2M 3m 4A 5P 6M 7m`,`dorian #4`],[`1P 2M 3m 4A 5P 6M 7M`,`lydian diminished`],[`1P 2m 3m 4P 5P 6m 7m`,`phrygian`],[`1P 2M 3M 4A 5A 7m 7M`,`leading whole tone`],[`1P 2M 3M 4A 5P 6m 7m`,`lydian minor`],[`1P 2m 3M 4P 5P 6m 7m`,`phrygian dominant`,`spanish`,`phrygian major`],[`1P 2m 3m 4P 5P 6m 7M`,`balinese`],[`1P 2m 3m 4P 5P 6M 7M`,`neopolitan major`],[`1P 2M 3m 4P 5P 6m 7m`,`aeolian`,`minor`],[`1P 2M 3M 4P 5P 6m 7M`,`harmonic major`],[`1P 2m 3M 4P 5P 6m 7M`,`double harmonic major`,`gypsy`],[`1P 2M 3m 4P 5P 6M 7m`,`dorian`],[`1P 2M 3m 4A 5P 6m 7M`,`hungarian minor`],[`1P 2A 3M 4A 5P 6M 7m`,`hungarian major`],[`1P 2m 3M 4P 5d 6M 7m`,`oriental`],[`1P 2m 3m 3M 4A 5P 7m`,`flamenco`],[`1P 2m 3m 4A 5P 6m 7M`,`todi raga`],[`1P 2M 3M 4P 5P 6M 7m`,`mixolydian`,`dominant`],[`1P 2m 3M 4P 5d 6m 7M`,`persian`],[`1P 2M 3M 4P 5P 6M 7M`,`major`,`ionian`],[`1P 2m 3M 5d 6m 7m 7M`,`enigmatic`],[`1P 2M 3M 4P 5A 6M 7M`,`major augmented`,`major #5`,`ionian augmented`,`ionian #5`],[`1P 2A 3M 4A 5P 6M 7M`,`lydian #9`],[`1P 2m 2M 4P 4A 5P 6m 7M`,`messiaen's mode #4`],[`1P 2m 3M 4P 4A 5P 6m 7M`,`purvi raga`],[`1P 2m 3m 3M 4P 5P 6m 7m`,`spanish heptatonic`],[`1P 2M 3M 4P 5P 6M 7m 7M`,`bebop`],[`1P 2M 3m 3M 4P 5P 6M 7m`,`bebop minor`],[`1P 2M 3M 4P 5P 5A 6M 7M`,`bebop major`],[`1P 2m 3m 4P 5d 5P 6m 7m`,`bebop locrian`],[`1P 2M 3m 4P 5P 6m 7m 7M`,`minor bebop`],[`1P 2M 3m 4P 5d 6m 6M 7M`,`diminished`,`whole-half diminished`],[`1P 2M 3M 4P 5d 5P 6M 7M`,`ichikosucho`],[`1P 2M 3m 4P 5P 6m 6M 7M`,`minor six diminished`],[`1P 2m 3m 3M 4A 5P 6M 7m`,`half-whole diminished`,`dominant diminished`,`messiaen's mode #2`],[`1P 3m 3M 4P 5P 6M 7m 7M`,`kafi raga`],[`1P 2M 3M 4P 4A 5A 6A 7M`,`messiaen's mode #6`],[`1P 2M 3m 3M 4P 5d 5P 6M 7m`,`composite blues`],[`1P 2M 3m 3M 4A 5P 6m 7m 7M`,`messiaen's mode #3`],[`1P 2m 2M 3m 4P 4A 5P 6m 6M 7M`,`messiaen's mode #7`],[`1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M`,`chromatic`]],fe={...R,intervals:[],aliases:[]},H=[],U$1={},__name$1(get$6,`get`),__name$1(all$1,`all`),__name$1(add$2,`add`),de.forEach(([t,c,...u])=>add$2(t.split(` `),c,u)),W$1={empty:!0,name:``,symbol:``,root:``,rootDegree:0,type:``,tonic:null,setNum:NaN,quality:`Unknown`,chroma:``,normalized:``,aliases:[],notes:[],intervals:[]},pe$1=/^(6|64|7|9|11|13)$/,__name$1(tokenize$2,`tokenize`),__name$1(get$5,`get`),me=[[.125,`dl`,[`large`,`duplex longa`,`maxima`,`octuple`,`octuple whole`]],[.25,`l`,[`long`,`longa`]],[.5,`d`,[`double whole`,`double`,`breve`]],[1,`w`,[`whole`,`semibreve`]],[2,`h`,[`half`,`minim`]],[4,`q`,[`quarter`,`crotchet`]],[8,`e`,[`eighth`,`quaver`]],[16,`s`,[`sixteenth`,`semiquaver`]],[32,`t`,[`thirty-second`,`demisemiquaver`]],[64,`sf`,[`sixty-fourth`,`hemidemisemiquaver`]],[128,`h`,[`hundred twenty-eighth`]],[256,`th`,[`two hundred fifty-sixth`]]],he=[],me.forEach(([t,c,u])=>add$1(t,c,u)),__name$1(add$1,`add`),__name$1(names$1,`names`),__name$1(t=>interval(t).name,`name`),__name$1(simplify$1,`simplify`),ve=[1,2,2,3,3,4,5,5,6,6,7,7],ye=`P m M m M P d P m M m M`.split(` `),Ce=Math.log(2),we=Math.log(440),Te=`C C# D D# E F F# G G# A A# B`.split(` `),Ee=`C Db D Eb E F Gb G Ab A Bb B`.split(` `),De=[`C`,`D`,`E`,`F`,`G`,`A`,`B`],toName=t=>t.name,onlyNotes=t=>t.map(note).filter(t=>!t.empty),G$1=note,name=t=>G$1(t).name,pitchClass=t=>G$1(t).pc,accidentals=t=>G$1(t).acc,octave=t=>G$1(t).oct,midi=t=>G$1(t).midi,freq=t=>G$1(t).freq,chroma=t=>G$1(t).chroma,K$1=transpose$2,Oe=transpose$2,transposeBy=t=>c=>K$1(c,t),ke=transposeBy,transposeFrom=t=>c=>K$1(t,c),Ae=transposeFrom,je=transposeFifths,ascending=(t,c)=>t.height-c.height,descending=(t,c)=>c.height-t.height,Me=nameBuilder(!0),Ne=nameBuilder(!1),q$1={names,get:G$1,name,pitchClass,accidentals,octave,midi,ascending,descending,sortedNames,sortedUniqNames,fromMidi,fromMidiSharps,freq,fromFreq,fromFreqSharps,chroma,transpose:K$1,tr:Oe,transposeBy,trBy:ke,transposeFrom,trFrom:Ae,transposeFifths,trFifths:je,simplify:Me,enharmonic:Ne},Pe={empty:!0,name:``,chordType:``},Fe={},__name$1(get$2,`get`),Ie=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/,__name$1(tokenize$1,`tokenize`),Le=`I II III IV V VI VII`,J$1=Le.split(` `),Le.toLowerCase().split(` `),Re=[[0,2773,0,`ionian`,``,`Maj7`,`major`],[1,2902,2,`dorian`,`m`,`m7`],[2,3418,4,`phrygian`,`m`,`m7`],[3,2741,-1,`lydian`,``,`Maj7`],[4,2774,1,`mixolydian`,``,`7`],[5,2906,3,`aeolian`,`m`,`m7`,`minor`],[6,3434,5,`locrian`,`dim`,`m7b5`]],ze={...R,name:``,alt:0,modeNum:NaN,triad:``,seventh:``,aliases:[]},Be=Re.map(toMode),Y$1={},Be.forEach(t=>{Y$1[t.name]=t,t.aliases.forEach(c=>{Y$1[c]=t})}),__name$1(get$1,`get`),Ve=__toESM$1(te(),1),He=class SyllableSequence{append(t){if(this.syllables.length)try{let c=new X$1(this.syllables[this.syllables.length-1].notes.map(t=>({note:t.note,timestamp:t.timestamp,type:t.type,velocity:t.velocity})).concat(t));this.syllables.splice(this.syllables.length-1,1,c)}catch{this.syllables.push(new X$1([t]))}else this.syllables.push(new X$1([t])),this.rootNote=t.note}constructor(t){_defineProperty$2(this,`syllables`,void 0),_defineProperty$2(this,`rootNote`,void 0),t.length>0?(this.syllables=t.sort((t,c)=>t.timestamp-c.timestamp),this.rootNote=this.syllables[0].notes.reduce((t,c)=>c.note.number<t.note.number?c:t).note):(this.syllables=[],this.rootNote={name:`C`,octave:4,number:0})}grade(t){let c=[];for(let u=0;u<this.syllables.length;u++)c.push(this.syllables[u].grade(t.syllables[u]));return new SyllableSequence(c)}toString(){let t=``;return this.syllables.forEach((c,u)=>{t+=`Syllable ${u+1}: {\n`,c.notes.forEach(c=>{t+=`\t${c.note.name}\t${c.note.number}\t${c.timestamp} ${c.isCorrect?``:`(incorrect)`} ${c.isMissing?`(missing)`:``}\n`}),t+=`} - ${c.timestamp}, correct: ${c.isCorrect}\n`}),t}isCorrect(){let t=!0;return this.syllables.forEach(c=>{c.isCorrect===!1?t=!1:c.notes.forEach(c=>{c.isCorrect===!1&&(t=!1)})}),t}},X$1=class Syllable{get timestamp(){let t=0;return this.notes.forEach(c=>{if(c.timestamp===0)return 0;t+=c.timestamp}),t/=this.notes.length,t}constructor(t){_defineProperty$2(this,`notes`,void 0),_defineProperty$2(this,`isCorrect`,void 0),t=t.filter(t=>t.type===`noteon`);let c=t.reduce((t,c)=>t.timestamp<c.timestamp?t:c),u=t.reduce((t,c)=>t.timestamp>c.timestamp?t:c).timestamp-c.timestamp;if(Syllable.gracePeriod(t.length)<u)throw Error(`Notes ${t.toString()} are not close enough together to be a syllable`);this.notes=t.map(t=>({...t,isCorrect:!0,isMissing:!1})).sort((t,c)=>t.note.number-c.note.number)}static gracePeriod(t){return 1.3*12*t}grade(t){return this.notes.length!==t.notes.length&&(t.isCorrect=!1),t.notes.forEach(c=>{let u=q$1.fromMidi(c.note.number),d=q$1.fromMidiSharps(c.note.number);u=q$1.pitchClass(u),d=q$1.pitchClass(d),c.isCorrect=this.notes.filter(t=>q$1.chroma(u)===q$1.chroma(t.note.name)||q$1.chroma(d)===q$1.chroma(t.note.name)).length>=1,c.isCorrect||(t.isCorrect=!1)}),this.notes.forEach(c=>{let u=q$1.fromMidi(c.note.number);u=q$1.pitchClass(u),t.notes.some(t=>q$1.chroma(t.note.name)===q$1.chroma(u))||t.notes.push({...c,isMissing:!0,isCorrect:!1})}),t}},Z$1=(_SkMidi=class SkMidi{get state(){return this._state}constructor(t){_defineProperty$2(this,`recording`,[]),_defineProperty$2(this,`webmidi`,Ve.default),_defineProperty$2(this,`input`,void 0),_defineProperty$2(this,`output`,void 0),_defineProperty$2(this,`_noteonListeners`,[]),_defineProperty$2(this,`_noteoffListeners`,[]),_defineProperty$2(this,`midiAccess`,void 0),_defineProperty$2(this,`_state`,`initializing`),_defineProperty$2(this,`_userLookup`,void 0),this._userLookup=t??null}async init(){if(!this.midiAccess)try{navigator.requestMIDIAccess().then(t=>{this.midiAccess=t,this.midiAccess.onstatechange=t=>{Z$2({text:`Midi device ${t.port.name} is ${t.port.state}`,status:t.port.state===`connected`?Status.ok:Status.error})}})}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}try{this.webmidi.disable()}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}return new Promise((t,c)=>{this.webmidi.enable(async u=>{u?(this._state=`notsupported`,console.log(`Webmidi not enabled: ${u}`),c(u)):(console.log(`Webmidi enabled`),console.log(`Inputs: ${JSON.stringify(this.webmidi.inputs)}`),console.log(`Outputs: ${JSON.stringify(this.webmidi.outputs)}`),this.output=this.webmidi.outputs[0],this.input=this.webmidi.inputs[0],SkMidi._initializedWithUserConfig||(SkMidi._initializedWithUserConfig=(await this.loadUserConfiguration(),!0)),this.input&&this.output?(console.log(`midi init state: ready`),this._state=`ready`,this.attachListeners()):(console.log(`midi init state: nodevice`),this._state=`nodevice`),t(!0))})})}async loadUserConfiguration(){try{if(!this._userLookup){console.log(`User lookup function not provided - using default MIDI configuration`);return}let t=await this._userLookup();if(!t){console.log(`No user found, using default MIDI configuration`);return}let c=await t.getActiveCourses();for(let u of c){let c=await(await t.getCourseInterface(u.courseID)).getCourseSettings();if(c?.midiinput||c?.midioutput){c.midiinput&&this.webmidi.getInputById(c.midiinput.toString())&&(this.selectInput(c.midiinput.toString()),console.log(`Loaded saved MIDI input: ${c.midiinput}`)),c.midioutput&&this.webmidi.getOutputById(c.midioutput.toString())&&(this.selectOutput(c.midioutput.toString()),console.log(`Loaded saved MIDI output: ${c.midioutput}`));break}}}catch(t){console.error(`Failed to load user MIDI configuration:`,t)}}setStateChangeListener(t){if(this.midiAccess)this.midiAccess.onstatechange=c=>{this.init().then(()=>{console.log(`Midi state: ${this.state}`),t()}),Z$2({text:`Midi device ${c.port.name} is ${c.port.state}`,status:c.port.state===`connected`?Status.ok:Status.error})};else try{navigator.requestMIDIAccess().then(c=>{this.midiAccess=c,this.midiAccess.onstatechange=c=>{this.init().then(()=>{console.log(`Midi state: ${this.state}`),t()}),Z$2({text:`Midi device ${c.port.name} is ${c.port.state}`,status:c.port.state===`connected`?Status.ok:Status.error})}})}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}}attachListeners(){this.input&&(this._noteonListeners.forEach(t=>{this.input?.on(`noteon`,`all`,t)}),this._noteoffListeners.forEach(t=>{this.input?.on(`noteoff`,`all`,t)}))}get hasRecording(){return this.record.length>0}get configuredInput(){return this.input?`${this.input.manufacturer}: ${this.input.name}`:`(Not Sure!)`}eraseRecording(){this.recording=[]}stopRecording(){this.input?.removeListener()}record(){let t=0;if(this.input===void 0)throw Error(`Midi input not configured!`);this.input.connection===`open`&&(this.stopRecording(),this.eraseRecording(),this.input.on(`noteon`,`all`,c=>{this.recording.length===0&&(t=c.timestamp),this.recording.push({note:c.note,type:c.type,velocity:c.velocity,timestamp:c.timestamp-t})}),this.input.on(`noteoff`,`all`,c=>{this.recording.length===0&&(t=c.timestamp),this.recording.push({note:c.note,velocity:c.velocity,type:c.type,timestamp:c.timestamp-t})}))}addNoteonListenter(t){this._noteonListeners.push(t),this.input&&this.input.on(`noteon`,`all`,t)}addNoteoffListenter(t){this._noteoffListeners.push(t),this.input&&this.input.on(`noteoff`,`all`,t)}play(t){let c=t||this.recording;c=c.map(t=>({...t,timestamp:t.timestamp+SkMidi.OFFSET})),c.forEach(t=>{t.type===`noteon`?this.output?.playNote(t.note.name+t.note.octave,1,{velocity:t.velocity,time:`+${t.timestamp}`,rawVelocity:!1}):this.output?.stopNote(t.note.name+t.note.octave,1,{velocity:t.velocity,time:`+${t.timestamp}`,rawVelocity:!1})})}static async instance(){return SkMidi._instance?SkMidi._instance:(console.log(`Buzz, whirr, Midi instance factory is at work`),SkMidi._instance=new SkMidi,await SkMidi._instance.init(),SkMidi._instance)}get inputs(){return this.webmidi.inputs}get outputs(){return this.webmidi.outputs}selectInput(t){this.webmidi.getInputById(t)===!1?this.webmidi.getInputByName(t)!==!1&&(this.input=this.webmidi.getInputByName(t)):this.input=this.webmidi.getInputById(t)}selectOutput(t){this.webmidi.getOutputById(t)===!1?this.webmidi.getOutputByName(t)!==!1&&(this.output=this.webmidi.getOutputByName(t)):this.output=this.webmidi.getOutputById(t)}},_defineProperty$2(_SkMidi,`_instance`,void 0),_defineProperty$2(_SkMidi,`OFFSET`,5),_defineProperty$2(_SkMidi,`_initializedWithUserConfig`,!1),_SkMidi),Ue=defineComponent({name:`SyllableSeqVis`,props:{seq:{type:Object,required:!0},lastTSsuggestion:{type:Number,required:!1,default:0}},setup(t){let c=ref(0),u=ref(0),d=ref(0),m=ref(500),sayNote=t=>{console.log(`${JSON.stringify(t)}`)},g=computed(()=>{let c=t.seq.syllables[t.seq.syllables.length-1].timestamp;return Math.max(1,c,t.lastTSsuggestion)}),b=computed(()=>{let c=0,u=500;return t.seq.syllables.forEach(t=>{t.notes.forEach(t=>{t.note.number>c&&(c=t.note.number),t.note.number<u&&(u=t.note.number)})}),Math.max(3*(c-u)+10,0)}),updateBounds=()=>{try{c.value=t.seq.syllables[0].timestamp;let d=t.seq.syllables[t.seq.syllables.length-1].timestamp,m=c.value+t.lastTSsuggestion;u.value=Math.max(d,m)}catch(t){console.log(`[SyllableSeqVis] Error updating bounds: ${t}`)}t.seq.syllables.forEach(t=>{t.notes.forEach(t=>{t.note.number>d.value&&(d.value=t.note.number),t.note.number<m.value&&(m.value=t.note.number)})})};return onMounted(()=>{console.log(`SyllableSeqVis created w/ input: \n${t.seq}`),updateBounds()}),{firstTS:c,lastTS:u,high:d,low:m,sayNote,getLastTS:g,getHeight:b,updateBounds}}}),We=[`height`],Ge=[`cx`,`cy`,`alt`,`fill`,`stroke`,`onMouseenter`],__name$1(_sfc_render$3,`_sfc_render`),Ke=A(Ue,[[`render`,_sfc_render$3],[`__scopeId`,`data-v-2f79c080`]]),qe=defineComponent({name:`NoteDisplay`,props:{chroma:{type:Number,required:!0}},setup(t){let style=c=>{let u=`#ffffff`;return c===t.chroma?u=`#1976D2`:(c===1||c===3||c===6||c===8||c===10||c===-2)&&(u=`#000000`),{fill:u,"fill-opacity":1,stroke:`#000000`,"stroke-width":.79375,"stroke-miterlimit":4,"stroke-dasharray":`none`,"stroke-opacity":1}};return{style,white:-1,black:-2}}}),Je={id:`svg8`,width:`300px`,height:`auto`,"xmlns:dc":`http://purl.org/dc/elements/1.1/`,"xmlns:cc":`http://creativecommons.org/ns#`,"xmlns:rdf":`http://www.w3.org/1999/02/22-rdf-syntax-ns#`,"xmlns:svg":`http://www.w3.org/2000/svg`,xmlns:`http://www.w3.org/2000/svg`,"xmlns:sodipodi":`http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd`,"xmlns:inkscape":`http://www.inkscape.org/namespaces/inkscape`,"sodipodi:docname":`keys.svg`,"inkscape:version":`1.0rc1 (09960d6f05, 2020-04-09)`,version:`1.1`,viewBox:`0 0 175.24936 73.594925`},Ye={id:`metadata5`},Xe={id:`layer1`,transform:`translate(167.75219,-151.96011)`,"inkscape:groupmode":`layer`,"inkscape:label":`Layer 1`},__name$1(_sfc_render$2,`_sfc_render`),Ze=defineComponent({name:`Playback`,components:{SyllableSeqVis:Ke,NoteDisplay:A(qe,[[`render`,_sfc_render$2]])},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`Playback`),d=useQuestionView(u),m=ref(),g=ref(!1),b=ref(`notSet`),S=ref(!1),C=ref(0),w=ref(hooks.utc()),T=ref(0),E=ref(0),D=ref(eventsToSyllableSequence([])),O=ref(!1),Or=ref(eventsToSyllableSequence([])),kr=ref(0),Ar=ref(``),jr=ref(0),Mr=ref(0),Nr=ref(),Pr=ref();d.question.value=new Q(t.data);let Fr=computed(()=>new Q(t.data)),Ir=computed(()=>eventsToSyllableSequence(Fr.value.midi).syllables[0].notes.length>1?`Lowest note of first chord:`:`First note:`),Lr=computed(()=>g.value?eventsToSyllableSequence(Fr.value.midi).rootNote.number%12:0),init=()=>{b.value?b.value!==m.value?.state&&(g.value=!1,b.value=m.value?.state||`notSet`,g.value=!0):(b.value=m.value?.state||`notSet`,g.value=!0),u.logger.log(`Playback is running init with state: ${b.value}`),b.value===`ready`&&(T.value=Fr.value.duration,play())},runProgressBar=()=>{try{Nr.value&&(Nr.value.style.animationName=``,requestAnimationFrame(()=>{requestAnimationFrame(()=>{Nr.value&&(Nr.value.style.animationDuration=T.value+`ms`,Nr.value.style.animationName=`progress`)})}))}catch{setTimeout(runProgressBar,50)}},record=()=>{m.value?.record(),S.value=!0,m.value?.addNoteonListenter(t=>{jr.value++,Or.value.append(t),Pr.value?.updateBounds(),jr.value+Mr.value>=Fr.value.midi.length&&submit()}),m.value?.addNoteoffListenter(()=>{Mr.value++,jr.value+Mr.value>=Fr.value.midi.length&&submit()})},play=()=>{m.value?.stopRecording(),m.value?.eraseRecording(),w.value=hooks.utc(),jr.value=0,Mr.value=0,S.value=!1,C.value=0,runProgressBar(),m.value?.play(Fr.value.midi),setTimeout(()=>{u.logger.log(`done playback...`),record()},Fr.value.lastNoteOnTimestamp)},submit=()=>{if(!m.value?.recording)return!1;let t=eventsToSyllableSequence(Fr.value.midi),c=eventsToSyllableSequence(m.value.recording);return D.value=t.grade(c),Or.value=eventsToSyllableSequence([]),d.submitAnswer(m.value.recording).isCorrect?!0:(E.value++,O.value=!0,E.value<d.maxAttemptsPerView.value&&play(),!1)},clearAttempt=()=>{jr.value>0?submit():play()};return onMounted(async()=>{try{m.value=await Z$1.instance(),m.value.setStateChangeListener(()=>{init()}),g.value=!0}catch(t){Z$2({status:Status.error,text:`Midi device not supported`}),Ar.value=JSON.stringify(t),b.value=`notsupported`,g.value=!0}init(),I$2.addBinding([{hotkey:`space`,callback:clearAttempt,command:`Clear attempt or play again`}])}),onBeforeUnmount(()=>{I$2.removeBinding(`space`)}),{...u,...d,initialized:g,state:b,recording:S,inputSeq:Or,lastTSsuggestion:kr,gradedSeq:D,graded:O,promptText:Ir,firstNoteChroma:Lr,progressBar:Nr,inputVisRef:Pr,clearAttempt,notesOn:jr}}}),Qe={key:0,"data-viewable":`Playback`},$e={key:0},et={class:`text-h4`},tt={class:`text-h5`},nt={key:0},rt={class:`progressContainer`},it={id:`progress`,ref:`progressBar`},at={key:1},ot={key:2},__name$2(_sfc_render$1$1,`_sfc_render$1`),__name$1(_sfc_render$1$1,`_sfc_render`),st=A(Ze,[[`render`,_sfc_render$1$1]]),ct=[{name:`Melody`,type:FieldType.MIDI}],Q=(_EchoQuestion=class EchoQuestion extends Question{constructor(t){var _super=(...t)=>(super(...t),_defineProperty$2(this,`midi`,void 0),this);_super(t),this.midi=t[0].Melody}get duration(){return this.midi.reduce((t,c)=>c.timestamp>t.timestamp?c:t).timestamp}get lastNoteOnTimestamp(){return this.midi.filter(t=>t.type===`noteon`).reduce((t,c)=>c.timestamp>t.timestamp?c:t).timestamp}isCorrect(t){let c=eventsToSyllableSequence(this.midi),u=eventsToSyllableSequence(t);try{return c.grade(u).isCorrect()}catch(t){return console.log(`ERROR grading this midi sequence!`,t),!1}}dataShapes(){return EchoQuestion.dataShapes}views(){return EchoQuestion.views}},_defineProperty$2(_EchoQuestion,`dataShapes`,[{fields:ct,name:DataShapeName.PIANO_Echo}]),_defineProperty$2(_EchoQuestion,`views`,[st]),_EchoQuestion),lt=defineComponent({name:`NotePlayback`,components:{},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`NotePlayback`),d=useQuestionView(u),m=ref(),g=ref(!1),b=ref(!1),S=ref(0),C=ref(hooks.utc()),w=ref(0),T=ref(eventsToSyllableSequence([])),E=ref(!1),D=ref(eventsToSyllableSequence([])),O=ref(``);d.question.value=new $$1(t.data);let Or=computed(()=>new $$1(t.data)),record=()=>{m.value?.record(),b.value=!0,m.value?.addNoteonListenter(t=>{D.value.append(t)}),m.value?.addNoteoffListenter(()=>{m.value?.recording?.length&&m.value?.recording?.length>=2&&submit()})},play=()=>{m.value?.stopRecording(),m.value?.eraseRecording(),C.value=hooks.utc(),b.value=!1,S.value=0,record()},submit=()=>m.value?.recording?(D.value=eventsToSyllableSequence([]),d.submitAnswer(m.value.recording).isCorrect?!0:(w.value++,E.value=!0,w.value<d.maxAttemptsPerView.value&&play(),!1)):!1;return onMounted(async()=>{try{m.value=await Z$1.instance(),O.value=Or.value.note,play(),g.value=!0}catch(t){u.logger.error(`Failed to initialize MIDI:`,t)}}),{...u,...d,initialized:g,recording:b,inputSeq:D,gradedSeq:T,graded:E,note:O,attempts:w}}}),ut={"data-viewable":`NotePlayback`},dt={class:`text-h4`},ft={class:`font-weight-bold`},pt={key:0,id:`svg8`,width:`300px`,height:`auto`,"xmlns:dc":`http://purl.org/dc/elements/1.1/`,"xmlns:cc":`http://creativecommons.org/ns#`,"xmlns:rdf":`http://www.w3.org/1999/02/22-rdf-syntax-ns#`,"xmlns:svg":`http://www.w3.org/2000/svg`,xmlns:`http://www.w3.org/2000/svg`,"xmlns:sodipodi":`http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd`,"xmlns:inkscape":`http://www.inkscape.org/namespaces/inkscape`,"sodipodi:docname":`keys.svg`,"inkscape:version":`1.0rc1 (09960d6f05, 2020-04-09)`,version:`1.1`,viewBox:`0 0 175.24936 73.594925`},mt={id:`metadata5`},ht=A(lt,[[`render`,_sfc_render]]),gt=[{name:`Note`,type:FieldType.STRING}],$$1=(_PlayNote=class PlayNote extends Question{constructor(t){var _super2=(...t)=>(super(...t),_defineProperty$2(this,`note`,void 0),this);_super2(t),this.note=t[0].Note}isCorrect(t){return t[0].note.name===this.note}dataShapes(){return PlayNote.dataShapes}views(){return PlayNote.views}},_defineProperty$2(_PlayNote,`dataShapes`,[{fields:gt,name:DataShapeName.PIANO_PlayNote}]),_defineProperty$2(_PlayNote,`seedData`,[`A`,`B`,`C`,`D`,`E`,`F`,`G`,`A♯`,`C♯`,`D♯`,`F♯`,`G♯`,`D♭`,`E♭`,`G♭`,`A♭`,`B♭`].map(t=>({Note:t}))),_defineProperty$2(_PlayNote,`views`,[ht]),_PlayNote),new CourseWare(`piano`,[Q,$$1])}));init_shapes_BQUVJdp5(),init_CourseWare_BTFRjgBR(),init_piano_DF1g6yaX(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_dist(),init_defineProperty();var U=new CourseWare(`default`,[I$1]),W=defineComponent({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(t){let c=ref(null),u=ref(800),d=computed(()=>{let t=0;for(let c=21;c<=108;c++)isWhiteKey(c)&&t++;return t}),m=computed(()=>Math.min(22,u.value/Math.max(25,d.value))),g=computed(()=>m.value*.6),b=computed(()=>Math.min(t.maxWidth,m.value*d.value+10)),isWhiteKey=t=>{let c=t%12;return[0,2,4,5,7,9,11].includes(c)},getKeyPosition=t=>{let c=0;for(let u=21;u<t;u++)isWhiteKey(u)&&c++;return isWhiteKey(t)?c*m.value:c*m.value-g.value/2},getNoteLabel=t=>{let c=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],u=t%12,d=Math.floor(t/12)-1;return`${c[u]}${d}`};return onMounted(()=>{c.value&&(u.value=c.value.clientWidth,new ResizeObserver(t=>{for(let c of t)u.value=c.contentRect.width}).observe(c.value))}),{pianoWrapper:c,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:m,blackKeyWidth:g,svgWidth:b,isWhiteKey,getKeyPosition,getNoteLabel}}}),G={class:`piano-range-container`},K={class:`piano-wrapper`,ref:`pianoWrapper`},q=[`width`,`height`],J={class:`background-keys`,opacity:`0.15`},Y=[`x`,`width`,`height`],X=[`x`,`width`,`height`],Z={class:`selected-range`},ne=[`x`,`width`,`height`],re=[`x`,`width`,`height`],ie={class:`range-markers`},ae=[`x`,`height`],oe=[`x`,`height`],se=[`x`,`y`],ce=[`x`,`y`];function _sfc_render$1(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,G,[createBaseVNode(`div`,K,[(openBlock(),createElementBlock(`svg`,{width:t.svgWidth,height:t.keyHeight+20,class:`piano-svg`},[createBaseVNode(`g`,J,[(openBlock(),createElementBlock(Fragment,null,renderList(88,c=>(openBlock(),createElementBlock(Fragment,{key:`bg-${c}`},[t.isWhiteKey(c+20)?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c+20),y:`0`,width:t.whiteKeyWidth,height:t.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,Y)):createCommentVNode(``,!0)],64))),64)),(openBlock(),createElementBlock(Fragment,null,renderList(88,c=>(openBlock(),createElementBlock(Fragment,{key:`bg-black-${c}`},[t.isWhiteKey(c+20)?createCommentVNode(``,!0):(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c+20),y:`0`,width:t.blackKeyWidth,height:t.blackKeyHeight,class:`black-key`},null,8,X))],64))),64))]),createBaseVNode(`g`,Z,[(openBlock(),createElementBlock(Fragment,null,renderList(128,c=>(openBlock(),createElementBlock(Fragment,{key:`white-${c}`},[t.isWhiteKey(c)&&c>=t.lowestNote&&c<=t.highestNote?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c),y:`0`,width:t.whiteKeyWidth,height:t.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,ne)):createCommentVNode(``,!0)],64))),64)),(openBlock(),createElementBlock(Fragment,null,renderList(128,c=>(openBlock(),createElementBlock(Fragment,{key:`black-${c}`},[!t.isWhiteKey(c)&&c>=t.lowestNote&&c<=t.highestNote?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c),y:`0`,width:t.blackKeyWidth,height:t.blackKeyHeight,class:`black-key active`},null,8,re)):createCommentVNode(``,!0)],64))),64))]),createBaseVNode(`g`,ie,[createBaseVNode(`rect`,{x:t.getKeyPosition(t.lowestNote)-2,y:`0`,width:4,height:t.keyHeight+5,class:`range-marker start`},null,8,ae),createBaseVNode(`rect`,{x:t.getKeyPosition(t.highestNote)+t.whiteKeyWidth-2,y:`0`,width:4,height:t.keyHeight+5,class:`range-marker end`},null,8,oe)]),createBaseVNode(`text`,{x:t.getKeyPosition(t.lowestNote)+3,y:t.keyHeight+12,class:`note-label`},toDisplayString(t.getNoteLabel(t.lowestNote)),9,se),createBaseVNode(`text`,{x:t.getKeyPosition(t.highestNote)+t.whiteKeyWidth-3,y:t.keyHeight+12,"text-anchor":`end`,class:`note-label`},toDisplayString(t.getNoteLabel(t.highestNote)),9,ce)],8,q))],512)])}__name$1(_sfc_render$1,`_sfc_render`);var le=defineComponent({name:`MidiConfig`,components:{PianoRangeVisualizer:A(W,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]])},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(t){let c=ref(),u=ref(!0),d=ref([]),m=ref([]),g=ref(``),b=ref(``),S=ref(!1),C=ref(``),w=ref(``),T=ref(!1),E=ref(`full-88`),D=ref(21),O=ref(108),Or=ref(``),kr=ref(0),Ar=ref(0),jr=ref([]),initNoteOptions=()=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],c=[];for(let u=0;u<=127;u++){let d=Math.floor(u/12)-1,m=t[u%12];c.push({title:`${m}${d} (${u})`,value:u})}jr.value=c},Mr=ref([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{T.value=g.value!==C.value||b.value!==w.value||E.value!==Or.value||E.value===`custom`&&(D.value!==kr.value||O.value!==Ar.value)},updateCustomRangeFromPreset=()=>{switch(E.value){case`full-88`:D.value=21,O.value=108;break;case`76-key`:D.value=28,O.value=103;break;case`61-key`:D.value=36,O.value=96;break;case`49-key`:D.value=48,O.value=96;break;case`37-key`:D.value=48,O.value=84;break;case`25-key`:D.value=60,O.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{D.value>=O.value&&(O.value=D.value+12),checkConfigChanged()},playSound=()=>{c.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=t=>{Z$2({text:`I hear a ${t.note.name}!`,status:Status.ok})};watch(g,()=>{c.value?.selectInput(g.value),checkConfigChanged()}),watch(b,()=>{c.value?.selectOutput(b.value),checkConfigChanged()});let retrieveSettings=async()=>{let c=await(await t.user.getCourseInterface(t._id)).getCourseSettings();if(c?.midiinput){let t=c.midiinput.toString();d.value.some(c=>c.value===t)&&(g.value=t,C.value=t)}if(c?.midioutput){let t=c.midioutput.toString();m.value.some(c=>c.value===t)&&(b.value=t,w.value=t)}c?.keyboardRange&&(Or.value=c.keyboardRange.toString(),E.value=Or.value),c?.lowestNote&&(kr.value=parseInt(c.lowestNote.toString()),D.value=kr.value),c?.highestNote&&(Ar.value=parseInt(c.highestNote.toString()),O.value=Ar.value),c?.lowestNote&&c?.highestNote&&!c?.keyboardRange&&(E.value=`custom`),T.value=!1},saveSettings=async()=>{S.value=!0,(await getDataLayer().getUserDB().getCourseInterface(t._id)).updateCourseSettings([{key:`midiinput`,value:g.value},{key:`midioutput`,value:b.value},{key:`keyboardRange`,value:E.value},{key:`lowestNote`,value:D.value},{key:`highestNote`,value:O.value}]),C.value=g.value,w.value=b.value,Or.value=E.value,kr.value=D.value,Ar.value=O.value,T.value=!1,S.value=!1,Z$2({text:`Settings updated.`,status:Status.ok})};return onMounted(async()=>{initNoteOptions();try{c.value=await Z$1.instance(),u.value=c.value.state===`ready`||c.value.state===`nodevice`}catch(t){console.log(`Error on midi Init: ${t}`),u.value=!1}u.value&&(c.value?.addNoteonListenter(indicateHeardNotes),c.value?(d.value=c.value.inputs.filter(t=>t.state===`connected`).map(t=>({title:`${t.manufacturer}: ${t.name}`,value:t.id})),m.value=c.value?.outputs.filter(t=>t.state===`connected`).map(t=>({title:`${t.manufacturer}: ${t.name}`,value:t.id}))):(d.value=[{title:`No inputs available`,value:``}],m.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!g.value&&d.value.length>0&&(g.value=d.value[0].value),!b.value&&m.value.length>0&&(b.value=m.value[0].value))}),{midiSupported:u,inputs:d,outputs:m,selectedInput:g,selectedOutput:b,updatePending:S,playSound,saveSettings,configChanged:T,lowestNote:D,highestNote:O,keyboardRangeOptions:Mr,selectedKeyboardRange:E,noteOptions:jr,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),pe=useQuestionView,AllCourseWare=class{get courses(){return this.courseWareList}constructor(t){_defineProperty$2(this,`courseWareList`,void 0),_defineProperty$2(this,`cachedRawViews`,null),this.courseWareList=t}getCourseWare(t){return this.courseWareList.find(c=>c.name===t)}allViewsRaw(){if(!this.cachedRawViews){let t=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(t).map(([t,c])=>[t,markRaw(c)]))}return this.cachedRawViews}allViews(){let t={};return this.courseWareList.forEach(c=>{Object.assign(t,c.allViewsMap)}),t}getView(t){let c;c=typeof t==`string`?NameSpacer.getViewDescriptor(t):t;let u=this.getCourseWare(c.course);if(u){let t=u.getQuestion(c.questionType);if(t){let d=t.views.find(t=>t.name===c.view);if(d)return d;throw console.error(`QuestionView ${c.view} not found in course ${c.course}
|
|
494
|
+
\t${JSON.stringify(t)}`),this.tags.push({text:t.value.name,style:``,classes:``})}),this.initialTags=this.tags.map(t=>t.text)}catch(t){console.error(`Error in init-getAppliedTags: ${JSON.stringify(t)}, ${t}`)}finally{this.loading=!1}},async updateAvailableCourseTags(){try{this.availableCourseTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc)}catch(t){console.error(`Error in init-availableCourseTags: ${JSON.stringify(t)}`)}},async submit(){console.log(`[TagsInput] tagsInput is submitting...`),this.loading=!0;try{await Promise.all(this.tags.map(async t=>{if(!this.initialTags.includes(t.text))try{await this.courseDB.addTagToCard(this.cardID,t.text),console.log(`[TagsInput] Successfully added tag: ${t.text}`)}catch(c){console.error(`Failed to add tag ${t.text}:`,c)}}))}catch(t){console.error(`Exception adding tags: ${JSON.stringify(t)}`)}try{await Promise.all(this.initialTags.map(async t=>{if(this.tags.filter(c=>c.text===t).length===0)try{await this.courseDB.removeTagFromCard(this.cardID,t),console.log(`[TagsInput] Successfully removed tag: ${t}`)}catch(c){console.error(`Failed to remove tag ${t}:`,c)}}))}catch(t){console.error(`Exception removing tags: ${JSON.stringify(t)}`)}this.loading=!1}}}),Wn={"data-cy":`tags-input`},Gn={class:`tag-name`},Kn={key:0,class:`tag-snippet`},__name(_sfc_render$5,`_sfc_render`),qn=F$3(Un,[[`render`,_sfc_render$5],[`__scopeId`,`data-v-f7373dc0`]]),Jn=defineComponent({name:`CourseCardBrowser`,components:{CardLoader:yn,TagsInput:qn,PaginatingToolbar:Ue$1},props:{courseId:{type:String,required:!0},tagId:{type:String,required:!1,default:``},viewLookupFunction:{type:Function,required:!0,default:()=>(console.warn(`No viewLookupFunction provided to CourseCardBrowser`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,page:1,pages:[],cards:[],cardData:{},cardPreview:{},cardElos:{},cardTags:{},internalEditMode:`none`,delBtn:!1,updatePending:!0,userIsRegistered:!1,questionCount:0,tags:[],viewLookup:this.viewLookupFunction}},async created(){try{this.courseDB=getDataLayer().getCourseDB(this.courseId),this.tagId?this.questionCount=(await this.courseDB.getTag(this.tagId)).taggedCards.length:this.questionCount=(await this.courseDB.getCourseInfo()).cardCount;for(let t=1;(t-1)*25<this.questionCount;t++)this.pages.push(t);await this.populateTableData()}catch(t){console.error(`Error initializing CourseCardBrowser:`,t)}finally{this.updatePending=!1}},methods:{idQualify(t){return t.includes(`-`)?t:`${this.courseId}-${t}`},idToQualifiedObject(t){if(t.includes(`-`)){let c=t.split(`-`);return{courseID:c[0],cardID:c[1]}}else return{courseID:this.courseId,cardID:t}},first(){this.page=1,this.populateTableData()},prev(){this.page--,this.populateTableData()},next(){this.page++,this.populateTableData()},last(){this.page=this.pages.length,this.populateTableData()},setPage(t){this.page=t,this.populateTableData()},async loadCardTags(t){try{await Promise.all(t.map(async t=>{let c=await this.courseDB.getAppliedTags(t);this.cardTags[t]=c.rows.map(t=>({name:t.value.name,snippet:t.value.snippet,count:t.value.count}))}))}catch(t){console.error(`Error loading card tags:`,t)}},clearSelections(t=``){this.cards.forEach(c=>{c.card.cardID!==t&&(c.isOpen=!1)}),this.internalEditMode=`none`,this.delBtn=!1},async deleteCard(t){console.log(`Deleting card ${t}`);let c=await this.courseDB.removeCard(t);c.ok?(this.cards=this.cards.filter(c=>c.card.cardID!=t),this.clearSelections()):(console.error(`Failed to delete card:\n\n${JSON.stringify(c)}`),Z$2({text:`Failed to delete card`,status:Status.error}))},async populateTableData(){this.updatePending=!0,this.tagId?this.cards=(await this.courseDB.getTag(this.tagId)).taggedCards.map(t=>({card:{cardID:t,courseID:this.courseId},isOpen:!1,delBtn:!1})):this.cards=(await this.courseDB.getCardsByELO(0,25)).map(t=>({card:t,isOpen:!1,delBtn:!1}));let t=[],c=(await this.courseDB.getCourseDocs(this.cards.map(t=>t.card.cardID),{include_docs:!0})).rows.filter(t=>t.doc?!0:(console.error(`Card ${t.id}.doc not found.\ncard: ${JSON.stringify(t)}`),!1)).map(t=>t.doc);this.cards=this.cards.filter(c=>!t.includes(c.card.cardID)),c.forEach(t=>{t&&t.id_displayable_data&&(this.cardData[t._id]=t.id_displayable_data)});try{await Promise.all(this.cards.map(async t=>{let u=t.card.cardID,d=c.find(t=>t._id==u);if(!d||!d.id_displayable_data){console.error(`No valid data found for card ${u}`);return}let m=this.viewLookupFunction(d.id_view||`default.question.BlanksCard.FillInView`),g=d.id_displayable_data.map(t=>this.courseDB.getCourseDoc(t,{attachments:!1,binary:!0})),b=await Promise.all(g);await Promise.all(b.map(c=>{[].unshift(displayableDataToViewData(c)),this.cardPreview[t.card.cardID]=m.name?m.name:`Unknown`}))}));let t=this.cards.map(t=>t.card.cardID),u=await this.courseDB.getCardEloData(t);t.forEach((t,c)=>{this.cardElos[t]=u[c]}),await this.loadCardTags(t)}catch(t){console.error(`Error populating table data:`,t)}finally{this.updatePending=!1,this.$forceUpdate()}}}}),Yn={key:0,class:`d-flex justify-center align-center pa-6`},Xn={key:1},Zn={key:0,class:`px-4 py-2 bg-blue-grey-lighten-5`},Qn={key:0,class:`mt-4`},$n={class:`mt-4`},er={key:0,class:`ml-4`},__name$2(_sfc_render$4$1,`_sfc_render$4`),__name(_sfc_render$4$1,`_sfc_render`),tr=F$3(Jn,[[`render`,_sfc_render$4$1],[`__scopeId`,`data-v-5ecc9d21`]]),nr=defineComponent({name:`CourseInformation`,components:{CourseCardBrowser:tr},props:{courseId:{type:String,required:!0},viewLookupFunction:{type:Function,required:!1,default:t=>(console.warn(`No viewLookupFunction provided to CourseInformation`),null)},editMode:{type:String,required:!1,default:`full`}},data(){return{courseDB:null,nameRules:[t=>t.length>30?`Course name must be 30 characters or less`:!0],updatePending:!0,courseConfig:{},userIsRegistered:!1,tags:[],user:null}},computed:{},async created(){this.courseDB=getDataLayer().getCourseDB(this.courseId),this.user=await getCurrentUser();let t=await this.user.getCourseRegistrationsDoc();this.user.getUsername()===`admin`?this.userIsRegistered=!0:this.userIsRegistered=t.courses.filter(t=>t.courseID===this.courseId&&(t.status===`active`||t.status===void 0)).length===1,this.courseConfig=await this.courseDB.getCourseConfig(),this.tags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc),this.updatePending=!1},methods:{async register(){log$2(`Registering for ${this.courseId}`),(await this.user.registerForCourse(this.courseId)).ok&&(this.userIsRegistered=!0)},async drop(){log$2(`Dropping course ${this.courseId}`),(await this.user.dropCourse(this.courseId)).ok&&(this.userIsRegistered=!1)}}}),rr={key:0},ir={class:`text-h4 mb-2`},ar={class:`text-body-2`},or={key:0},sr={key:1},__name$2(_sfc_render$3$2,`_sfc_render$3`),__name(_sfc_render$3$2,`_sfc_render`),cr=F$3(nr,[[`render`,_sfc_render$3$2],[`__scopeId`,`data-v-38e9efe1`]]),lr=defineComponent({name:`CardBrowser`,components:{CardViewer:Q$1},props:{views:{type:Array,required:!0},data:{type:Array,required:!0},suppressSpinner:{type:Boolean,default:!1}},data(){return{viewIndex:0,previewMode:useCardPreviewModeStore()}},computed:{spinner(){return this.views.length>1}},created(){console.log(`[CardBrowser] Card browser created. Cards now in 'prewviewMode'`),this.previewMode.setPreviewMode(!0)},unmounted(){console.log(`[CardBrowser] Card browser unmounted. Cards no longer in 'prewviewMode'`),this.previewMode.setPreviewMode(!1)},methods:{incrementView(){this.viewIndex++,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length},decrementView(){this.viewIndex--,this.viewIndex=(this.viewIndex+this.views.length)%this.views.length}}}),ur={key:0,class:`text-subtitle-1 pa-2`},__name$2(_sfc_render$2$2,`_sfc_render$2`),__name(_sfc_render$2$2,`_sfc_render`),dr=F$3(lr,[[`render`,_sfc_render$2$2]]),fr=defineComponent({name:`CourseTagFilterWidget`,props:{courseId:{type:String,required:!0},modelValue:{type:Object,default:void 0}},emits:[`update:modelValue`],setup(t,{emit:c}){let u=ref(!0),d=ref([]),m=ref({}),g=ref(t.modelValue?{...t.modelValue}:emptyTagFilter()),b=computed(()=>d.value.filter(t=>!g.value.include.includes(t))),S=computed(()=>hasActiveFilter(g.value)),fuzzyFilter=(t,c)=>{if(!c)return!0;let u=c.toLowerCase(),d=t.toLowerCase(),m=0;for(let t=0;t<d.length&&m<u.length;t++)d[t]===u[m]&&m++;return m===u.length};watch(()=>t.modelValue,t=>{t?g.value={...t}:g.value=emptyTagFilter()},{deep:!0}),watch(g,t=>{c(`update:modelValue`,{...t})},{deep:!0}),watch(()=>t.courseId,async t=>{t&&await loadTags()});async function loadTags(){u.value=!0;try{let c=await getDataLayer().getCourseDB(t.courseId).getCourseTagStubs();d.value=[],m.value={};for(let t of c.rows)if(t.doc){let c=t.doc;d.value.push(c.name),c.snippet&&(m.value[c.name]=c.snippet)}d.value.sort((t,c)=>t.localeCompare(c))}catch(t){console.error(`[CourseTagFilterWidget] Failed to load tags:`,t),d.value=[],m.value={}}finally{u.value=!1}}return onMounted(()=>{t.courseId&&loadTags()}),{loading:u,availableTags:d,availableTagsForExclude:b,tagSnippets:m,localFilter:g,hasActiveFilter:S,fuzzyFilter}}}),pr={class:`course-tag-filter-widget`},mr={key:0,class:`filter-summary text-caption mt-2`},hr={key:0},gr={key:1},_r={key:2},__name$2(_sfc_render$1$5,`_sfc_render$1`),__name(_sfc_render$1$5,`_sfc_render`),vr=F$3(fr,[[`render`,_sfc_render$1$5],[`__scopeId`,`data-v-e1ba963b`]]),$$2={min:0,startingMax:2,absoluteMax:10},yr=`UserTagPreferenceFilter`,br=defineComponent({name:`UserTagPreferences`,props:{courseId:{type:String,required:!1,default:``},sliderConfig:{type:Object,required:!1,default:()=>({})}},emits:[`preferences-saved`,`preferences-changed`],data(){return{loading:!0,saving:!1,saveError:``,saveSuccess:!1,preferences:{boost:{}},savedPreferences:{boost:{}},tagMaxRanges:{},availableTags:[],tagToAdd:null,courseDB:null,user:null}},computed:{sliderConfigResolved(){return{min:this.sliderConfig.min??$$2.min,startingMax:this.sliderConfig.startingMax??$$2.startingMax,absoluteMax:this.sliderConfig.absoluteMax??$$2.absoluteMax}},tagNames(){return Object.keys(this.preferences.boost).sort()},globalSliderMax(){let t=Object.values(this.tagMaxRanges);return t.length===0?this.sliderConfigResolved.startingMax:Math.max(...t)},availableTagsToAdd(){let t=new Set(Object.keys(this.preferences.boost));return this.availableTags.filter(c=>!t.has(c.name))},hasChanges(){let t=Object.keys(this.preferences.boost).sort(),c=Object.keys(this.savedPreferences.boost).sort();return t.length!==c.length||t.join(`,`)!==c.join(`,`)?!0:t.some(t=>this.preferences.boost[t]!==this.savedPreferences.boost[t])}},watch:{courseId:{immediate:!0,async handler(t){t?await this.loadPreferences():this.loading=!1}}},methods:{async loadPreferences(){this.loading=!0,this.saveError=``;try{if(this.user=await getCurrentUser()??null,!this.user)throw Error(`User not available`);this.courseDB=getDataLayer().getCourseDB(this.courseId),this.availableTags=(await this.courseDB.getCourseTagStubs()).rows.map(t=>t.doc).filter(Boolean);let t=await this.user.getStrategyState(this.courseId,yr);t?this.preferences.boost={...t.boost}:this.preferences.boost={},this.savedPreferences.boost={...this.preferences.boost},this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let c=this.preferences.boost[t],u=this.sliderConfigResolved.startingMax;c>u?this.tagMaxRanges[t]=Math.min(Math.ceil(c),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=u})}catch(t){console.error(`Failed to load preferences:`,t),this.saveError=`Failed to load preferences. Please try again.`}finally{this.loading=!1}},addTag(t){t&&!(t in this.preferences.boost)&&(this.preferences.boost[t]=1,this.tagMaxRanges[t]=this.sliderConfigResolved.startingMax,this.$emit(`preferences-changed`,this.preferences)),this.$nextTick(()=>{this.tagToAdd=null})},removeTag(t){delete this.preferences.boost[t],delete this.tagMaxRanges[t],this.$emit(`preferences-changed`,this.preferences)},updateBoost(t,c){this.preferences.boost[t]=c,this.$emit(`preferences-changed`,this.preferences)},expandSliderRange(t){let c=this.globalSliderMax;if(c<this.sliderConfigResolved.absoluteMax){let u=c+1;Object.keys(this.tagMaxRanges).forEach(t=>{this.tagMaxRanges[t]=Math.max(this.tagMaxRanges[t],u)}),this.preferences.boost[t]=u,this.$emit(`preferences-changed`,this.preferences)}},formatMultiplier(t){return t===0?`0x`:t<.1?t.toFixed(2)+`x`:t.toFixed(1)+`x`},resetToSaved(){this.preferences.boost={...this.savedPreferences.boost},this.saveSuccess=!1,this.saveError=``,this.tagMaxRanges={},Object.keys(this.preferences.boost).forEach(t=>{let c=this.preferences.boost[t],u=this.sliderConfigResolved.startingMax;c>u?this.tagMaxRanges[t]=Math.min(Math.ceil(c),this.sliderConfigResolved.absoluteMax):this.tagMaxRanges[t]=u})},async savePreferences(){if(!this.user||!this.courseId){this.saveError=`Unable to save - user or course not available`;return}this.saving=!0,this.saveError=``,this.saveSuccess=!1;try{let t={boost:{...this.preferences.boost},updatedAt:new Date().toISOString()};await this.user.putStrategyState(this.courseId,yr,t),this.savedPreferences.boost={...this.preferences.boost},this.saveSuccess=!0,this.$emit(`preferences-saved`,t)}catch(t){console.error(`Failed to save preferences:`,t),this.saveError=`Failed to save preferences. Please try again.`}finally{this.saving=!1}}}}),xr={key:1},Sr={class:`mb-6`},Cr={class:`text-subtitle-1 font-weight-bold mb-2`},wr={class:`d-flex align-center ga-3 w-100`},Tr={class:`text-body-2 flex-shrink-0`,style:{"min-width":`60px`,"text-align":`right`}},Er={key:2,class:`d-flex justify-center py-8`},__name$2(_sfc_render$27,`_sfc_render`),Dr=F$3(br,[[`render`,_sfc_render$27],[`__scopeId`,`data-v-8fb14605`]])})),init_CourseWare=__esmMin((()=>{}));function randomInt(t,c){return Math.floor(Math.random()*(c-t+1))+t}function shuffle(t){let c=[...t];for(let t=c.length-1;t>0;t--){let u=Math.floor(Math.random()*(t+1));[c[t],c[u]]=[c[u],c[t]]}return c}function gradeSpellingAttempt(t,c){let u=Array(c.length).fill(`_`),d=t.split(``);console.log(t,c),console.log(`Attempt char codes:`,t.split(``).map(t=>t.charCodeAt(0))),console.log(`Answer char codes:`,c.split(``).map(t=>t.charCodeAt(0)));for(let t=0;t<c.length;t++)t<d.length&&d[t]===c[t]&&(u[t]=d[t],d[t]=``);for(let t=c.length-1;t>=0;t--)if(u[t]===`_`){let m=d.findIndex(u=>u===c[t]);m!==-1&&(u[t]=c[t],d[m]=``)}return console.log(u.join(` `)),u.join(` `)}function _sfc_render$4(t,c,u,d,m,g){let b=resolveComponent(`audio-auto-player`),S=resolveComponent(`markdown-renderer`),C=resolveComponent(`radio-multiple-choice`),w=resolveComponent(`v-spacer`),T=resolveComponent(`v-btn`),E=resolveComponent(`v-card-actions`);return openBlock(),createElementBlock(`div`,j$1,[t.hasAudio?(openBlock(),createBlock(b,{key:0,src:t.audioURL},null,8,[`src`])):createCommentVNode(``,!0),t.hasImage?(openBlock(!0),createElementBlock(Fragment,{key:1},renderList(t.imageURLs,(t,c)=>(openBlock(),createElementBlock(`img`,{key:c,src:t},null,8,M$1))),128)):createCommentVNode(``,!0),t.markdownText?(openBlock(),createBlock(S,{key:2,md:t.markdownText},null,8,[`md`])):createCommentVNode(``,!0),t.question?.options?(openBlock(),createBlock(C,{key:3,"choice-list":t.truncatedOptions},null,8,[`choice-list`])):t.priorAttempts==1?(openBlock(),createElementBlock(`div`,N$1,[createBaseVNode(`span`,null,toDisplayString(t.obscuredAnswer),1)])):t.priorAttempts==2?(openBlock(),createElementBlock(`div`,P$1,[createBaseVNode(`span`,null,toDisplayString(t.someAnswer),1)])):createCommentVNode(``,!0),t.isQuestion?createCommentVNode(``,!0):(openBlock(),createBlock(E,{key:6},{default:withCtx(()=>[createVNode(w),createVNode(T,{color:`primary`,autofocus:`autofocus`,onClick:t.handleNext},{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(` Next `)])),_:1},8,[`onClick`])]),_:1}))])}function splitText(t,c,u){let d=t.split(c),m=d[0],g=d[1].split(u);return{left:m,middle:g[0],right:g[1]}}var _BlanksCard,k,A,j$1,M$1,N$1,P$1,F$1,I$1,CourseWare,init_CourseWare_BTFRjgBR=__esmMin((()=>{init_shapes_BQUVJdp5(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_CourseWare(),init_defineProperty(),k=defineComponent({name:`FillInView`,components:{MarkdownRenderer:defineAsyncComponent(()=>Promise.resolve().then(()=>(init_common_ui_es(),common_ui_es_exports)).then(t=>t.MarkdownRenderer)),RadioMultipleChoice:fn,AudioAutoPlayer:ut$2},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`FillInView`),d=useQuestionView(u);d.question.value=new I$1(t.data);let m=ref(),g=computed(()=>{if(!d.question.value)throw u.logger.error(`Question not initialized`),Error(`Question not initialized`);return d.question.value});onMounted(()=>{try{d.question.value||(d.question.value=new I$1(t.data)),d.question.value.options&&(m.value=shuffle(getTruncatedList()))}catch(t){u.logger.error(`Failed to initialize question:`,t)}}),onUnmounted(()=>{d.question.value=void 0});let b=computed(()=>m.value??[]),S=computed(()=>!!t.data[0][`image-1`]),C=computed(()=>{if(!S.value)return[``];let c=[],u=1;for(;t.data[0][`image-${u}`];)c.push(URL.createObjectURL(t.data[0][`image-${u}`])),u++;return c}),w=computed(()=>!!t.data[0][`audio-1`]),T=computed(()=>g.value?.mdText||``),E=computed(()=>{if(!w.value)return[``];let c=[],u=1;for(;t.data[0][`audio-${u}`];)c.push(URL.createObjectURL(t.data[0][`audio-${u}`])),u++;return c}),D=computed(()=>{if(g.value.answers)return g.value.answers[Math.floor(g.value.answers.length*Math.random())];throw Error(`No answers provided`)}),O=computed(()=>{let t=D.value;if(console.log(`Prior answers: ${d.priorAnswers.value}`),t&&d.priorAnswers.value[0]?.[0]&&d.priorAnswers.value[0][1]===`UserInputString`)return gradeSpellingAttempt(d.priorAnswers.value[0][0],t);if(console.log(`found no UserInputString`),D.value){let t=``;for(let c=0;c<D.value.length;c++)t+=`_ `;return t}return``}),Or=computed(()=>!!(g.value.answers&&g.value.answers.length>0)),getTruncatedList=()=>{if(!g.value?.options)return;if(g.value.options.length<=6)return g.value.options;let c=[];c.push(g.value.answers[Math.floor(Math.random()*g.value.answers.length)]);let u=shuffle(g.value.options.filter(t=>g.value.answers?.indexOf(t)===-1));return t.modifyDifficulty&&(console.log(`Modifying difficulty: ${t.modifyDifficulty}`),u=t.modifyDifficulty<-200?u.slice(0,1):t.modifyDifficulty<-150?u.slice(0,2):t.modifyDifficulty<-100?u.slice(0,3):t.modifyDifficulty<-50?u.slice(0,4):u.slice(0,5)),c.push(...u.slice(0,5)),c},handleNext=()=>{d.submitAnswer(``)};return watch(()=>t.data,t=>{try{d.question.value=new I$1(t),d.question.value?.options&&(m.value=shuffle(getTruncatedList()))}catch(t){u.logger.error(`Failed to initialize/update question:`,t)}},{deep:!0}),{...u,...d,question:g,truncatedOptions:b,hasImage:S,imageURLs:C,hasAudio:w,audioURL:E,obscuredAnswer:O,someAnswer:D,isQuestion:Or,handleNext,markdownText:T}}}),A=__name$1((t,c)=>{let u=t.__vccOpts||t;for(let[t,d]of c)u[t]=d;return u},`default`),j$1={"data-viewable":`FillInView`},M$1=[`src`],N$1={key:4,class:`text-center text-h6`},P$1={key:5,class:`text-center text-h6`},__name$2(_sfc_render$4,`_sfc_render`),F$1=A(k,[[`render`,_sfc_render$4],[`__scopeId`,`data-v-f91502f8`]]),I$1=(_BlanksCard=class BlanksCard extends Question{splitTextToken(t){if(containsComponent(t)){let c=splitText(t.text,`{{`,`}}`),u=splitText(t.raw,`{{`,`}}`),d=[];return u.left.length>0&&d.push({type:`text`,raw:u.left,text:c.left}),u.middle.length>0&&d.push({type:`text`,raw:`{{`+u.middle+`}}`,text:`{{`+c.middle+`}}`}),u.right.length>0&&d.push({type:`text`,raw:u.right,text:c.right}),d}else return[t]}optionsFromString(t){if(!t.startsWith(`{{`)||!t.endsWith(`}}`))throw Error(`string ${t} is not fill-in text - must look like "{{someText}}"`);t=t.substring(2,t.length-2);let c=t.split(`||`);if(c.length>1){let t=c[0].split(`|`).map(t=>t.trim()),u=c[1].split(`|`).map(t=>t.trim()).filter(c=>!t.includes(c));return u.push(t[randomInt(0,t.length-1)]),{answers:t,options:shuffle(u)}}else return{answers:[t.trim()],options:null}}constructor(t){var _super=(...t)=>(super(...t),_defineProperty$2(this,`mdText`,``),_defineProperty$2(this,`answers`,null),_defineProperty$2(this,`options`,null),this);_super(t),this.mdText=t[0].Input,this.mdText===void 0&&(this.mdText=``);let c=splitByDelimiters(this.mdText,`{{`,`}}`),u=[];for(let t=0;t<c.length;t++){let d=c[t],m=d.trim();if(m.startsWith(`{{`)&&m.endsWith(`}}`))if(isInlineComponent(m.slice(2,-2).trim()))u.push(d);else try{let t=this.optionsFromString(d);this.answers=t.answers,this.options=t.options,this.options?.length?u.push(`{{ || }}`):u.push(`{{ }}`)}catch{u.push(d)}else u.push(d)}this.mdText=u.join(``)}isCorrect(t){if(console.log(`answers:${this.answers}\nuser answer: ${JSON.stringify(t)}`),typeof t==`string`){if(this.answers)return this.answers.includes(t);if(t===``)return!0;throw Error(`Question has no configured answers!`)}else if(Array.isArray(t)){if(this.answers)return t.every(t=>this.answers.includes(t));throw Error(`Question has no configured answers!`)}else return this.isCorrectRadio(t)}dataShapes(){return BlanksCard.dataShapes}views(){return BlanksCard.views}isCorrectRadio(t){return this.answers?this.answers.includes(t.choiceList[t.selection]):!1}},_defineProperty$2(_BlanksCard,`dataShapes`,l),_defineProperty$2(_BlanksCard,`views`,[F$1]),_BlanksCard),CourseWare=class{get questions(){return this.questionList}get allViews(){let t=[];return this.questionList.forEach(c=>{c.views.forEach(c=>{t.push(c)})}),t}get allViewsMap(){let t={};return this.allViews.forEach(c=>{if(c.name)t[c.name]=c;else throw Error(`View has no name`)}),t}constructor(t,c){_defineProperty$2(this,`name`,void 0),_defineProperty$2(this,`questionList`,void 0),this.name=t,this.questionList=c,this.questionList=this.questionList.concat(this.getBaseQTypes())}getQuestion(t){let c=t.replace(/^_/,``).replace(/\d+$/,``),u=this.questionList.map(t=>t.name),d=this.questionList.find(u=>{let d=u.name.replace(/^_/,``).replace(/\d+$/,``);return u.name===t||d===c});if(d)return d.name!==t&&console.debug(`[CourseWare.getQuestion] stripped-exact: "${t}" → "${d.name}" (registered: ${u.join(`, `)})`),d;let m=this.questionList.filter(u=>{let d=u.name.replace(/^_/,``).replace(/\d+$/,``);return u.name.includes(c)||t.includes(d)});if(m.length===0){console.warn(`[CourseWare.getQuestion] NO MATCH: "${t}" (base: "${c}") not found in [${u.join(`, `)}]`);return}m.sort((c,u)=>Math.abs(c.name.length-t.length)-Math.abs(u.name.length-t.length));let g=m[0];return console.warn(`[CourseWare.getQuestion] FUZZY: "${t}" → "${g.name}" (candidates: ${m.map(t=>t.name).join(`, `)}; registered: ${u.join(`, `)})`),g}getBaseQTypes(){return[I$1]}}})),init_piano=__esmMin((()=>{}));function isNamed(t){return!!(typeof t==`object`&&t&&typeof t.name==`string`)}function isPitch(t){return!!(typeof t==`object`&&t&&typeof t.step==`number`&&typeof t.alt==`number`)}function encode(t){let{step:c,alt:u,oct:d,dir:m=1}=t,g=j[c]+7*u;if(d===void 0)return[m*g];let b=d-ne$1[c]-4*u;return[m*g,m*b]}function decode(t){let[c,u,d]=t,m=re$1[unaltered(c)],g=Math.floor((c+1)/7);return u===void 0?{step:m,alt:g,dir:d}:{step:m,alt:g,oct:u+4*g+ne$1[m],dir:d}}function unaltered(t){let c=(t+1)%7;return c<0?7+c:c}function note(t){let c=M.get(t);if(c)return c;let u=typeof t==`string`?parse$1(t):isPitch(t)?note(pitchName(t)):isNamed(t)?note(t.name):ie$1;return M.set(t,u),u}function tokenizeNote(t){let c=ae$1.exec(t);return[c[1].toUpperCase(),c[2].replace(/x/g,`##`),c[3],c[4]]}function coordToNote(t){return note(decode(t))}function parse$1(t){let c=tokenizeNote(t);if(c[0]===``||c[3]!==``)return ie$1;let u=c[0],d=c[1],m=c[2],g=(u.charCodeAt(0)+3)%7,b=accToAlt(d),S=m.length?+m:void 0,C=encode({step:g,alt:b,oct:S}),w=u+d+m,T=u+d,E=(N[g]+b+120)%12,D=S===void 0?mod(N[g]+b,12)-1188:N[g]+b+12*(S+1),O=D>=0&&D<=127?D:null;return{empty:!1,acc:d,alt:b,chroma:E,coord:C,freq:S===void 0?null:2**((D-69)/12)*440,height:D,letter:u,midi:O,name:w,oct:S,pc:T,step:g}}function pitchName(t){let{step:c,alt:u,oct:d}=t,m=stepToLetter(c);if(!m)return``;let g=m+altToAcc(u);return d||d===0?g+d:g}function tokenizeInterval(t){let c=oe$1.exec(`${t}`);return c===null?[``,``]:c[1]?[c[1],c[2]]:[c[4],c[3]]}function interval(t){return typeof t==`string`?F[t]||(F[t]=parse$1$1(t)):isPitch(t)?interval(pitchName$1(t)):isNamed(t)?interval(t.name):P}function parse$1$1(t){let c=tokenizeInterval(t);if(c[0]===``)return P;let u=+c[0],d=c[1],m=(Math.abs(u)-1)%7,g=L[m];if(g===`M`&&d===`P`)return P;let b=g===`M`?`majorable`:`perfectable`,S=``+u+d,C=u<0?-1:1,w=u===8||u===-8?u:C*(m+1),T=qToAlt(b,d),E=Math.floor((Math.abs(u)-1)/7);return{empty:!1,name:S,num:u,q:d,step:m,alt:T,dir:C,type:b,simple:w,semitones:C*(I[m]+T+12*E),chroma:(C*(I[m]+T)%12+12)%12,coord:encode({step:m,alt:T,oct:E,dir:C}),oct:E}}function coordToInterval(t){let[c,u=0]=t;return interval(decode(c*7+u*12<0?[-c,-u,-1]:[c,u,1]))}function qToAlt(t,c){return c===`M`&&t===`majorable`||c===`P`&&t===`perfectable`?0:c===`m`&&t===`majorable`?-1:/^A+$/.test(c)?c.length:/^d+$/.test(c)?-1*(t===`perfectable`?c.length:c.length+1):0}function pitchName$1(t){let{step:c,alt:u,oct:d=0,dir:m}=t;if(!m)return``;let g=c+1+7*d,b=m<0?`-`:``,S=L[c]===`M`?`majorable`:`perfectable`;return b+g+altToQ(S,u)}function altToQ(t,c){return c===0?t===`majorable`?`M`:`P`:c===-1&&t===`majorable`?`m`:c>0?fillStr(`A`,c):fillStr(`d`,t===`perfectable`?c:c+1)}function transpose$2(t,c){let u=note(t),d=interval(c);if(u.empty||d.empty)return``;let m=u.coord,g=d.coord;return coordToNote(m.length===1?[m[0]+g[0]]:[m[0]+g[0],m[1]+g[1]]).name}function distance$1(t,c){let u=note(t),d=note(c);if(u.empty||d.empty)return``;let m=u.coord,g=d.coord,b=g[0]-m[0];return coordToInterval([b,m.length===2&&g.length===2?g[1]-m[1]:-Math.floor(b*7/12)]).name}function rotate(t,c){let u=c.length,d=(t%u+u)%u;return c.slice(d,u).concat(c.slice(0,d))}function isChroma(t){return se$1.test(t)}function get$8(t){let c=isChroma(t)?t:isPcsetNum(t)?setNumToChroma(t):Array.isArray(t)?listToChroma(t):isPcset(t)?t.chroma:R.chroma;return z[c]=z[c]||chromaToPcset(c)}function chromaToIntervals(t){let c=[];for(let u=0;u<12;u++)t.charAt(u)===`1`&&c.push(ce$1[u]);return c}function chromaRotations(t){let c=t.split(``);return c.map((t,u)=>rotate(u,c).join(``))}function chromaToPcset(t){let c=chromaToNumber(t),u=chromaRotations(t).map(chromaToNumber).filter(t=>t>=2048).sort()[0];return{empty:!1,name:``,setNum:c,chroma:t,normalized:setNumToChroma(u),intervals:chromaToIntervals(t)}}function listToChroma(t){if(t.length===0)return R.chroma;let c,u=[0,0,0,0,0,0,0,0,0,0,0,0];for(let d=0;d<t.length;d++)c=note(t[d]),c.empty&&(c=interval(t[d])),c.empty||(u[c.chroma]=1);return u.join(``)}function get$7(t){return V[t]||ue}function all$2(){return B.slice()}function add$3(t,c,u){let d=getQuality(t),m={...get$8(t),name:u||``,quality:d,intervals:t,aliases:c};B.push(m),m.name&&(V[m.name]=m),V[m.setNum]=m,V[m.chroma]=m,m.aliases.forEach(t=>addAlias$1(m,t))}function addAlias$1(t,c){V[c]=t}function getQuality(t){let has=c=>t.indexOf(c)!==-1;return has(`5A`)?`Augmented`:has(`3M`)?`Major`:has(`5d`)?`Diminished`:has(`3m`)?`Minor`:`Unknown`}function get$6(t){return U$1[t]||fe}function all$1(){return H.slice()}function add$2(t,c,u=[]){let d={...get$8(t),name:c,intervals:t,aliases:u};return H.push(d),U$1[d.name]=d,U$1[d.setNum]=d,U$1[d.chroma]=d,d.aliases.forEach(t=>addAlias(d,t)),d}function addAlias(t,c){U$1[c]=t}function tokenize$2(t){let[c,u,d,m]=tokenizeNote(t);return c===``?[``,t]:c===`A`&&m===`ug`?[``,`aug`]:!m&&(d===`4`||d===`5`)?[c+u,d]:pe$1.test(d)?[c+u,d+m]:[c+u+d,m]}function get$5(t){if(t===``)return W$1;if(Array.isArray(t)&&t.length===2)return getChord(t[1],t[0]);{let[c,u]=tokenize$2(t),d=getChord(u,c);return d.empty?getChord(t):d}}function getChord(t,c,u){let d=get$7(t),m=note(c||``),g=note(u||``);if(d.empty||c&&m.empty||u&&g.empty)return W$1;let b=distance$1(m.pc,g.pc),S=d.intervals.indexOf(b)+1;if(!g.empty&&!S)return W$1;let C=Array.from(d.intervals);for(let t=1;t<S;t++){let t=C[0][0],c=C[0][1],u=parseInt(t,10)+7;C.push(`${u}${c}`),C.shift()}let w=m.empty?[]:C.map(t=>transpose$2(m,t));t=d.aliases.indexOf(t)===-1?d.aliases[0]:t;let T=`${m.empty?``:m.pc}${t}${g.empty||S<=1?``:`/`+g.pc}`,E=`${c?m.pc+` `:``}${d.name}${S>1&&u?` over `+g.pc:``}`;return{...d,name:E,symbol:T,type:d.name,root:g.name,intervals:C,rootDegree:S,tonic:m.name,notes:w}}function add$1(t,c,u){he.push({empty:!1,dots:``,name:``,value:1/t,fraction:t<1?[1/t,1]:[1,t],shorthand:c,names:u})}function names$1(){return`1P 2M 3M 4P 5P 6m 7m`.split(` `)}function simplify$1(t){let c=interval(t);return c.empty?``:c.simple+c.q}function invert(t){let c=interval(t);return c.empty?``:interval({step:(7-c.step)%7,alt:c.type===`perfectable`?-c.alt:-(c.alt+1),oct:c.oct,dir:c.dir}).name}function fromSemitones(t){let c=t<0?-1:1,u=Math.abs(t),d=u%12,m=Math.floor(u/12);return c*(ve[d]+7*m)+ye[d]}function combinator(t){return(c,u)=>{let d=interval(c).coord,m=interval(u).coord;if(d&&m)return coordToInterval(t(d,m)).name}}function freqToMidi(t){let c=12*(Math.log(t)-we)/Ce+69;return Math.round(c*100)/100}function midiToNoteName(t,c={}){if(isNaN(t)||t===-1/0||t===1/0)return``;t=Math.round(t);let u=(c.sharps===!0?Te:Ee)[t%12];return c.pitchClass?u:u+(Math.floor(t/12)-1)}function names(t){return t===void 0?De.slice():Array.isArray(t)?onlyNotes(t).map(toName):[]}function fromMidi(t){return midiToNoteName(t)}function fromFreq(t){return midiToNoteName(freqToMidi(t))}function fromFreqSharps(t){return midiToNoteName(freqToMidi(t),{sharps:!0})}function fromMidiSharps(t){return midiToNoteName(t,{sharps:!0})}function transposeFifths(t,c){let u=G$1(t);if(u.empty)return``;let[d,m]=u.coord;return coordToNote(m===void 0?[d+c]:[d+c,m]).name}function sortedNames(t,c){return c||(c=ascending),onlyNotes(t).sort(c).map(toName)}function sortedUniqNames(t){return sortedNames(t,ascending).filter((t,c,u)=>c===0||t!==u[c-1])}function nameBuilder(t){return c=>{let u=G$1(c);if(u.empty)return``;let d=t?u.alt>0:u.alt<0,m=u.midi===null;return midiToNoteName(u.midi||u.chroma,{sharps:d,pitchClass:m})}}function get$2(t){return typeof t==`string`?Fe[t]||(Fe[t]=parse(t)):typeof t==`number`?get$2(J$1[t]||``):isPitch(t)?fromPitch(t):isNamed(t)?get$2(t.name):Pe}function fromPitch(t){return get$2(altToAcc(t.alt)+J$1[t.step])}function tokenize$1(t){return Ie.exec(t)||[``,``,``,``]}function parse(t){let[c,u,d,m]=tokenize$1(t);if(!d)return Pe;let g=d.toUpperCase(),b=J$1.indexOf(g),S=accToAlt(u);return{empty:!1,name:c,roman:d,interval:interval({step:b,alt:S,dir:1}).name,acc:u,chordType:m,alt:S,step:b,major:d===g,oct:0,dir:1}}function get$1(t){return typeof t==`string`?Y$1[t.toLowerCase()]||ze:t&&t.name?get$1(t.name):ze}function toMode(t){let[c,u,d,m,g,b,S]=t,C=S?[S]:[],w=Number(u).toString(2);return{empty:!1,intervals:chromaToIntervals(w),modeNum:c,chroma:w,normalized:w,name:m,setNum:u,alt:d,triad:g,seventh:b,aliases:C}}function eventsToSyllableSequence(t){let c=[];t=t.filter(t=>t.type===`noteon`).sort((t,c)=>t.timestamp-c.timestamp);for(let u=10;u>0;u--)for(let d=0;d<t.length-u+1;d++)try{c.push(new X$1(t.slice(d,d+u))),t.splice(d,u),d=-1}catch{}return new He(c)}function _sfc_render$3(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,null,[(openBlock(),createElementBlock(`svg`,{width:510,height:Math.max(3*(t.high-t.low)+10,0)},[(openBlock(!0),createElementBlock(Fragment,null,renderList(t.seq.syllables,c=>(openBlock(),createElementBlock(Fragment,null,[(openBlock(!0),createElementBlock(Fragment,null,renderList(c.notes,u=>(openBlock(),createElementBlock(`circle`,{key:c.timestamp+`-`+u.note.number,cx:(c.timestamp-t.firstTS)*500/(t.lastTS-t.firstTS)+4,cy:3*(t.high-u.note.number)+4,alt:u.note.name,r:`3`,fill:u.isCorrect?`black`:u.isMissing?`none`:`red`,stroke:u.isMissing?`red`:`none`,onMouseenter:c=>t.sayNote(u)},null,40,Ge))),128))],64))),256))],8,We))])}function _sfc_render$2(t,c,u,d,m,g){let b=resolveComponent(`sodipodi:namedview`),S=resolveComponent(`dc:format`),C=resolveComponent(`dc:type`),w=resolveComponent(`dc:title`),T=resolveComponent(`cc:Work`),E=resolveComponent(`rdf:RDF`);return openBlock(),createElementBlock(`svg`,Je,[c[1]||(c[1]=createBaseVNode(`defs`,{id:`defs2`},null,-1)),createVNode(b,{id:`base`,"inkscape:window-maximized":`1`,"inkscape:window-y":`726`,"inkscape:window-x":`1491`,"inkscape:window-height":`1321`,"inkscape:window-width":`2400`,showborder:`false`,showgrid:`false`,"inkscape:document-rotation":`0`,"inkscape:current-layer":`layer1`,"inkscape:document-units":`mm`,"inkscape:cy":`255.88343`,"inkscape:cx":`754.94284`,"inkscape:zoom":`0.98994949`,"inkscape:pageshadow":`2`,"inkscape:pageopacity":`0.0`,borderopacity:`1.0`,bordercolor:`#666666`,pagecolor:`#ffffff`}),createBaseVNode(`metadata`,Ye,[createVNode(E,null,{default:withCtx(()=>[createVNode(T,{"rdf:about":``},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[0]||(c[0]=[createTextVNode(`image/svg+xml`)])),_:1}),createVNode(C,{"rdf:resource":`http://purl.org/dc/dcmitype/StillImage`}),createVNode(w)]),_:1})]),_:1})]),createBaseVNode(`g`,Xe,[createBaseVNode(`rect`,{id:`rect845`,y:`152.19064`,x:`-150.12129`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(0))},null,4),createBaseVNode(`rect`,{id:`rect845-9`,style:normalizeStyle(t.style(2)),width:`17.486626`,height:`73.220116`,x:`-132.63466`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-6`,style:normalizeStyle(t.style(4)),width:`17.486626`,height:`73.220116`,x:`-115.14803`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-4`,style:normalizeStyle(t.style(5)),width:`17.486626`,height:`73.220116`,x:`-97.661407`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-92`,style:normalizeStyle(t.style(7)),width:`17.486626`,height:`73.220116`,x:`-80.174782`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-3`,style:normalizeStyle(t.style(9)),width:`17.486626`,height:`73.220116`,x:`-62.688156`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-0`,style:normalizeStyle(t.style(11)),width:`17.486626`,height:`73.220116`,x:`-45.20153`,y:`152.19064`},null,4),createBaseVNode(`rect`,{id:`rect845-30`,style:normalizeStyle(t.style(t.white)),width:`17.486626`,height:`73.220116`,x:`-27.714905`,y:`152.10745`},null,4),createBaseVNode(`rect`,{id:`rect898`,ry:`0`,y:`152.10744`,x:`-138.43532`,height:`54.415863`,width:`10.466455`,style:normalizeStyle(t.style(1))},null,4),createBaseVNode(`rect`,{id:`rect898-3`,style:normalizeStyle(t.style(3)),width:`10.466455`,height:`54.415863`,x:`-120.84978`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-7`,style:normalizeStyle(t.style(6)),width:`10.466455`,height:`54.415863`,x:`-85.678711`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-8`,style:normalizeStyle(t.style(8)),width:`10.466455`,height:`54.415863`,x:`-68.09317`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-1`,style:normalizeStyle(t.style(10)),width:`10.466455`,height:`54.415863`,x:`-50.507633`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect845-30-1`,y:`152.10745`,x:`-10.228278`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(t.white))},null,4),createBaseVNode(`rect`,{id:`rect845-30-9`,y:`152.10744`,x:`-167.60791`,height:`73.220116`,width:`17.486626`,style:normalizeStyle(t.style(t.white))},null,4),createBaseVNode(`rect`,{id:`rect898-4`,style:normalizeStyle(t.style(t.black)),width:`10.466455`,height:`54.415863`,x:`-15.336554`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-74`,style:normalizeStyle(t.style(t.black)),width:`4.4679713`,height:`54.415863`,x:`-167.60791`,y:`152.10744`,ry:`0`},null,4),createBaseVNode(`rect`,{id:`rect898-10`,style:normalizeStyle(t.style(t.black)),width:`5.1863246`,height:`54.507248`,x:`2.2092075`,y:`152.06175`,ry:`0`},null,4)])])}function _sfc_render$1$1(t,c,u,d,m,g){let b=resolveComponent(`note-display`),S=resolveComponent(`v-icon`),C=resolveComponent(`v-btn`),w=resolveComponent(`syllable-seq-vis`);return t.initialized?(openBlock(),createElementBlock(`div`,Qe,[t.state===`ready`?(openBlock(),createElementBlock(`div`,$e,[createBaseVNode(`div`,et,[createTextVNode(toDisplayString(t.promptText)+` `,1),createVNode(b,{chroma:t.firstNoteChroma},null,8,[`chroma`])]),createBaseVNode(`div`,tt,[c[0]||(c[0]=createTextVNode(`Listen...`)),t.recording?(openBlock(),createElementBlock(`span`,nt,` and Repeat`)):createCommentVNode(``,!0)]),createBaseVNode(`div`,rt,[createBaseVNode(`div`,it,null,512)]),createVNode(C,{color:`primary`,autofocus:``,onClick:t.clearAttempt},{default:withCtx(()=>[c[2]||(c[2]=createTextVNode(` Play again `)),createVNode(S,{end:``},{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`volume_up`)])),_:1})]),_:1},8,[`onClick`]),(openBlock(),createBlock(w,{key:0,ref:`inputVisRef`,seq:t.inputSeq,"last-t-ssuggestion":t.lastTSsuggestion},null,8,[`seq`,`last-t-ssuggestion`])),t.graded?(openBlock(),createBlock(w,{key:1,seq:t.gradedSeq},null,8,[`seq`])):createCommentVNode(``,!0)])):t.state===`nodevice`?(openBlock(),createElementBlock(`div`,at,`No midi device detected. Please attach one!`)):t.state===`notsupported`?(openBlock(),createElementBlock(`div`,ot,c[3]||(c[3]=[createBaseVNode(`p`,null,`This exercise requires a midi input device, which is not supported by this browser ☹`,-1),createBaseVNode(`div`,null,[createBaseVNode(`p`,null,`Please try again with one of the following browsers:`),createBaseVNode(`ul`,null,[createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://www.google.com/chrome/`},`Google Chrome`)]),createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://www.microsoft.com/edge`},`Microsoft Edge`)]),createBaseVNode(`li`,null,[createBaseVNode(`a`,{href:`https://brave.com/`},`Brave`)])])],-1)]))):createCommentVNode(``,!0)])):createCommentVNode(``,!0)}function _sfc_render(t,c,u,d,m,g){let b=resolveComponent(`sodipodi:namedview`),S=resolveComponent(`dc:format`),C=resolveComponent(`dc:type`),w=resolveComponent(`dc:title`),T=resolveComponent(`cc:Work`),E=resolveComponent(`rdf:RDF`);return openBlock(),createElementBlock(`div`,ut,[createBaseVNode(`div`,dt,[c[0]||(c[0]=createTextVNode(` Play the note: `)),createBaseVNode(`span`,ft,toDisplayString(t.note),1)]),t.graded?(openBlock(),createElementBlock(`svg`,pt,[c[2]||(c[2]=createBaseVNode(`defs`,{id:`defs2`},null,-1)),createVNode(b,{id:`base`,"inkscape:window-maximized":`1`,"inkscape:window-y":`726`,"inkscape:window-x":`1491`,"inkscape:window-height":`1321`,"inkscape:window-width":`2400`,showborder:`false`,showgrid:`false`,"inkscape:document-rotation":`0`,"inkscape:current-layer":`layer1`,"inkscape:document-units":`mm`,"inkscape:cy":`255.88343`,"inkscape:cx":`754.94284`,"inkscape:zoom":`0.98994949`,"inkscape:pageshadow":`2`,"inkscape:pageopacity":`0.0`,borderopacity:`1.0`,bordercolor:`#666666`,pagecolor:`#ffffff`}),createBaseVNode(`metadata`,mt,[createVNode(E,null,{default:withCtx(()=>[createVNode(T,{"rdf:about":``},{default:withCtx(()=>[createVNode(S,null,{default:withCtx(()=>c[1]||(c[1]=[createTextVNode(`image/svg+xml`)])),_:1}),createVNode(C,{"rdf:resource":`http://purl.org/dc/dcmitype/StillImage`}),createVNode(w)]),_:1})]),_:1})]),c[3]||(c[3]=createBaseVNode(`g`,{id:`layer1`,transform:`translate(167.75219,-151.96011)`,"inkscape:groupmode":`layer`,"inkscape:label":`Layer 1`},[createBaseVNode(`rect`,{id:`rect845`,y:`152.19064`,x:`-150.12129`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect845-9`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-132.63466`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-6`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-115.14803`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-0`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-45.20153`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-92`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-80.174782`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-3`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-62.688156`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-4`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-97.661407`,y:`152.19064`}),createBaseVNode(`rect`,{id:`rect845-30`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`17.486626`,height:`73.220116`,x:`-27.714905`,y:`152.10745`}),createBaseVNode(`rect`,{id:`rect898`,ry:`0`,y:`152.10744`,x:`-138.43532`,height:`54.415863`,width:`10.466455`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect898-3`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-120.84978`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-7`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-85.678711`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-8`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-68.09317`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-1`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-50.507633`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect845-30-1`,y:`152.10745`,x:`-10.228278`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect845-30-9`,y:`152.10744`,x:`-167.60791`,height:`73.220116`,width:`17.486626`,style:{fill:`#ffffff`,"fill-opacity":`0`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`}}),createBaseVNode(`rect`,{id:`rect898-4`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`10.466455`,height:`54.415863`,x:`-15.336554`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-74`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`4.4679713`,height:`54.415863`,x:`-167.60791`,y:`152.10744`,ry:`0`}),createBaseVNode(`rect`,{id:`rect898-10`,style:{fill:`#000000`,"fill-opacity":`1`,stroke:`#000000`,"stroke-width":`0.79375`,"stroke-miterlimit":`4`,"stroke-dasharray":`none`,"stroke-opacity":`1`},width:`5.1863246`,height:`54.507248`,x:`2.2092075`,y:`152.06175`,ry:`0`})],-1))])):createCommentVNode(``,!0)])}var _SkMidi,_EchoQuestion,_PlayNote,te,fillStr,j,ne$1,re$1,ie$1,M,stepToLetter,altToAcc,accToAlt,ae$1,mod,N,P,oe$1,F,I,L,R,setNumToChroma,chromaToNumber,se$1,isPcsetNum,isPcset,z,ce$1,le$1,ue,B,V,de,fe,H,U$1,W$1,pe$1,me,he,ge,_e,semitones,quality,num,ve,ye,be,xe,addTo,Se,Ce,we,Te,Ee,De,toName,onlyNotes,G$1,name,pitchClass,accidentals,octave,midi,freq,chroma,K$1,Oe,transposeBy,ke,transposeFrom,Ae,je,ascending,descending,Me,Ne,q$1,Pe,Fe,Ie,Le,J$1,Re,ze,Be,Y$1,Ve,He,X$1,Z$1,Ue,We,Ge,Ke,qe,Je,Ye,Xe,Ze,Qe,$e,et,tt,nt,rt,it,at,ot,st,ct,Q,lt,ut,dt,ft,pt,mt,ht,gt,$$1,vt,init_piano_DF1g6yaX=__esmMin((()=>{init_shapes_BQUVJdp5(),init_CourseWare_BTFRjgBR(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_moment(),init_piano(),init_defineProperty(),te=__commonJSMin$1(((t,c)=>{(function(t){function WebMidi(){if(WebMidi.prototype._singleton)throw Error(`WebMidi is a singleton, it cannot be instantiated directly.`);(WebMidi.prototype._singleton=this)._inputs=[],this._outputs=[],this._userHandlers={},this._stateChangeQueue=[],this._processingStateChange=!1,this._midiInterfaceEvents=[`connected`,`disconnected`],this._nrpnBuffer=[[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]],this._nrpnEventsEnabled=!0,this._nrpnTypes=[`entry`,`increment`,`decrement`],this._notes=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],this._semitones={C:0,D:2,E:4,F:5,G:7,A:9,B:11},Object.defineProperties(this,{MIDI_SYSTEM_MESSAGES:{value:{sysex:240,timecode:241,songposition:242,songselect:243,tuningrequest:246,sysexend:247,clock:248,start:250,continue:251,stop:252,activesensing:254,reset:255,midimessage:0,unknownsystemmessage:-1},writable:!1,enumerable:!0,configurable:!1},MIDI_CHANNEL_MESSAGES:{value:{noteoff:8,noteon:9,keyaftertouch:10,controlchange:11,channelmode:11,nrpn:11,programchange:12,channelaftertouch:13,pitchbend:14},writable:!1,enumerable:!0,configurable:!1},MIDI_REGISTERED_PARAMETER:{value:{pitchbendrange:[0,0],channelfinetuning:[0,1],channelcoarsetuning:[0,2],tuningprogram:[0,3],tuningbank:[0,4],modulationrange:[0,5],azimuthangle:[61,0],elevationangle:[61,1],gain:[61,2],distanceratio:[61,3],maximumdistance:[61,4],maximumdistancegain:[61,5],referencedistanceratio:[61,6],panspreadangle:[61,7],rollangle:[61,8]},writable:!1,enumerable:!0,configurable:!1},MIDI_CONTROL_CHANGE_MESSAGES:{value:{bankselectcoarse:0,modulationwheelcoarse:1,breathcontrollercoarse:2,footcontrollercoarse:4,portamentotimecoarse:5,dataentrycoarse:6,volumecoarse:7,balancecoarse:8,pancoarse:10,expressioncoarse:11,effectcontrol1coarse:12,effectcontrol2coarse:13,generalpurposeslider1:16,generalpurposeslider2:17,generalpurposeslider3:18,generalpurposeslider4:19,bankselectfine:32,modulationwheelfine:33,breathcontrollerfine:34,footcontrollerfine:36,portamentotimefine:37,dataentryfine:38,volumefine:39,balancefine:40,panfine:42,expressionfine:43,effectcontrol1fine:44,effectcontrol2fine:45,holdpedal:64,portamento:65,sustenutopedal:66,softpedal:67,legatopedal:68,hold2pedal:69,soundvariation:70,resonance:71,soundreleasetime:72,soundattacktime:73,brightness:74,soundcontrol6:75,soundcontrol7:76,soundcontrol8:77,soundcontrol9:78,soundcontrol10:79,generalpurposebutton1:80,generalpurposebutton2:81,generalpurposebutton3:82,generalpurposebutton4:83,reverblevel:91,tremololevel:92,choruslevel:93,celestelevel:94,phaserlevel:95,databuttonincrement:96,databuttondecrement:97,nonregisteredparametercoarse:98,nonregisteredparameterfine:99,registeredparametercoarse:100,registeredparameterfine:101},writable:!1,enumerable:!0,configurable:!1},MIDI_NRPN_MESSAGES:{value:{entrymsb:6,entrylsb:38,increment:96,decrement:97,paramlsb:98,parammsb:99,nullactiveparameter:127},writable:!1,enumerable:!0,configurable:!1},MIDI_CHANNEL_MODE_MESSAGES:{value:{allsoundoff:120,resetallcontrollers:121,localcontrol:122,allnotesoff:123,omnimodeoff:124,omnimodeon:125,monomodeon:126,polymodeon:127},writable:!1,enumerable:!0,configurable:!1},octaveOffset:{value:0,writable:!0,enumerable:!0,configurable:!1}}),Object.defineProperties(this,{supported:{enumerable:!0,get:function(){return`requestMIDIAccess`in navigator}},enabled:{enumerable:!0,get:function(){return this.interface!==void 0}.bind(this)},inputs:{enumerable:!0,get:function(){return this._inputs}.bind(this)},outputs:{enumerable:!0,get:function(){return this._outputs}.bind(this)},sysexEnabled:{enumerable:!0,get:function(){return!(!this.interface||!this.interface.sysexEnabled)}.bind(this)},nrpnEventsEnabled:{enumerable:!0,get:function(){return!!this._nrpnEventsEnabled}.bind(this),set:function(t){return this._nrpnEventsEnabled=t,this._nrpnEventsEnabled}},nrpnTypes:{enumerable:!0,get:function(){return this._nrpnTypes}.bind(this)},time:{enumerable:!0,get:function(){return performance.now()}}})}var u=new WebMidi;function Input(t){var c=this;this._userHandlers={channel:{},system:{}},this._midiInput=t,Object.defineProperties(this,{connection:{enumerable:!0,get:function(){return c._midiInput.connection}},id:{enumerable:!0,get:function(){return c._midiInput.id}},manufacturer:{enumerable:!0,get:function(){return c._midiInput.manufacturer}},name:{enumerable:!0,get:function(){return c._midiInput.name}},state:{enumerable:!0,get:function(){return c._midiInput.state}},type:{enumerable:!0,get:function(){return c._midiInput.type}}}),this._initializeUserHandlers(),this._midiInput.onmidimessage=this._onMidiMessage.bind(this)}function Output(t){var c=this;this._midiOutput=t,Object.defineProperties(this,{connection:{enumerable:!0,get:function(){return c._midiOutput.connection}},id:{enumerable:!0,get:function(){return c._midiOutput.id}},manufacturer:{enumerable:!0,get:function(){return c._midiOutput.manufacturer}},name:{enumerable:!0,get:function(){return c._midiOutput.name}},state:{enumerable:!0,get:function(){return c._midiOutput.state}},type:{enumerable:!0,get:function(){return c._midiOutput.type}}})}WebMidi.prototype.enable=function(t,c){this.enabled||(this.supported?navigator.requestMIDIAccess({sysex:c}).then(function(c){var u,d=[],m=[];this.interface=c,this._resetInterfaceUserHandlers(),this.interface.onstatechange=function(t){d.push(t)};for(var g=c.inputs.values(),b=g.next();b&&!b.done;b=g.next())m.push(b.value.open());for(var S=c.outputs.values(),C=S.next();C&&!C.done;C=S.next())m.push(C.value.open());function onPortsOpen(){clearTimeout(u),this._updateInputsAndOutputs(),this.interface.onstatechange=this._onInterfaceStateChange.bind(this),typeof t==`function`&&t.call(this),d.forEach(function(t){this._onInterfaceStateChange(t)}.bind(this))}u=setTimeout(onPortsOpen.bind(this),200),Promise&&Promise.all(m).catch(function(t){}).then(onPortsOpen.bind(this))}.bind(this),function(c){typeof t==`function`&&t.call(this,c)}.bind(this)):typeof t==`function`&&t(Error(`The Web MIDI API is not supported by your browser.`)))},WebMidi.prototype.disable=function(){if(!this.supported)throw Error(`The Web MIDI API is not supported by your browser.`);this.enabled&&(this.removeListener(),this.inputs.forEach(function(t){t.removeListener()})),this.interface&&(this.interface.onstatechange=void 0),this.interface=void 0,this._inputs=[],this._outputs=[],this._nrpnEventsEnabled=!0,this._resetInterfaceUserHandlers()},WebMidi.prototype.addListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before adding event listeners.`);if(typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(!(0<=this._midiInterfaceEvents.indexOf(t)))throw TypeError(`The specified event type is not supported.`);return this._userHandlers[t].push(c),this},WebMidi.prototype.hasListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before checking event listeners.`);if(typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(!(0<=this._midiInterfaceEvents.indexOf(t)))throw TypeError(`The specified event type is not supported.`);for(var u=0;u<this._userHandlers[t].length;u++)if(this._userHandlers[t][u]===c)return!0;return!1},WebMidi.prototype.removeListener=function(t,c){if(!this.enabled)throw Error(`WebMidi must be enabled before removing event listeners.`);if(c!==void 0&&typeof c!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(0<=this._midiInterfaceEvents.indexOf(t))if(c)for(var u=0;u<this._userHandlers[t].length;u++)this._userHandlers[t][u]===c&&this._userHandlers[t].splice(u,1);else this._userHandlers[t]=[];else{if(t!==void 0)throw TypeError(`The specified event type is not supported.`);this._resetInterfaceUserHandlers()}return this},WebMidi.prototype.toMIDIChannels=function(t){var c;if(t===`all`||t===void 0)c=[`all`];else{if(t===`none`)return c=[];c=Array.isArray(t)?t:[t]}return-1<c.indexOf(`all`)&&(c=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]),c.map(function(t){return parseInt(t)}).filter(function(t){return 1<=t&&t<=16})},WebMidi.prototype.getInputById=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);t=String(t);for(var c=0;c<this.inputs.length;c++)if(this.inputs[c].id===t)return this.inputs[c];return!1},WebMidi.prototype.getOutputById=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);t=String(t);for(var c=0;c<this.outputs.length;c++)if(this.outputs[c].id===t)return this.outputs[c];return!1},WebMidi.prototype.getInputByName=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);for(var c=0;c<this.inputs.length;c++)if(~this.inputs[c].name.indexOf(t))return this.inputs[c];return!1},WebMidi.prototype.getOctave=function(t){if(t!=null&&0<=t&&t<=127)return Math.floor(Math.floor(t)/12-1)+Math.floor(u.octaveOffset)},WebMidi.prototype.getOutputByName=function(t){if(!this.enabled)throw Error(`WebMidi is not enabled.`);for(var c=0;c<this.outputs.length;c++)if(~this.outputs[c].name.indexOf(t))return this.outputs[c];return!1},WebMidi.prototype.guessNoteNumber=function(t){var c=!1;if(t&&t.toFixed&&0<=t&&t<=127?c=Math.round(t):0<=parseInt(t)&&parseInt(t)<=127?c=parseInt(t):(typeof t==`string`||t instanceof String)&&(c=this.noteNameToNumber(t)),!1===c)throw Error(`Invalid input value (`+t+`).`);return c},WebMidi.prototype.noteNameToNumber=function(t){typeof t!=`string`&&(t=``);var c=t.match(/([CDEFGAB])(#{0,2}|b{0,2})(-?\d+)/i);if(!c)throw RangeError(`Invalid note name.`);var d=u._semitones[c[1].toUpperCase()],m=12*(parseInt(c[3])+1-Math.floor(u.octaveOffset))+d;if(-1<c[2].toLowerCase().indexOf(`b`)?m-=c[2].length:-1<c[2].toLowerCase().indexOf(`#`)&&(m+=c[2].length),m<0||127<m)throw RangeError(`Invalid note name or note outside valid range.`);return m},WebMidi.prototype._updateInputsAndOutputs=function(){this._updateInputs(),this._updateOutputs()},WebMidi.prototype._updateInputs=function(){for(var t=0;t<this._inputs.length;t++){for(var c=!0,u=this.interface.inputs.values(),d=u.next();d&&!d.done;d=u.next())if(this._inputs[t]._midiInput===d.value){c=!1;break}c&&this._inputs.splice(t,1)}this.interface&&this.interface.inputs.forEach(function(t){for(var c=!0,u=0;u<this._inputs.length;u++)this._inputs[u]._midiInput===t&&(c=!1);c&&this._inputs.push(new Input(t))}.bind(this))},WebMidi.prototype._updateOutputs=function(){for(var t=0;t<this._outputs.length;t++){for(var c=!0,u=this.interface.outputs.values(),d=u.next();d&&!d.done;d=u.next())if(this._outputs[t]._midiOutput===d.value){c=!1;break}c&&this._outputs.splice(t,1)}this.interface&&this.interface.outputs.forEach(function(t){for(var c=!0,u=0;u<this._outputs.length;u++)this._outputs[u]._midiOutput===t&&(c=!1);c&&this._outputs.push(new Output(t))}.bind(this))},WebMidi.prototype._onInterfaceStateChange=function(t){this._updateInputsAndOutputs();var c={timestamp:t.timeStamp,type:t.port.state};this.interface&&t.port.state===`connected`?t.port.type===`output`?c.port=this.getOutputById(t.port.id):t.port.type===`input`&&(c.port=this.getInputById(t.port.id)):c.port={connection:`closed`,id:t.port.id,manufacturer:t.port.manufacturer,name:t.port.name,state:t.port.state,type:t.port.type},this._userHandlers[t.port.state].forEach(function(t){t(c)})},WebMidi.prototype._resetInterfaceUserHandlers=function(){for(var t=0;t<this._midiInterfaceEvents.length;t++)this._userHandlers[this._midiInterfaceEvents[t]]=[]},Input.prototype.on=Input.prototype.addListener=function(t,c,d){var m=this;if(c===void 0&&(c=`all`),Array.isArray(c)||(c=[c]),c.forEach(function(t){if(t!==`all`&&!(1<=t&&t<=16))throw RangeError(`The 'channel' parameter is invalid.`)}),typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(u.MIDI_SYSTEM_MESSAGES[t]!==void 0)this._userHandlers.system[t]||(this._userHandlers.system[t]=[]),this._userHandlers.system[t].push(d);else{if(u.MIDI_CHANNEL_MESSAGES[t]===void 0)throw TypeError(`The specified event type is not supported.`);if(-1<c.indexOf(`all`)){c=[];for(var g=1;g<=16;g++)c.push(g)}this._userHandlers.channel[t]||(this._userHandlers.channel[t]=[]),c.forEach(function(c){m._userHandlers.channel[t][c]||(m._userHandlers.channel[t][c]=[]),m._userHandlers.channel[t][c].push(d)})}return this},Input.prototype.hasListener=function(t,c,d){var m=this;if(typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(c===void 0&&(c=`all`),c.constructor!==Array&&(c=[c]),u.MIDI_SYSTEM_MESSAGES[t]!==void 0){for(var g=0;g<this._userHandlers.system[t].length;g++)if(this._userHandlers.system[t][g]===d)return!0}else if(u.MIDI_CHANNEL_MESSAGES[t]!==void 0){if(-1<c.indexOf(`all`)){c=[];for(var b=1;b<=16;b++)c.push(b)}return!!this._userHandlers.channel[t]&&c.every(function(c){var u=m._userHandlers.channel[t][c];return u&&-1<u.indexOf(d)})}return!1},Input.prototype.removeListener=function(t,c,d){var m=this;if(d!==void 0&&typeof d!=`function`)throw TypeError(`The 'listener' parameter must be a function.`);if(c===void 0&&(c=`all`),c.constructor!==Array&&(c=[c]),u.MIDI_SYSTEM_MESSAGES[t]!==void 0)if(d===void 0)this._userHandlers.system[t]=[];else for(var g=0;g<this._userHandlers.system[t].length;g++)this._userHandlers.system[t][g]===d&&this._userHandlers.system[t].splice(g,1);else if(u.MIDI_CHANNEL_MESSAGES[t]!==void 0){if(-1<c.indexOf(`all`)){c=[];for(var b=1;b<=16;b++)c.push(b)}if(!this._userHandlers.channel[t])return this;c.forEach(function(c){var u=m._userHandlers.channel[t][c];if(u)if(d===void 0)m._userHandlers.channel[t][c]=[];else for(var g=0;g<u.length;g++)u[g]===d&&u.splice(g,1)})}else{if(t!==void 0)throw TypeError(`The specified event type is not supported.`);this._initializeUserHandlers()}return this},Input.prototype._initializeUserHandlers=function(){for(var t in u.MIDI_CHANNEL_MESSAGES)Object.prototype.hasOwnProperty.call(u.MIDI_CHANNEL_MESSAGES,t)&&(this._userHandlers.channel[t]={});for(var c in u.MIDI_SYSTEM_MESSAGES)Object.prototype.hasOwnProperty.call(u.MIDI_SYSTEM_MESSAGES,c)&&(this._userHandlers.system[c]=[])},Input.prototype._onMidiMessage=function(t){if(0<this._userHandlers.system.midimessage.length){var c={target:this,data:t.data,timestamp:t.timeStamp,type:`midimessage`};this._userHandlers.system.midimessage.forEach(function(t){t(c)})}t.data[0]<240?(this._parseChannelEvent(t),this._parseNrpnEvent(t)):t.data[0]<=255&&this._parseSystemEvent(t)},Input.prototype._parseNrpnEvent=function(t){var c,d,m=t.data[0]>>4,g=15&t.data[0],b=1+g;if(1<t.data.length&&(c=t.data[1],d=2<t.data.length?t.data[2]:void 0),u.nrpnEventsEnabled&&m===u.MIDI_CHANNEL_MESSAGES.controlchange&&(c>=u.MIDI_NRPN_MESSAGES.increment&&c<=u.MIDI_NRPN_MESSAGES.parammsb||c===u.MIDI_NRPN_MESSAGES.entrymsb||c===u.MIDI_NRPN_MESSAGES.entrylsb)){var S={target:this,type:`controlchange`,data:t.data,timestamp:t.timeStamp,channel:b,controller:{number:c,name:this.getCcNameByNumber(c)},value:d};if(S.controller.number===u.MIDI_NRPN_MESSAGES.parammsb&&S.value!=u.MIDI_NRPN_MESSAGES.nullactiveparameter)u._nrpnBuffer[g]=[],u._nrpnBuffer[g][0]=S;else if(u._nrpnBuffer[g].length===1&&S.controller.number===u.MIDI_NRPN_MESSAGES.paramlsb)u._nrpnBuffer[g].push(S);else if(u._nrpnBuffer[g].length!==2||S.controller.number!==u.MIDI_NRPN_MESSAGES.increment&&S.controller.number!==u.MIDI_NRPN_MESSAGES.decrement&&S.controller.number!==u.MIDI_NRPN_MESSAGES.entrymsb)if(u._nrpnBuffer[g].length===3&&u._nrpnBuffer[g][2].number===u.MIDI_NRPN_MESSAGES.entrymsb&&S.controller.number===u.MIDI_NRPN_MESSAGES.entrylsb)u._nrpnBuffer[g].push(S);else if(3<=u._nrpnBuffer[g].length&&u._nrpnBuffer[g].length<=4&&S.controller.number===u.MIDI_NRPN_MESSAGES.parammsb&&S.value===u.MIDI_NRPN_MESSAGES.nullactiveparameter)u._nrpnBuffer[g].push(S);else if(4<=u._nrpnBuffer[g].length&&u._nrpnBuffer[g].length<=5&&S.controller.number===u.MIDI_NRPN_MESSAGES.paramlsb&&S.value===u.MIDI_NRPN_MESSAGES.nullactiveparameter){u._nrpnBuffer[g].push(S);var C=[];u._nrpnBuffer[g].forEach(function(t){C.push(t.data)});var w=u._nrpnBuffer[g][0].value<<7|u._nrpnBuffer[g][1].value,T=u._nrpnBuffer[g][2].value;u._nrpnBuffer[g].length===6&&(T=u._nrpnBuffer[g][2].value<<7|u._nrpnBuffer[g][3].value);var E=``;switch(u._nrpnBuffer[g][2].controller.number){case u.MIDI_NRPN_MESSAGES.entrymsb:E=u._nrpnTypes[0];break;case u.MIDI_NRPN_MESSAGES.increment:E=u._nrpnTypes[1];break;case u.MIDI_NRPN_MESSAGES.decrement:E=u._nrpnTypes[2];break;default:throw Error(`The NPRN type was unidentifiable.`)}var D={timestamp:S.timestamp,channel:S.channel,type:`nrpn`,data:C,controller:{number:w,type:E,name:`Non-Registered Parameter `+w},value:T};u._nrpnBuffer[g]=[],this._userHandlers.channel[D.type]&&this._userHandlers.channel[D.type][D.channel]&&this._userHandlers.channel[D.type][D.channel].forEach(function(t){t(D)})}else u._nrpnBuffer[g]=[];else u._nrpnBuffer[g].push(S)}},Input.prototype._parseChannelEvent=function(t){var c,d,m=t.data[0]>>4,g=1+(15&t.data[0]);1<t.data.length&&(c=t.data[1],d=2<t.data.length?t.data[2]:void 0);var b={target:this,data:t.data,timestamp:t.timeStamp,channel:g};m===u.MIDI_CHANNEL_MESSAGES.noteoff||m===u.MIDI_CHANNEL_MESSAGES.noteon&&d===0?(b.type=`noteoff`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.velocity=d/127,b.rawVelocity=d):m===u.MIDI_CHANNEL_MESSAGES.noteon?(b.type=`noteon`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.velocity=d/127,b.rawVelocity=d):m===u.MIDI_CHANNEL_MESSAGES.keyaftertouch?(b.type=`keyaftertouch`,b.note={number:c,name:u._notes[c%12],octave:u.getOctave(c)},b.value=d/127):m===u.MIDI_CHANNEL_MESSAGES.controlchange&&0<=c&&c<=119?(b.type=`controlchange`,b.controller={number:c,name:this.getCcNameByNumber(c)},b.value=d):m===u.MIDI_CHANNEL_MESSAGES.channelmode&&120<=c&&c<=127?(b.type=`channelmode`,b.controller={number:c,name:this.getChannelModeByNumber(c)},b.value=d):m===u.MIDI_CHANNEL_MESSAGES.programchange?(b.type=`programchange`,b.value=c):m===u.MIDI_CHANNEL_MESSAGES.channelaftertouch?(b.type=`channelaftertouch`,b.value=c/127):m===u.MIDI_CHANNEL_MESSAGES.pitchbend?(b.type=`pitchbend`,b.value=((d<<7)+c-8192)/8192):b.type=`unknownchannelmessage`,this._userHandlers.channel[b.type]&&this._userHandlers.channel[b.type][g]&&this._userHandlers.channel[b.type][g].forEach(function(t){t(b)})},Input.prototype.getCcNameByNumber=function(t){if(!(0<=(t=Math.floor(t))&&t<=119))throw RangeError(`The control change number must be between 0 and 119.`);for(var c in u.MIDI_CONTROL_CHANGE_MESSAGES)if(Object.prototype.hasOwnProperty.call(u.MIDI_CONTROL_CHANGE_MESSAGES,c)&&t===u.MIDI_CONTROL_CHANGE_MESSAGES[c])return c},Input.prototype.getChannelModeByNumber=function(t){if(!(120<=(t=Math.floor(t))&&status<=127))throw RangeError(`The control change number must be between 120 and 127.`);for(var c in u.MIDI_CHANNEL_MODE_MESSAGES)if(Object.prototype.hasOwnProperty.call(u.MIDI_CHANNEL_MODE_MESSAGES,c)&&t===u.MIDI_CHANNEL_MODE_MESSAGES[c])return c},Input.prototype._parseSystemEvent=function(t){var c=t.data[0],d={target:this,data:t.data,timestamp:t.timeStamp};c===u.MIDI_SYSTEM_MESSAGES.sysex?d.type=`sysex`:c===u.MIDI_SYSTEM_MESSAGES.timecode?d.type=`timecode`:c===u.MIDI_SYSTEM_MESSAGES.songposition?d.type=`songposition`:c===u.MIDI_SYSTEM_MESSAGES.songselect?(d.type=`songselect`,d.song=t.data[1]):c===u.MIDI_SYSTEM_MESSAGES.tuningrequest?d.type=`tuningrequest`:c===u.MIDI_SYSTEM_MESSAGES.clock?d.type=`clock`:c===u.MIDI_SYSTEM_MESSAGES.start?d.type=`start`:c===u.MIDI_SYSTEM_MESSAGES.continue?d.type=`continue`:c===u.MIDI_SYSTEM_MESSAGES.stop?d.type=`stop`:c===u.MIDI_SYSTEM_MESSAGES.activesensing?d.type=`activesensing`:c===u.MIDI_SYSTEM_MESSAGES.reset?d.type=`reset`:d.type=`unknownsystemmessage`,this._userHandlers.system[d.type]&&this._userHandlers.system[d.type].forEach(function(t){t(d)})},Output.prototype.send=function(t,c,u){if(!(128<=t&&t<=255))throw RangeError(`The status byte must be an integer between 128 (0x80) and 255 (0xFF).`);c===void 0&&(c=[]),Array.isArray(c)||(c=[c]);var d=[];return c.forEach(function(t){var c=Math.floor(t);if(!(0<=c&&c<=255))throw RangeError(`Data bytes must be integers between 0 (0x00) and 255 (0xFF).`);d.push(c)}),this._midiOutput.send([t].concat(d),parseFloat(u)||0),this},Output.prototype.sendSysex=function(t,c,d){if(!u.sysexEnabled)throw Error(`Sysex message support must first be activated.`);return d||(d={}),t=[].concat(t),c.forEach(function(t){if(t<0||127<t)throw RangeError(`The data bytes of a sysex message must be integers between 0 (0x00) and 127 (0x7F).`)}),c=t.concat(c,u.MIDI_SYSTEM_MESSAGES.sysexend),this.send(u.MIDI_SYSTEM_MESSAGES.sysex,c,this._parseTimeParameter(d.time)),this},Output.prototype.sendTimecodeQuarterFrame=function(t,c){return c||(c={}),this.send(u.MIDI_SYSTEM_MESSAGES.timecode,t,this._parseTimeParameter(c.time)),this},Output.prototype.sendSongPosition=function(t,c){c||(c={});var d=(t=Math.floor(t)||0)>>7&127,m=127&t;return this.send(u.MIDI_SYSTEM_MESSAGES.songposition,[d,m],this._parseTimeParameter(c.time)),this},Output.prototype.sendSongSelect=function(t,c){if(c||(c={}),!(0<=(t=Math.floor(t))&&t<=127))throw RangeError(`The song number must be between 0 and 127.`);return this.send(u.MIDI_SYSTEM_MESSAGES.songselect,[t],this._parseTimeParameter(c.time)),this},Output.prototype.sendTuningRequest=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.tuningrequest,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendClock=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.clock,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendStart=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.start,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendContinue=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.continue,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendStop=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.stop,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.sendActiveSensing=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.activesensing,[],this._parseTimeParameter(t.time)),this},Output.prototype.sendReset=function(t){return t||(t={}),this.send(u.MIDI_SYSTEM_MESSAGES.reset,void 0,this._parseTimeParameter(t.time)),this},Output.prototype.stopNote=function(t,c,d){if(t===`all`)return this.sendChannelMode(`allnotesoff`,0,c,d);var m=64;return(d||(d={})).rawVelocity?!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=127&&(m=d.velocity):!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=1&&(m=127*d.velocity),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteoff<<4)+(c-1),[t,Math.round(m)],this._parseTimeParameter(d.time))}.bind(this))}.bind(this)),this},Output.prototype.playNote=function(t,c,d){var m,g=64;if((d||(d={})).rawVelocity?!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=127&&(g=d.velocity):!isNaN(d.velocity)&&0<=d.velocity&&d.velocity<=1&&(g=127*d.velocity),m=this._parseTimeParameter(d.time),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteon<<4)+(c-1),[t,Math.round(g)],m)}.bind(this))}.bind(this)),!isNaN(d.duration)){d.duration<=0&&(d.duration=0);var b=64;d.rawVelocity?!isNaN(d.release)&&0<=d.release&&d.release<=127&&(b=d.release):!isNaN(d.release)&&0<=d.release&&d.release<=1&&(b=127*d.release),this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){this.send((u.MIDI_CHANNEL_MESSAGES.noteoff<<4)+(c-1),[t,Math.round(b)],(m||u.time)+d.duration)}.bind(this))}.bind(this))}return this},Output.prototype.sendKeyAftertouch=function(t,c,d,m){var g=this;if(m||(m={}),c<1||16<c)throw RangeError(`The channel must be between 1 and 16.`);(isNaN(d)||d<0||1<d)&&(d=.5);var b=Math.round(127*d);return this._convertNoteToArray(t).forEach(function(t){u.toMIDIChannels(c).forEach(function(c){g.send((u.MIDI_CHANNEL_MESSAGES.keyaftertouch<<4)+(c-1),[t,b],g._parseTimeParameter(m.time))})}),this},Output.prototype.sendControlChange=function(t,c,d,m){if(m||(m={}),typeof t==`string`){if((t=u.MIDI_CONTROL_CHANGE_MESSAGES[t])===void 0)throw TypeError(`Invalid controller name.`)}else if(!(0<=(t=Math.floor(t))&&t<=119))throw RangeError(`Controller numbers must be between 0 and 119.`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`Controller value must be between 0 and 127.`);return u.toMIDIChannels(d).forEach(function(d){this.send((u.MIDI_CHANNEL_MESSAGES.controlchange<<4)+(d-1),[t,c],this._parseTimeParameter(m.time))}.bind(this)),this},Output.prototype._selectRegisteredParameter=function(t,c,d){var m=this;if(t[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The control65 value must be between 0 and 127`);if(t[1]=Math.floor(t[1]),!(0<=t[1]&&t[1]<=127))throw RangeError(`The control64 value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(101,t[0],c,{time:d}),m.sendControlChange(100,t[1],c,{time:d})}),this},Output.prototype._selectNonRegisteredParameter=function(t,c,d){var m=this;if(t[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The control63 value must be between 0 and 127`);if(t[1]=Math.floor(t[1]),!(0<=t[1]&&t[1]<=127))throw RangeError(`The control62 value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(99,t[0],c,{time:d}),m.sendControlChange(98,t[1],c,{time:d})}),this},Output.prototype._setCurrentRegisteredParameter=function(t,c,d){var m=this;if((t=[].concat(t))[0]=Math.floor(t[0]),!(0<=t[0]&&t[0]<=127))throw RangeError(`The msb value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.sendControlChange(6,t[0],c,{time:d})}),t[1]=Math.floor(t[1]),0<=t[1]&&t[1]<=127&&u.toMIDIChannels(c).forEach(function(){m.sendControlChange(38,t[1],c,{time:d})}),this},Output.prototype._deselectRegisteredParameter=function(t,c){var d=this;return u.toMIDIChannels(t).forEach(function(){d.sendControlChange(101,127,t,{time:c}),d.sendControlChange(100,127,t,{time:c})}),this},Output.prototype.setRegisteredParameter=function(t,c,d,m){var g=this;if(m||(m={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw Error(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(d).forEach(function(){g._selectRegisteredParameter(t,d,m.time),g._setCurrentRegisteredParameter(c,d,m.time),g._deselectRegisteredParameter(d,m.time)}),this},Output.prototype.setNonRegisteredParameter=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=t[0]&&t[0]<=127&&0<=t[1]&&t[1]<=127))throw Error(`Position 0 and 1 of the 2-position parameter array must both be between 0 and 127.`);return c=[].concat(c),u.toMIDIChannels(d).forEach(function(){g._selectNonRegisteredParameter(t,d,m.time),g._setCurrentRegisteredParameter(c,d,m.time),g._deselectRegisteredParameter(d,m.time)}),this},Output.prototype.incrementRegisteredParameter=function(t,c,d){var m=this;if(d||(d={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw Error(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(c).forEach(function(){m._selectRegisteredParameter(t,c,d.time),m.sendControlChange(96,0,c,{time:d.time}),m._deselectRegisteredParameter(c,d.time)}),this},Output.prototype.decrementRegisteredParameter=function(t,c,d){if(d||(d={}),!Array.isArray(t)){if(!u.MIDI_REGISTERED_PARAMETER[t])throw TypeError(`The specified parameter is not available.`);t=u.MIDI_REGISTERED_PARAMETER[t]}return u.toMIDIChannels(c).forEach(function(){this._selectRegisteredParameter(t,c,d.time),this.sendControlChange(97,0,c,{time:d.time}),this._deselectRegisteredParameter(c,d.time)}.bind(this)),this},Output.prototype.setPitchBendRange=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The semitones value must be between 0 and 127`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`The cents value must be between 0 and 127`);return u.toMIDIChannels(d).forEach(function(){g.setRegisteredParameter(`pitchbendrange`,[t,c],d,{time:m.time})}),this},Output.prototype.setModulationRange=function(t,c,d,m){var g=this;if(m||(m={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The semitones value must be between 0 and 127`);if(!(0<=(c=Math.floor(c)||0)&&c<=127))throw RangeError(`The cents value must be between 0 and 127`);return u.toMIDIChannels(d).forEach(function(){g.setRegisteredParameter(`modulationrange`,[t,c],d,{time:m.time})}),this},Output.prototype.setMasterTuning=function(t,c,d){var m=this;if(d||(d={}),(t=parseFloat(t)||0)<=-65||64<=t)throw RangeError(`The value must be a decimal number larger than -65 and smaller than 64.`);var g=Math.floor(t)+64,b=t-Math.floor(t),S=(b=Math.round((b+1)/2*16383))>>7&127,C=127&b;return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`channelcoarsetuning`,g,c,{time:d.time}),m.setRegisteredParameter(`channelfinetuning`,[S,C],c,{time:d.time})}),this},Output.prototype.setTuningProgram=function(t,c,d){var m=this;if(d||(d={}),!(0<=(t=Math.floor(t))&&t<=127))throw RangeError(`The program value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`tuningprogram`,t,c,{time:d.time})}),this},Output.prototype.setTuningBank=function(t,c,d){var m=this;if(d||(d={}),!(0<=(t=Math.floor(t)||0)&&t<=127))throw RangeError(`The bank value must be between 0 and 127`);return u.toMIDIChannels(c).forEach(function(){m.setRegisteredParameter(`tuningbank`,t,c,{time:d.time})}),this},Output.prototype.sendChannelMode=function(t,c,d,m){if(m||(m={}),typeof t==`string`){if(!(t=u.MIDI_CHANNEL_MODE_MESSAGES[t]))throw TypeError(`Invalid channel mode message name.`)}else if(!(120<=(t=Math.floor(t))&&t<=127))throw RangeError(`Channel mode numerical identifiers must be between 120 and 127.`);if((c=Math.floor(c)||0)<0||127<c)throw RangeError(`Value must be an integer between 0 and 127.`);return u.toMIDIChannels(d).forEach(function(d){this.send((u.MIDI_CHANNEL_MESSAGES.channelmode<<4)+(d-1),[t,c],this._parseTimeParameter(m.time))}.bind(this)),this},Output.prototype.sendProgramChange=function(t,c,d){var m=this;if(d||(d={}),t=Math.floor(t),isNaN(t)||t<0||127<t)throw RangeError(`Program numbers must be between 0 and 127.`);return u.toMIDIChannels(c).forEach(function(c){m.send((u.MIDI_CHANNEL_MESSAGES.programchange<<4)+(c-1),[t],m._parseTimeParameter(d.time))}),this},Output.prototype.sendChannelAftertouch=function(t,c,d){var m=this;d||(d={}),t=parseFloat(t),(isNaN(t)||t<0||1<t)&&(t=.5);var g=Math.round(127*t);return u.toMIDIChannels(c).forEach(function(t){m.send((u.MIDI_CHANNEL_MESSAGES.channelaftertouch<<4)+(t-1),[g],m._parseTimeParameter(d.time))}),this},Output.prototype.sendPitchBend=function(t,c,d){var m=this;if(d||(d={}),isNaN(t)||t<-1||1<t)throw RangeError(`Pitch bend value must be between -1 and 1.`);var g=Math.round((t+1)/2*16383),b=g>>7&127,S=127&g;return u.toMIDIChannels(c).forEach(function(t){m.send((u.MIDI_CHANNEL_MESSAGES.pitchbend<<4)+(t-1),[S,b],m._parseTimeParameter(d.time))}),this},Output.prototype._parseTimeParameter=function(t){var c,d=parseFloat(t);return typeof t==`string`&&t.substring(0,1)===`+`?d&&0<d&&(c=u.time+d):d>u.time&&(c=d),c},Output.prototype._convertNoteToArray=function(t){var c=[];return Array.isArray(t)||(t=[t]),t.forEach(function(t){c.push(u.guessNoteNumber(t))}),c},typeof define==`function`&&typeof define.amd==`object`?define([],function(){return u}):c!==void 0&&c.exports?c.exports=u:t.WebMidi||(t.WebMidi=u)})(t)})),fillStr=(t,c)=>Array(Math.abs(c)+1).join(t),j=[0,2,4,-1,1,3,5],ne$1=j.map(t=>Math.floor(t*7/12)),re$1=[3,0,4,1,5,2,6],ie$1={empty:!0,name:``,pc:``,acc:``},M=new Map,stepToLetter=t=>`CDEFGAB`.charAt(t),altToAcc=t=>t<0?fillStr(`b`,-t):fillStr(`#`,t),accToAlt=t=>t[0]===`b`?-t.length:t.length,ae$1=/^([a-gA-G]?)(#{1,}|b{1,}|x{1,}|)(-?\d*)\s*(.*)$/,mod=(t,c)=>(t%c+c)%c,N=[0,2,4,5,7,9,11],__name$1(parse$1,`parse`),P={empty:!0,name:``,acc:``},oe$1=RegExp(`^([-+]?\\d+)(d{1,4}|m|M|P|A{1,4})|(AA|A|P|M|m|d|dd)([-+]?\\d+)$`),F={},I=[0,2,4,5,7,9,11],L=`PMMPPMM`,__name$1(parse$1$1,`parse$1`),__name$1(transpose$2,`transpose`),__name$1(distance$1,`distance`),R={empty:!0,name:``,setNum:0,chroma:`000000000000`,normalized:`000000000000`,intervals:[]},setNumToChroma=t=>Number(t).toString(2),chromaToNumber=t=>parseInt(t,2),se$1=/^[01]{12}$/,isPcsetNum=t=>typeof t==`number`&&t>=0&&t<=4095,isPcset=t=>t&&isChroma(t.chroma),z={[R.chroma]:R},__name$1(get$8,`get`),ce$1=[`1P`,`2m`,`2M`,`3m`,`3M`,`4P`,`5d`,`5P`,`6m`,`6M`,`7m`,`7M`],le$1=[[`1P 3M 5P`,`major`,`M ^ `],[`1P 3M 5P 7M`,`major seventh`,`maj7 Δ ma7 M7 Maj7 ^7`],[`1P 3M 5P 7M 9M`,`major ninth`,`maj9 Δ9 ^9`],[`1P 3M 5P 7M 9M 13M`,`major thirteenth`,`maj13 Maj13 ^13`],[`1P 3M 5P 6M`,`sixth`,`6 add6 add13 M6`],[`1P 3M 5P 6M 9M`,`sixth/ninth`,`6/9 69 M69`],[`1P 3M 6m 7M`,`major seventh flat sixth`,`M7b6 ^7b6`],[`1P 3M 5P 7M 11A`,`major seventh sharp eleventh`,`maj#4 Δ#4 Δ#11 M7#11 ^7#11 maj7#11`],[`1P 3m 5P`,`minor`,`m min -`],[`1P 3m 5P 7m`,`minor seventh`,`m7 min7 mi7 -7`],[`1P 3m 5P 7M`,`minor/major seventh`,`m/ma7 m/maj7 mM7 mMaj7 m/M7 -Δ7 mΔ -^7`],[`1P 3m 5P 6M`,`minor sixth`,`m6 -6`],[`1P 3m 5P 7m 9M`,`minor ninth`,`m9 -9`],[`1P 3m 5P 7M 9M`,`minor/major ninth`,`mM9 mMaj9 -^9`],[`1P 3m 5P 7m 9M 11P`,`minor eleventh`,`m11 -11`],[`1P 3m 5P 7m 9M 13M`,`minor thirteenth`,`m13 -13`],[`1P 3m 5d`,`diminished`,`dim ° o`],[`1P 3m 5d 7d`,`diminished seventh`,`dim7 °7 o7`],[`1P 3m 5d 7m`,`half-diminished`,`m7b5 ø -7b5 h7 h`],[`1P 3M 5P 7m`,`dominant seventh`,`7 dom`],[`1P 3M 5P 7m 9M`,`dominant ninth`,`9`],[`1P 3M 5P 7m 9M 13M`,`dominant thirteenth`,`13`],[`1P 3M 5P 7m 11A`,`lydian dominant seventh`,`7#11 7#4`],[`1P 3M 5P 7m 9m`,`dominant flat ninth`,`7b9`],[`1P 3M 5P 7m 9A`,`dominant sharp ninth`,`7#9`],[`1P 3M 7m 9m`,`altered`,`alt7`],[`1P 4P 5P`,`suspended fourth`,`sus4 sus`],[`1P 2M 5P`,`suspended second`,`sus2`],[`1P 4P 5P 7m`,`suspended fourth seventh`,`7sus4 7sus`],[`1P 5P 7m 9M 11P`,`eleventh`,`11`],[`1P 4P 5P 7m 9m`,`suspended fourth flat ninth`,`b9sus phryg 7b9sus 7b9sus4`],[`1P 5P`,`fifth`,`5`],[`1P 3M 5A`,`augmented`,`aug + +5 ^#5`],[`1P 3m 5A`,`minor augmented`,`m#5 -#5 m+`],[`1P 3M 5A 7M`,`augmented seventh`,`maj7#5 maj7+5 +maj7 ^7#5`],[`1P 3M 5P 7M 9M 11A`,`major sharp eleventh (lydian)`,`maj9#11 Δ9#11 ^9#11`],[`1P 2M 4P 5P`,``,`sus24 sus4add9`],[`1P 3M 5A 7M 9M`,``,`maj9#5 Maj9#5`],[`1P 3M 5A 7m`,``,`7#5 +7 7+ 7aug aug7`],[`1P 3M 5A 7m 9A`,``,`7#5#9 7#9#5 7alt`],[`1P 3M 5A 7m 9M`,``,`9#5 9+`],[`1P 3M 5A 7m 9M 11A`,``,`9#5#11`],[`1P 3M 5A 7m 9m`,``,`7#5b9 7b9#5`],[`1P 3M 5A 7m 9m 11A`,``,`7#5b9#11`],[`1P 3M 5A 9A`,``,`+add#9`],[`1P 3M 5A 9M`,``,`M#5add9 +add9`],[`1P 3M 5P 6M 11A`,``,`M6#11 M6b5 6#11 6b5`],[`1P 3M 5P 6M 7M 9M`,``,`M7add13`],[`1P 3M 5P 6M 9M 11A`,``,`69#11`],[`1P 3m 5P 6M 9M`,``,`m69 -69`],[`1P 3M 5P 6m 7m`,``,`7b6`],[`1P 3M 5P 7M 9A 11A`,``,`maj7#9#11`],[`1P 3M 5P 7M 9M 11A 13M`,``,`M13#11 maj13#11 M13+4 M13#4`],[`1P 3M 5P 7M 9m`,``,`M7b9`],[`1P 3M 5P 7m 11A 13m`,``,`7#11b13 7b5b13`],[`1P 3M 5P 7m 13M`,``,`7add6 67 7add13`],[`1P 3M 5P 7m 9A 11A`,``,`7#9#11 7b5#9 7#9b5`],[`1P 3M 5P 7m 9A 11A 13M`,``,`13#9#11`],[`1P 3M 5P 7m 9A 11A 13m`,``,`7#9#11b13`],[`1P 3M 5P 7m 9A 13M`,``,`13#9`],[`1P 3M 5P 7m 9A 13m`,``,`7#9b13`],[`1P 3M 5P 7m 9M 11A`,``,`9#11 9+4 9#4`],[`1P 3M 5P 7m 9M 11A 13M`,``,`13#11 13+4 13#4`],[`1P 3M 5P 7m 9M 11A 13m`,``,`9#11b13 9b5b13`],[`1P 3M 5P 7m 9m 11A`,``,`7b9#11 7b5b9 7b9b5`],[`1P 3M 5P 7m 9m 11A 13M`,``,`13b9#11`],[`1P 3M 5P 7m 9m 11A 13m`,``,`7b9b13#11 7b9#11b13 7b5b9b13`],[`1P 3M 5P 7m 9m 13M`,``,`13b9`],[`1P 3M 5P 7m 9m 13m`,``,`7b9b13`],[`1P 3M 5P 7m 9m 9A`,``,`7b9#9`],[`1P 3M 5P 9M`,``,`Madd9 2 add9 add2`],[`1P 3M 5P 9m`,``,`Maddb9`],[`1P 3M 5d`,``,`Mb5`],[`1P 3M 5d 6M 7m 9M`,``,`13b5`],[`1P 3M 5d 7M`,``,`M7b5`],[`1P 3M 5d 7M 9M`,``,`M9b5`],[`1P 3M 5d 7m`,``,`7b5`],[`1P 3M 5d 7m 9M`,``,`9b5`],[`1P 3M 7m`,``,`7no5`],[`1P 3M 7m 13m`,``,`7b13`],[`1P 3M 7m 9M`,``,`9no5`],[`1P 3M 7m 9M 13M`,``,`13no5`],[`1P 3M 7m 9M 13m`,``,`9b13`],[`1P 3m 4P 5P`,``,`madd4`],[`1P 3m 5P 6m 7M`,``,`mMaj7b6`],[`1P 3m 5P 6m 7M 9M`,``,`mMaj9b6`],[`1P 3m 5P 7m 11P`,``,`m7add11 m7add4`],[`1P 3m 5P 9M`,``,`madd9`],[`1P 3m 5d 6M 7M`,``,`o7M7`],[`1P 3m 5d 7M`,``,`oM7`],[`1P 3m 6m 7M`,``,`mb6M7`],[`1P 3m 6m 7m`,``,`m7#5`],[`1P 3m 6m 7m 9M`,``,`m9#5`],[`1P 3m 5A 7m 9M 11P`,``,`m11A`],[`1P 3m 6m 9m`,``,`mb6b9`],[`1P 2M 3m 5d 7m`,``,`m9b5`],[`1P 4P 5A 7M`,``,`M7#5sus4`],[`1P 4P 5A 7M 9M`,``,`M9#5sus4`],[`1P 4P 5A 7m`,``,`7#5sus4`],[`1P 4P 5P 7M`,``,`M7sus4`],[`1P 4P 5P 7M 9M`,``,`M9sus4`],[`1P 4P 5P 7m 9M`,``,`9sus4 9sus`],[`1P 4P 5P 7m 9M 13M`,``,`13sus4 13sus`],[`1P 4P 5P 7m 9m 13m`,``,`7sus4b9b13 7b9b13sus4`],[`1P 4P 7m 10m`,``,`4 quartal`],[`1P 5P 7m 9m 11P`,``,`11b9`]],ue={...R,name:``,quality:`Unknown`,intervals:[],aliases:[]},B=[],V={},__name$1(get$7,`get`),__name$1(all$2,`all`),__name$1(add$3,`add`),__name$1(addAlias$1,`addAlias`),le$1.forEach(([t,c,u])=>add$3(t.split(` `),u.split(` `),c)),B.sort((t,c)=>t.setNum-c.setNum),de=[[`1P 2M 3M 5P 6M`,`major pentatonic`,`pentatonic`],[`1P 3M 4P 5P 7M`,`ionian pentatonic`],[`1P 3M 4P 5P 7m`,`mixolydian pentatonic`,`indian`],[`1P 2M 4P 5P 6M`,`ritusen`],[`1P 2M 4P 5P 7m`,`egyptian`],[`1P 3M 4P 5d 7m`,`neopolitan major pentatonic`],[`1P 3m 4P 5P 6m`,`vietnamese 1`],[`1P 2m 3m 5P 6m`,`pelog`],[`1P 2m 4P 5P 6m`,`kumoijoshi`],[`1P 2M 3m 5P 6m`,`hirajoshi`],[`1P 2m 4P 5d 7m`,`iwato`],[`1P 2m 4P 5P 7m`,`in-sen`],[`1P 3M 4A 5P 7M`,`lydian pentatonic`,`chinese`],[`1P 3m 4P 6m 7m`,`malkos raga`],[`1P 3m 4P 5d 7m`,`locrian pentatonic`,`minor seven flat five pentatonic`],[`1P 3m 4P 5P 7m`,`minor pentatonic`,`vietnamese 2`],[`1P 3m 4P 5P 6M`,`minor six pentatonic`],[`1P 2M 3m 5P 6M`,`flat three pentatonic`,`kumoi`],[`1P 2M 3M 5P 6m`,`flat six pentatonic`],[`1P 2m 3M 5P 6M`,`scriabin`],[`1P 3M 5d 6m 7m`,`whole tone pentatonic`],[`1P 3M 4A 5A 7M`,`lydian #5P pentatonic`],[`1P 3M 4A 5P 7m`,`lydian dominant pentatonic`],[`1P 3m 4P 5P 7M`,`minor #7M pentatonic`],[`1P 3m 4d 5d 7m`,`super locrian pentatonic`],[`1P 2M 3m 4P 5P 7M`,`minor hexatonic`],[`1P 2A 3M 5P 5A 7M`,`augmented`],[`1P 2M 3m 3M 5P 6M`,`major blues`],[`1P 2M 4P 5P 6M 7m`,`piongio`],[`1P 2m 3M 4A 6M 7m`,`prometheus neopolitan`],[`1P 2M 3M 4A 6M 7m`,`prometheus`],[`1P 2m 3M 5d 6m 7m`,`mystery #1`],[`1P 2m 3M 4P 5A 6M`,`six tone symmetric`],[`1P 2M 3M 4A 5A 7m`,`whole tone`,`messiaen's mode #1`],[`1P 2m 4P 4A 5P 7M`,`messiaen's mode #5`],[`1P 3m 4P 5d 5P 7m`,`minor blues`,`blues`],[`1P 2M 3M 4P 5d 6m 7m`,`locrian major`,`arabian`],[`1P 2m 3M 4A 5P 6m 7M`,`double harmonic lydian`],[`1P 2M 3m 4P 5P 6m 7M`,`harmonic minor`],[`1P 2m 3m 4d 5d 6m 7m`,`altered`,`super locrian`,`diminished whole tone`,`pomeroy`],[`1P 2M 3m 4P 5d 6m 7m`,`locrian #2`,`half-diminished`,`aeolian b5`],[`1P 2M 3M 4P 5P 6m 7m`,`mixolydian b6`,`melodic minor fifth mode`,`hindu`],[`1P 2M 3M 4A 5P 6M 7m`,`lydian dominant`,`lydian b7`,`overtone`],[`1P 2M 3M 4A 5P 6M 7M`,`lydian`],[`1P 2M 3M 4A 5A 6M 7M`,`lydian augmented`],[`1P 2m 3m 4P 5P 6M 7m`,`dorian b2`,`phrygian #6`,`melodic minor second mode`],[`1P 2M 3m 4P 5P 6M 7M`,`melodic minor`],[`1P 2m 3m 4P 5d 6m 7m`,`locrian`],[`1P 2m 3m 4d 5d 6m 7d`,`ultralocrian`,`superlocrian bb7`,`·superlocrian diminished`],[`1P 2m 3m 4P 5d 6M 7m`,`locrian 6`,`locrian natural 6`,`locrian sharp 6`],[`1P 2A 3M 4P 5P 5A 7M`,`augmented heptatonic`],[`1P 2M 3m 5d 5P 6M 7m`,`romanian minor`],[`1P 2M 3m 4A 5P 6M 7m`,`dorian #4`],[`1P 2M 3m 4A 5P 6M 7M`,`lydian diminished`],[`1P 2m 3m 4P 5P 6m 7m`,`phrygian`],[`1P 2M 3M 4A 5A 7m 7M`,`leading whole tone`],[`1P 2M 3M 4A 5P 6m 7m`,`lydian minor`],[`1P 2m 3M 4P 5P 6m 7m`,`phrygian dominant`,`spanish`,`phrygian major`],[`1P 2m 3m 4P 5P 6m 7M`,`balinese`],[`1P 2m 3m 4P 5P 6M 7M`,`neopolitan major`],[`1P 2M 3m 4P 5P 6m 7m`,`aeolian`,`minor`],[`1P 2M 3M 4P 5P 6m 7M`,`harmonic major`],[`1P 2m 3M 4P 5P 6m 7M`,`double harmonic major`,`gypsy`],[`1P 2M 3m 4P 5P 6M 7m`,`dorian`],[`1P 2M 3m 4A 5P 6m 7M`,`hungarian minor`],[`1P 2A 3M 4A 5P 6M 7m`,`hungarian major`],[`1P 2m 3M 4P 5d 6M 7m`,`oriental`],[`1P 2m 3m 3M 4A 5P 7m`,`flamenco`],[`1P 2m 3m 4A 5P 6m 7M`,`todi raga`],[`1P 2M 3M 4P 5P 6M 7m`,`mixolydian`,`dominant`],[`1P 2m 3M 4P 5d 6m 7M`,`persian`],[`1P 2M 3M 4P 5P 6M 7M`,`major`,`ionian`],[`1P 2m 3M 5d 6m 7m 7M`,`enigmatic`],[`1P 2M 3M 4P 5A 6M 7M`,`major augmented`,`major #5`,`ionian augmented`,`ionian #5`],[`1P 2A 3M 4A 5P 6M 7M`,`lydian #9`],[`1P 2m 2M 4P 4A 5P 6m 7M`,`messiaen's mode #4`],[`1P 2m 3M 4P 4A 5P 6m 7M`,`purvi raga`],[`1P 2m 3m 3M 4P 5P 6m 7m`,`spanish heptatonic`],[`1P 2M 3M 4P 5P 6M 7m 7M`,`bebop`],[`1P 2M 3m 3M 4P 5P 6M 7m`,`bebop minor`],[`1P 2M 3M 4P 5P 5A 6M 7M`,`bebop major`],[`1P 2m 3m 4P 5d 5P 6m 7m`,`bebop locrian`],[`1P 2M 3m 4P 5P 6m 7m 7M`,`minor bebop`],[`1P 2M 3m 4P 5d 6m 6M 7M`,`diminished`,`whole-half diminished`],[`1P 2M 3M 4P 5d 5P 6M 7M`,`ichikosucho`],[`1P 2M 3m 4P 5P 6m 6M 7M`,`minor six diminished`],[`1P 2m 3m 3M 4A 5P 6M 7m`,`half-whole diminished`,`dominant diminished`,`messiaen's mode #2`],[`1P 3m 3M 4P 5P 6M 7m 7M`,`kafi raga`],[`1P 2M 3M 4P 4A 5A 6A 7M`,`messiaen's mode #6`],[`1P 2M 3m 3M 4P 5d 5P 6M 7m`,`composite blues`],[`1P 2M 3m 3M 4A 5P 6m 7m 7M`,`messiaen's mode #3`],[`1P 2m 2M 3m 4P 4A 5P 6m 6M 7M`,`messiaen's mode #7`],[`1P 2m 2M 3m 3M 4P 5d 5P 6m 6M 7m 7M`,`chromatic`]],fe={...R,intervals:[],aliases:[]},H=[],U$1={},__name$1(get$6,`get`),__name$1(all$1,`all`),__name$1(add$2,`add`),de.forEach(([t,c,...u])=>add$2(t.split(` `),c,u)),W$1={empty:!0,name:``,symbol:``,root:``,rootDegree:0,type:``,tonic:null,setNum:NaN,quality:`Unknown`,chroma:``,normalized:``,aliases:[],notes:[],intervals:[]},pe$1=/^(6|64|7|9|11|13)$/,__name$1(tokenize$2,`tokenize`),__name$1(get$5,`get`),me=[[.125,`dl`,[`large`,`duplex longa`,`maxima`,`octuple`,`octuple whole`]],[.25,`l`,[`long`,`longa`]],[.5,`d`,[`double whole`,`double`,`breve`]],[1,`w`,[`whole`,`semibreve`]],[2,`h`,[`half`,`minim`]],[4,`q`,[`quarter`,`crotchet`]],[8,`e`,[`eighth`,`quaver`]],[16,`s`,[`sixteenth`,`semiquaver`]],[32,`t`,[`thirty-second`,`demisemiquaver`]],[64,`sf`,[`sixty-fourth`,`hemidemisemiquaver`]],[128,`h`,[`hundred twenty-eighth`]],[256,`th`,[`two hundred fifty-sixth`]]],he=[],me.forEach(([t,c,u])=>add$1(t,c,u)),__name$1(add$1,`add`),__name$1(names$1,`names`),__name$1(t=>interval(t).name,`name`),__name$1(simplify$1,`simplify`),ve=[1,2,2,3,3,4,5,5,6,6,7,7],ye=`P m M m M P d P m M m M`.split(` `),Ce=Math.log(2),we=Math.log(440),Te=`C C# D D# E F F# G G# A A# B`.split(` `),Ee=`C Db D Eb E F Gb G Ab A Bb B`.split(` `),De=[`C`,`D`,`E`,`F`,`G`,`A`,`B`],toName=t=>t.name,onlyNotes=t=>t.map(note).filter(t=>!t.empty),G$1=note,name=t=>G$1(t).name,pitchClass=t=>G$1(t).pc,accidentals=t=>G$1(t).acc,octave=t=>G$1(t).oct,midi=t=>G$1(t).midi,freq=t=>G$1(t).freq,chroma=t=>G$1(t).chroma,K$1=transpose$2,Oe=transpose$2,transposeBy=t=>c=>K$1(c,t),ke=transposeBy,transposeFrom=t=>c=>K$1(t,c),Ae=transposeFrom,je=transposeFifths,ascending=(t,c)=>t.height-c.height,descending=(t,c)=>c.height-t.height,Me=nameBuilder(!0),Ne=nameBuilder(!1),q$1={names,get:G$1,name,pitchClass,accidentals,octave,midi,ascending,descending,sortedNames,sortedUniqNames,fromMidi,fromMidiSharps,freq,fromFreq,fromFreqSharps,chroma,transpose:K$1,tr:Oe,transposeBy,trBy:ke,transposeFrom,trFrom:Ae,transposeFifths,trFifths:je,simplify:Me,enharmonic:Ne},Pe={empty:!0,name:``,chordType:``},Fe={},__name$1(get$2,`get`),Ie=/^(#{1,}|b{1,}|x{1,}|)(IV|I{1,3}|VI{0,2}|iv|i{1,3}|vi{0,2})([^IViv]*)$/,__name$1(tokenize$1,`tokenize`),Le=`I II III IV V VI VII`,J$1=Le.split(` `),Le.toLowerCase().split(` `),Re=[[0,2773,0,`ionian`,``,`Maj7`,`major`],[1,2902,2,`dorian`,`m`,`m7`],[2,3418,4,`phrygian`,`m`,`m7`],[3,2741,-1,`lydian`,``,`Maj7`],[4,2774,1,`mixolydian`,``,`7`],[5,2906,3,`aeolian`,`m`,`m7`,`minor`],[6,3434,5,`locrian`,`dim`,`m7b5`]],ze={...R,name:``,alt:0,modeNum:NaN,triad:``,seventh:``,aliases:[]},Be=Re.map(toMode),Y$1={},Be.forEach(t=>{Y$1[t.name]=t,t.aliases.forEach(c=>{Y$1[c]=t})}),__name$1(get$1,`get`),Ve=__toESM$1(te(),1),He=class SyllableSequence{append(t){if(this.syllables.length)try{let c=new X$1(this.syllables[this.syllables.length-1].notes.map(t=>({note:t.note,timestamp:t.timestamp,type:t.type,velocity:t.velocity})).concat(t));this.syllables.splice(this.syllables.length-1,1,c)}catch{this.syllables.push(new X$1([t]))}else this.syllables.push(new X$1([t])),this.rootNote=t.note}constructor(t){_defineProperty$2(this,`syllables`,void 0),_defineProperty$2(this,`rootNote`,void 0),t.length>0?(this.syllables=t.sort((t,c)=>t.timestamp-c.timestamp),this.rootNote=this.syllables[0].notes.reduce((t,c)=>c.note.number<t.note.number?c:t).note):(this.syllables=[],this.rootNote={name:`C`,octave:4,number:0})}grade(t){let c=[];for(let u=0;u<this.syllables.length;u++)c.push(this.syllables[u].grade(t.syllables[u]));return new SyllableSequence(c)}toString(){let t=``;return this.syllables.forEach((c,u)=>{t+=`Syllable ${u+1}: {\n`,c.notes.forEach(c=>{t+=`\t${c.note.name}\t${c.note.number}\t${c.timestamp} ${c.isCorrect?``:`(incorrect)`} ${c.isMissing?`(missing)`:``}\n`}),t+=`} - ${c.timestamp}, correct: ${c.isCorrect}\n`}),t}isCorrect(){let t=!0;return this.syllables.forEach(c=>{c.isCorrect===!1?t=!1:c.notes.forEach(c=>{c.isCorrect===!1&&(t=!1)})}),t}},X$1=class Syllable{get timestamp(){let t=0;return this.notes.forEach(c=>{if(c.timestamp===0)return 0;t+=c.timestamp}),t/=this.notes.length,t}constructor(t){_defineProperty$2(this,`notes`,void 0),_defineProperty$2(this,`isCorrect`,void 0),t=t.filter(t=>t.type===`noteon`);let c=t.reduce((t,c)=>t.timestamp<c.timestamp?t:c),u=t.reduce((t,c)=>t.timestamp>c.timestamp?t:c).timestamp-c.timestamp;if(Syllable.gracePeriod(t.length)<u)throw Error(`Notes ${t.toString()} are not close enough together to be a syllable`);this.notes=t.map(t=>({...t,isCorrect:!0,isMissing:!1})).sort((t,c)=>t.note.number-c.note.number)}static gracePeriod(t){return 1.3*12*t}grade(t){return this.notes.length!==t.notes.length&&(t.isCorrect=!1),t.notes.forEach(c=>{let u=q$1.fromMidi(c.note.number),d=q$1.fromMidiSharps(c.note.number);u=q$1.pitchClass(u),d=q$1.pitchClass(d),c.isCorrect=this.notes.filter(t=>q$1.chroma(u)===q$1.chroma(t.note.name)||q$1.chroma(d)===q$1.chroma(t.note.name)).length>=1,c.isCorrect||(t.isCorrect=!1)}),this.notes.forEach(c=>{let u=q$1.fromMidi(c.note.number);u=q$1.pitchClass(u),t.notes.some(t=>q$1.chroma(t.note.name)===q$1.chroma(u))||t.notes.push({...c,isMissing:!0,isCorrect:!1})}),t}},Z$1=(_SkMidi=class SkMidi{get state(){return this._state}constructor(t){_defineProperty$2(this,`recording`,[]),_defineProperty$2(this,`webmidi`,Ve.default),_defineProperty$2(this,`input`,void 0),_defineProperty$2(this,`output`,void 0),_defineProperty$2(this,`_noteonListeners`,[]),_defineProperty$2(this,`_noteoffListeners`,[]),_defineProperty$2(this,`midiAccess`,void 0),_defineProperty$2(this,`_state`,`initializing`),_defineProperty$2(this,`_userLookup`,void 0),this._userLookup=t??null}async init(){if(!this.midiAccess)try{navigator.requestMIDIAccess().then(t=>{this.midiAccess=t,this.midiAccess.onstatechange=t=>{Z$2({text:`Midi device ${t.port.name} is ${t.port.state}`,status:t.port.state===`connected`?Status.ok:Status.error})}})}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}try{this.webmidi.disable()}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}return new Promise((t,c)=>{this.webmidi.enable(async u=>{u?(this._state=`notsupported`,console.log(`Webmidi not enabled: ${u}`),c(u)):(console.log(`Webmidi enabled`),console.log(`Inputs: ${JSON.stringify(this.webmidi.inputs)}`),console.log(`Outputs: ${JSON.stringify(this.webmidi.outputs)}`),this.output=this.webmidi.outputs[0],this.input=this.webmidi.inputs[0],SkMidi._initializedWithUserConfig||(SkMidi._initializedWithUserConfig=(await this.loadUserConfiguration(),!0)),this.input&&this.output?(console.log(`midi init state: ready`),this._state=`ready`,this.attachListeners()):(console.log(`midi init state: nodevice`),this._state=`nodevice`),t(!0))})})}async loadUserConfiguration(){try{if(!this._userLookup){console.log(`User lookup function not provided - using default MIDI configuration`);return}let t=await this._userLookup();if(!t){console.log(`No user found, using default MIDI configuration`);return}let c=await t.getActiveCourses();for(let u of c){let c=await(await t.getCourseInterface(u.courseID)).getCourseSettings();if(c?.midiinput||c?.midioutput){c.midiinput&&this.webmidi.getInputById(c.midiinput.toString())&&(this.selectInput(c.midiinput.toString()),console.log(`Loaded saved MIDI input: ${c.midiinput}`)),c.midioutput&&this.webmidi.getOutputById(c.midioutput.toString())&&(this.selectOutput(c.midioutput.toString()),console.log(`Loaded saved MIDI output: ${c.midioutput}`));break}}}catch(t){console.error(`Failed to load user MIDI configuration:`,t)}}setStateChangeListener(t){if(this.midiAccess)this.midiAccess.onstatechange=c=>{this.init().then(()=>{console.log(`Midi state: ${this.state}`),t()}),Z$2({text:`Midi device ${c.port.name} is ${c.port.state}`,status:c.port.state===`connected`?Status.ok:Status.error})};else try{navigator.requestMIDIAccess().then(c=>{this.midiAccess=c,this.midiAccess.onstatechange=c=>{this.init().then(()=>{console.log(`Midi state: ${this.state}`),t()}),Z$2({text:`Midi device ${c.port.name} is ${c.port.state}`,status:c.port.state===`connected`?Status.ok:Status.error})}})}catch(t){console.log(`Webmidi not enabled: ${t}`),this._state=`notsupported`}}attachListeners(){this.input&&(this._noteonListeners.forEach(t=>{this.input?.on(`noteon`,`all`,t)}),this._noteoffListeners.forEach(t=>{this.input?.on(`noteoff`,`all`,t)}))}get hasRecording(){return this.record.length>0}get configuredInput(){return this.input?`${this.input.manufacturer}: ${this.input.name}`:`(Not Sure!)`}eraseRecording(){this.recording=[]}stopRecording(){this.input?.removeListener()}record(){let t=0;if(this.input===void 0)throw Error(`Midi input not configured!`);this.input.connection===`open`&&(this.stopRecording(),this.eraseRecording(),this.input.on(`noteon`,`all`,c=>{this.recording.length===0&&(t=c.timestamp),this.recording.push({note:c.note,type:c.type,velocity:c.velocity,timestamp:c.timestamp-t})}),this.input.on(`noteoff`,`all`,c=>{this.recording.length===0&&(t=c.timestamp),this.recording.push({note:c.note,velocity:c.velocity,type:c.type,timestamp:c.timestamp-t})}))}addNoteonListenter(t){this._noteonListeners.push(t),this.input&&this.input.on(`noteon`,`all`,t)}addNoteoffListenter(t){this._noteoffListeners.push(t),this.input&&this.input.on(`noteoff`,`all`,t)}play(t){let c=t||this.recording;c=c.map(t=>({...t,timestamp:t.timestamp+SkMidi.OFFSET})),c.forEach(t=>{t.type===`noteon`?this.output?.playNote(t.note.name+t.note.octave,1,{velocity:t.velocity,time:`+${t.timestamp}`,rawVelocity:!1}):this.output?.stopNote(t.note.name+t.note.octave,1,{velocity:t.velocity,time:`+${t.timestamp}`,rawVelocity:!1})})}static async instance(){return SkMidi._instance?SkMidi._instance:(console.log(`Buzz, whirr, Midi instance factory is at work`),SkMidi._instance=new SkMidi,await SkMidi._instance.init(),SkMidi._instance)}get inputs(){return this.webmidi.inputs}get outputs(){return this.webmidi.outputs}selectInput(t){this.webmidi.getInputById(t)===!1?this.webmidi.getInputByName(t)!==!1&&(this.input=this.webmidi.getInputByName(t)):this.input=this.webmidi.getInputById(t)}selectOutput(t){this.webmidi.getOutputById(t)===!1?this.webmidi.getOutputByName(t)!==!1&&(this.output=this.webmidi.getOutputByName(t)):this.output=this.webmidi.getOutputById(t)}},_defineProperty$2(_SkMidi,`_instance`,void 0),_defineProperty$2(_SkMidi,`OFFSET`,5),_defineProperty$2(_SkMidi,`_initializedWithUserConfig`,!1),_SkMidi),Ue=defineComponent({name:`SyllableSeqVis`,props:{seq:{type:Object,required:!0},lastTSsuggestion:{type:Number,required:!1,default:0}},setup(t){let c=ref(0),u=ref(0),d=ref(0),m=ref(500),sayNote=t=>{console.log(`${JSON.stringify(t)}`)},g=computed(()=>{let c=t.seq.syllables[t.seq.syllables.length-1].timestamp;return Math.max(1,c,t.lastTSsuggestion)}),b=computed(()=>{let c=0,u=500;return t.seq.syllables.forEach(t=>{t.notes.forEach(t=>{t.note.number>c&&(c=t.note.number),t.note.number<u&&(u=t.note.number)})}),Math.max(3*(c-u)+10,0)}),updateBounds=()=>{try{c.value=t.seq.syllables[0].timestamp;let d=t.seq.syllables[t.seq.syllables.length-1].timestamp,m=c.value+t.lastTSsuggestion;u.value=Math.max(d,m)}catch(t){console.log(`[SyllableSeqVis] Error updating bounds: ${t}`)}t.seq.syllables.forEach(t=>{t.notes.forEach(t=>{t.note.number>d.value&&(d.value=t.note.number),t.note.number<m.value&&(m.value=t.note.number)})})};return onMounted(()=>{console.log(`SyllableSeqVis created w/ input: \n${t.seq}`),updateBounds()}),{firstTS:c,lastTS:u,high:d,low:m,sayNote,getLastTS:g,getHeight:b,updateBounds}}}),We=[`height`],Ge=[`cx`,`cy`,`alt`,`fill`,`stroke`,`onMouseenter`],__name$1(_sfc_render$3,`_sfc_render`),Ke=A(Ue,[[`render`,_sfc_render$3],[`__scopeId`,`data-v-2f79c080`]]),qe=defineComponent({name:`NoteDisplay`,props:{chroma:{type:Number,required:!0}},setup(t){let style=c=>{let u=`#ffffff`;return c===t.chroma?u=`#1976D2`:(c===1||c===3||c===6||c===8||c===10||c===-2)&&(u=`#000000`),{fill:u,"fill-opacity":1,stroke:`#000000`,"stroke-width":.79375,"stroke-miterlimit":4,"stroke-dasharray":`none`,"stroke-opacity":1}};return{style,white:-1,black:-2}}}),Je={id:`svg8`,width:`300px`,height:`auto`,"xmlns:dc":`http://purl.org/dc/elements/1.1/`,"xmlns:cc":`http://creativecommons.org/ns#`,"xmlns:rdf":`http://www.w3.org/1999/02/22-rdf-syntax-ns#`,"xmlns:svg":`http://www.w3.org/2000/svg`,xmlns:`http://www.w3.org/2000/svg`,"xmlns:sodipodi":`http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd`,"xmlns:inkscape":`http://www.inkscape.org/namespaces/inkscape`,"sodipodi:docname":`keys.svg`,"inkscape:version":`1.0rc1 (09960d6f05, 2020-04-09)`,version:`1.1`,viewBox:`0 0 175.24936 73.594925`},Ye={id:`metadata5`},Xe={id:`layer1`,transform:`translate(167.75219,-151.96011)`,"inkscape:groupmode":`layer`,"inkscape:label":`Layer 1`},__name$1(_sfc_render$2,`_sfc_render`),Ze=defineComponent({name:`Playback`,components:{SyllableSeqVis:Ke,NoteDisplay:A(qe,[[`render`,_sfc_render$2]])},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`Playback`),d=useQuestionView(u),m=ref(),g=ref(!1),b=ref(`notSet`),S=ref(!1),C=ref(0),w=ref(hooks.utc()),T=ref(0),E=ref(0),D=ref(eventsToSyllableSequence([])),O=ref(!1),Or=ref(eventsToSyllableSequence([])),kr=ref(0),Ar=ref(``),jr=ref(0),Mr=ref(0),Nr=ref(),Pr=ref();d.question.value=new Q(t.data);let Fr=computed(()=>new Q(t.data)),Ir=computed(()=>eventsToSyllableSequence(Fr.value.midi).syllables[0].notes.length>1?`Lowest note of first chord:`:`First note:`),Lr=computed(()=>g.value?eventsToSyllableSequence(Fr.value.midi).rootNote.number%12:0),init=()=>{b.value?b.value!==m.value?.state&&(g.value=!1,b.value=m.value?.state||`notSet`,g.value=!0):(b.value=m.value?.state||`notSet`,g.value=!0),u.logger.log(`Playback is running init with state: ${b.value}`),b.value===`ready`&&(T.value=Fr.value.duration,play())},runProgressBar=()=>{try{Nr.value&&(Nr.value.style.animationName=``,requestAnimationFrame(()=>{requestAnimationFrame(()=>{Nr.value&&(Nr.value.style.animationDuration=T.value+`ms`,Nr.value.style.animationName=`progress`)})}))}catch{setTimeout(runProgressBar,50)}},record=()=>{m.value?.record(),S.value=!0,m.value?.addNoteonListenter(t=>{jr.value++,Or.value.append(t),Pr.value?.updateBounds(),jr.value+Mr.value>=Fr.value.midi.length&&submit()}),m.value?.addNoteoffListenter(()=>{Mr.value++,jr.value+Mr.value>=Fr.value.midi.length&&submit()})},play=()=>{m.value?.stopRecording(),m.value?.eraseRecording(),w.value=hooks.utc(),jr.value=0,Mr.value=0,S.value=!1,C.value=0,runProgressBar(),m.value?.play(Fr.value.midi),setTimeout(()=>{u.logger.log(`done playback...`),record()},Fr.value.lastNoteOnTimestamp)},submit=()=>{if(!m.value?.recording)return!1;let t=eventsToSyllableSequence(Fr.value.midi),c=eventsToSyllableSequence(m.value.recording);return D.value=t.grade(c),Or.value=eventsToSyllableSequence([]),d.submitAnswer(m.value.recording).isCorrect?!0:(E.value++,O.value=!0,E.value<d.maxAttemptsPerView.value&&play(),!1)},clearAttempt=()=>{jr.value>0?submit():play()};return onMounted(async()=>{try{m.value=await Z$1.instance(),m.value.setStateChangeListener(()=>{init()}),g.value=!0}catch(t){Z$2({status:Status.error,text:`Midi device not supported`}),Ar.value=JSON.stringify(t),b.value=`notsupported`,g.value=!0}init(),I$2.addBinding([{hotkey:`space`,callback:clearAttempt,command:`Clear attempt or play again`}])}),onBeforeUnmount(()=>{I$2.removeBinding(`space`)}),{...u,...d,initialized:g,state:b,recording:S,inputSeq:Or,lastTSsuggestion:kr,gradedSeq:D,graded:O,promptText:Ir,firstNoteChroma:Lr,progressBar:Nr,inputVisRef:Pr,clearAttempt,notesOn:jr}}}),Qe={key:0,"data-viewable":`Playback`},$e={key:0},et={class:`text-h4`},tt={class:`text-h5`},nt={key:0},rt={class:`progressContainer`},it={id:`progress`,ref:`progressBar`},at={key:1},ot={key:2},__name$2(_sfc_render$1$1,`_sfc_render$1`),__name$1(_sfc_render$1$1,`_sfc_render`),st=A(Ze,[[`render`,_sfc_render$1$1]]),ct=[{name:`Melody`,type:FieldType.MIDI}],Q=(_EchoQuestion=class EchoQuestion extends Question{constructor(t){var _super=(...t)=>(super(...t),_defineProperty$2(this,`midi`,void 0),this);_super(t),this.midi=t[0].Melody}get duration(){return this.midi.reduce((t,c)=>c.timestamp>t.timestamp?c:t).timestamp}get lastNoteOnTimestamp(){return this.midi.filter(t=>t.type===`noteon`).reduce((t,c)=>c.timestamp>t.timestamp?c:t).timestamp}isCorrect(t){let c=eventsToSyllableSequence(this.midi),u=eventsToSyllableSequence(t);try{return c.grade(u).isCorrect()}catch(t){return console.log(`ERROR grading this midi sequence!`,t),!1}}dataShapes(){return EchoQuestion.dataShapes}views(){return EchoQuestion.views}},_defineProperty$2(_EchoQuestion,`dataShapes`,[{fields:ct,name:DataShapeName.PIANO_Echo}]),_defineProperty$2(_EchoQuestion,`views`,[st]),_EchoQuestion),lt=defineComponent({name:`NotePlayback`,components:{},props:{data:{type:Array,required:!0},modifyDifficulty:{type:Number,required:!1,default:0}},setup(t,{emit:c}){let u=useViewable(t,c,`NotePlayback`),d=useQuestionView(u),m=ref(),g=ref(!1),b=ref(!1),S=ref(0),C=ref(hooks.utc()),w=ref(0),T=ref(eventsToSyllableSequence([])),E=ref(!1),D=ref(eventsToSyllableSequence([])),O=ref(``);d.question.value=new $$1(t.data);let Or=computed(()=>new $$1(t.data)),record=()=>{m.value?.record(),b.value=!0,m.value?.addNoteonListenter(t=>{D.value.append(t)}),m.value?.addNoteoffListenter(()=>{m.value?.recording?.length&&m.value?.recording?.length>=2&&submit()})},play=()=>{m.value?.stopRecording(),m.value?.eraseRecording(),C.value=hooks.utc(),b.value=!1,S.value=0,record()},submit=()=>m.value?.recording?(D.value=eventsToSyllableSequence([]),d.submitAnswer(m.value.recording).isCorrect?!0:(w.value++,E.value=!0,w.value<d.maxAttemptsPerView.value&&play(),!1)):!1;return onMounted(async()=>{try{m.value=await Z$1.instance(),O.value=Or.value.note,play(),g.value=!0}catch(t){u.logger.error(`Failed to initialize MIDI:`,t)}}),{...u,...d,initialized:g,recording:b,inputSeq:D,gradedSeq:T,graded:E,note:O,attempts:w}}}),ut={"data-viewable":`NotePlayback`},dt={class:`text-h4`},ft={class:`font-weight-bold`},pt={key:0,id:`svg8`,width:`300px`,height:`auto`,"xmlns:dc":`http://purl.org/dc/elements/1.1/`,"xmlns:cc":`http://creativecommons.org/ns#`,"xmlns:rdf":`http://www.w3.org/1999/02/22-rdf-syntax-ns#`,"xmlns:svg":`http://www.w3.org/2000/svg`,xmlns:`http://www.w3.org/2000/svg`,"xmlns:sodipodi":`http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd`,"xmlns:inkscape":`http://www.inkscape.org/namespaces/inkscape`,"sodipodi:docname":`keys.svg`,"inkscape:version":`1.0rc1 (09960d6f05, 2020-04-09)`,version:`1.1`,viewBox:`0 0 175.24936 73.594925`},mt={id:`metadata5`},ht=A(lt,[[`render`,_sfc_render]]),gt=[{name:`Note`,type:FieldType.STRING}],$$1=(_PlayNote=class PlayNote extends Question{constructor(t){var _super2=(...t)=>(super(...t),_defineProperty$2(this,`note`,void 0),this);_super2(t),this.note=t[0].Note}isCorrect(t){return t[0].note.name===this.note}dataShapes(){return PlayNote.dataShapes}views(){return PlayNote.views}},_defineProperty$2(_PlayNote,`dataShapes`,[{fields:gt,name:DataShapeName.PIANO_PlayNote}]),_defineProperty$2(_PlayNote,`seedData`,[`A`,`B`,`C`,`D`,`E`,`F`,`G`,`A♯`,`C♯`,`D♯`,`F♯`,`G♯`,`D♭`,`E♭`,`G♭`,`A♭`,`B♭`].map(t=>({Note:t}))),_defineProperty$2(_PlayNote,`views`,[ht]),_PlayNote),new CourseWare(`piano`,[Q,$$1])}));init_piano_DF1g6yaX(),init_shapes_BQUVJdp5(),init_CourseWare_BTFRjgBR(),init_vue_runtime_esm_bundler(),init_common_ui_es(),init_dist$1(),init_dist(),init_defineProperty();var U=new CourseWare(`default`,[I$1]),W=defineComponent({name:`PianoRangeVisualizer`,props:{lowestNote:{type:Number,required:!0},highestNote:{type:Number,required:!0},maxWidth:{type:Number,default:1e3}},setup(t){let c=ref(null),u=ref(800),d=computed(()=>{let t=0;for(let c=21;c<=108;c++)isWhiteKey(c)&&t++;return t}),m=computed(()=>Math.min(22,u.value/Math.max(25,d.value))),g=computed(()=>m.value*.6),b=computed(()=>Math.min(t.maxWidth,m.value*d.value+10)),isWhiteKey=t=>{let c=t%12;return[0,2,4,5,7,9,11].includes(c)},getKeyPosition=t=>{let c=0;for(let u=21;u<t;u++)isWhiteKey(u)&&c++;return isWhiteKey(t)?c*m.value:c*m.value-g.value/2},getNoteLabel=t=>{let c=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],u=t%12,d=Math.floor(t/12)-1;return`${c[u]}${d}`};return onMounted(()=>{c.value&&(u.value=c.value.clientWidth,new ResizeObserver(t=>{for(let c of t)u.value=c.contentRect.width}).observe(c.value))}),{pianoWrapper:c,keyHeight:100,blackKeyHeight:60,whiteKeyWidth:m,blackKeyWidth:g,svgWidth:b,isWhiteKey,getKeyPosition,getNoteLabel}}}),G={class:`piano-range-container`},K={class:`piano-wrapper`,ref:`pianoWrapper`},q=[`width`,`height`],J={class:`background-keys`,opacity:`0.15`},Y=[`x`,`width`,`height`],X=[`x`,`width`,`height`],Z={class:`selected-range`},ne=[`x`,`width`,`height`],re=[`x`,`width`,`height`],ie={class:`range-markers`},ae=[`x`,`height`],oe=[`x`,`height`],se=[`x`,`y`],ce=[`x`,`y`];function _sfc_render$1(t,c,u,d,m,g){return openBlock(),createElementBlock(`div`,G,[createBaseVNode(`div`,K,[(openBlock(),createElementBlock(`svg`,{width:t.svgWidth,height:t.keyHeight+20,class:`piano-svg`},[createBaseVNode(`g`,J,[(openBlock(),createElementBlock(Fragment,null,renderList(88,c=>(openBlock(),createElementBlock(Fragment,{key:`bg-${c}`},[t.isWhiteKey(c+20)?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c+20),y:`0`,width:t.whiteKeyWidth,height:t.keyHeight,class:`white-key`,stroke:`#999`,"stroke-width":`1`},null,8,Y)):createCommentVNode(``,!0)],64))),64)),(openBlock(),createElementBlock(Fragment,null,renderList(88,c=>(openBlock(),createElementBlock(Fragment,{key:`bg-black-${c}`},[t.isWhiteKey(c+20)?createCommentVNode(``,!0):(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c+20),y:`0`,width:t.blackKeyWidth,height:t.blackKeyHeight,class:`black-key`},null,8,X))],64))),64))]),createBaseVNode(`g`,Z,[(openBlock(),createElementBlock(Fragment,null,renderList(128,c=>(openBlock(),createElementBlock(Fragment,{key:`white-${c}`},[t.isWhiteKey(c)&&c>=t.lowestNote&&c<=t.highestNote?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c),y:`0`,width:t.whiteKeyWidth,height:t.keyHeight,class:`white-key active`,stroke:`#666`,"stroke-width":`1`},null,8,ne)):createCommentVNode(``,!0)],64))),64)),(openBlock(),createElementBlock(Fragment,null,renderList(128,c=>(openBlock(),createElementBlock(Fragment,{key:`black-${c}`},[!t.isWhiteKey(c)&&c>=t.lowestNote&&c<=t.highestNote?(openBlock(),createElementBlock(`rect`,{key:0,x:t.getKeyPosition(c),y:`0`,width:t.blackKeyWidth,height:t.blackKeyHeight,class:`black-key active`},null,8,re)):createCommentVNode(``,!0)],64))),64))]),createBaseVNode(`g`,ie,[createBaseVNode(`rect`,{x:t.getKeyPosition(t.lowestNote)-2,y:`0`,width:4,height:t.keyHeight+5,class:`range-marker start`},null,8,ae),createBaseVNode(`rect`,{x:t.getKeyPosition(t.highestNote)+t.whiteKeyWidth-2,y:`0`,width:4,height:t.keyHeight+5,class:`range-marker end`},null,8,oe)]),createBaseVNode(`text`,{x:t.getKeyPosition(t.lowestNote)+3,y:t.keyHeight+12,class:`note-label`},toDisplayString(t.getNoteLabel(t.lowestNote)),9,se),createBaseVNode(`text`,{x:t.getKeyPosition(t.highestNote)+t.whiteKeyWidth-3,y:t.keyHeight+12,"text-anchor":`end`,class:`note-label`},toDisplayString(t.getNoteLabel(t.highestNote)),9,ce)],8,q))],512)])}__name$1(_sfc_render$1,`_sfc_render`);var le=defineComponent({name:`MidiConfig`,components:{PianoRangeVisualizer:A(W,[[`render`,_sfc_render$1],[`__scopeId`,`data-v-4b232a8b`]])},props:{_id:{type:String,required:!0},user:{type:Object,required:!0}},setup(t){let c=ref(),u=ref(!0),d=ref([]),m=ref([]),g=ref(``),b=ref(``),S=ref(!1),C=ref(``),w=ref(``),T=ref(!1),E=ref(`full-88`),D=ref(21),O=ref(108),Or=ref(``),kr=ref(0),Ar=ref(0),jr=ref([]),initNoteOptions=()=>{let t=[`C`,`C#`,`D`,`D#`,`E`,`F`,`F#`,`G`,`G#`,`A`,`A#`,`B`],c=[];for(let u=0;u<=127;u++){let d=Math.floor(u/12)-1,m=t[u%12];c.push({title:`${m}${d} (${u})`,value:u})}jr.value=c},Mr=ref([{title:`Full 88-key Piano (A0-C8)`,value:`full-88`},{title:`76-key Keyboard (E1-G7)`,value:`76-key`},{title:`61-key Keyboard (C2-C7)`,value:`61-key`},{title:`49-key Keyboard (C3-C7)`,value:`49-key`},{title:`37-key Keyboard (C3-C6)`,value:`37-key`},{title:`25-key Keyboard (C4-C6)`,value:`25-key`},{title:`Custom Range`,value:`custom`}]),checkConfigChanged=()=>{T.value=g.value!==C.value||b.value!==w.value||E.value!==Or.value||E.value===`custom`&&(D.value!==kr.value||O.value!==Ar.value)},updateCustomRangeFromPreset=()=>{switch(E.value){case`full-88`:D.value=21,O.value=108;break;case`76-key`:D.value=28,O.value=103;break;case`61-key`:D.value=36,O.value=96;break;case`49-key`:D.value=48,O.value=96;break;case`37-key`:D.value=48,O.value=84;break;case`25-key`:D.value=60,O.value=84;break}checkConfigChanged()},updateRangeAndCheckChanges=()=>{D.value>=O.value&&(O.value=D.value+12),checkConfigChanged()},playSound=()=>{c.value?.play([{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.4251968503937008,timestamp:0},{note:{number:64,name:`E`,octave:4},velocity:.3779527559055118,type:`noteoff`,timestamp:511.90500000002794},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5275590551181102,timestamp:535.8800000001211},{note:{number:60,name:`C`,octave:4},velocity:.33858267716535434,type:`noteoff`,timestamp:674.9899999999907},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5590551181102362,timestamp:1070.8800000000047},{note:{number:60,name:`C`,octave:4},velocity:.3464566929133858,type:`noteoff`,timestamp:1214.8999999999069},{note:{number:64,name:`E`,octave:4},type:`noteon`,velocity:.5118110236220472,timestamp:1424.9400000000605},{note:{number:64,name:`E`,octave:4},velocity:.2755905511811024,type:`noteoff`,timestamp:1576.9150000000373},{note:{number:62,name:`D`,octave:4},type:`noteon`,velocity:.3937007874015748,timestamp:1756.9149999999208},{note:{number:62,name:`D`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:1926.9899999998743},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5196850393700787,timestamp:1970.9600000000792},{note:{number:60,name:`C`,octave:4},velocity:.36220472440944884,type:`noteoff`,timestamp:2126.009999999893},{note:{number:60,name:`C`,octave:4},type:`noteon`,velocity:.5984251968503937,timestamp:2502.0050000000047},{note:{number:60,name:`C`,octave:4},velocity:.3858267716535433,type:`noteoff`,timestamp:2853.920000000042},{note:{number:67,name:`G`,octave:4},type:`noteon`,velocity:.6850393700787402,timestamp:2875.8649999999907},{note:{number:67,name:`G`,octave:4},velocity:.6377952755905512,type:`noteoff`,timestamp:4497.004999999888}])},indicateHeardNotes=t=>{Z$2({text:`I hear a ${t.note.name}!`,status:Status.ok})};watch(g,()=>{c.value?.selectInput(g.value),checkConfigChanged()}),watch(b,()=>{c.value?.selectOutput(b.value),checkConfigChanged()});let retrieveSettings=async()=>{let c=await(await t.user.getCourseInterface(t._id)).getCourseSettings();if(c?.midiinput){let t=c.midiinput.toString();d.value.some(c=>c.value===t)&&(g.value=t,C.value=t)}if(c?.midioutput){let t=c.midioutput.toString();m.value.some(c=>c.value===t)&&(b.value=t,w.value=t)}c?.keyboardRange&&(Or.value=c.keyboardRange.toString(),E.value=Or.value),c?.lowestNote&&(kr.value=parseInt(c.lowestNote.toString()),D.value=kr.value),c?.highestNote&&(Ar.value=parseInt(c.highestNote.toString()),O.value=Ar.value),c?.lowestNote&&c?.highestNote&&!c?.keyboardRange&&(E.value=`custom`),T.value=!1},saveSettings=async()=>{S.value=!0,(await getDataLayer().getUserDB().getCourseInterface(t._id)).updateCourseSettings([{key:`midiinput`,value:g.value},{key:`midioutput`,value:b.value},{key:`keyboardRange`,value:E.value},{key:`lowestNote`,value:D.value},{key:`highestNote`,value:O.value}]),C.value=g.value,w.value=b.value,Or.value=E.value,kr.value=D.value,Ar.value=O.value,T.value=!1,S.value=!1,Z$2({text:`Settings updated.`,status:Status.ok})};return onMounted(async()=>{initNoteOptions();try{c.value=await Z$1.instance(),u.value=c.value.state===`ready`||c.value.state===`nodevice`}catch(t){console.log(`Error on midi Init: ${t}`),u.value=!1}u.value&&(c.value?.addNoteonListenter(indicateHeardNotes),c.value?(d.value=c.value.inputs.filter(t=>t.state===`connected`).map(t=>({title:`${t.manufacturer}: ${t.name}`,value:t.id})),m.value=c.value?.outputs.filter(t=>t.state===`connected`).map(t=>({title:`${t.manufacturer}: ${t.name}`,value:t.id}))):(d.value=[{title:`No inputs available`,value:``}],m.value=[{title:`No outputs available`,value:``}]),await retrieveSettings(),!g.value&&d.value.length>0&&(g.value=d.value[0].value),!b.value&&m.value.length>0&&(b.value=m.value[0].value))}),{midiSupported:u,inputs:d,outputs:m,selectedInput:g,selectedOutput:b,updatePending:S,playSound,saveSettings,configChanged:T,lowestNote:D,highestNote:O,keyboardRangeOptions:Mr,selectedKeyboardRange:E,noteOptions:jr,updateCustomRangeFromPreset,updateRangeAndCheckChanges}}}),pe=useQuestionView,AllCourseWare=class{get courses(){return this.courseWareList}constructor(t){_defineProperty$2(this,`courseWareList`,void 0),_defineProperty$2(this,`cachedRawViews`,null),this.courseWareList=t}getCourseWare(t){return this.courseWareList.find(c=>c.name===t)}allViewsRaw(){if(!this.cachedRawViews){let t=this.allViews();this.cachedRawViews=Object.fromEntries(Object.entries(t).map(([t,c])=>[t,markRaw(c)]))}return this.cachedRawViews}allViews(){let t={};return this.courseWareList.forEach(c=>{Object.assign(t,c.allViewsMap)}),t}getView(t){let c;c=typeof t==`string`?NameSpacer.getViewDescriptor(t):t;let u=this.getCourseWare(c.course);if(u){let t=u.getQuestion(c.questionType);if(t){let d=t.views.find(t=>t.name===c.view);if(d)return d;throw console.error(`QuestionView ${c.view} not found in course ${c.course}
|
|
473
495
|
|
|
474
496
|
descriptor: ${JSON.stringify(c)}
|
|
475
497
|
|