@mongoosejs/studio 0.1.16 → 0.1.18

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.
Files changed (36) hide show
  1. package/backend/actions/Model/getCollectionInfo.js +49 -0
  2. package/backend/actions/Model/index.js +1 -0
  3. package/backend/actions/Model/updateDocument.js +3 -0
  4. package/backend/actions/Model/updateDocuments.js +3 -0
  5. package/frontend/public/app.js +954 -524
  6. package/frontend/public/tw.css +105 -19
  7. package/frontend/src/api.js +7 -1
  8. package/frontend/src/array-utils.js +66 -0
  9. package/frontend/src/chat/chat-message/chat-message.js +7 -0
  10. package/frontend/src/chat/chat-message-script/chat-message-script.js +21 -0
  11. package/frontend/src/chat/chat.js +22 -0
  12. package/frontend/src/clone-document/clone-document.js +14 -5
  13. package/frontend/src/create-dashboard/create-dashboard.js +8 -0
  14. package/frontend/src/create-document/create-document.js +14 -5
  15. package/frontend/src/dashboard/dashboard.js +9 -1
  16. package/frontend/src/dashboard/edit-dashboard/edit-dashboard.js +8 -0
  17. package/frontend/src/dashboards/dashboards.js +8 -0
  18. package/frontend/src/detail-array/detail-array.html +25 -3
  19. package/frontend/src/detail-array/detail-array.js +22 -6
  20. package/frontend/src/document/document.js +32 -20
  21. package/frontend/src/document-details/document-details.html +61 -12
  22. package/frontend/src/document-details/document-details.js +29 -13
  23. package/frontend/src/document-details/document-property/document-property.html +41 -3
  24. package/frontend/src/document-details/document-property/document-property.js +47 -2
  25. package/frontend/src/edit-array/edit-array.html +5 -2
  26. package/frontend/src/edit-array/edit-array.js +79 -23
  27. package/frontend/src/export-query-results/export-query-results.js +8 -1
  28. package/frontend/src/index.js +2 -1
  29. package/frontend/src/list-array/list-array.html +1 -1
  30. package/frontend/src/list-array/list-array.js +0 -2
  31. package/frontend/src/models/models.html +76 -8
  32. package/frontend/src/models/models.js +112 -1
  33. package/frontend/src/update-document/update-document.js +28 -27
  34. package/package.json +1 -1
  35. package/frontend/src/edit-array/edit-array.css +0 -3
  36. package/frontend/src/list-array/list-array.css +0 -8
@@ -1,11 +1,11 @@
1
1
  /******/ (() => { // webpackBootstrap
2
2
  /******/ var __webpack_modules__ = ({
3
3
 
4
- /***/ "./frontend/src sync recursive ^\\.\\/.*$":
4
+ /***/ "./frontend/src sync recursive ^\\.\\/.*$"
5
5
  /*!*************************************!*\
6
6
  !*** ./frontend/src/ sync ^\.\/.*$ ***!
7
7
  \*************************************/
8
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
8
+ (module, __unused_webpack_exports, __webpack_require__) {
9
9
 
10
10
  var map = {
11
11
  "./": "./frontend/src/index.js",
@@ -13,6 +13,8 @@ var map = {
13
13
  "./api.js": "./frontend/src/api.js",
14
14
  "./appendCSS": "./frontend/src/appendCSS.js",
15
15
  "./appendCSS.js": "./frontend/src/appendCSS.js",
16
+ "./array-utils": "./frontend/src/array-utils.js",
17
+ "./array-utils.js": "./frontend/src/array-utils.js",
16
18
  "./async-button/async-button": "./frontend/src/async-button/async-button.js",
17
19
  "./async-button/async-button.html": "./frontend/src/async-button/async-button.html",
18
20
  "./async-button/async-button.js": "./frontend/src/async-button/async-button.js",
@@ -94,7 +96,6 @@ var map = {
94
96
  "./document/document.html": "./frontend/src/document/document.html",
95
97
  "./document/document.js": "./frontend/src/document/document.js",
96
98
  "./edit-array/edit-array": "./frontend/src/edit-array/edit-array.js",
97
- "./edit-array/edit-array.css": "./frontend/src/edit-array/edit-array.css",
98
99
  "./edit-array/edit-array.html": "./frontend/src/edit-array/edit-array.html",
99
100
  "./edit-array/edit-array.js": "./frontend/src/edit-array/edit-array.js",
100
101
  "./edit-boolean/edit-boolean": "./frontend/src/edit-boolean/edit-boolean.js",
@@ -124,7 +125,6 @@ var map = {
124
125
  "./index": "./frontend/src/index.js",
125
126
  "./index.js": "./frontend/src/index.js",
126
127
  "./list-array/list-array": "./frontend/src/list-array/list-array.js",
127
- "./list-array/list-array.css": "./frontend/src/list-array/list-array.css",
128
128
  "./list-array/list-array.html": "./frontend/src/list-array/list-array.html",
129
129
  "./list-array/list-array.js": "./frontend/src/list-array/list-array.js",
130
130
  "./list-default/list-default": "./frontend/src/list-default/list-default.js",
@@ -203,13 +203,13 @@ webpackContext.resolve = webpackContextResolve;
203
203
  module.exports = webpackContext;
204
204
  webpackContext.id = "./frontend/src sync recursive ^\\.\\/.*$";
205
205
 
206
- /***/ }),
206
+ /***/ },
207
207
 
208
- /***/ "./frontend/src/api.js":
208
+ /***/ "./frontend/src/api.js"
209
209
  /*!*****************************!*\
210
210
  !*** ./frontend/src/api.js ***!
211
211
  \*****************************/
212
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
212
+ (__unused_webpack_module, exports, __webpack_require__) {
213
213
 
214
214
  "use strict";
215
215
 
@@ -235,7 +235,7 @@ client.interceptors.request.use(req => {
235
235
  client.interceptors.response.use(
236
236
  res => res,
237
237
  err => {
238
- if (typeof err.response.data === 'string') {
238
+ if (typeof err?.response?.data === 'string') {
239
239
  throw new Error(`Error in ${err.config?.method} ${err.config?.url}: ${err.response.data}`);
240
240
  }
241
241
  throw err;
@@ -346,6 +346,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
346
346
  yield { document: doc };
347
347
  }
348
348
  },
349
+ getCollectionInfo: function getCollectionInfo(params) {
350
+ return client.post('', { action: 'Model.getCollectionInfo', ...params }).then(res => res.data);
351
+ },
349
352
  getIndexes: function getIndexes(params) {
350
353
  return client.post('', { action: 'Model.getIndexes', ...params }).then(res => res.data);
351
354
  },
@@ -552,6 +555,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
552
555
  }
553
556
  }
554
557
  },
558
+ getCollectionInfo: function getCollectionInfo(params) {
559
+ return client.post('/Model/getCollectionInfo', params).then(res => res.data);
560
+ },
555
561
  getIndexes: function getIndexes(params) {
556
562
  return client.post('/Model/getIndexes', params).then(res => res.data);
557
563
  },
@@ -571,13 +577,13 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
571
577
  }
572
578
 
573
579
 
574
- /***/ }),
580
+ /***/ },
575
581
 
576
- /***/ "./frontend/src/appendCSS.js":
582
+ /***/ "./frontend/src/appendCSS.js"
577
583
  /*!***********************************!*\
578
584
  !*** ./frontend/src/appendCSS.js ***!
579
585
  \***********************************/
580
- /***/ ((module) => {
586
+ (module) {
581
587
 
582
588
  "use strict";
583
589
 
@@ -592,24 +598,101 @@ module.exports = function appendCSS(css) {
592
598
  style.appendChild(document.createTextNode(css));
593
599
  };
594
600
 
595
- /***/ }),
601
+ /***/ },
602
+
603
+ /***/ "./frontend/src/array-utils.js"
604
+ /*!*************************************!*\
605
+ !*** ./frontend/src/array-utils.js ***!
606
+ \*************************************/
607
+ (module, __unused_webpack_exports, __webpack_require__) {
608
+
609
+ "use strict";
610
+
611
+
612
+ const { inspect } = __webpack_require__(/*! node-inspect-extracted */ "./node_modules/node-inspect-extracted/dist/inspect.js");
596
613
 
597
- /***/ "./frontend/src/async-button/async-button.html":
614
+ /**
615
+ * Format a value for display in array views
616
+ * @param {*} item - The item to format
617
+ * @returns {string} - Formatted string representation
618
+ */
619
+ function formatValue(item) {
620
+ if (item == null) {
621
+ return 'null';
622
+ }
623
+ if (typeof item === 'object') {
624
+ return inspect(item, { maxArrayLength: 50 });
625
+ }
626
+ return String(item);
627
+ }
628
+
629
+ /**
630
+ * Check if an item is a plain object (not array, not null)
631
+ * @param {*} item - The item to check
632
+ * @returns {boolean} - True if item is a plain object
633
+ */
634
+ function isObjectItem(item) {
635
+ return item != null && typeof item === 'object' && !Array.isArray(item) && item.constructor === Object;
636
+ }
637
+
638
+ /**
639
+ * Get the keys of an object item
640
+ * @param {*} item - The item to get keys from
641
+ * @returns {string[]} - Array of keys, or empty array if not an object
642
+ */
643
+ function getItemKeys(item) {
644
+ if (!isObjectItem(item)) {
645
+ return [];
646
+ }
647
+ return Object.keys(item);
648
+ }
649
+
650
+ /**
651
+ * Format a specific value from an object item by key
652
+ * @param {*} item - The object item
653
+ * @param {string} key - The key to get the value for
654
+ * @returns {string} - Formatted string representation of the value
655
+ */
656
+ function formatItemValue(item, key) {
657
+ const value = item[key];
658
+ if (value === null) {
659
+ return 'null';
660
+ }
661
+ if (value === undefined) {
662
+ return 'undefined';
663
+ }
664
+ if (typeof value === 'object') {
665
+ return inspect(value, { maxArrayLength: 50 });
666
+ }
667
+ return String(value);
668
+ }
669
+
670
+ module.exports = {
671
+ formatValue,
672
+ isObjectItem,
673
+ getItemKeys,
674
+ formatItemValue
675
+ };
676
+
677
+
678
+ /***/ },
679
+
680
+ /***/ "./frontend/src/async-button/async-button.html"
598
681
  /*!*****************************************************!*\
599
682
  !*** ./frontend/src/async-button/async-button.html ***!
600
683
  \*****************************************************/
601
- /***/ ((module) => {
684
+ (module) {
602
685
 
603
686
  "use strict";
604
687
  module.exports = "<button v-bind=\"attrsToBind\" :disabled=\"isDisabled\" @click=\"handleClick\">\n <div v-if=\"status === 'in_progress'\" style=\"text-align: center\">\n <svg style=\"height: 1em\" class=\"mx-auto\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" opacity=\"0.3\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 12 12\" to=\"360 12 12\" dur=\"1s\" repeatCount=\"indefinite\" />\n </path>\n </g>\n </svg>\n </div>\n <slot v-if=\"status == 'success' || status == 'init'\"></slot>\n</button>\n";
605
688
 
606
- /***/ }),
689
+ /***/ },
607
690
 
608
- /***/ "./frontend/src/async-button/async-button.js":
691
+ /***/ "./frontend/src/async-button/async-button.js"
609
692
  /*!***************************************************!*\
610
693
  !*** ./frontend/src/async-button/async-button.js ***!
611
694
  \***************************************************/
612
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
695
+ (module, __unused_webpack_exports, __webpack_require__) {
613
696
 
614
697
  "use strict";
615
698
 
@@ -662,24 +745,24 @@ module.exports = app => app.component('async-button', {
662
745
  });
663
746
 
664
747
 
665
- /***/ }),
748
+ /***/ },
666
749
 
667
- /***/ "./frontend/src/chat/chat-message-script/chat-message-script.html":
750
+ /***/ "./frontend/src/chat/chat-message-script/chat-message-script.html"
668
751
  /*!************************************************************************!*\
669
752
  !*** ./frontend/src/chat/chat-message-script/chat-message-script.html ***!
670
753
  \************************************************************************/
671
- /***/ ((module) => {
754
+ (module) {
672
755
 
673
756
  "use strict";
674
757
  module.exports = "<div class=\"relative border rounded bg-gray-100 text-black text-sm overflow-hidden\">\n <div class=\"flex border-b pt-[1px] text-xs font-medium bg-gray-200\">\n <button\n class=\"px-3 py-1 border-r border-gray-300 hover:bg-green-300\"\n :class=\"{'bg-gray-300': activeTab === 'code', 'bg-green-300': activeTab === 'code'}\"\n @click=\"activeTab = 'code'\">\n Code\n </button>\n <button\n class=\"px-3 py-1 hover:bg-green-300\"\n :class=\"{'bg-green-300': activeTab === 'output'}\"\n @click=\"activeTab = 'output'\">\n Output\n </button>\n <div class=\"ml-auto mr-1 flex\">\n <button\n v-if=\"activeTab === 'output'\"\n class=\"px-2 py-1 mr-1 text-xs bg-gray-500 text-white border-none rounded cursor-pointer hover:bg-gray-600 transition-colors flex items-center\"\n @click=\"copyOutput\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3\" />\n </svg>\n </button>\n <button\n v-if=\"activeTab === 'output'\"\n class=\"px-2 py-1 mr-1 text-xs bg-blue-500 text-white border-none rounded cursor-pointer hover:bg-blue-600 transition-colors flex items-center\"\n @click=\"openDetailModal\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 1v4m0 0h-4m4 0l-5-5\" />\n </svg>\n </button>\n <button\n v-if=\"activeTab === 'code' && !isEditing\"\n class=\"px-2 py-1 mr-1 text-xs bg-gray-500 text-white border-none rounded cursor-pointer hover:bg-gray-600 transition-colors flex items-center\"\n @click.stop=\"startEditing\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-3 w-3\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M13.586 3.586a2 2 0 112.828 2.828l-.793.793-2.828-2.828.793-.793zM4 13.5V16h2.5l7.086-7.086-2.828-2.828L4 13.5z\" />\n </svg>\n </button>\n <async-button\n v-if=\"!isEditing\"\n class=\"px-2 py-1 text-xs bg-green-500 text-white border-none rounded cursor-pointer hover:bg-green-600 transition-colors disabled:bg-gray-400\"\n @click=\"executeScript\">\n Execute\n </async-button>\n <div class=\"relative ml-1\" ref=\"dropdown\">\n <button\n @click.stop=\"toggleDropdown\"\n class=\"px-1 py-1 text-xs hover:bg-gray-300 rounded flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"h-4 w-4\" viewBox=\"0 0 20 20\" fill=\"currentColor\">\n <path d=\"M10 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4zm0 6a2 2 0 110-4 2 2 0 010 4z\" />\n </svg>\n </button>\n <div\n v-if=\"showDropdown\"\n class=\"absolute right-0 z-10 mt-1 w-64 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black/5\">\n <button\n class=\"block w-full text-left px-4 py-2 text-xs text-gray-700 hover:bg-gray-100\"\n @click=\"openCreateDashboardModal(); showDropdown = false\">\n Create Dashboard\n </button>\n <button\n v-if=\"canOverwriteDashboard\"\n class=\"block w-full text-left px-4 py-2 text-xs text-gray-700 hover:bg-gray-100\"\n @click=\"openOverwriteDashboardConfirmation(); showDropdown = false\">\n Overwrite Dashboard\n </button>\n <button\n class=\"block w-full text-left px-4 py-2 text-xs text-gray-700 hover:bg-gray-100\"\n @click=\"$emit('copyMessage'); showDropdown = false\">\n Copy Full Message\n </button>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"p-3 max-h-[50vh] max-w-[calc(100vw-4rem)] lg:max-w-[calc(100vw-20rem)] overflow-y-auto\" v-show=\"activeTab === 'code'\">\n <div v-if=\"isEditing\" class=\"flex flex-col space-y-2\">\n <div class=\"border border-gray-200\">\n <textarea ref=\"scriptEditor\" class=\"w-full h-[45vh]\" @input=\"handleScriptInput\"></textarea>\n </div>\n <div class=\"flex justify-end gap-2\">\n <button\n class=\"px-2 py-1 text-xs bg-gray-300 text-gray-800 border-none rounded cursor-pointer hover:bg-gray-400 transition-colors\"\n @click.stop=\"cancelEditing\">\n Cancel\n </button>\n <async-button\n class=\"px-2 py-1 text-xs bg-green-500 text-white border-none rounded cursor-pointer hover:bg-green-600 transition-colors disabled:bg-gray-400\"\n @click=\"executeScript\">\n Execute\n </async-button>\n </div>\n </div>\n <pre v-else class=\"whitespace-pre-wrap\"><code v-text=\"script\" ref=\"code\" :class=\"'language-' + language\"></code></pre>\n </div>\n\n <div class=\"p-3 whitespace-pre-wrap max-h-[50vh] overflow-y-auto bg-white border-t max-w-[calc(100vw-4rem)] lg:max-w-[calc(100vw-20rem)] relative\" v-show=\"activeTab === 'output'\">\n <dashboard-chart v-if=\"message.executionResult?.output?.$chart\" :value=\"message.executionResult?.output\" />\n <dashboard-map v-else-if=\"message.executionResult?.output?.$featureCollection\" :value=\"message.executionResult?.output\" />\n <pre v-else>{{ message.executionResult?.output || 'No output' }}</pre>\n\n <div v-if=\"message.executionResult?.logs?.length\" class=\"mt-3 pt-3 border-t border-gray-200\">\n <div class=\"text-xs font-semibold text-gray-600 uppercase tracking-wide\">Console</div>\n <pre class=\"mt-1 bg-gray-100 text-gray-900 p-3 rounded whitespace-pre-wrap overflow-x-auto max-h-[280px]\">{{ message.executionResult.logs }}</pre>\n </div>\n </div>\n\n <modal ref=\"outputModal\" v-if=\"showDetailModal\" containerClass=\"!h-[90vh] !w-[90vw]\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showDetailModal = false;\">&times;</div>\n <div class=\"h-full overflow-auto\">\n <dashboard-chart v-if=\"message.executionResult?.output?.$chart\" :value=\"message.executionResult?.output\" :responsive=\"true\" />\n <dashboard-map\n v-else-if=\"message.executionResult?.output?.$featureCollection\"\n :value=\"message.executionResult?.output\"\n height=\"80vh\" />\n <pre v-else class=\"whitespace-pre-wrap\">{{ message.executionResult?.output || 'No output' }}</pre>\n </div>\n </template>\n </modal>\n <modal v-if=\"showCreateDashboardModal\">\n <template #body>\n <div class=\"modal-exit\" @click=\"showCreateDashboardModal = false\">&times;</div>\n <div>\n <div class=\"mt-4 text-gray-900 font-semibold\">Create Dashboard</div>\n <div class=\"mt-4\">\n <label class=\"block text-sm font-medium leading-6 text-gray-900\">Title</label>\n <div class=\"mt-2\">\n <div class=\"w-full flex rounded-md shadow-sm ring-1 ring-inset ring-gray-300 focus-within:ring-2 focus-within:ring-inset focus-within:ring-teal-600\">\n <input type=\"text\" v-model=\"newDashboardTitle\" class=\"outline-none block flex-1 border-0 bg-transparent py-1.5 pl-1 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6\" placeholder=\"My Dashboard\">\n </div>\n </div>\n </div>\n <div class=\"my-4\">\n <label class=\"block text-sm font-medium leading-6 text-gray-900\">Code</label>\n <div class=\"border border-gray-200\">\n <textarea class=\"p-2 h-[300px] w-full\" ref=\"dashboardCodeEditor\"></textarea>\n </div>\n </div>\n <async-button\n @click=\"createDashboardFromScript\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n Submit\n </async-button>\n <div v-if=\"createError\" class=\"rounded-md bg-red-50 p-4 mt-1\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">Error</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n {{createError}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </template>\n </modal>\n <modal v-if=\"showOverwriteDashboardConfirmationModal\">\n <template #body>\n <div class=\"modal-exit\" @click=\"showOverwriteDashboardConfirmationModal = false\">&times;</div>\n <div>\n <div class=\"mt-4 text-gray-900 font-semibold\">Overwrite Dashboard</div>\n <p class=\"mt-2 text-sm text-gray-700\">\n This will replace the linked dashboard's code with the script below.\n </p>\n <p class=\"mt-1 text-xs text-gray-600 break-all\" v-if=\"targetDashboardId\">\n Dashboard ID: {{ targetDashboardId }}\n </p>\n <div class=\"my-4 border border-gray-200 bg-gray-50 rounded\">\n <pre class=\"p-2 h-[300px] overflow-auto whitespace-pre-wrap text-xs\">{{ overwriteDashboardCode }}</pre>\n </div>\n <div class=\"flex items-center gap-2\">\n <async-button\n @click=\"confirmOverwriteDashboard\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n Confirm Overwrite\n </async-button>\n <button\n class=\"px-2.5 py-1.5 rounded-md text-sm font-semibold text-gray-700 bg-gray-200 hover:bg-gray-300\"\n @click=\"showOverwriteDashboardConfirmationModal = false\">\n Cancel\n </button>\n </div>\n <div v-if=\"overwriteError\" class=\"rounded-md bg-red-50 p-4 mt-3\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">Error</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n {{overwriteError}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </template>\n </modal>\n</div>\n";
675
758
 
676
- /***/ }),
759
+ /***/ },
677
760
 
678
- /***/ "./frontend/src/chat/chat-message-script/chat-message-script.js":
761
+ /***/ "./frontend/src/chat/chat-message-script/chat-message-script.js"
679
762
  /*!**********************************************************************!*\
680
763
  !*** ./frontend/src/chat/chat-message-script/chat-message-script.js ***!
681
764
  \**********************************************************************/
682
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
765
+ (module, __unused_webpack_exports, __webpack_require__) {
683
766
 
684
767
  "use strict";
685
768
  /* global CodeMirror, Prism */
@@ -740,6 +823,13 @@ module.exports = app => app.component('chat-message-script', {
740
823
  this.highlightCode();
741
824
  }
742
825
  this.activeTab = 'output';
826
+ vanillatoasts.create({
827
+ title: 'Script executed successfully!',
828
+ type: 'success',
829
+ timeout: 3000,
830
+ icon: 'images/success.png',
831
+ positionClass: 'bottomRight'
832
+ });
743
833
  return chatMessage;
744
834
  },
745
835
  openDetailModal() {
@@ -841,6 +931,13 @@ module.exports = app => app.component('chat-message-script', {
841
931
  throw err;
842
932
  });
843
933
  this.createError = null;
934
+ vanillatoasts.create({
935
+ title: 'Dashboard created!',
936
+ type: 'success',
937
+ timeout: 3000,
938
+ icon: 'images/success.png',
939
+ positionClass: 'bottomRight'
940
+ });
844
941
  this.showCreateDashboardModal = false;
845
942
  this.$router.push('/dashboard/' + dashboard._id);
846
943
  },
@@ -867,6 +964,13 @@ module.exports = app => app.component('chat-message-script', {
867
964
  });
868
965
 
869
966
  this.overwriteError = null;
967
+ vanillatoasts.create({
968
+ title: 'Dashboard updated!',
969
+ type: 'success',
970
+ timeout: 3000,
971
+ icon: 'images/success.png',
972
+ positionClass: 'bottomRight'
973
+ });
870
974
  this.showOverwriteDashboardConfirmationModal = false;
871
975
  this.$router.push('/dashboard/' + doc._id);
872
976
  },
@@ -926,24 +1030,24 @@ module.exports = app => app.component('chat-message-script', {
926
1030
  });
927
1031
 
928
1032
 
929
- /***/ }),
1033
+ /***/ },
930
1034
 
931
- /***/ "./frontend/src/chat/chat-message/chat-message.html":
1035
+ /***/ "./frontend/src/chat/chat-message/chat-message.html"
932
1036
  /*!**********************************************************!*\
933
1037
  !*** ./frontend/src/chat/chat-message/chat-message.html ***!
934
1038
  \**********************************************************/
935
- /***/ ((module) => {
1039
+ (module) {
936
1040
 
937
1041
  "use strict";
938
1042
  module.exports = "<div class=\"relative flex items-start\" :class=\"{'justify-end': message.role === 'user'}\">\n <div\n class=\"min-w-0 max-w-[calc(100vw-3rem)] lg:max-w-[calc(100vw-15rem)]\"\n :class=\"{'text-right': message.role === 'user'}\">\n\n <div class=\"text-sm text-gray-900 rounded-md inline-block relative\" :class=\"styleForMessage\">\n <div v-for=\"part in contentSplitByScripts\">\n <div v-if=\"part.type === 'text'\" v-html=\"marked(part.content)\">\n </div>\n <div v-else-if=\"part.type === 'code'\">\n <chat-message-script\n :message=\"message\"\n :script=\"part.content\"\n :language=\"part.language\"\n :target-dashboard-id=\"targetDashboardId\"\n @copyMessage=\"copyMessage\"></chat-message-script>\n </div>\n </div>\n </div>\n </div>\n</div>\n";
939
1043
 
940
- /***/ }),
1044
+ /***/ },
941
1045
 
942
- /***/ "./frontend/src/chat/chat-message/chat-message.js":
1046
+ /***/ "./frontend/src/chat/chat-message/chat-message.js"
943
1047
  /*!********************************************************!*\
944
1048
  !*** ./frontend/src/chat/chat-message/chat-message.js ***!
945
1049
  \********************************************************/
946
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1050
+ (module, __unused_webpack_exports, __webpack_require__) {
947
1051
 
948
1052
  "use strict";
949
1053
 
@@ -1010,6 +1114,13 @@ module.exports = app => app.component('chat-message', {
1010
1114
  });
1011
1115
  message.executionResult = chatMessage.executionResult;
1012
1116
  console.log(message);
1117
+ vanillatoasts.create({
1118
+ title: 'Script executed successfully!',
1119
+ type: 'success',
1120
+ timeout: 3000,
1121
+ icon: 'images/success.png',
1122
+ positionClass: 'bottomRight'
1123
+ });
1013
1124
  },
1014
1125
  async copyMessage() {
1015
1126
  const parts = this.contentSplitByScripts;
@@ -1046,24 +1157,24 @@ module.exports = app => app.component('chat-message', {
1046
1157
  });
1047
1158
 
1048
1159
 
1049
- /***/ }),
1160
+ /***/ },
1050
1161
 
1051
- /***/ "./frontend/src/chat/chat.html":
1162
+ /***/ "./frontend/src/chat/chat.html"
1052
1163
  /*!*************************************!*\
1053
1164
  !*** ./frontend/src/chat/chat.html ***!
1054
1165
  \*************************************/
1055
- /***/ ((module) => {
1166
+ (module) {
1056
1167
 
1057
1168
  "use strict";
1058
1169
  module.exports = "<div class=\"flex\" style=\"height: calc(100vh - 55px); height: calc(100dvh - 55px)\">\n <div class=\"fixed top-[65px] cursor-pointer bg-gray-100 rounded-r-md z-10\" @click=\"hideSidebar = false\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"#5f6368\"><path d=\"M360-120v-720h80v720h-80Zm160-160v-400l200 200-200 200Z\"/></svg>\n </div>\n <button\n class=\"fixed top-[65px] right-4 z-10 p-2 rounded-md shadow bg-white\"\n :class=\"hasWorkspace ? 'text-gray-700 hover:bg-gray-100' : 'text-gray-300 cursor-not-allowed bg-gray-50'\"\n @click=\"toggleShareThread\"\n :disabled=\"!hasWorkspace || !chatThreadId || sharingThread\"\n aria-label=\"Share thread with workspace\"\n title=\"Share thread with workspace\"\n >\n <svg v-if=\"hasWorkspace\" xmlns=\"http://www.w3.org/2000/svg\" class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7a2.48 2.48 0 0 0 0-1.39l7.02-4.11a2.5 2.5 0 1 0-.87-1.37L8.04 9.94a2.5 2.5 0 1 0 0 4.12l7.12 4.16a2.5 2.5 0 1 0 .84-1.34l-7.05-4.12c-.04-.02-.08-.05-.11-.07a2.48 2.48 0 0 0 0-1.39c.03-.02.07-.04.11-.07l7.11-4.16c.52.47 1.2.76 1.94.76a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0-1.94.94L7.97 8.43a2.5 2.5 0 1 0 0 7.14l9.09 5.3c.52-.47 1.2-.76 1.94-.76a2.5 2.5 0 1 0 0-5z\"/></svg>\n <svg v-else xmlns=\"http://www.w3.org/2000/svg\" class=\"w-5 h-5\" fill=\"currentColor\" viewBox=\"0 0 24 24\"><path d=\"M12 1a5 5 0 00-5 5v3H6a2 2 0 00-2 2v9a2 2 0 002 2h12a2 2 0 002-2v-9a2 2 0 00-2-2h-1V6a5 5 0 00-5-5zm-3 8V6a3 3 0 016 0v3H9zm9 2v9H6v-9h12z\"/></svg>\n </button>\n <!-- Sidebar: Chat Threads -->\n <aside class=\"bg-gray-50 border-r overflow-y-auto overflow-x-hidden h-full transition-all duration-300 ease-in-out z-20 w-0 lg:w-64 fixed lg:relative\" :class=\"hideSidebar === true ? '!w-0' : hideSidebar === false ? '!w-64' : ''\">\n <div class=\"flex items-center border-b border-gray-100 w-64 overflow-x-hidden\">\n <div class=\"p-4 font-bold text-lg\">Chat Threads</div>\n <button\n @click=\"hideSidebar = true\"\n class=\"ml-auto mr-2 p-2 rounded hover:bg-gray-200 focus:outline-none\"\n aria-label=\"Close sidebar\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"currentColor\"><path d=\"M660-320v-320L500-480l160 160ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\"/></svg>\n </button>\n </div>\n <div class=\"p-4 w-64\">\n <async-button\n @click=\"createNewThread\"\n class=\"w-full bg-blue-600 text-white px-4 py-2 rounded hover:bg-blue-700\"\n >\n Create New Thread\n </async-button>\n </div>\n <div v-if=\"status === 'loaded' && chatThreads.length === 0\" class=\"p-4 text-sm text-gray-700\">\n No threads yet\n </div>\n <ul v-if=\"status === 'loaded'\" class=\"w-64\">\n <li\n v-for=\"thread in chatThreads\"\n :key=\"thread._id\"\n @click=\"selectThread(thread._id)\"\n class=\"p-4 hover:bg-gray-200 cursor-pointer w-64\"\n :class=\"{ 'bg-gray-300': thread._id === chatThreadId }\"\n >\n {{ thread.title || 'Untitled Thread' }}\n </li>\n </ul>\n </aside>\n\n <!-- Main Chat Area -->\n <main class=\"flex-1 flex flex-col\">\n <div class=\"flex-1 overflow-y-auto p-6 space-y-4\" ref=\"messagesContainer\">\n <ul role=\"list\" class=\"space-y-4\">\n <div v-if=\"true\">\n <div class=\"flex items-center justify-center py-3 mb-4\">\n <div class=\"bg-gray-300 h-px flex-grow max-w-xs\"></div>\n <p class=\"mx-4 text-sm font-medium text-gray-500\">This is the beginning of the message thread</p>\n <div class=\"bg-gray-300 h-px flex-grow max-w-xs\"></div>\n </div>\n </div>\n <li v-for=\"message in chatMessages\" :key=\"message._id\">\n <chat-message :message=\"message\" :target-dashboard-id=\"currentThread?.dashboardId\"></chat-message>\n </li>\n </ul>\n </div>\n\n\n <!-- Input Area -->\n <div class=\"border-t p-4\">\n <form @submit.prevent=\"sendMessage\" :disabled=\"sendingMessage\" class=\"flex gap-2 items-end justify-end\">\n <textarea\n v-model=\"newMessage\"\n :placeholder=\"sendingMessage ? 'Sending...' : 'Ask something...'\"\n class=\"flex-1 border rounded px-4 py-2 resize-none overflow-y-auto\"\n :disabled=\"sendingMessage\"\n rows=\"1\"\n ref=\"messageInput\"\n @input=\"adjustTextareaHeight\"\n @keydown.enter.exact.prevent=\"handleEnter\"\n ></textarea>\n <button class=\"bg-blue-600 text-white px-4 h-[42px] rounded disabled:bg-gray-600\" :disabled=\"sendingMessage\">\n <svg v-if=\"sendingMessage\" style=\"height: 1em\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n <circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" opacity=\"0.3\" />\n <path d=\"M12 2a10 10 0 0 1 10 10\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\">\n <animateTransform attributeName=\"transform\" type=\"rotate\" from=\"0 12 12\" to=\"360 12 12\" dur=\"1s\" repeatCount=\"indefinite\" />\n </path>\n </g>\n </svg>\n <span v-else>Send</span>\n </button>\n </form>\n </div>\n </main>\n</div>\n";
1059
1170
 
1060
- /***/ }),
1171
+ /***/ },
1061
1172
 
1062
- /***/ "./frontend/src/chat/chat.js":
1173
+ /***/ "./frontend/src/chat/chat.js"
1063
1174
  /*!***********************************!*\
1064
1175
  !*** ./frontend/src/chat/chat.js ***!
1065
1176
  \***********************************/
1066
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1177
+ (module, __unused_webpack_exports, __webpack_require__) {
1067
1178
 
1068
1179
  "use strict";
1069
1180
 
@@ -1096,6 +1207,13 @@ module.exports = app => app.component('chat', {
1096
1207
  this.chatThreads.unshift(chatThread);
1097
1208
  this.chatThreadId = chatThread._id;
1098
1209
  this.chatMessages = [];
1210
+ vanillatoasts.create({
1211
+ title: 'Chat thread created!',
1212
+ type: 'success',
1213
+ timeout: 3000,
1214
+ icon: 'images/success.png',
1215
+ positionClass: 'bottomRight'
1216
+ });
1099
1217
  }
1100
1218
 
1101
1219
  this.chatMessages.push({
@@ -1189,6 +1307,13 @@ module.exports = app => app.component('chat', {
1189
1307
  },
1190
1308
  async createNewThread() {
1191
1309
  const { chatThread } = await api.ChatThread.createChatThread();
1310
+ vanillatoasts.create({
1311
+ title: 'Chat thread created!',
1312
+ type: 'success',
1313
+ timeout: 3000,
1314
+ icon: 'images/success.png',
1315
+ positionClass: 'bottomRight'
1316
+ });
1192
1317
  this.$router.push('/chat/' + chatThread._id);
1193
1318
  },
1194
1319
  async toggleShareThread() {
@@ -1204,6 +1329,14 @@ module.exports = app => app.component('chat', {
1204
1329
  this.chatThreads.splice(idx, 1, chatThread);
1205
1330
  }
1206
1331
 
1332
+ vanillatoasts.create({
1333
+ title: 'Chat thread shared!',
1334
+ type: 'success',
1335
+ timeout: 3000,
1336
+ icon: 'images/success.png',
1337
+ positionClass: 'bottomRight'
1338
+ });
1339
+
1207
1340
  // Copy current URL to clipboard and show a toast
1208
1341
  const url = window.location.href;
1209
1342
  await navigator.clipboard.writeText(url);
@@ -1256,40 +1389,41 @@ module.exports = app => app.component('chat', {
1256
1389
  });
1257
1390
 
1258
1391
 
1259
- /***/ }),
1392
+ /***/ },
1260
1393
 
1261
- /***/ "./frontend/src/clone-document/clone-document.css":
1394
+ /***/ "./frontend/src/clone-document/clone-document.css"
1262
1395
  /*!********************************************************!*\
1263
1396
  !*** ./frontend/src/clone-document/clone-document.css ***!
1264
1397
  \********************************************************/
1265
- /***/ ((module) => {
1398
+ (module) {
1266
1399
 
1267
1400
  "use strict";
1268
1401
  module.exports = "";
1269
1402
 
1270
- /***/ }),
1403
+ /***/ },
1271
1404
 
1272
- /***/ "./frontend/src/clone-document/clone-document.html":
1405
+ /***/ "./frontend/src/clone-document/clone-document.html"
1273
1406
  /*!*********************************************************!*\
1274
1407
  !*** ./frontend/src/clone-document/clone-document.html ***!
1275
1408
  \*********************************************************/
1276
- /***/ ((module) => {
1409
+ (module) {
1277
1410
 
1278
1411
  "use strict";
1279
1412
  module.exports = "<div>\n <div class=\"mb-2\">\n <textarea class=\"border border-gray-200 p-2 h-[300px] w-full\" ref=\"codeEditor\"></textarea>\n </div>\n <button @click=\"cloneDocument()\" class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">Submit</button>\n <div v-if=\"errors.length > 0\" class=\"rounded-md bg-red-50 p-4 mt-1\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">There were {{errors.length}} errors with your submission</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n <ul role=\"list\" class=\"list-disc space-y-1 pl-5\">\n <li v-for=\"error in errors\">\n {{error}}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n ";
1280
1413
 
1281
- /***/ }),
1414
+ /***/ },
1282
1415
 
1283
- /***/ "./frontend/src/clone-document/clone-document.js":
1416
+ /***/ "./frontend/src/clone-document/clone-document.js"
1284
1417
  /*!*******************************************************!*\
1285
1418
  !*** ./frontend/src/clone-document/clone-document.js ***!
1286
1419
  \*******************************************************/
1287
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1420
+ (module, __unused_webpack_exports, __webpack_require__) {
1288
1421
 
1289
1422
  "use strict";
1290
1423
 
1291
1424
 
1292
1425
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
1426
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
1293
1427
 
1294
1428
  const { BSON, EJSON } = __webpack_require__(/*! mongodb/lib/bson */ "./node_modules/mongodb/lib/bson.js");
1295
1429
 
@@ -1318,19 +1452,27 @@ module.exports = app => app.component('clone-document', {
1318
1452
  methods: {
1319
1453
  async cloneDocument() {
1320
1454
  const data = EJSON.serialize(eval(`(${this.editor.getValue()})`));
1321
- const { doc } = await api.Model.createDocument({ model: this.currentModel, data }).catch(err => {
1455
+ try {
1456
+ const { doc } = await api.Model.createDocument({ model: this.currentModel, data });
1457
+ this.errors.length = 0;
1458
+ vanillatoasts.create({
1459
+ title: 'Document cloned!',
1460
+ type: 'success',
1461
+ timeout: 3000,
1462
+ icon: 'images/success.png',
1463
+ positionClass: 'bottomRight'
1464
+ });
1465
+ this.$emit('close', doc);
1466
+ } catch (err) {
1322
1467
  if (err.response?.data?.message) {
1323
1468
  console.log(err.response.data);
1324
1469
  const message = err.response.data.message.split(': ').slice(1).join(': ');
1325
1470
  this.errors = message.split(',').map(error => {
1326
1471
  return error.split(': ').slice(1).join(': ').trim();
1327
1472
  });
1328
- throw new Error(err.response?.data?.message);
1329
1473
  }
1330
1474
  throw err;
1331
- });
1332
- this.errors.length = 0;
1333
- this.$emit('close', doc);
1475
+ }
1334
1476
  }
1335
1477
  },
1336
1478
  mounted: function() {
@@ -1361,29 +1503,30 @@ module.exports = app => app.component('clone-document', {
1361
1503
  });
1362
1504
 
1363
1505
 
1364
- /***/ }),
1506
+ /***/ },
1365
1507
 
1366
- /***/ "./frontend/src/create-dashboard/create-dashboard.html":
1508
+ /***/ "./frontend/src/create-dashboard/create-dashboard.html"
1367
1509
  /*!*************************************************************!*\
1368
1510
  !*** ./frontend/src/create-dashboard/create-dashboard.html ***!
1369
1511
  \*************************************************************/
1370
- /***/ ((module) => {
1512
+ (module) {
1371
1513
 
1372
1514
  "use strict";
1373
1515
  module.exports = "<div>\n <div class=\"mt-4 text-gray-900 font-semibold\">\n Create New Dashboard\n </div>\n <div class=\"mt-4\">\n <label class=\"block text-sm font-medium leading-6 text-gray-900\">Title</label>\n <div class=\"mt-2\">\n <div class=\"w-full flex rounded-md shadow-sm ring-1 ring-inset ring-gray-300 focus-within:ring-2 focus-within:ring-inset focus-within:ring-teal-600\">\n <input type=\"text\" v-model=\"title\" class=\"outline-none block flex-1 border-0 bg-transparent py-1.5 pl-1 text-gray-900 placeholder:text-gray-400 focus:ring-0 sm:text-sm sm:leading-6\" placeholder=\"ACME-123\">\n </div>\n </div>\n </div>\n <div class=\"my-4\">\n <label class=\"block text-sm font-medium leading-6 text-gray-900\">Code</label>\n <div class=\"border border-gray-200\">\n <textarea class=\"p-2 h-[300px] w-full\" ref=\"codeEditor\"></textarea>\n </div>\n </div>\n <async-button\n @click=\"createDashboard()\"\n class=\"rounded-md bg-teal-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-teal-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n Submit\n </async-button>\n <div v-if=\"errors.length > 0\" class=\"rounded-md bg-red-50 p-4 mt-1\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">There were {{errors.length}} errors with your submission</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n <ul role=\"list\" class=\"list-disc space-y-1 pl-5\">\n <li v-for=\"error in errors\">\n {{error}}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>";
1374
1516
 
1375
- /***/ }),
1517
+ /***/ },
1376
1518
 
1377
- /***/ "./frontend/src/create-dashboard/create-dashboard.js":
1519
+ /***/ "./frontend/src/create-dashboard/create-dashboard.js"
1378
1520
  /*!***********************************************************!*\
1379
1521
  !*** ./frontend/src/create-dashboard/create-dashboard.js ***!
1380
1522
  \***********************************************************/
1381
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1523
+ (module, __unused_webpack_exports, __webpack_require__) {
1382
1524
 
1383
1525
  "use strict";
1384
1526
 
1385
1527
 
1386
1528
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
1529
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
1387
1530
 
1388
1531
  const template = __webpack_require__(/*! ./create-dashboard.html */ "./frontend/src/create-dashboard/create-dashboard.html");
1389
1532
 
@@ -1411,6 +1554,13 @@ module.exports = app => app.component('create-dashboard', {
1411
1554
  throw err;
1412
1555
  });
1413
1556
  this.errors.length = 0;
1557
+ vanillatoasts.create({
1558
+ title: 'Dashboard created!',
1559
+ type: 'success',
1560
+ timeout: 3000,
1561
+ icon: 'images/success.png',
1562
+ positionClass: 'bottomRight'
1563
+ });
1414
1564
  this.$emit('close', dashboard);
1415
1565
  }
1416
1566
  },
@@ -1422,40 +1572,41 @@ module.exports = app => app.component('create-dashboard', {
1422
1572
  }
1423
1573
  });
1424
1574
 
1425
- /***/ }),
1575
+ /***/ },
1426
1576
 
1427
- /***/ "./frontend/src/create-document/create-document.css":
1577
+ /***/ "./frontend/src/create-document/create-document.css"
1428
1578
  /*!**********************************************************!*\
1429
1579
  !*** ./frontend/src/create-document/create-document.css ***!
1430
1580
  \**********************************************************/
1431
- /***/ ((module) => {
1581
+ (module) {
1432
1582
 
1433
1583
  "use strict";
1434
1584
  module.exports = "";
1435
1585
 
1436
- /***/ }),
1586
+ /***/ },
1437
1587
 
1438
- /***/ "./frontend/src/create-document/create-document.html":
1588
+ /***/ "./frontend/src/create-document/create-document.html"
1439
1589
  /*!***********************************************************!*\
1440
1590
  !*** ./frontend/src/create-document/create-document.html ***!
1441
1591
  \***********************************************************/
1442
- /***/ ((module) => {
1592
+ (module) {
1443
1593
 
1444
1594
  "use strict";
1445
1595
  module.exports = "<div>\n <div class=\"mb-2\">\n <textarea class=\"border border-gray-200 p-2 h-[300px] w-full\" ref=\"codeEditor\"></textarea>\n </div>\n <button @click=\"createDocument()\" class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">Submit</button>\n <div v-if=\"errors.length > 0\" class=\"rounded-md bg-red-50 p-4 mt-1\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">There were {{errors.length}} errors with your submission</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n <ul role=\"list\" class=\"list-disc space-y-1 pl-5\">\n <li v-for=\"error in errors\">\n {{error}}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n</div>\n";
1446
1596
 
1447
- /***/ }),
1597
+ /***/ },
1448
1598
 
1449
- /***/ "./frontend/src/create-document/create-document.js":
1599
+ /***/ "./frontend/src/create-document/create-document.js"
1450
1600
  /*!*********************************************************!*\
1451
1601
  !*** ./frontend/src/create-document/create-document.js ***!
1452
1602
  \*********************************************************/
1453
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1603
+ (module, __unused_webpack_exports, __webpack_require__) {
1454
1604
 
1455
1605
  "use strict";
1456
1606
 
1457
1607
 
1458
1608
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
1609
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
1459
1610
 
1460
1611
  const { BSON, EJSON } = __webpack_require__(/*! mongodb/lib/bson */ "./node_modules/mongodb/lib/bson.js");
1461
1612
 
@@ -1484,19 +1635,27 @@ module.exports = app => app.component('create-document', {
1484
1635
  methods: {
1485
1636
  async createDocument() {
1486
1637
  const data = EJSON.serialize(eval(`(${this.editor.getValue()})`));
1487
- const { doc } = await api.Model.createDocument({ model: this.currentModel, data }).catch(err => {
1638
+ try {
1639
+ const { doc } = await api.Model.createDocument({ model: this.currentModel, data });
1640
+ this.errors.length = 0;
1641
+ vanillatoasts.create({
1642
+ title: 'Document created!',
1643
+ type: 'success',
1644
+ timeout: 3000,
1645
+ icon: 'images/success.png',
1646
+ positionClass: 'bottomRight'
1647
+ });
1648
+ this.$emit('close', doc);
1649
+ } catch (err) {
1488
1650
  if (err.response?.data?.message) {
1489
1651
  console.log(err.response.data);
1490
1652
  const message = err.response.data.message.split(': ').slice(1).join(': ');
1491
1653
  this.errors = message.split(',').map(error => {
1492
1654
  return error.split(': ').slice(1).join(': ').trim();
1493
1655
  });
1494
- throw new Error(err.response?.data?.message);
1495
1656
  }
1496
1657
  throw err;
1497
- });
1498
- this.errors.length = 0;
1499
- this.$emit('close', doc);
1658
+ }
1500
1659
  }
1501
1660
  },
1502
1661
  mounted: function() {
@@ -1517,24 +1676,24 @@ module.exports = app => app.component('create-document', {
1517
1676
  });
1518
1677
 
1519
1678
 
1520
- /***/ }),
1679
+ /***/ },
1521
1680
 
1522
- /***/ "./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.html":
1681
+ /***/ "./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.html"
1523
1682
  /*!****************************************************************************!*\
1524
1683
  !*** ./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.html ***!
1525
1684
  \****************************************************************************/
1526
- /***/ ((module) => {
1685
+ (module) {
1527
1686
 
1528
1687
  "use strict";
1529
1688
  module.exports = "<div :class=\"responsive ? 'h-full' : ''\">\n <div v-if=\"header && !fullscreen\" class=\"border-b border-gray-100 px-2 pb-2 flex items-center gap-1\">\n <div class=\"text-xl font-bold\">{{header}}</div>\n <button\n class=\"ml-auto px-2 py-1 text-xs bg-ultramarine-600 text-white border-none rounded cursor-pointer hover:bg-ultramarine-500 transition-colors\"\n @click=\"exportPNG\"\n title=\"Export PNG\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 1.5em;\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"M280-280h400v-80H280v80Zm200-120 160-160-56-56-64 62v-166h-80v166l-64-62-56 56 160 160Zm0 320q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </button>\n <button\n class=\"px-2 py-1 text-xs bg-ultramarine-600 text-white border-none rounded cursor-pointer hover:bg-ultramarine-500 transition-colors flex items-center\"\n @click=\"$emit('fullscreen')\"\n aria-label=\"Expand dashboard result\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 1.5em\" class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 1v4m0 0h-4m4 0l-5-5\" />\n </svg>\n </button>\n </div>\n <div v-else-if=\"!fullscreen\" class=\"pt-1 border-b border-gray-100 px-2 pb-2 text-right flex items-center justify-end gap-1 w-full\">\n <button\n class=\"px-2 py-1 text-xs bg-ultramarine-600 text-white border-none rounded cursor-pointer hover:bg-ultramarine-500 transition-colors\"\n @click=\"exportPNG\"\n title=\"Export PNG\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 1.5em;\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"M280-280h400v-80H280v80Zm200-120 160-160-56-56-64 62v-166h-80v166l-64-62-56 56 160 160Zm0 320q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-80q134 0 227-93t93-227q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93Zm0-320Z\"/></svg>\n </button>\n <button\n class=\"px-2 py-1 text-xs bg-ultramarine-600 text-white border-none rounded cursor-pointer hover:bg-ultramarine-500 transition-colors flex items-center\"\n @click=\"$emit('fullscreen')\"\n aria-label=\"Expand dashboard result\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"height: 1.5em\" class=\"h-3 w-3\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 1v4m0 0h-4m4 0l-5-5\" />\n </svg>\n </button>\n </div>\n <div :class=\"responsive ? 'relative h-full min-h-0' : ''\">\n <canvas ref=\"chart\" class=\"block w-full h-full\"></canvas>\n </div>\n</div>\n";
1530
1689
 
1531
- /***/ }),
1690
+ /***/ },
1532
1691
 
1533
- /***/ "./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.js":
1692
+ /***/ "./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.js"
1534
1693
  /*!**************************************************************************!*\
1535
1694
  !*** ./frontend/src/dashboard-result/dashboard-chart/dashboard-chart.js ***!
1536
1695
  \**************************************************************************/
1537
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1696
+ (module, __unused_webpack_exports, __webpack_require__) {
1538
1697
 
1539
1698
  "use strict";
1540
1699
 
@@ -1578,24 +1737,24 @@ module.exports = app => app.component('dashboard-chart', {
1578
1737
  });
1579
1738
 
1580
1739
 
1581
- /***/ }),
1740
+ /***/ },
1582
1741
 
1583
- /***/ "./frontend/src/dashboard-result/dashboard-document/dashboard-document.html":
1742
+ /***/ "./frontend/src/dashboard-result/dashboard-document/dashboard-document.html"
1584
1743
  /*!**********************************************************************************!*\
1585
1744
  !*** ./frontend/src/dashboard-result/dashboard-document/dashboard-document.html ***!
1586
1745
  \**********************************************************************************/
1587
- /***/ ((module) => {
1746
+ (module) {
1588
1747
 
1589
1748
  "use strict";
1590
1749
  module.exports = "<div class=\"py-2\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <div class=\"text-xl pb-2\">\n <document-details :document=\"value.$document.document\" :schemaPaths=\"schemaPaths\" />\n </div>\n</div>";
1591
1750
 
1592
- /***/ }),
1751
+ /***/ },
1593
1752
 
1594
- /***/ "./frontend/src/dashboard-result/dashboard-document/dashboard-document.js":
1753
+ /***/ "./frontend/src/dashboard-result/dashboard-document/dashboard-document.js"
1595
1754
  /*!********************************************************************************!*\
1596
1755
  !*** ./frontend/src/dashboard-result/dashboard-document/dashboard-document.js ***!
1597
1756
  \********************************************************************************/
1598
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1757
+ (module, __unused_webpack_exports, __webpack_require__) {
1599
1758
 
1600
1759
  "use strict";
1601
1760
 
@@ -1629,24 +1788,24 @@ module.exports = app => app.component('dashboard-document', {
1629
1788
  });
1630
1789
 
1631
1790
 
1632
- /***/ }),
1791
+ /***/ },
1633
1792
 
1634
- /***/ "./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.html":
1793
+ /***/ "./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.html"
1635
1794
  /*!**************************************************************************!*\
1636
1795
  !*** ./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.html ***!
1637
1796
  \**************************************************************************/
1638
- /***/ ((module) => {
1797
+ (module) {
1639
1798
 
1640
1799
  "use strict";
1641
1800
  module.exports = "<div class=\"grid gap-2\" :style=\"{ gridTemplateColumns: gridTemplateColumns }\">\n <template v-for=\"(row, rowIndex) in value.$grid\" :key=\"rowIndex\">\n <dashboard-result\n v-for=\"(cell, colIndex) in row\"\n :key=\"rowIndex + '-' + colIndex\"\n :result=\"cell\">\n </dashboard-result>\n </template>\n</div>\n";
1642
1801
 
1643
- /***/ }),
1802
+ /***/ },
1644
1803
 
1645
- /***/ "./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.js":
1804
+ /***/ "./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.js"
1646
1805
  /*!************************************************************************!*\
1647
1806
  !*** ./frontend/src/dashboard-result/dashboard-grid/dashboard-grid.js ***!
1648
1807
  \************************************************************************/
1649
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1808
+ (module, __unused_webpack_exports, __webpack_require__) {
1650
1809
 
1651
1810
  "use strict";
1652
1811
 
@@ -1671,24 +1830,24 @@ module.exports = app => app.component('dashboard-grid', {
1671
1830
  });
1672
1831
 
1673
1832
 
1674
- /***/ }),
1833
+ /***/ },
1675
1834
 
1676
- /***/ "./frontend/src/dashboard-result/dashboard-map/dashboard-map.html":
1835
+ /***/ "./frontend/src/dashboard-result/dashboard-map/dashboard-map.html"
1677
1836
  /*!************************************************************************!*\
1678
1837
  !*** ./frontend/src/dashboard-result/dashboard-map/dashboard-map.html ***!
1679
1838
  \************************************************************************/
1680
- /***/ ((module) => {
1839
+ (module) {
1681
1840
 
1682
1841
  "use strict";
1683
1842
  module.exports = "<div class=\"py-2 h-full flex flex-col\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <div class=\"text-xl flex-1 min-h-[200px]\">\n <div ref=\"map\" class=\"w-full h-full\" :style=\"mapStyle\"></div>\n </div>\n</div>\n";
1684
1843
 
1685
- /***/ }),
1844
+ /***/ },
1686
1845
 
1687
- /***/ "./frontend/src/dashboard-result/dashboard-map/dashboard-map.js":
1846
+ /***/ "./frontend/src/dashboard-result/dashboard-map/dashboard-map.js"
1688
1847
  /*!**********************************************************************!*\
1689
1848
  !*** ./frontend/src/dashboard-result/dashboard-map/dashboard-map.js ***!
1690
1849
  \**********************************************************************/
1691
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1850
+ (module, __unused_webpack_exports, __webpack_require__) {
1692
1851
 
1693
1852
  "use strict";
1694
1853
  /* global L */
@@ -1729,24 +1888,24 @@ module.exports = app => app.component('dashboard-map', {
1729
1888
  });
1730
1889
 
1731
1890
 
1732
- /***/ }),
1891
+ /***/ },
1733
1892
 
1734
- /***/ "./frontend/src/dashboard-result/dashboard-object/dashboard-object.html":
1893
+ /***/ "./frontend/src/dashboard-result/dashboard-object/dashboard-object.html"
1735
1894
  /*!******************************************************************************!*\
1736
1895
  !*** ./frontend/src/dashboard-result/dashboard-object/dashboard-object.html ***!
1737
1896
  \******************************************************************************/
1738
- /***/ ((module) => {
1897
+ (module) {
1739
1898
 
1740
1899
  "use strict";
1741
1900
  module.exports = "<div class=\"py-2\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <pre class=\"text-sm p-2 whitespace-pre-wrap overflow-auto\"><code>{{formattedValue}}</code></pre>\n</div>\n";
1742
1901
 
1743
- /***/ }),
1902
+ /***/ },
1744
1903
 
1745
- /***/ "./frontend/src/dashboard-result/dashboard-object/dashboard-object.js":
1904
+ /***/ "./frontend/src/dashboard-result/dashboard-object/dashboard-object.js"
1746
1905
  /*!****************************************************************************!*\
1747
1906
  !*** ./frontend/src/dashboard-result/dashboard-object/dashboard-object.js ***!
1748
1907
  \****************************************************************************/
1749
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1908
+ (module, __unused_webpack_exports, __webpack_require__) {
1750
1909
 
1751
1910
  "use strict";
1752
1911
 
@@ -1771,24 +1930,24 @@ module.exports = app => app.component('dashboard-object', {
1771
1930
  });
1772
1931
 
1773
1932
 
1774
- /***/ }),
1933
+ /***/ },
1775
1934
 
1776
- /***/ "./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.html":
1935
+ /***/ "./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.html"
1777
1936
  /*!************************************************************************************!*\
1778
1937
  !*** ./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.html ***!
1779
1938
  \************************************************************************************/
1780
- /***/ ((module) => {
1939
+ (module) {
1781
1940
 
1782
1941
  "use strict";
1783
1942
  module.exports = "<div class=\"py-2\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <div class=\"text-xl p-2\">\n {{displayValue}}\n </div>\n</div>";
1784
1943
 
1785
- /***/ }),
1944
+ /***/ },
1786
1945
 
1787
- /***/ "./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.js":
1946
+ /***/ "./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.js"
1788
1947
  /*!**********************************************************************************!*\
1789
1948
  !*** ./frontend/src/dashboard-result/dashboard-primitive/dashboard-primitive.js ***!
1790
1949
  \**********************************************************************************/
1791
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1950
+ (module, __unused_webpack_exports, __webpack_require__) {
1792
1951
 
1793
1952
  "use strict";
1794
1953
 
@@ -1817,24 +1976,24 @@ module.exports = app => app.component('dashboard-primitive', {
1817
1976
  });
1818
1977
 
1819
1978
 
1820
- /***/ }),
1979
+ /***/ },
1821
1980
 
1822
- /***/ "./frontend/src/dashboard-result/dashboard-result.html":
1981
+ /***/ "./frontend/src/dashboard-result/dashboard-result.html"
1823
1982
  /*!*************************************************************!*\
1824
1983
  !*** ./frontend/src/dashboard-result/dashboard-result.html ***!
1825
1984
  \*************************************************************/
1826
- /***/ ((module) => {
1985
+ (module) {
1827
1986
 
1828
1987
  "use strict";
1829
1988
  module.exports = "<div>\n <div v-if=\"Array.isArray(result)\">\n <div v-for=\"el in result\" :key=\"el._id || el.finishedEvaluatingAt\">\n <component\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl\"\n :is=\"getComponentForValue(el)\"\n :value=\"el\">\n </component>\n </div>\n </div>\n <div v-else>\n <component\n class=\"bg-white shadow-sm ring-1 ring-gray-900/5 sm:rounded-xl\"\n :is=\"getComponentForValue(result)\"\n :value=\"result\"\n :fullscreen=\"fullscreen\"\n @fullscreen=\"$emit('fullscreen')\">\n </component>\n </div>\n <div class=\"text-right text-sm text-gray-700 mt-1\" v-if=\"finishedEvaluatingAt && !fullscreen\">\n Last Evaluated: {{ format.isoToLongDateTime(finishedEvaluatingAt) }}\n </div>\n</div>\n";
1830
1989
 
1831
- /***/ }),
1990
+ /***/ },
1832
1991
 
1833
- /***/ "./frontend/src/dashboard-result/dashboard-result.js":
1992
+ /***/ "./frontend/src/dashboard-result/dashboard-result.js"
1834
1993
  /*!***********************************************************!*\
1835
1994
  !*** ./frontend/src/dashboard-result/dashboard-result.js ***!
1836
1995
  \***********************************************************/
1837
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
1996
+ (module, __unused_webpack_exports, __webpack_require__) {
1838
1997
 
1839
1998
  "use strict";
1840
1999
 
@@ -1879,24 +2038,24 @@ module.exports = app => app.component('dashboard-result', {
1879
2038
  });
1880
2039
 
1881
2040
 
1882
- /***/ }),
2041
+ /***/ },
1883
2042
 
1884
- /***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.html":
2043
+ /***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.html"
1885
2044
  /*!**************************************************************************!*\
1886
2045
  !*** ./frontend/src/dashboard-result/dashboard-text/dashboard-text.html ***!
1887
2046
  \**************************************************************************/
1888
- /***/ ((module) => {
2047
+ (module) {
1889
2048
 
1890
2049
  "use strict";
1891
2050
  module.exports = "<div class=\"py-2\">\n <div v-if=\"header\" class=\"border-b border-gray-100 px-2 pb-2 text-xl font-bold\">\n {{header}}\n </div>\n <div class=\"text-xl p-2\">\n <pre v-text=\"value.$text\"></pre>\n </div>\n</div>\n";
1892
2051
 
1893
- /***/ }),
2052
+ /***/ },
1894
2053
 
1895
- /***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.js":
2054
+ /***/ "./frontend/src/dashboard-result/dashboard-text/dashboard-text.js"
1896
2055
  /*!************************************************************************!*\
1897
2056
  !*** ./frontend/src/dashboard-result/dashboard-text/dashboard-text.js ***!
1898
2057
  \************************************************************************/
1899
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2058
+ (module, __unused_webpack_exports, __webpack_require__) {
1900
2059
 
1901
2060
  "use strict";
1902
2061
 
@@ -1909,30 +2068,31 @@ module.exports = app => app.component('dashboard-text', {
1909
2068
  });
1910
2069
 
1911
2070
 
1912
- /***/ }),
2071
+ /***/ },
1913
2072
 
1914
- /***/ "./frontend/src/dashboard/dashboard.html":
2073
+ /***/ "./frontend/src/dashboard/dashboard.html"
1915
2074
  /*!***********************************************!*\
1916
2075
  !*** ./frontend/src/dashboard/dashboard.html ***!
1917
2076
  \***********************************************/
1918
- /***/ ((module) => {
2077
+ (module) {
1919
2078
 
1920
2079
  "use strict";
1921
2080
  module.exports = "<div class=\"dashboard px-1\">\n <div v-if=\"status === 'loading'\" class=\"max-w-5xl mx-auto text-center\">\n <img src=\"images/loader.gif\" class=\"inline mt-10\">\n </div>\n <div v-if=\"dashboard && status !== 'loading'\" class=\"max-w-5xl mx-auto\">\n <div class=\"flex items-center w-full\" v-if=\"!showEditor\">\n <h2 class=\"mt-4 mb-4 text-gray-900 font-semibold text-xl grow shrink\">{{title}}</h2>\n <div class=\"flex gap-2\">\n <button\n @click=\"showEditor = true\"\n type=\"button\"\n :disabled=\"status === 'evaluating'\"\n class=\"flex items-center rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600 disabled:cursor-not-allowed disabled:bg-gray-600\">\n <img src=\"images/edit.svg\" class=\"inline h-[1.25em] mr-1\" /> Edit\n </button>\n\n <async-button\n @click=\"evaluateDashboard\"\n type=\"button\"\n :disabled=\"status === 'evaluating'\"\n class=\"flex items-center rounded-md bg-ultramarine-600 px-4 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600 disabled:cursor-not-allowed disabled:bg-gray-600\"\n >\n <svg class=\"inline h-[1.25em] mr-1\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"m670-140 160-100-160-100v200ZM240-600h480v-80H240v80ZM720-40q-83 0-141.5-58.5T520-240q0-83 58.5-141.5T720-440q83 0 141.5 58.5T920-240q0 83-58.5 141.5T720-40ZM120-80v-680q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v267q-19-9-39-15t-41-9v-243H200v562h243q5 31 15.5 59T486-86l-6 6-60-60-60 60-60-60-60 60-60-60-60 60Zm120-200h203q3-21 9-41t15-39H240v80Zm0-160h284q38-37 88.5-58.5T720-520H240v80Zm-40 242v-562 562Z\"/></svg>\n Evaluate\n </async-button>\n <div class=\"relative\" ref=\"actionsMenu\">\n <button\n type=\"button\"\n @click.stop=\"toggleActionsMenu\"\n class=\"flex items-center rounded-md bg-gray-100 px-3 py-1.5 text-sm font-semibold text-gray-700 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-200 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500\"\n aria-haspopup=\"true\"\n :aria-expanded=\"showActionsMenu\"\n >\n More\n <svg class=\"ml-1 h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"m6 9 6 6 6-6\" />\n </svg>\n </button>\n <div\n v-if=\"showActionsMenu\"\n class=\"absolute right-0 mt-2 w-44 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black/5 z-20\"\n role=\"menu\"\n aria-label=\"Dashboard actions\"\n >\n <button\n type=\"button\"\n :disabled=\"startingChat\"\n @click.stop=\"startChatWithDashboard\"\n class=\"flex w-full items-center gap-2 px-3 py-2 text-left text-sm text-gray-700 hover:bg-ultramarine-100 disabled:cursor-not-allowed disabled:text-gray-400\"\n role=\"menuitem\"\n >\n <svg class=\"h-4 w-4\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"1.5\" d=\"M8 10h.01M12 10h.01M16 10h.01m-8 4h8m-9 5 10-3.333L7 12.333 3 14l.667-4.333L9 7l4-3 4.333 2.667L21 11l-3 3.667V19a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2v-1z\" />\n </svg>\n Start Chat\n </button>\n </div>\n </div>\n </div>\n </div>\n <div v-if=\"!showEditor\" class=\"mt-4 mb-4\">\n <div v-if=\"dashboardResults.length === 0\">\n <div class=\"flex flex-col items-center justify-center py-8\">\n <p class=\"text-gray-700 text-base mb-4\">This dashboard hasn't been evaluated yet.</p>\n <async-button\n @click=\"evaluateDashboard\"\n type=\"button\"\n :disabled=\"status === 'evaluating'\"\n class=\"rounded-md bg-ultramarine-600 px-4 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600 disabled:cursor-not-allowed disabled:bg-gray-600\"\n >\n Evaluate Dashboard\n </async-button>\n </div>\n </div>\n <div v-else-if=\"dashboardResult\">\n <div class=\"relative\">\n <div v-if=\"status === 'evaluating'\" class=\"absolute inset-0 flex items-center justify-center bg-white bg-opacity-60 z-10 flex flex-col gap-2\">\n <div>Evaluating Dashboard...</div>\n <img src=\"images/loader.gif\" class=\"h-12 w-12\" alt=\"Loading...\" />\n </div>\n <div v-else-if=\"dashboardResult.error\" class=\"rounded-md bg-red-50 p-4 mt-4\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">{{dashboardResult.error.message || 'Unknown Error'}}</h3>\n </div>\n </div>\n </div>\n <dashboard-result\n v-else\n :key=\"dashboardResult.finishedEvaluatingAt\"\n :result=\"dashboardResult.result\"\n :finishedEvaluatingAt=\"dashboardResult.finishedEvaluatingAt\"\n @fullscreen=\"showDetailModal = true\"\n class=\"h-[40vh]\"\n >\n </dashboard-result>\n </div>\n </div>\n </div>\n <div v-if=\"showEditor\" class=\"mt-4\">\n <edit-dashboard\n :dashboardId=\"dashboard._id\"\n :code=\"code\"\n :currentDescription=\"description\"\n :currentTitle=\"title\"\n @close=\"showEditor=false;\"\n @update=\"updateCode\"></edit-dashboard>\n </div>\n\n </div>\n <div v-if=\"!dashboard && status !== 'loading'\">\n No dashboard with the given id could be found.\n </div>\n</div>\n\n<modal\n v-if=\"showDetailModal\"\n containerClass=\"!h-[90vh] !w-[90vw]\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Dashboard Details\"\n>\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showDetailModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"h-full overflow-auto\">\n <dashboard-result\n v-if=\"dashboardResult\"\n :result=\"dashboardResult.result\"\n :finishedEvaluatingAt=\"dashboardResult.finishedEvaluatingAt\"\n :fullscreen=\"true\"\n :responsive=\"true\">\n </dashboard-result>\n </div>\n </template>\n</modal>\n";
1922
2081
 
1923
- /***/ }),
2082
+ /***/ },
1924
2083
 
1925
- /***/ "./frontend/src/dashboard/dashboard.js":
2084
+ /***/ "./frontend/src/dashboard/dashboard.js"
1926
2085
  /*!*********************************************!*\
1927
2086
  !*** ./frontend/src/dashboard/dashboard.js ***!
1928
2087
  \*********************************************/
1929
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2088
+ (module, __unused_webpack_exports, __webpack_require__) {
1930
2089
 
1931
2090
  "use strict";
1932
2091
 
1933
2092
 
1934
2093
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
1935
2094
  const template = __webpack_require__(/*! ./dashboard.html */ "./frontend/src/dashboard/dashboard.html");
2095
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
1936
2096
 
1937
2097
  module.exports = app => app.component('dashboard', {
1938
2098
  template: template,
@@ -2040,6 +2200,13 @@ module.exports = app => app.component('dashboard', {
2040
2200
  initialMessage,
2041
2201
  dashboardId: this.dashboard?._id
2042
2202
  });
2203
+ vanillatoasts.create({
2204
+ title: 'Chat thread created!',
2205
+ type: 'success',
2206
+ timeout: 3000,
2207
+ icon: 'images/success.png',
2208
+ positionClass: 'bottomRight'
2209
+ });
2043
2210
  this.$router.push('/chat/' + chatThread._id);
2044
2211
  } finally {
2045
2212
  this.startingChat = false;
@@ -2072,34 +2239,35 @@ module.exports = app => app.component('dashboard', {
2072
2239
  },
2073
2240
  beforeDestroy() {
2074
2241
  document.removeEventListener('click', this.handleDocumentClick);
2075
- },
2242
+ }
2076
2243
  });
2077
2244
 
2078
2245
 
2079
- /***/ }),
2246
+ /***/ },
2080
2247
 
2081
- /***/ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.html":
2248
+ /***/ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.html"
2082
2249
  /*!*******************************************************************!*\
2083
2250
  !*** ./frontend/src/dashboard/edit-dashboard/edit-dashboard.html ***!
2084
2251
  \*******************************************************************/
2085
- /***/ ((module) => {
2252
+ (module) {
2086
2253
 
2087
2254
  "use strict";
2088
2255
  module.exports = "<div class=\"p-4 bg-gray-100 rounded-lg shadow-lg\">\n <div v-show=\"status === 'loading'\" class=\"max-w-5xl mx-auto text-center\">\n <img src=\"images/loader.gif\" class=\"inline mt-10\">\n </div>\n <div v-show=\"status !== 'loading'\" class=\"flex flex-col gap-4\">\n <div>\n <input v-model=\"title\" class=\"w-full p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\" placeholder=\"Title\"/>\n </div>\n <div>\n <textarea v-model=\"description\" class=\"w-full p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\" rows=\"4\" placeholder=\"Description\">{{description}}</textarea>\n </div>\n <div class=\"border border-gray-300 rounded-md\">\n <textarea ref=\"codeEditor\" class=\"w-full p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500\" rows=\"6\">{{code}}</textarea>\n <textarea v-model=\"chatMessage\" class=\"w-full p-2\"></textarea>\n </div>\n <div class=\"flex space-x-2\">\n <async-button @click=\"updateCode\" class=\"px-4 py-2 bg-blue-500 text-white rounded-md hover:bg-blue-600 focus:outline-none focus:ring-2 focus:ring-blue-500\">Submit</async-button>\n <button @click=\"closeEditor\" class=\"px-4 py-2 bg-gray-500 text-white rounded-md hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-500\">Cancel</button>\n </div>\n </div>\n</div>\n";
2089
2256
 
2090
- /***/ }),
2257
+ /***/ },
2091
2258
 
2092
- /***/ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.js":
2259
+ /***/ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.js"
2093
2260
  /*!*****************************************************************!*\
2094
2261
  !*** ./frontend/src/dashboard/edit-dashboard/edit-dashboard.js ***!
2095
2262
  \*****************************************************************/
2096
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2263
+ (module, __unused_webpack_exports, __webpack_require__) {
2097
2264
 
2098
2265
  "use strict";
2099
2266
 
2100
2267
 
2101
2268
  const api = __webpack_require__(/*! ../../api */ "./frontend/src/api.js");
2102
2269
  const template = __webpack_require__(/*! ./edit-dashboard.html */ "./frontend/src/dashboard/edit-dashboard/edit-dashboard.html");
2270
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
2103
2271
 
2104
2272
  module.exports = app => app.component('edit-dashboard', {
2105
2273
  template: template,
@@ -2129,6 +2297,13 @@ module.exports = app => app.component('edit-dashboard', {
2129
2297
  });
2130
2298
  this.$emit('update', { doc });
2131
2299
  this.editor.setValue(doc.code);
2300
+ vanillatoasts.create({
2301
+ title: 'Dashboard updated!',
2302
+ type: 'success',
2303
+ timeout: 3000,
2304
+ icon: 'images/success.png',
2305
+ positionClass: 'bottomRight'
2306
+ });
2132
2307
  this.closeEditor();
2133
2308
  } catch (err) {
2134
2309
  this.$emit('update', { error: { message: err.message } });
@@ -2157,30 +2332,31 @@ module.exports = app => app.component('edit-dashboard', {
2157
2332
  });
2158
2333
 
2159
2334
 
2160
- /***/ }),
2335
+ /***/ },
2161
2336
 
2162
- /***/ "./frontend/src/dashboards/dashboards.html":
2337
+ /***/ "./frontend/src/dashboards/dashboards.html"
2163
2338
  /*!*************************************************!*\
2164
2339
  !*** ./frontend/src/dashboards/dashboards.html ***!
2165
2340
  \*************************************************/
2166
- /***/ ((module) => {
2341
+ (module) {
2167
2342
 
2168
2343
  "use strict";
2169
2344
  module.exports = "<div class=\"dashboards max-w-5xl mx-auto mt-8\">\n <div v-if=\"status === 'loading'\" class=\"text-center mt-4\">\n <svg\n class=\"inline w-8 h-8 animate-spin text-ultramarine-600\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z\"\n ></path>\n </svg>\n </div>\n <div v-if=\"status === 'loaded' && dashboards.length === 0\">\n <div class=\"text-center\">\n <h3 class=\"mt-2 text-sm font-semibold text-gray-900\">No dashboards yet</h3>\n <p class=\"mt-1 text-sm text-gray-500\">Get started by creating a new dashboard.</p>\n <div class=\"mt-6\">\n <button type=\"button\" class=\"inline-flex items-center rounded-md bg-ultramarine-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n <svg class=\"-ml-0.5 mr-1.5 h-5 w-5\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path d=\"M10.75 4.75a.75.75 0 00-1.5 0v4.5h-4.5a.75.75 0 000 1.5h4.5v4.5a.75.75 0 001.5 0v-4.5h4.5a.75.75 0 000-1.5h-4.5v-4.5z\" />\n </svg>\n New Dashboard\n </button>\n </div>\n </div>\n </div>\n\n <div class=\"px-4 sm:px-6 lg:px-8\">\n <div class=\"sm:flex sm:items-center\">\n <div class=\"sm:flex-auto\">\n <h1 class=\"text-base font-semibold leading-6 text-gray-900\">Dashboards</h1>\n </div>\n <div class=\"mt-4 sm:ml-16 sm:mt-0 sm:flex-none\">\n <button\n type=\"button\"\n @click=\"showCreateDashboardModal = true\"\n class=\"block rounded-md bg-ultramarine-600 px-3 py-2 text-center text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">Create New Dashboard</button>\n </div>\n </div>\n <div class=\"mt-8 flow-root\">\n <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th scope=\"col\" class=\"py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-6 lg:pl-8\">Title</th>\n <th scope=\"col\" class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900 w-[50%]\">Description</th>\n <th scope=\"col\" class=\"relative py-3.5 pl-3 pr-4 sm:pr-6 lg:pr-8\">\n </th>\n <th scope=\"col\" class=\"relative py-3.5 pl-3 pr-4 sm:pr-6 lg:pr-8\">\n </th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr v-for=\"dashboard in dashboards\">\n <td class=\"whitespace-nowrap py-4 pl-4 pr-3 text-sm font-medium text-gray-900 sm:pl-6 lg:pl-8\">{{dashboard.title}}</td>\n <td class=\"whitespace-nowrap px-3 py-4 text-sm text-gray-500 truncate w-[50%]\">{{dashboard.description}}</td>\n <td class=\"relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6 lg:pr-8\">\n <router-link\n :to=\"'/dashboard/' + dashboard._id + '?edit=true'\"\n class=\"text-ultramarine-600 hover:text-ultramarine-900\">\n Edit\n </router-link>\n </td>\n <td class=\"relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6 lg:pr-8\">\n <router-link\n :to=\"'/dashboard/' + dashboard._id\"\n class=\"text-ultramarine-600 hover:text-ultramarine-900\">\n View\n </router-link>\n </td>\n <td class=\"relative whitespace-nowrap py-4 pl-3 pr-4 text-right text-sm font-medium sm:pr-6 lg:pr-8\">\n <button\n @click=\"showDeleteDashboardModal=dashboard\"\n class=\"text-ultramarine-600 hover:text-ultramarine-900\">\n Delete\n </button>\n </td>\n </tr>\n\n <!-- More people... -->\n </tbody>\n </table>\n </div>\n </div>\n </div>\n </div>\n\n <modal v-if=\"showCreateDashboardModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"showCreateDashboardModal = false;\">&times;</div>\n\n <create-dashboard @close=\"insertNewDashboard\"></create-dashboard>\n </template>\n </modal>\n\n <modal v-if=\"showDeleteDashboardModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"showDeleteDashboardModal = null;\">&times;</div>\n <h2>Are you sure you want to delete this dashboard titled {{showDeleteDashboardModal.title}}?</h2>\n <div class=\"flex space-x-2\">\n <button class=\"px-4 py-2 bg-red-500 text-white rounded-md hover:bg-red-600 focus:outline-none focus:ring-2 focus:ring-red-500\" @click=\"deleteDashboard(showDeleteDashboardModal)\">Yes, delete</button>\n <button class=\"px-4 py-2 bg-gray-500 text-white rounded-md hover:bg-gray-600 focus:outline-none focus:ring-2 focus:ring-gray-600\" @click=\"showDeleteDashboardModal=null;\">Cancel</button>\n </div>\n </template>\n </modal>\n </div>\n</div>";
2170
2345
 
2171
- /***/ }),
2346
+ /***/ },
2172
2347
 
2173
- /***/ "./frontend/src/dashboards/dashboards.js":
2348
+ /***/ "./frontend/src/dashboards/dashboards.js"
2174
2349
  /*!***********************************************!*\
2175
2350
  !*** ./frontend/src/dashboards/dashboards.js ***!
2176
2351
  \***********************************************/
2177
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2352
+ (module, __unused_webpack_exports, __webpack_require__) {
2178
2353
 
2179
2354
  "use strict";
2180
2355
 
2181
2356
 
2182
2357
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
2183
2358
  const template = __webpack_require__(/*! ./dashboards.html */ "./frontend/src/dashboards/dashboards.html");
2359
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
2184
2360
 
2185
2361
 
2186
2362
  module.exports = app => app.component('dashboards', {
@@ -2200,6 +2376,13 @@ module.exports = app => app.component('dashboards', {
2200
2376
  const removedDashboard = this.dashboards.findIndex(x => x._id.toString() === dashboard._id.toString());
2201
2377
  this.dashboards.splice(removedDashboard, 1);
2202
2378
  this.showDeleteDashboardModal = null;
2379
+ vanillatoasts.create({
2380
+ title: 'Dashboard deleted!',
2381
+ type: 'success',
2382
+ timeout: 3000,
2383
+ icon: 'images/success.png',
2384
+ positionClass: 'bottomRight'
2385
+ });
2203
2386
  },
2204
2387
  insertNewDashboard(dashboard) {
2205
2388
  this.dashboards.push(dashboard);
@@ -2214,65 +2397,81 @@ module.exports = app => app.component('dashboards', {
2214
2397
  });
2215
2398
 
2216
2399
 
2217
- /***/ }),
2400
+ /***/ },
2218
2401
 
2219
- /***/ "./frontend/src/detail-array/detail-array.html":
2402
+ /***/ "./frontend/src/detail-array/detail-array.html"
2220
2403
  /*!*****************************************************!*\
2221
2404
  !*** ./frontend/src/detail-array/detail-array.html ***!
2222
2405
  \*****************************************************/
2223
- /***/ ((module) => {
2406
+ (module) {
2224
2407
 
2225
2408
  "use strict";
2226
- module.exports = "<div class=\"detail-array\">\n <pre><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n</div>";
2409
+ module.exports = "<div class=\"w-full\">\n <div v-if=\"!arrayValue || arrayValue.length === 0\" class=\"text-gray-400 text-xs py-2 text-center\">\n Empty array\n </div>\n\n <div v-else class=\"mt-2\">\n <div\n v-for=\"(item, index) in arrayValue\"\n :key=\"index\"\n :title=\"'Index: ' + index\"\n class=\"mb-1.5 last:mb-0 py-2.5 px-3 pl-4 bg-transparent border-l-[3px] border-l-blue-500 rounded-none transition-all duration-200 cursor-pointer relative hover:bg-slate-50 hover:border-l-blue-600 hover:shadow-lg hover:-translate-y-0.5\">\n <div class=\"absolute -left-3 top-1/2 -translate-y-1/2 w-5 h-5 bg-blue-500 text-white rounded-full flex items-center justify-center text-[10px] font-semibold font-mono z-10 hover:bg-blue-600\">{{ index >= 1000 ? '1k+' : index }}</div>\n <div v-if=\"arrayUtils.isObjectItem(item)\" class=\"flex flex-col gap-1 mt-1 px-2\">\n <div\n v-for=\"key in arrayUtils.getItemKeys(item)\"\n :key=\"key\"\n class=\"flex items-start gap-2 text-xs font-mono\">\n <span class=\"font-semibold text-gray-600 flex-shrink-0 min-w-[80px]\">{{ key }}:</span>\n <span class=\"text-gray-800 break-words whitespace-pre-wrap flex-1\">{{ arrayUtils.formatItemValue(item, key) }}</span>\n </div>\n </div>\n <div v-else class=\"text-xs py-1.5 px-2 font-mono text-gray-800 break-words whitespace-pre-wrap mt-1\">{{ arrayUtils.formatValue(item) }}</div>\n </div>\n </div>\n</div>\n";
2227
2410
 
2228
- /***/ }),
2411
+ /***/ },
2229
2412
 
2230
- /***/ "./frontend/src/detail-array/detail-array.js":
2413
+ /***/ "./frontend/src/detail-array/detail-array.js"
2231
2414
  /*!***************************************************!*\
2232
2415
  !*** ./frontend/src/detail-array/detail-array.js ***!
2233
2416
  \***************************************************/
2234
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2417
+ (module, __unused_webpack_exports, __webpack_require__) {
2235
2418
 
2236
2419
  "use strict";
2237
2420
 
2238
2421
 
2239
2422
  const template = __webpack_require__(/*! ./detail-array.html */ "./frontend/src/detail-array/detail-array.html");
2240
- const { inspect } = __webpack_require__(/*! node-inspect-extracted */ "./node_modules/node-inspect-extracted/dist/inspect.js");
2241
2423
 
2242
2424
  module.exports = app => app.component('detail-array', {
2243
2425
  template: template,
2244
2426
  props: ['value'],
2245
- computed: {
2246
- displayValue() {
2427
+ data() {
2428
+ return {
2429
+ arrayValue: []
2430
+ };
2431
+ },
2432
+ methods: {
2433
+ initializeArray() {
2247
2434
  if (this.value == null) {
2248
- return this.value;
2435
+ this.arrayValue = [];
2436
+ } else if (Array.isArray(this.value)) {
2437
+ this.arrayValue = this.value;
2438
+ } else {
2439
+ this.arrayValue = [];
2249
2440
  }
2250
- return inspect(this.value, { maxArrayLength: 50 });
2251
2441
  }
2252
2442
  },
2253
2443
  mounted() {
2254
- Prism.highlightElement(this.$refs.code);
2444
+ this.initializeArray();
2445
+ },
2446
+ watch: {
2447
+ value: {
2448
+ handler(newValue) {
2449
+ this.initializeArray();
2450
+ },
2451
+ deep: true,
2452
+ immediate: true
2453
+ }
2255
2454
  }
2256
2455
  });
2257
2456
 
2258
- /***/ }),
2457
+ /***/ },
2259
2458
 
2260
- /***/ "./frontend/src/detail-default/detail-default.html":
2459
+ /***/ "./frontend/src/detail-default/detail-default.html"
2261
2460
  /*!*********************************************************!*\
2262
2461
  !*** ./frontend/src/detail-default/detail-default.html ***!
2263
2462
  \*********************************************************/
2264
- /***/ ((module) => {
2463
+ (module) {
2265
2464
 
2266
2465
  "use strict";
2267
2466
  module.exports = "<div class=\"w-full\">\n <pre class=\"w-full whitespace-pre-wrap break-words font-mono text-sm text-gray-700 m-0\">{{displayValue}}</pre>\n</div>";
2268
2467
 
2269
- /***/ }),
2468
+ /***/ },
2270
2469
 
2271
- /***/ "./frontend/src/detail-default/detail-default.js":
2470
+ /***/ "./frontend/src/detail-default/detail-default.js"
2272
2471
  /*!*******************************************************!*\
2273
2472
  !*** ./frontend/src/detail-default/detail-default.js ***!
2274
2473
  \*******************************************************/
2275
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2474
+ (module, __unused_webpack_exports, __webpack_require__) {
2276
2475
 
2277
2476
  "use strict";
2278
2477
 
@@ -2304,35 +2503,35 @@ module.exports = app => app.component('detail-default', {
2304
2503
  }
2305
2504
  });
2306
2505
 
2307
- /***/ }),
2506
+ /***/ },
2308
2507
 
2309
- /***/ "./frontend/src/document-details/document-details.css":
2508
+ /***/ "./frontend/src/document-details/document-details.css"
2310
2509
  /*!************************************************************!*\
2311
2510
  !*** ./frontend/src/document-details/document-details.css ***!
2312
2511
  \************************************************************/
2313
- /***/ ((module) => {
2512
+ (module) {
2314
2513
 
2315
2514
  "use strict";
2316
2515
  module.exports = ".document-details {\n width: 100%;\n}\n\n.document-details .value {\n padding-top: 10px;\n padding-bottom: 10px;\n}\n\n.document-details .path-key {\n background-color: #f0f0f0;\n margin-bottom: 0.5em;\n}\n\n.document-details .path-type {\n color: rgba(0,0,0,.36);\n font-size: 0.8em;\n}\n\n.document-details .date-position {\n float: right;\n margin-top: -7px;\n}\n\n/* Add Field Modal Styles */\n.add-field-modal {\n max-width: 500px;\n width: 100%;\n}\n\n.add-field-modal .modal-exit {\n position: absolute;\n top: 15px;\n right: 20px;\n font-size: 24px;\n cursor: pointer;\n color: #6b7280;\n z-index: 10;\n}\n\n.add-field-modal .modal-exit:hover {\n color: #374151;\n}\n\n.add-field-modal form {\n max-height: 70vh;\n overflow-y: auto;\n}\n\n.add-field-modal input[type=\"text\"],\n.add-field-modal input[type=\"email\"],\n.add-field-modal input[type=\"password\"],\n.add-field-modal select,\n.add-field-modal textarea {\n transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n}\n\n.add-field-modal input:focus,\n.add-field-modal select:focus,\n.add-field-modal textarea:focus {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.add-field-modal .border-red-500 {\n border-color: #ef4444 !important;\n}\n\n.add-field-modal .border-red-500:focus {\n box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1) !important;\n}\n\n/* CodeMirror styling in modal */\n.add-field-modal .CodeMirror {\n border: 1px solid #d1d5db;\n border-radius: 0.375rem;\n font-size: 14px;\n height: auto;\n min-height: 100px;\n}\n\n.add-field-modal .CodeMirror:focus-within {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n.add-field-modal .CodeMirror.CodeMirror-focused {\n border-color: #3b82f6;\n box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.1);\n}\n\n/* JSON View Styles */\n.json-view {\n width: 100%;\n}\n\n.json-view pre {\n margin: 0;\n max-height: 70vh;\n overflow: auto;\n line-height: 1.5;\n}\n\n.json-view pre::-webkit-scrollbar {\n width: 8px;\n height: 8px;\n}\n\n.json-view pre::-webkit-scrollbar-track {\n background: #f1f1f1;\n border-radius: 4px;\n}\n\n.json-view pre::-webkit-scrollbar-thumb {\n background: #888;\n border-radius: 4px;\n}\n\n.json-view pre::-webkit-scrollbar-thumb:hover {\n background: #555;\n}";
2317
2516
 
2318
- /***/ }),
2517
+ /***/ },
2319
2518
 
2320
- /***/ "./frontend/src/document-details/document-details.html":
2519
+ /***/ "./frontend/src/document-details/document-details.html"
2321
2520
  /*!*************************************************************!*\
2322
2521
  !*** ./frontend/src/document-details/document-details.html ***!
2323
2522
  \*************************************************************/
2324
- /***/ ((module) => {
2523
+ (module) {
2325
2524
 
2326
2525
  "use strict";
2327
- module.exports = "<div class=\"document-details\">\n <!-- View Toggle and Search/Filter Bar -->\n <div class=\"sticky top-[60px] z-40 bg-white p-4 border-b border-gray-200 shadow-sm\">\n\n <!-- Search and Filter Bar (only show in fields view) -->\n <div v-if=\"viewMode === 'fields'\" class=\"flex md:gap-3\">\n <!-- Search Bar -->\n <div class=\"relative flex-1\">\n <input\n ref=\"searchInput\"\n v-model=\"searchQuery\"\n type=\"text\"\n placeholder=\"Search fields...\"\n class=\"w-full px-4 py-2 pl-10 pr-4 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n <div class=\"absolute inset-y-0 left-0 flex items-center pl-3\">\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"></path>\n </svg>\n </div>\n </div>\n\n <!-- Data Type Filter -->\n <div class=\"relative hidden md:block\">\n <select\n v-model=\"selectedType\"\n class=\"px-4 py-2 pr-8 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent bg-white min-w-[140px] appearance-none\"\n >\n <option value=\"\">All Types</option>\n <option v-for=\"type in availableTypes\" :key=\"type\" :value=\"type\">\n {{type}}\n </option>\n </select>\n <div class=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none\">\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n </div>\n </div>\n\n <!-- Add Field Button -->\n <button\n @click=\"openAddFieldModal\"\n class=\"hidden md:flex px-4 py-2 text-sm font-medium text-white bg-green-600 hover:bg-green-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2 items-center gap-2\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 4v16m8-8H4\"></path>\n </svg> Add Field\n </button>\n </div>\n </div>\n\n <!-- Fields View -->\n <div v-if=\"viewMode === 'fields'\">\n <!-- Schema Paths -->\n <div\n v-for=\"path in filteredSchemaPaths\"\n :key=\"path.path || path\"\n class=\"value\"\n >\n <document-property\n :path=\"path\"\n :document=\"document\"\n :schemaPaths=\"schemaPaths\"\n :editting=\"editting\"\n :changes=\"changes\"\n :highlight=\"isSchemaPathMatched(path)\"\n :invalid=\"invalid\"></document-property>\n </div>\n\n <!-- Virtual Fields -->\n <div\n v-for=\"path in filteredVirtuals\"\n :key=\"path.name\"\n class=\"border rounded-lg mb-2 transition-all duration-200 ease-in-out\"\n :class=\"[\n isVirtualMatched(path)\n ? 'border-amber-400 ring-2 ring-amber-200 ring-offset-1'\n : 'border-gray-200'\n ]\"\n >\n <!-- Virtual Field Header (Always Visible) -->\n <div\n @click=\"toggleVirtualField(path.name)\"\n class=\"p-3 bg-slate-50 hover:bg-slate-100 cursor-pointer flex items-center justify-between border-b border-gray-200\"\n >\n <div class=\"flex items-center\">\n <svg\n :class=\"isVirtualFieldCollapsed(path.name) ? 'rotate-0' : 'rotate-90'\"\n class=\"w-4 h-4 text-gray-500 mr-2 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n <span class=\"font-medium text-gray-900\">{{path.name}}</span>\n <span v-if=\"path.isVirtual\" class=\"ml-2 text-sm text-purple-600\">(virtual - {{getVirtualFieldType(path)}})</span>\n <span v-else class=\"ml-2 text-sm text-blue-600\">(user-added - {{getVirtualFieldType(path)}})</span>\n </div>\n </div>\n\n <!-- Virtual Field Content (Collapsible) -->\n <div v-if=\"!isVirtualFieldCollapsed(path.name)\" class=\"p-3\">\n <div v-if=\"path.value == null\" class=\"text-sky-800\">\n {{'' + path.value}}\n </div>\n <div v-else>\n {{path.value}}\n </div>\n </div>\n </div>\n\n <!-- No Results Message -->\n <div v-if=\"searchQuery.trim() && !hasSearchMatches\" class=\"text-center py-8 text-gray-500\">\n <svg class=\"w-12 h-12 mx-auto mb-4 text-gray-300\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.29-1.009-5.824-2.709M15 6.291A7.962 7.962 0 0012 5c-2.34 0-4.29 1.009-5.824 2.709\"></path>\n </svg>\n <p>No fields found matching \"{{searchQuery}}\"</p>\n </div>\n </div>\n\n <!-- JSON View -->\n <div v-if=\"viewMode === 'json'\" class=\"json-view\">\n <div class=\"border border-gray-300 rounded-lg bg-gray-50 p-4 overflow-auto\">\n <pre class=\"text-sm font-mono text-gray-800 whitespace-pre\">{{formattedJson}}</pre>\n </div>\n </div>\n\n <!-- Add Field Modal -->\n <modal v-if=\"showAddFieldModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"closeAddFieldModal\">&times;</div>\n <div class=\"add-field-modal\">\n <div class=\"mb-6\">\n <h2 class=\"text-xl font-semibold text-gray-900 mb-2\">Add New Field</h2>\n <p class=\"text-sm text-gray-600\">Create a new field for this document</p>\n </div>\n\n <form @submit.prevent=\"handleAddFieldSubmit\" class=\"space-y-4\">\n <!-- Field Name -->\n <div>\n <label for=\"fieldName\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Field Name *\n </label>\n <input\n id=\"fieldName\"\n v-model=\"fieldData.name\"\n type=\"text\"\n required\n placeholder=\"Enter field name...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.name }\"\n />\n <p v-if=\"fieldErrors.name\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.name}}</p>\n <p v-if=\"fieldData.name && getTransformedFieldName() !== fieldData.name.trim()\" class=\"mt-1 text-sm text-blue-600\">\n Field name will be: <code class=\"bg-blue-50 px-1 py-0.5 rounded text-xs\">{{getTransformedFieldName()}}</code>\n </p>\n </div>\n\n <!-- Field Type -->\n <div>\n <label for=\"fieldType\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Field Type *\n </label>\n <select\n id=\"fieldType\"\n v-model=\"fieldData.type\"\n required\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.type }\"\n >\n <option value=\"\">Select field type...</option>\n <option v-for=\"type in allFieldTypes\" :key=\"type\" :value=\"type\">\n {{type}}\n </option>\n </select>\n <p v-if=\"fieldErrors.type\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.type}}</p>\n </div>\n\n <!-- Field Value -->\n <div>\n <label for=\"fieldValue\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Initial Value\n </label>\n\n <!-- Date picker for Date type -->\n <input\n v-if=\"shouldUseDatePicker\"\n v-model=\"fieldData.value\"\n type=\"date\"\n id=\"fieldValue\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n />\n\n <!-- Simple input for basic types -->\n <input\n v-else-if=\"!shouldUseCodeMirror\"\n v-model=\"fieldData.value\"\n type=\"text\"\n id=\"fieldValue\"\n placeholder=\"Enter initial value (optional)...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n />\n\n <!-- CodeMirror textarea for complex types -->\n <textarea\n v-else\n ref=\"fieldValueEditor\"\n id=\"fieldValue\"\n rows=\"3\"\n placeholder=\"Enter initial value (optional)...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n ></textarea>\n\n <p v-if=\"fieldErrors.value\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.value}}</p>\n <p class=\"mt-1 text-xs text-gray-500\">\n <span v-if=\"shouldUseDatePicker\">Select a date or leave empty for null/undefined values.</span>\n <span v-else-if=\"shouldUseCodeMirror\">Leave empty for null/undefined values. Use valid JSON format.</span>\n <span v-else>Leave empty for null/undefined values.</span>\n </p>\n </div>\n\n\n <!-- Action Buttons -->\n <div class=\"flex justify-end gap-3 pt-4 border-t border-gray-200\">\n <button\n type=\"button\"\n @click=\"closeAddFieldModal\"\n class=\"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\"\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n :disabled=\"isSubmittingField\"\n class=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 border border-transparent rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <span v-if=\"isSubmittingField\">Adding...</span>\n <span v-else>Add Field</span>\n </button>\n </div>\n </form>\n </div>\n </template>\n </modal>\n</div>\n";
2526
+ module.exports = "<div class=\"document-details\">\n <!-- View Toggle and Search/Filter Bar -->\n <div class=\"sticky top-[60px] z-40 bg-white p-4 border-b border-gray-200 shadow-sm\">\n\n <!-- Search and Filter Bar (only show in fields view) -->\n <div v-if=\"viewMode === 'fields'\" class=\"flex md:gap-3\">\n <!-- Search Bar -->\n <div class=\"relative flex-1\">\n <input\n ref=\"searchInput\"\n v-model=\"searchQuery\"\n type=\"text\"\n placeholder=\"Search fields...\"\n class=\"w-full px-4 py-2 pl-10 pr-4 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n />\n <div class=\"absolute inset-y-0 left-0 flex items-center pl-3\">\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z\"></path>\n </svg>\n </div>\n </div>\n\n <!-- Data Type Filter -->\n <div class=\"relative hidden md:block\">\n <select\n v-model=\"selectedType\"\n class=\"px-4 py-2 pr-8 text-sm border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent bg-white min-w-[140px] appearance-none\"\n >\n <option value=\"\">All Types</option>\n <option v-for=\"type in availableTypes\" :key=\"type\" :value=\"type\">\n {{type}}\n </option>\n </select>\n <div class=\"absolute inset-y-0 right-0 flex items-center pr-3 pointer-events-none\">\n <svg class=\"w-4 h-4 text-gray-400\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n </div>\n </div>\n\n <!-- Add Field Button -->\n <button\n @click=\"openAddFieldModal\"\n class=\"hidden md:flex px-4 py-2 text-sm font-medium text-white bg-green-600 hover:bg-green-700 rounded-lg focus:outline-none focus:ring-2 focus:ring-green-500 focus:ring-offset-2 items-center gap-2\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 4v16m8-8H4\"></path>\n </svg> Add Field\n </button>\n </div>\n </div>\n\n <!-- Fields View -->\n <div v-if=\"viewMode === 'fields'\">\n <!-- Matched Schema Paths (shown first when searching) -->\n <div\n v-for=\"path in matchedSchemaPaths\"\n :key=\"path.path || path\"\n class=\"value\"\n >\n <document-property\n :path=\"path\"\n :document=\"document\"\n :schemaPaths=\"schemaPaths\"\n :editting=\"editting\"\n :changes=\"changes\"\n :highlight=\"true\"\n :invalid=\"invalid\"></document-property>\n </div>\n\n <!-- Matched Virtual Fields (shown after matched schema paths when searching) -->\n <div\n v-for=\"path in matchedVirtuals\"\n :key=\"path.name\"\n class=\"border border-gray-200 rounded-lg mb-2 transition-all duration-200 ease-in-out mt-4\"\n >\n <!-- Virtual Field Header (Always Visible) -->\n <div\n @click=\"toggleVirtualField(path.name)\"\n class=\"p-3 bg-amber-100 hover:bg-amber-200 cursor-pointer flex items-center justify-between border-b border-gray-200 transition-colors duration-200 ease-in-out\"\n >\n <div class=\"flex items-center\">\n <svg\n :class=\"isVirtualFieldCollapsed(path.name) ? 'rotate-0' : 'rotate-90'\"\n class=\"w-4 h-4 text-gray-500 mr-2 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n <span class=\"font-medium text-gray-900\">{{path.name}}</span>\n <span v-if=\"path.isVirtual\" class=\"ml-2 text-sm text-purple-600\">(virtual - {{getVirtualFieldType(path)}})</span>\n <span v-else class=\"ml-2 text-sm text-blue-600\">(user-added - {{getVirtualFieldType(path)}})</span>\n </div>\n </div>\n\n <!-- Virtual Field Content (Collapsible) -->\n <div v-if=\"!isVirtualFieldCollapsed(path.name)\" class=\"p-3\">\n <div v-if=\"path.value == null\" class=\"text-sky-800\">\n {{'' + path.value}}\n </div>\n <div v-else>\n {{path.value}}\n </div>\n </div>\n </div>\n\n <!-- Unmatched Schema Paths (shown after matched items when searching, or all when not searching) -->\n <div\n v-for=\"path in unmatchedSchemaPaths\"\n :key=\"path.path || path\"\n class=\"value\"\n >\n <document-property\n :path=\"path\"\n :document=\"document\"\n :schemaPaths=\"schemaPaths\"\n :editting=\"editting\"\n :changes=\"changes\"\n :highlight=\"false\"\n :invalid=\"invalid\"></document-property>\n </div>\n\n <!-- Unmatched Virtual Fields (shown last) -->\n <div\n v-for=\"path in unmatchedVirtuals\"\n :key=\"path.name\"\n class=\"border border-gray-200 rounded-lg mb-2 transition-all duration-200 ease-in-out\"\n >\n <!-- Virtual Field Header (Always Visible) -->\n <div\n @click=\"toggleVirtualField(path.name)\"\n class=\"p-3 bg-gray-50 hover:bg-gray-100 cursor-pointer flex items-center justify-between border-b border-gray-200 transition-colors duration-200 ease-in-out\"\n >\n <div class=\"flex items-center\">\n <svg\n :class=\"isVirtualFieldCollapsed(path.name) ? 'rotate-0' : 'rotate-90'\"\n class=\"w-4 h-4 text-gray-500 mr-2 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n <span class=\"font-medium text-gray-900\">{{path.name}}</span>\n <span v-if=\"path.isVirtual\" class=\"ml-2 text-sm text-purple-600\">(virtual - {{getVirtualFieldType(path)}})</span>\n <span v-else class=\"ml-2 text-sm text-blue-600\">(user-added - {{getVirtualFieldType(path)}})</span>\n </div>\n </div>\n\n <!-- Virtual Field Content (Collapsible) -->\n <div v-if=\"!isVirtualFieldCollapsed(path.name)\" class=\"p-3\">\n <div v-if=\"path.value == null\" class=\"text-sky-800\">\n {{'' + path.value}}\n </div>\n <div v-else>\n {{path.value}}\n </div>\n </div>\n </div>\n\n <!-- No Results Message -->\n <div v-if=\"searchQuery.trim() && !hasSearchMatches\" class=\"text-center py-8 text-gray-500\">\n <svg class=\"w-12 h-12 mx-auto mb-4 text-gray-300\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9.172 16.172a4 4 0 015.656 0M9 12h6m-6-4h6m2 5.291A7.962 7.962 0 0112 15c-2.34 0-4.29-1.009-5.824-2.709M15 6.291A7.962 7.962 0 0012 5c-2.34 0-4.29 1.009-5.824 2.709\"></path>\n </svg>\n <p>No fields found matching \"{{searchQuery}}\"</p>\n </div>\n </div>\n\n <!-- JSON View -->\n <div v-if=\"viewMode === 'json'\" class=\"json-view\">\n <div class=\"border border-gray-300 rounded-lg bg-gray-50 p-4 overflow-auto\">\n <pre class=\"text-sm font-mono text-gray-800 whitespace-pre\">{{formattedJson}}</pre>\n </div>\n </div>\n\n <!-- Add Field Modal -->\n <modal v-if=\"showAddFieldModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"closeAddFieldModal\">&times;</div>\n <div class=\"add-field-modal\">\n <div class=\"mb-6\">\n <h2 class=\"text-xl font-semibold text-gray-900 mb-2\">Add New Field</h2>\n <p class=\"text-sm text-gray-600\">Create a new field for this document</p>\n </div>\n\n <form @submit.prevent=\"handleAddFieldSubmit\" class=\"space-y-4\">\n <!-- Field Name -->\n <div>\n <label for=\"fieldName\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Field Name *\n </label>\n <input\n id=\"fieldName\"\n v-model=\"fieldData.name\"\n type=\"text\"\n required\n placeholder=\"Enter field name...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.name }\"\n />\n <p v-if=\"fieldErrors.name\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.name}}</p>\n <p v-if=\"fieldData.name && getTransformedFieldName() !== fieldData.name.trim()\" class=\"mt-1 text-sm text-blue-600\">\n Field name will be: <code class=\"bg-blue-50 px-1 py-0.5 rounded text-xs\">{{getTransformedFieldName()}}</code>\n </p>\n </div>\n\n <!-- Field Type -->\n <div>\n <label for=\"fieldType\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Field Type *\n </label>\n <select\n id=\"fieldType\"\n v-model=\"fieldData.type\"\n required\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.type }\"\n >\n <option value=\"\">Select field type...</option>\n <option v-for=\"type in allFieldTypes\" :key=\"type\" :value=\"type\">\n {{type}}\n </option>\n </select>\n <p v-if=\"fieldErrors.type\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.type}}</p>\n </div>\n\n <!-- Field Value -->\n <div>\n <label for=\"fieldValue\" class=\"block text-sm font-medium text-gray-700 mb-1\">\n Initial Value\n </label>\n\n <!-- Date picker for Date type -->\n <input\n v-if=\"shouldUseDatePicker\"\n v-model=\"fieldData.value\"\n type=\"date\"\n id=\"fieldValue\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n />\n\n <!-- Simple input for basic types -->\n <input\n v-else-if=\"!shouldUseCodeMirror\"\n v-model=\"fieldData.value\"\n type=\"text\"\n id=\"fieldValue\"\n placeholder=\"Enter initial value (optional)...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n />\n\n <!-- CodeMirror textarea for complex types -->\n <textarea\n v-else\n ref=\"fieldValueEditor\"\n id=\"fieldValue\"\n rows=\"3\"\n placeholder=\"Enter initial value (optional)...\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :class=\"{ 'border-red-500': fieldErrors.value }\"\n ></textarea>\n\n <p v-if=\"fieldErrors.value\" class=\"mt-1 text-sm text-red-600\">{{fieldErrors.value}}</p>\n <p class=\"mt-1 text-xs text-gray-500\">\n <span v-if=\"shouldUseDatePicker\">Select a date or leave empty for null/undefined values.</span>\n <span v-else-if=\"shouldUseCodeMirror\">Leave empty for null/undefined values. Use valid JSON format.</span>\n <span v-else>Leave empty for null/undefined values.</span>\n </p>\n </div>\n\n\n <!-- Action Buttons -->\n <div class=\"flex justify-end gap-3 pt-4 border-t border-gray-200\">\n <button\n type=\"button\"\n @click=\"closeAddFieldModal\"\n class=\"px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2\"\n >\n Cancel\n </button>\n <button\n type=\"submit\"\n :disabled=\"isSubmittingField\"\n class=\"px-4 py-2 text-sm font-medium text-white bg-blue-600 border border-transparent rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n <span v-if=\"isSubmittingField\">Adding...</span>\n <span v-else>Add Field</span>\n </button>\n </div>\n </form>\n </div>\n </template>\n </modal>\n</div>\n";
2328
2527
 
2329
- /***/ }),
2528
+ /***/ },
2330
2529
 
2331
- /***/ "./frontend/src/document-details/document-details.js":
2530
+ /***/ "./frontend/src/document-details/document-details.js"
2332
2531
  /*!***********************************************************!*\
2333
2532
  !*** ./frontend/src/document-details/document-details.js ***!
2334
2533
  \***********************************************************/
2335
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
2534
+ (module, __unused_webpack_exports, __webpack_require__) {
2336
2535
 
2337
2536
  "use strict";
2338
2537
 
@@ -2482,6 +2681,20 @@ module.exports = app => app.component('document-details', {
2482
2681
 
2483
2682
  return matches.concat(nonMatches);
2484
2683
  },
2684
+ matchedSchemaPaths() {
2685
+ if (!this.searchQuery.trim()) {
2686
+ return [];
2687
+ }
2688
+ const query = this.searchQuery.toLowerCase();
2689
+ return this.typeFilteredSchemaPaths.filter(path => path.path.toLowerCase().includes(query));
2690
+ },
2691
+ unmatchedSchemaPaths() {
2692
+ if (!this.searchQuery.trim()) {
2693
+ return this.typeFilteredSchemaPaths;
2694
+ }
2695
+ const query = this.searchQuery.toLowerCase();
2696
+ return this.typeFilteredSchemaPaths.filter(path => !path.path.toLowerCase().includes(query));
2697
+ },
2485
2698
  typeFilteredVirtuals() {
2486
2699
  let virtuals = this.virtuals;
2487
2700
 
@@ -2515,6 +2728,20 @@ module.exports = app => app.component('document-details', {
2515
2728
 
2516
2729
  return matches.concat(nonMatches);
2517
2730
  },
2731
+ matchedVirtuals() {
2732
+ if (!this.searchQuery.trim()) {
2733
+ return [];
2734
+ }
2735
+ const query = this.searchQuery.toLowerCase();
2736
+ return this.typeFilteredVirtuals.filter(virtual => virtual.name.toLowerCase().includes(query));
2737
+ },
2738
+ unmatchedVirtuals() {
2739
+ if (!this.searchQuery.trim()) {
2740
+ return this.typeFilteredVirtuals;
2741
+ }
2742
+ const query = this.searchQuery.toLowerCase();
2743
+ return this.typeFilteredVirtuals.filter(virtual => !virtual.name.toLowerCase().includes(query));
2744
+ },
2518
2745
  schemaSearchMatchSet() {
2519
2746
  if (!this.searchQuery.trim()) {
2520
2747
  return new Set();
@@ -2675,7 +2902,7 @@ module.exports = app => app.component('document-details', {
2675
2902
 
2676
2903
  try {
2677
2904
  const fieldData = {
2678
- name: this.getTransformedFieldName(),
2905
+ name: this.fieldData.name,
2679
2906
  type: this.fieldData.type,
2680
2907
  value: this.parseFieldValue(this.fieldData.value, this.fieldData.type)
2681
2908
  };
@@ -2721,18 +2948,6 @@ module.exports = app => app.component('document-details', {
2721
2948
  this.fieldValueEditor = null;
2722
2949
  }
2723
2950
  },
2724
- toSnakeCase(str) {
2725
- return str
2726
- .trim()
2727
- .replace(/\s+/g, '_') // Replace spaces with underscores
2728
- .replace(/[^a-zA-Z0-9_$]/g, '') // Remove invalid characters
2729
- .replace(/^[0-9]/, '_$&') // Prefix numbers with underscore
2730
- .toLowerCase();
2731
- },
2732
- getTransformedFieldName() {
2733
- if (!this.fieldData.name) return '';
2734
- return this.toSnakeCase(this.fieldData.name.trim());
2735
- },
2736
2951
  getVirtualFieldType(virtual) {
2737
2952
  const value = virtual.value;
2738
2953
  if (value === null || value === undefined) {
@@ -2762,35 +2977,35 @@ module.exports = app => app.component('document-details', {
2762
2977
  });
2763
2978
 
2764
2979
 
2765
- /***/ }),
2980
+ /***/ },
2766
2981
 
2767
- /***/ "./frontend/src/document-details/document-property/document-property.css":
2982
+ /***/ "./frontend/src/document-details/document-property/document-property.css"
2768
2983
  /*!*******************************************************************************!*\
2769
2984
  !*** ./frontend/src/document-details/document-property/document-property.css ***!
2770
2985
  \*******************************************************************************/
2771
- /***/ ((module) => {
2986
+ (module) {
2772
2987
 
2773
2988
  "use strict";
2774
2989
  module.exports = ".document-details {\n width: 100%;\n }\n \n .document-details .value {\n padding-top: 10px;\n padding-bottom: 10px;\n }\n \n .document-details .path-key {\n background-color: #f0f0f0;\n margin-bottom: 0.5em;\n }\n \n .document-details .path-type {\n color: rgba(0,0,0,.36);\n font-size: 0.8em;\n }\n \n .document-details .date-position {\n float: right;\n margin-top: -7px;\n }\n";
2775
2990
 
2776
- /***/ }),
2991
+ /***/ },
2777
2992
 
2778
- /***/ "./frontend/src/document-details/document-property/document-property.html":
2993
+ /***/ "./frontend/src/document-details/document-property/document-property.html"
2779
2994
  /*!********************************************************************************!*\
2780
2995
  !*** ./frontend/src/document-details/document-property/document-property.html ***!
2781
2996
  \********************************************************************************/
2782
- /***/ ((module) => {
2997
+ (module) {
2783
2998
 
2784
2999
  "use strict";
2785
- module.exports = "<div class=\"border border-gray-200 rounded-lg mb-2\">\n <!-- Collapsible Header -->\n <div\n @click=\"toggleCollapse\"\n class=\"p-3 hover:bg-gray-100 cursor-pointer flex items-center justify-between border-b border-gray-200 transition-colors duration-200 ease-in-out\"\n :class=\"{ 'bg-amber-100': highlight, 'bg-gray-50': !highlight }\"\n >\n <div class=\"flex items-center\" >\n <svg\n :class=\"isCollapsed ? 'rotate-0' : 'rotate-90'\"\n class=\"w-4 h-4 text-gray-500 mr-2 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n <span class=\"font-medium text-gray-900\">{{path.path}}</span>\n <span class=\"ml-2 text-sm text-gray-500\">({{(path.instance || 'unknown').toLowerCase()}})</span>\n </div>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 text-sm text-gray-600 hover:text-gray-800 px-2 py-1 rounded-md border border-transparent hover:border-gray-300 bg-white\"\n @click.stop.prevent=\"copyPropertyValue\"\n title=\"Copy value\"\n aria-label=\"Copy property value\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7h8m-8 4h8m-8 4h5m-7-9a2 2 0 012-2h7a2 2 0 012 2v10a2 2 0 01-2 2H8l-4-4V7a2 2 0 012-2z\" />\n </svg>\n {{copyButtonLabel}}\n </button>\n <router-link\n v-if=\"path.ref && getValueForPath(path.path)\"\n :to=\"`/model/${path.ref}/document/${getValueForPath(path.path)}`\"\n class=\"bg-ultramarine-600 hover:bg-ultramarine-500 text-white px-2 py-1 text-sm rounded-md\"\n @click.stop\n >View Document\n </router-link>\n </div>\n </div>\n\n <!-- Collapsible Content -->\n <div v-if=\"!isCollapsed\" class=\"p-3\">\n <!-- Date Type Selector (when editing dates) -->\n <div v-if=\"editting && path.instance === 'Date'\" class=\"mb-3 flex gap-1.5\">\n <div\n @click=\"dateType = 'picker'\"\n :class=\"dateType === 'picker' ? 'bg-teal-600' : ''\"\n class=\"self-stretch px-2 py-1 rounded-sm justify-center items-center gap-1.5 flex cursor-pointer\">\n <div\n :class=\"dateType === 'picker' ? 'text-white' : ''\"\n class=\"text-xs font-medium font-['Lato'] capitalize leading-tight\">\n Date Picker\n </div>\n </div>\n <div\n @click=\"dateType = 'iso'\"\n :class=\"dateType === 'iso' ? 'bg-teal-600' : ''\"\n class=\"self-stretch px-2 py-1 rounded-sm justify-center items-center gap-1.5 flex cursor-pointer\">\n <div\n :class=\"dateType === 'iso' ? 'text-white' : ''\"\n class=\"text-xs font-medium font-['Lato'] capitalize leading-tight\">\n ISO String\n </div>\n </div>\n </div>\n\n <!-- Field Content -->\n <div v-if=\"editting && path.path !== '_id'\">\n <component\n :is=\"getEditComponentForPath(path)\"\n :value=\"getEditValueForPath(path)\"\n :format=\"dateType\"\n v-bind=\"getEditComponentProps(path)\"\n @input=\"changes[path.path] = $event; delete invalid[path.path];\"\n @error=\"invalid[path.path] = $event;\"\n >\n </component>\n </div>\n <div v-else>\n <!-- Show truncated or full value based on needsTruncation and isValueExpanded -->\n <div v-if=\"needsTruncation && !isValueExpanded\" class=\"relative\">\n <div class=\"text-gray-700 whitespace-pre-wrap break-words font-mono text-sm\">{{truncatedString}}</div>\n <button\n @click=\"toggleValueExpansion\"\n class=\"mt-2 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center gap-1 transform transition-all duration-200 ease-in-out hover:translate-x-0.5\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n Show more ({{valueAsString.length}} characters)\n </button>\n </div>\n <div v-else-if=\"needsTruncation && isValueExpanded\" class=\"relative\">\n <component :is=\"getComponentForPath(path)\" :value=\"getValueForPath(path.path)\"></component>\n <button\n @click=\"toggleValueExpansion\"\n class=\"mt-2 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center gap-1 transform transition-all duration-200 ease-in-out hover:translate-x-0.5\"\n >\n <svg class=\"w-4 h-4 rotate-180\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n Show less\n </button>\n </div>\n <div v-else>\n <component :is=\"getComponentForPath(path)\" :value=\"getValueForPath(path.path)\"></component>\n </div>\n </div>\n </div>\n</div>\n";
3000
+ module.exports = "<div class=\"border border-gray-200 rounded-lg mb-2\">\n <!-- Collapsible Header -->\n <div\n @click=\"toggleCollapse\"\n class=\"p-3 cursor-pointer flex items-center justify-between border-b border-gray-200 transition-colors duration-200 ease-in-out\"\n :class=\"{ 'bg-amber-100 hover:bg-amber-200': highlight, 'bg-gray-50 hover:bg-gray-100': !highlight }\"\n >\n <div class=\"flex items-center\" >\n <svg\n :class=\"isCollapsed ? 'rotate-0' : 'rotate-90'\"\n class=\"w-4 h-4 text-gray-500 mr-2 transition-transform duration-200\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 5l7 7-7 7\"></path>\n </svg>\n <span class=\"font-medium text-gray-900\">{{path.path}}</span>\n <span class=\"ml-2 text-sm text-gray-500\">({{(path.instance || 'unknown').toLowerCase()}})</span>\n </div>\n <div class=\"flex items-center gap-2\">\n <button\n type=\"button\"\n class=\"flex items-center gap-1 text-sm text-gray-600 hover:text-gray-800 px-2 py-1 rounded-md border border-transparent hover:border-gray-300 bg-white\"\n @click.stop.prevent=\"copyPropertyValue\"\n title=\"Copy value\"\n aria-label=\"Copy property value\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M8 7h8m-8 4h8m-8 4h5m-7-9a2 2 0 012-2h7a2 2 0 012 2v10a2 2 0 01-2 2H8l-4-4V7a2 2 0 012-2z\" />\n </svg>\n {{copyButtonLabel}}\n </button>\n <router-link\n v-if=\"path.ref && getValueForPath(path.path)\"\n :to=\"`/model/${path.ref}/document/${getValueForPath(path.path)}`\"\n class=\"bg-ultramarine-600 hover:bg-ultramarine-500 text-white px-2 py-1 text-sm rounded-md\"\n @click.stop\n >View Document\n </router-link>\n </div>\n </div>\n\n <!-- Collapsible Content -->\n <div v-if=\"!isCollapsed\" class=\"p-3\">\n <!-- Date Type Selector (when editing dates) -->\n <div v-if=\"editting && path.instance === 'Date'\" class=\"mb-3 flex gap-1.5\">\n <div\n @click=\"dateType = 'picker'\"\n :class=\"dateType === 'picker' ? 'bg-teal-600' : ''\"\n class=\"self-stretch px-2 py-1 rounded-sm justify-center items-center gap-1.5 flex cursor-pointer\">\n <div\n :class=\"dateType === 'picker' ? 'text-white' : ''\"\n class=\"text-xs font-medium font-['Lato'] capitalize leading-tight\">\n Date Picker\n </div>\n </div>\n <div\n @click=\"dateType = 'iso'\"\n :class=\"dateType === 'iso' ? 'bg-teal-600' : ''\"\n class=\"self-stretch px-2 py-1 rounded-sm justify-center items-center gap-1.5 flex cursor-pointer\">\n <div\n :class=\"dateType === 'iso' ? 'text-white' : ''\"\n class=\"text-xs font-medium font-['Lato'] capitalize leading-tight\">\n ISO String\n </div>\n </div>\n </div>\n\n <!-- Field Content -->\n <div v-if=\"editting && path.path !== '_id'\">\n <component\n :is=\"getEditComponentForPath(path)\"\n :value=\"getEditValueForPath(path)\"\n :format=\"dateType\"\n v-bind=\"getEditComponentProps(path)\"\n @input=\"changes[path.path] = $event; delete invalid[path.path];\"\n @error=\"invalid[path.path] = $event;\"\n >\n </component>\n </div>\n <div v-else>\n <!-- Show truncated or full value based on needsTruncation and isValueExpanded -->\n <!-- Special handling for truncated arrays -->\n <div v-if=\"isArray && shouldShowTruncated\" class=\"w-full\">\n <div class=\"mt-2\">\n <div\n v-for=\"(item, index) in truncatedArrayItems\"\n :key=\"index\"\n class=\"mb-1.5 py-2.5 px-3 pl-4 bg-transparent border-l-[3px] border-l-blue-500 rounded-none transition-all duration-200 cursor-pointer relative hover:bg-slate-50 hover:border-l-blue-600\">\n <div class=\"absolute -left-2 top-1/2 -translate-y-1/2 w-5 h-5 bg-blue-500 text-white rounded-full flex items-center justify-center text-[10px] font-semibold font-mono z-10 hover:bg-blue-600\">{{ index }}</div>\n <div v-if=\"arrayUtils.isObjectItem(item)\" class=\"flex flex-col gap-1 mt-1 px-2\">\n <div\n v-for=\"key in arrayUtils.getItemKeys(item)\"\n :key=\"key\"\n class=\"flex items-start gap-2 text-xs font-mono\">\n <span class=\"font-semibold text-gray-600 flex-shrink-0 min-w-[80px]\">{{ key }}:</span>\n <span class=\"text-gray-800 break-words whitespace-pre-wrap flex-1\">{{ arrayUtils.formatItemValue(item, key) }}</span>\n </div>\n </div>\n <div v-else class=\"text-xs py-1.5 px-2 font-mono text-gray-800 break-words whitespace-pre-wrap mt-1\">{{ arrayUtils.formatValue(item) }}</div>\n </div>\n <div class=\"mb-1.5 py-2.5 px-3 pl-4 bg-transparent border-none border-l-[3px] border-l-blue-500 rounded-none transition-all duration-200 cursor-pointer relative opacity-70 hover:opacity-100\">\n <div class=\"text-xs py-1.5 px-2 font-mono text-gray-500 italic break-words whitespace-pre-wrap mt-1\">\n ... and {{ remainingArrayCount }} more item{{ remainingArrayCount !== 1 ? 's' : '' }}\n </div>\n </div>\n </div>\n <button\n @click=\"toggleValueExpansion\"\n class=\"mt-2 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center gap-1 transform transition-all duration-200 ease-in-out hover:translate-x-0.5\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n Show all {{ arrayValue.length }} items\n </button>\n </div>\n <!-- Non-array truncated view -->\n <div v-else-if=\"shouldShowTruncated && !isArray\" class=\"relative\">\n <div class=\"text-gray-700 whitespace-pre-wrap break-words font-mono text-sm\">{{truncatedString}}</div>\n <button\n @click=\"toggleValueExpansion\"\n class=\"mt-2 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center gap-1 transform transition-all duration-200 ease-in-out hover:translate-x-0.5\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n Show more ({{valueAsString.length}} characters)\n </button>\n </div>\n <!-- Expanded view -->\n <div v-else-if=\"needsTruncation && isValueExpanded\" class=\"relative\">\n <component :is=\"getComponentForPath(path)\" :value=\"getValueForPath(path.path)\"></component>\n <button\n @click=\"toggleValueExpansion\"\n class=\"mt-2 text-blue-600 hover:text-blue-800 text-sm font-medium flex items-center gap-1 transform transition-all duration-200 ease-in-out hover:translate-x-0.5\"\n >\n <svg class=\"w-4 h-4 rotate-180\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"></path>\n </svg>\n Show less\n </button>\n </div>\n <!-- Full view (no truncation needed) -->\n <div v-else>\n <component :is=\"getComponentForPath(path)\" :value=\"getValueForPath(path.path)\"></component>\n </div>\n </div>\n </div>\n</div>\n";
2786
3001
 
2787
- /***/ }),
3002
+ /***/ },
2788
3003
 
2789
- /***/ "./frontend/src/document-details/document-property/document-property.js":
3004
+ /***/ "./frontend/src/document-details/document-property/document-property.js"
2790
3005
  /*!******************************************************************************!*\
2791
3006
  !*** ./frontend/src/document-details/document-property/document-property.js ***!
2792
3007
  \******************************************************************************/
2793
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3008
+ (module, __unused_webpack_exports, __webpack_require__) {
2794
3009
 
2795
3010
  "use strict";
2796
3011
  /* global clearTimeout setTimeout */
@@ -2798,6 +3013,7 @@ module.exports = "<div class=\"border border-gray-200 rounded-lg mb-2\">\n <!--
2798
3013
 
2799
3014
 
2800
3015
  const mpath = __webpack_require__(/*! mpath */ "./node_modules/mpath/index.js");
3016
+ const { inspect } = __webpack_require__(/*! node-inspect-extracted */ "./node_modules/node-inspect-extracted/dist/inspect.js");
2801
3017
  const template = __webpack_require__(/*! ./document-property.html */ "./frontend/src/document-details/document-property/document-property.html");
2802
3018
 
2803
3019
  const appendCSS = __webpack_require__(/*! ../../appendCSS */ "./frontend/src/appendCSS.js");
@@ -2833,10 +3049,32 @@ module.exports = app => app.component('document-property', {
2833
3049
  }
2834
3050
  return String(value);
2835
3051
  },
3052
+ _arrayValueData() {
3053
+ const value = this.getValueForPath(this.path.path);
3054
+ return {
3055
+ value: Array.isArray(value) ? value : [],
3056
+ isArray: Array.isArray(value)
3057
+ };
3058
+ },
3059
+ isArray() {
3060
+ return this._arrayValueData.isArray;
3061
+ },
3062
+ arrayValue() {
3063
+ return this._arrayValueData.value;
3064
+ },
2836
3065
  needsTruncation() {
2837
- // Truncate if value is longer than 200 characters
3066
+ // For arrays, check if it has more than 3 items (regardless of expansion state)
3067
+ if (this.isArray) {
3068
+ const arr = this.arrayValue;
3069
+ return arr && arr.length > 3;
3070
+ }
3071
+ // For other types, truncate if value is longer than 200 characters
2838
3072
  return this.valueAsString.length > 200;
2839
3073
  },
3074
+ shouldShowTruncated() {
3075
+ // For other types, show truncated if needs truncation and not expanded
3076
+ return this.needsTruncation && !this.isValueExpanded;
3077
+ },
2840
3078
  displayValue() {
2841
3079
  if (!this.needsTruncation || this.isValueExpanded) {
2842
3080
  return this.getValueForPath(this.path.path);
@@ -2846,9 +3084,24 @@ module.exports = app => app.component('document-property', {
2846
3084
  },
2847
3085
  truncatedString() {
2848
3086
  if (this.needsTruncation && !this.isValueExpanded) {
2849
- return this.valueAsString.substring(0, 200) + '...';
3087
+ // Arrays are handled in template, so this is for non-arrays
3088
+ if (!this.isArray) {
3089
+ return this.valueAsString.substring(0, 200) + '...';
3090
+ }
2850
3091
  }
2851
3092
  return this.valueAsString;
3093
+ },
3094
+ truncatedArrayItems() {
3095
+ if (this.isArray && this.needsTruncation && !this.isValueExpanded) {
3096
+ return this.arrayValue.slice(0, 2);
3097
+ }
3098
+ return [];
3099
+ },
3100
+ remainingArrayCount() {
3101
+ if (this.isArray && this.needsTruncation && !this.isValueExpanded) {
3102
+ return this.arrayValue.length - 2;
3103
+ }
3104
+ return 0;
2852
3105
  }
2853
3106
  },
2854
3107
  methods: {
@@ -2874,6 +3127,9 @@ module.exports = app => app.component('document-property', {
2874
3127
  if (path.instance === 'Embedded') {
2875
3128
  return 'edit-subdocument';
2876
3129
  }
3130
+ if (path.instance === 'Mixed') {
3131
+ return 'edit-subdocument';
3132
+ }
2877
3133
  if (path.instance === 'Boolean') {
2878
3134
  return 'edit-boolean';
2879
3135
  }
@@ -2886,6 +3142,10 @@ module.exports = app => app.component('document-property', {
2886
3142
  props.enumValues = path.enum;
2887
3143
  }
2888
3144
  }
3145
+ if (path.instance === 'Array') {
3146
+ props.path = path;
3147
+ props.schemaPaths = this.schemaPaths;
3148
+ }
2889
3149
  return props;
2890
3150
  },
2891
3151
  getValueForPath(path) {
@@ -2961,24 +3221,24 @@ module.exports = app => app.component('document-property', {
2961
3221
  });
2962
3222
 
2963
3223
 
2964
- /***/ }),
3224
+ /***/ },
2965
3225
 
2966
- /***/ "./frontend/src/document/confirm-changes/confirm-changes.html":
3226
+ /***/ "./frontend/src/document/confirm-changes/confirm-changes.html"
2967
3227
  /*!********************************************************************!*\
2968
3228
  !*** ./frontend/src/document/confirm-changes/confirm-changes.html ***!
2969
3229
  \********************************************************************/
2970
- /***/ ((module) => {
3230
+ (module) {
2971
3231
 
2972
3232
  "use strict";
2973
3233
  module.exports = "<div>\n <h2>\n Are you sure you want to save the following changes?\n </h2>\n <pre class=\"max-h-[50vh] overflow-auto\"><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n <div class=\"flex gap-2 mt-2\">\n <async-button\n class=\"rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n @click=\"startSave\">\n Confirm\n </async-button>\n <button \n class=\"rounded-md bg-gray-200 px-2.5 py-1.5 text-sm font-semibold text-black shadow-sm hover:bg-gray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300\"\n @click=\"closeConfirm\">\n Cancel\n </button>\n </div>\n</div>";
2974
3234
 
2975
- /***/ }),
3235
+ /***/ },
2976
3236
 
2977
- /***/ "./frontend/src/document/confirm-changes/confirm-changes.js":
3237
+ /***/ "./frontend/src/document/confirm-changes/confirm-changes.js"
2978
3238
  /*!******************************************************************!*\
2979
3239
  !*** ./frontend/src/document/confirm-changes/confirm-changes.js ***!
2980
3240
  \******************************************************************/
2981
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3241
+ (module, __unused_webpack_exports, __webpack_require__) {
2982
3242
 
2983
3243
  "use strict";
2984
3244
 
@@ -3006,24 +3266,24 @@ module.exports = app => app.component('confirm-changes', {
3006
3266
  }
3007
3267
  });
3008
3268
 
3009
- /***/ }),
3269
+ /***/ },
3010
3270
 
3011
- /***/ "./frontend/src/document/confirm-delete/confirm-delete.html":
3271
+ /***/ "./frontend/src/document/confirm-delete/confirm-delete.html"
3012
3272
  /*!******************************************************************!*\
3013
3273
  !*** ./frontend/src/document/confirm-delete/confirm-delete.html ***!
3014
3274
  \******************************************************************/
3015
- /***/ ((module) => {
3275
+ (module) {
3016
3276
 
3017
3277
  "use strict";
3018
3278
  module.exports = "<div>\n <h2>\n Are you sure you want to delete the following document?\n </h2>\n <pre class=\"max-h-[50vh] overflow-auto\"><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n <div class=\"flex gap-2 mt-2\">\n <async-button\n class=\"rounded-md bg-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n @click=\"startDelete\">\n Confirm\n </async-button>\n <button\n class=\"rounded-md bg-gray-200 px-2.5 py-1.5 text-sm font-semibold text-black shadow-sm hover:bg-gray-300 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-300\"\n @click=\"closeDelete\">\n Cancel\n </button>\n </div>\n</div>\n";
3019
3279
 
3020
- /***/ }),
3280
+ /***/ },
3021
3281
 
3022
- /***/ "./frontend/src/document/confirm-delete/confirm-delete.js":
3282
+ /***/ "./frontend/src/document/confirm-delete/confirm-delete.js"
3023
3283
  /*!****************************************************************!*\
3024
3284
  !*** ./frontend/src/document/confirm-delete/confirm-delete.js ***!
3025
3285
  \****************************************************************/
3026
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3286
+ (module, __unused_webpack_exports, __webpack_require__) {
3027
3287
 
3028
3288
  "use strict";
3029
3289
 
@@ -3051,35 +3311,35 @@ module.exports = app => app.component('confirm-delete', {
3051
3311
  }
3052
3312
  });
3053
3313
 
3054
- /***/ }),
3314
+ /***/ },
3055
3315
 
3056
- /***/ "./frontend/src/document/document.css":
3316
+ /***/ "./frontend/src/document/document.css"
3057
3317
  /*!********************************************!*\
3058
3318
  !*** ./frontend/src/document/document.css ***!
3059
3319
  \********************************************/
3060
- /***/ ((module) => {
3320
+ (module) {
3061
3321
 
3062
3322
  "use strict";
3063
3323
  module.exports = ".document {\n max-width: 1200px;\n margin-left: auto;\n margin-right: auto;\n padding-top: 25px;\n}\n\n.document .document-menu {\n display: flex;\n position: sticky;\n top: 0;\n z-index: 100;\n background-color: white;\n border-radius: 5px;\n padding: 15px 15px;\n margin: -15px 0 15px 0;\n box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n}\n\n.document .document-menu .left {\n flex-grow: 1;\n}\n\n.document .document-menu .right {\n flex-grow: 1;\n text-align: right;\n}\n\n.document .document-menu .right button:not(:last-child) {\n margin-right: 0.5em;\n}\n\n.document button img {\n height: 1em;\n}";
3064
3324
 
3065
- /***/ }),
3325
+ /***/ },
3066
3326
 
3067
- /***/ "./frontend/src/document/document.html":
3327
+ /***/ "./frontend/src/document/document.html"
3068
3328
  /*!*********************************************!*\
3069
3329
  !*** ./frontend/src/document/document.html ***!
3070
3330
  \*********************************************/
3071
- /***/ ((module) => {
3331
+ (module) {
3072
3332
 
3073
3333
  "use strict";
3074
3334
  module.exports = "<div class=\"document px-1 md:px-0\">\n <div class=\"flex justify-between sticky top-0 z-50 bg-white p-4 border-b border-gray-200 shadow-sm\">\n <div class=\"flex\">\n <button\n @click=\"goBack\"\n class=\"mr-2 rounded-md bg-gray-400 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-slate-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-600\">\n &lsaquo; Back\n </button>\n <button\n @click=\"viewMode = 'fields'\"\n :class=\"viewMode === 'fields'\n ? 'bg-blue-600 text-white z-10'\n : 'bg-gray-200 text-gray-700 hover:bg-gray-300'\"\n class=\"px-4 py-2 text-sm font-medium focus:outline-none focus:ring-2 focus:ring-blue-500 flex items-center gap-2 border border-gray-300 border-r-0 rounded-l-lg rounded-r-none\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M4 6h16M4 10h16M4 14h16M4 18h16\"></path>\n </svg>\n Fields\n </button>\n <button\n @click=\"viewMode = 'json'\"\n :class=\"viewMode === 'json'\n ? 'bg-blue-600 text-white z-10'\n : 'bg-gray-200 text-gray-700 hover:bg-gray-300'\"\n class=\"px-4 py-2 text-sm font-medium focus:outline-none focus:ring-2 focus:ring-blue-500 flex items-center gap-2 border border-gray-300 rounded-r-lg rounded-l-none\"\n >\n <svg class=\"w-4 h-4\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4\"></path>\n </svg>\n JSON\n </button>\n </div>\n\n <div class=\"gap-2 hidden md:flex\">\n <button\n v-if=\"!editting\"\n @click=\"editting = true\"\n :disabled=\"!canEdit\"\n :class=\"{'cursor-not-allowed opacity-50': !canEdit}\"\n type=\"button\"\n class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">\n <img src=\"images/edit.svg\" class=\"inline\" /> Edit\n </button>\n <button\n v-if=\"editting\"\n @click=\"editting = false\"\n type=\"button\"\n class=\"rounded-md bg-slate-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-slate-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-600\">\n &times; Cancel\n </button>\n <button\n v-if=\"editting\"\n :disabled=\"!canManipulate\"\n :class=\"{'cursor-not-allowed opacity-50': !canManipulate}\"\n @click=\"shouldShowConfirmModal=true;\"\n type=\"button\"\n class=\"rounded-md bg-forest-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\">\n <img src=\"images/save.svg\" class=\"inline\" /> Save\n </button>\n <button\n @click=\"shouldShowDeleteModal=true;\"\n :disabled=\"!canManipulate\"\n :class=\"{'cursor-not-allowed opacity-50': !canManipulate}\"\n type=\"button\"\n class=\"rounded-md bg-valencia-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">\n <img src=\"images/delete.svg\" class=\"inline\" /> Delete\n </button>\n <button\n @click=\"shouldShowCloneModal=true;\"\n :disabled=\"!canManipulate\"\n :class=\"{'cursor-not-allowed opacity-50': !canManipulate}\"\n type=\"button\"\n class=\"rounded-md bg-pink-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">\n <img src=\"images/duplicate.svg\" class=\"inline\" /> Clone\n </button>\n </div>\n <div class=\"md:hidden flex items-center\">\n <div class=\"relative\">\n <button\n @click=\"mobileMenuOpen = !mobileMenuOpen\"\n type=\"button\"\n class=\"inline-flex items-center justify-center rounded-md bg-gray-200 px-3 py-2 text-sm font-medium text-gray-700 hover:bg-gray-300 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\"\n aria-expanded=\"mobileMenuOpen\"\n aria-label=\"Open menu\"\n >\n <svg class=\"w-5 h-5\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\"\n d=\"M4 6h16M4 12h16M4 18h16\"></path>\n </svg>\n </button>\n <div\n v-show=\"mobileMenuOpen\"\n @click.away=\"mobileMenuOpen = false\"\n class=\"origin-top-right absolute right-0 mt-2 w-52 rounded-md shadow-lg bg-white ring-1 ring-black ring-opacity-5 z-50\"\n >\n <div class=\"py-1 flex flex-col\">\n <button\n v-if=\"!editting\"\n @click=\"editting = true; mobileMenuOpen = false\"\n :disabled=\"!canEdit\"\n :class=\"['flex items-center px-4 py-2 text-sm text-gray-700', !canEdit ? 'cursor-not-allowed opacity-50' : 'hover:bg-ultramarine-100']\"\n type=\"button\"\n >\n <img src=\"images/edit.svg\" class=\"inline mr-2\" /> Edit\n </button>\n <button\n v-if=\"editting\"\n @click=\"editting = false; mobileMenuOpen = false\"\n type=\"button\"\n class=\"flex items-center px-4 py-2 text-sm text-gray-700 hover:bg-slate-100\"\n >\n &times; Cancel\n </button>\n <button\n v-if=\"editting\"\n :disabled=\"!canManipulate\"\n :class=\"['flex items-center px-4 py-2 text-sm text-gray-700', !canManipulate ? 'cursor-not-allowed opacity-50' : 'hover:bg-green-100']\"\n @click=\"shouldShowConfirmModal=true; mobileMenuOpen = false\"\n type=\"button\"\n >\n <img src=\"images/save.svg\" class=\"inline mr-2\" /> Save\n </button>\n <button\n @click=\"shouldShowDeleteModal=true; mobileMenuOpen = false\"\n :disabled=\"!canManipulate\"\n :class=\"['flex items-center px-4 py-2 text-sm text-gray-700', !canManipulate ? 'cursor-not-allowed opacity-50' : 'hover:bg-red-100']\"\n type=\"button\"\n >\n <img src=\"images/delete.svg\" class=\"inline mr-2\" /> Delete\n </button>\n <button\n @click=\"shouldShowCloneModal=true; mobileMenuOpen = false\"\n :disabled=\"!canManipulate\"\n :class=\"['flex items-center px-4 py-2 text-sm text-gray-700', !canManipulate ? 'cursor-not-allowed opacity-50' : 'hover:bg-pink-100']\"\n type=\"button\"\n >\n <img src=\"images/duplicate.svg\" class=\"inline mr-2\" /> Clone\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n <div v-if=\"status === 'loaded'\">\n <document-details\n :document=\"document\"\n :schemaPaths=\"schemaPaths\"\n :virtualPaths=\"virtualPaths\"\n :editting=\"editting\"\n :changes=\"changes\"\n :invalid=\"invalid\"\n :viewMode=\"viewMode\"\n @add-field=\"addField\"\n @view-mode-change=\"updateViewMode\"></document-details>\n <modal v-if=\"shouldShowConfirmModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowConfirmModal = false;\">&times;</div>\n <confirm-changes @close=\"shouldShowConfirmModal = false;\" @save=\"save\" :value=\"changes\"></confirm-changes>\n </template>\n </modal>\n <modal v-if=\"shouldShowDeleteModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowDeleteModal = false;\">&times;</div>\n <confirm-delete @close=\"shouldShowDeleteModal = false;\" @remove=\"remove\" :value=\"document\"></confirm-delete>\n </template>\n </modal>\n <modal v-if=\"shouldShowCloneModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowCloneModal = false;\">&times;</div>\n <clone-document :currentModel=\"model\" :doc=\"document\" :schemaPaths=\"schemaPaths\" @close=\"showClonedDocument\"></clone-document>\n </template>\n </modal>\n </div>\n</div>\n";
3075
3335
 
3076
- /***/ }),
3336
+ /***/ },
3077
3337
 
3078
- /***/ "./frontend/src/document/document.js":
3338
+ /***/ "./frontend/src/document/document.js"
3079
3339
  /*!*******************************************!*\
3080
3340
  !*** ./frontend/src/document/document.js ***!
3081
3341
  \*******************************************/
3082
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3342
+ (module, __unused_webpack_exports, __webpack_require__) {
3083
3343
 
3084
3344
  "use strict";
3085
3345
 
@@ -3087,7 +3347,7 @@ module.exports = "<div class=\"document px-1 md:px-0\">\n <div class=\"flex jus
3087
3347
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
3088
3348
  const mpath = __webpack_require__(/*! mpath */ "./node_modules/mpath/index.js");
3089
3349
  const template = __webpack_require__(/*! ./document.html */ "./frontend/src/document/document.html");
3090
- const vanillatoast = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
3350
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
3091
3351
 
3092
3352
  const appendCSS = __webpack_require__(/*! ../appendCSS */ "./frontend/src/appendCSS.js");
3093
3353
 
@@ -3116,20 +3376,24 @@ module.exports = app => app.component('document', {
3116
3376
  window.pageState = this;
3117
3377
  // Store query parameters from the route (preserved from models page)
3118
3378
  this.previousQuery = Object.assign({}, this.$route.query);
3119
- const { doc, schemaPaths, virtualPaths } = await api.Model.getDocument({ model: this.model, documentId: this.documentId });
3120
- window.doc = doc;
3121
- this.document = doc;
3122
- this.schemaPaths = Object.keys(schemaPaths).sort((k1, k2) => {
3123
- if (k1 === '_id' && k2 !== '_id') {
3124
- return -1;
3125
- }
3126
- if (k1 !== '_id' && k2 === '_id') {
3127
- return 1;
3128
- }
3129
- return 0;
3130
- }).map(key => schemaPaths[key]);
3131
- this.virtualPaths = virtualPaths || [];
3132
- this.status = 'loaded';
3379
+ try {
3380
+ const { doc, schemaPaths, virtualPaths } = await api.Model.getDocument({ model: this.model, documentId: this.documentId });
3381
+ window.doc = doc;
3382
+ this.document = doc;
3383
+ this.schemaPaths = Object.keys(schemaPaths).sort((k1, k2) => {
3384
+ if (k1 === '_id' && k2 !== '_id') {
3385
+ return -1;
3386
+ }
3387
+ if (k1 !== '_id' && k2 === '_id') {
3388
+ return 1;
3389
+ }
3390
+ return 0;
3391
+ }).map(key => schemaPaths[key]);
3392
+ this.virtualPaths = virtualPaths || [];
3393
+ this.status = 'loaded';
3394
+ } finally {
3395
+ this.status = 'loaded';
3396
+ }
3133
3397
  },
3134
3398
  computed: {
3135
3399
  canManipulate() {
@@ -3163,6 +3427,13 @@ module.exports = app => app.component('document', {
3163
3427
  this.changes = {};
3164
3428
  this.editting = false;
3165
3429
  this.shouldShowConfirmModal = false;
3430
+ vanillatoasts.create({
3431
+ title: 'Document saved!',
3432
+ type: 'success',
3433
+ timeout: 3000,
3434
+ icon: 'images/success.png',
3435
+ positionClass: 'bottomRight'
3436
+ });
3166
3437
  },
3167
3438
  async remove() {
3168
3439
  const { doc } = await api.Model.deleteDocument({
@@ -3172,10 +3443,11 @@ module.exports = app => app.component('document', {
3172
3443
  if (doc.acknowledged) {
3173
3444
  this.editting = false;
3174
3445
  this.document = {};
3175
- vanillatoast.create({
3176
- title: 'Document Deleted!',
3446
+ vanillatoasts.create({
3447
+ title: 'Document deleted!',
3177
3448
  type: 'success',
3178
3449
  timeout: 3000,
3450
+ icon: 'images/success.png',
3179
3451
  positionClass: 'bottomRight'
3180
3452
  });
3181
3453
  this.$router.push({
@@ -3196,12 +3468,12 @@ module.exports = app => app.component('document', {
3196
3468
  });
3197
3469
  this.document = doc;
3198
3470
 
3199
- // Show success message
3200
- vanillatoast.create({
3201
- title: 'Field Added!',
3471
+ vanillatoasts.create({
3472
+ title: 'Field added!',
3202
3473
  text: `Field "${fieldData.name}" has been added to the document`,
3203
3474
  type: 'success',
3204
3475
  timeout: 3000,
3476
+ icon: 'images/success.png',
3205
3477
  positionClass: 'bottomRight'
3206
3478
  });
3207
3479
  },
@@ -3224,35 +3496,24 @@ module.exports = app => app.component('document', {
3224
3496
  });
3225
3497
 
3226
3498
 
3227
- /***/ }),
3228
-
3229
- /***/ "./frontend/src/edit-array/edit-array.css":
3230
- /*!************************************************!*\
3231
- !*** ./frontend/src/edit-array/edit-array.css ***!
3232
- \************************************************/
3233
- /***/ ((module) => {
3499
+ /***/ },
3234
3500
 
3235
- "use strict";
3236
- module.exports = ".edit-array button {\n margin-top: 0.5em;\n}";
3237
-
3238
- /***/ }),
3239
-
3240
- /***/ "./frontend/src/edit-array/edit-array.html":
3501
+ /***/ "./frontend/src/edit-array/edit-array.html"
3241
3502
  /*!*************************************************!*\
3242
3503
  !*** ./frontend/src/edit-array/edit-array.html ***!
3243
3504
  \*************************************************/
3244
- /***/ ((module) => {
3505
+ (module) {
3245
3506
 
3246
3507
  "use strict";
3247
- module.exports = "<div class=\"edit-array\">\n <textarea\n ref=\"arrayEditor\"\n class=\"w-full border border-gray-300 p-1 h-[300px]\"></textarea>\n</div>";
3508
+ module.exports = "<div class=\"w-full\">\n <!-- CodeMirror editor for the entire array -->\n <textarea\n ref=\"arrayEditor\"\n class=\"w-full border border-gray-300 p-2 font-mono\"\n :style=\"{ minHeight: '300px' }\">\n </textarea>\n</div>";
3248
3509
 
3249
- /***/ }),
3510
+ /***/ },
3250
3511
 
3251
- /***/ "./frontend/src/edit-array/edit-array.js":
3512
+ /***/ "./frontend/src/edit-array/edit-array.js"
3252
3513
  /*!***********************************************!*\
3253
3514
  !*** ./frontend/src/edit-array/edit-array.js ***!
3254
3515
  \***********************************************/
3255
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3516
+ (module, __unused_webpack_exports, __webpack_require__) {
3256
3517
 
3257
3518
  "use strict";
3258
3519
 
@@ -3267,67 +3528,123 @@ const ObjectId = new Proxy(BSON.ObjectId, {
3267
3528
  }
3268
3529
  });
3269
3530
 
3270
- const appendCSS = __webpack_require__(/*! ../appendCSS */ "./frontend/src/appendCSS.js");
3271
- appendCSS(__webpack_require__(/*! ./edit-array.css */ "./frontend/src/edit-array/edit-array.css"));
3272
3531
 
3273
3532
  module.exports = app => app.component('edit-array', {
3274
3533
  template: template,
3275
3534
  props: ['value'],
3276
- data: () => ({ currentValue: -1 }),
3277
- mounted() {
3278
- this.currentValue = this.value == null
3279
- ? '' + this.value
3280
- : JSON.stringify(this.value, null, ' ').trim();
3281
- this.$refs.arrayEditor.value = this.currentValue;
3282
- this.editor = CodeMirror.fromTextArea(this.$refs.arrayEditor, {
3283
- mode: 'javascript',
3284
- lineNumbers: true
3285
- });
3286
- this.editor.on('change', ev => {
3287
- this.currentValue = this.editor.getValue();
3288
- });
3535
+ data() {
3536
+ return {
3537
+ arrayValue: [],
3538
+ arrayEditor: null
3539
+ };
3289
3540
  },
3290
- watch: {
3291
- currentValue(newValue, oldValue) {
3292
- // Hacky way of skipping initial trigger because `immediate: false` doesn't work in Vue 3
3293
- if (oldValue === -1) {
3541
+ methods: {
3542
+ initializeArray() {
3543
+ if (this.value == null) {
3544
+ this.arrayValue = [];
3545
+ } else if (Array.isArray(this.value)) {
3546
+ this.arrayValue = JSON.parse(JSON.stringify(this.value));
3547
+ } else {
3548
+ this.arrayValue = [];
3549
+ }
3550
+
3551
+ // Update CodeMirror editor if it exists
3552
+ this.$nextTick(() => {
3553
+ if (this.arrayEditor) {
3554
+ const arrayStr = JSON.stringify(this.arrayValue, null, 2);
3555
+ this.arrayEditor.setValue(arrayStr);
3556
+ }
3557
+ });
3558
+ },
3559
+ initializeArrayEditor() {
3560
+ this.$nextTick(() => {
3561
+ const textareaRef = this.$refs.arrayEditor;
3562
+ const textarea = Array.isArray(textareaRef) ? textareaRef[0] : textareaRef;
3563
+ if (textarea && !this.arrayEditor) {
3564
+ const arrayStr = JSON.stringify(this.arrayValue, null, 2);
3565
+ textarea.value = arrayStr;
3566
+ this.arrayEditor = CodeMirror.fromTextArea(textarea, {
3567
+ mode: 'javascript',
3568
+ lineNumbers: true
3569
+ });
3570
+ this.arrayEditor.on('change', () => {
3571
+ this.updateArrayFromEditor();
3572
+ });
3573
+ }
3574
+ });
3575
+ },
3576
+ updateArrayFromEditor() {
3577
+ if (!this.arrayEditor) {
3294
3578
  return;
3295
3579
  }
3296
3580
  try {
3297
- const array = eval(`(${this.currentValue})`);
3298
- this.$emit('input', array);
3581
+ const value = this.arrayEditor.getValue();
3582
+ if (value.trim() === '') {
3583
+ this.arrayValue = [];
3584
+ } else {
3585
+ this.arrayValue = JSON.parse(value);
3586
+ }
3587
+ this.emitUpdate();
3588
+ } catch (err) {
3589
+ // Invalid JSON, don't update
3590
+ }
3591
+ },
3592
+ emitUpdate() {
3593
+ try {
3594
+ this.$emit('input', this.arrayValue);
3299
3595
  } catch (err) {
3300
3596
  this.$emit('error', err);
3301
3597
  }
3302
3598
  }
3303
3599
  },
3600
+ mounted() {
3601
+ this.initializeArray();
3602
+ this.initializeArrayEditor();
3603
+ },
3304
3604
  beforeDestroy() {
3305
- if (this.editor) {
3306
- this.editor.toTextArea();
3605
+ if (this.arrayEditor) {
3606
+ this.arrayEditor.toTextArea();
3607
+ }
3608
+ },
3609
+ watch: {
3610
+ value: {
3611
+ handler(newValue, oldValue) {
3612
+ // Initialize array when value prop changes
3613
+ this.initializeArray();
3614
+ // Update array editor if it exists
3615
+ if (this.arrayEditor) {
3616
+ this.$nextTick(() => {
3617
+ const arrayStr = JSON.stringify(this.arrayValue, null, 2);
3618
+ this.arrayEditor.setValue(arrayStr);
3619
+ });
3620
+ }
3621
+ },
3622
+ deep: true,
3623
+ immediate: true
3307
3624
  }
3308
3625
  },
3309
3626
  emits: ['input', 'error']
3310
3627
  });
3311
3628
 
3312
3629
 
3313
- /***/ }),
3630
+ /***/ },
3314
3631
 
3315
- /***/ "./frontend/src/edit-boolean/edit-boolean.html":
3632
+ /***/ "./frontend/src/edit-boolean/edit-boolean.html"
3316
3633
  /*!*****************************************************!*\
3317
3634
  !*** ./frontend/src/edit-boolean/edit-boolean.html ***!
3318
3635
  \*****************************************************/
3319
- /***/ ((module) => {
3636
+ (module) {
3320
3637
 
3321
3638
  "use strict";
3322
3639
  module.exports = "<div class=\"edit-boolean\">\n <div class=\"flex flex-wrap gap-2\">\n <label class=\"flex items-center gap-2 px-3 py-2 border rounded cursor-pointer hover:bg-gray-50\" \n :class=\"selectedValue === true ? 'bg-blue-100 border-blue-300 text-blue-800' : 'border-gray-300 text-gray-700'\">\n <input\n type=\"radio\"\n :checked=\"selectedValue === true\"\n @change=\"selectValue(true)\"\n class=\"w-4 h-4 text-blue-600 border-gray-300 focus:ring-blue-500\"\n />\n <span class=\"text-sm font-medium\">true</span>\n </label>\n \n <label class=\"flex items-center gap-2 px-3 py-2 border rounded cursor-pointer hover:bg-gray-50\"\n :class=\"selectedValue === false ? 'bg-blue-100 border-blue-300 text-blue-800' : 'border-gray-300 text-gray-700'\">\n <input\n type=\"radio\"\n :checked=\"selectedValue === false\"\n @change=\"selectValue(false)\"\n class=\"w-4 h-4 text-blue-600 border-gray-300 focus:ring-blue-500\"\n />\n <span class=\"text-sm font-medium\">false</span>\n </label>\n \n <label class=\"flex items-center gap-2 px-3 py-2 border rounded cursor-pointer hover:bg-gray-50\"\n :class=\"selectedValue === null ? 'bg-blue-100 border-blue-300 text-blue-800' : 'border-gray-300 text-gray-700'\">\n <input\n type=\"radio\"\n :checked=\"selectedValue === null\"\n @change=\"selectValue(null)\"\n class=\"w-4 h-4 text-blue-600 border-gray-300 focus:ring-blue-500\"\n />\n <span class=\"text-sm font-medium\">null</span>\n </label>\n \n <label class=\"flex items-center gap-2 px-3 py-2 border rounded cursor-pointer hover:bg-gray-50\"\n :class=\"selectedValue === undefined ? 'bg-blue-100 border-blue-300 text-blue-800' : 'border-gray-300 text-gray-700'\">\n <input\n type=\"radio\"\n :checked=\"selectedValue === undefined\"\n @change=\"selectValue(undefined)\"\n class=\"w-4 h-4 text-blue-600 border-gray-300 focus:ring-blue-500\"\n />\n <span class=\"text-sm font-medium\">undefined</span>\n </label>\n </div>\n</div>\n";
3323
3640
 
3324
- /***/ }),
3641
+ /***/ },
3325
3642
 
3326
- /***/ "./frontend/src/edit-boolean/edit-boolean.js":
3643
+ /***/ "./frontend/src/edit-boolean/edit-boolean.js"
3327
3644
  /*!***************************************************!*\
3328
3645
  !*** ./frontend/src/edit-boolean/edit-boolean.js ***!
3329
3646
  \***************************************************/
3330
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3647
+ (module, __unused_webpack_exports, __webpack_require__) {
3331
3648
 
3332
3649
  "use strict";
3333
3650
 
@@ -3370,24 +3687,24 @@ module.exports = app => app.component('edit-boolean', {
3370
3687
  });
3371
3688
 
3372
3689
 
3373
- /***/ }),
3690
+ /***/ },
3374
3691
 
3375
- /***/ "./frontend/src/edit-date/edit-date.html":
3692
+ /***/ "./frontend/src/edit-date/edit-date.html"
3376
3693
  /*!***********************************************!*\
3377
3694
  !*** ./frontend/src/edit-date/edit-date.html ***!
3378
3695
  \***********************************************/
3379
- /***/ ((module) => {
3696
+ (module) {
3380
3697
 
3381
3698
  "use strict";
3382
3699
  module.exports = "<div>\n <input\n v-if=\"dateSelection == 'picker'\"\n class=\"w-64 h-8 border border-gray-300 outline-0\"\n type=\"datetime-local\"\n :value=\"valueAsLocalString\"\n @input=\"$emit('input', $event.target.value)\">\n <input\n v-if=\"dateSelection == 'iso'\"\n type=\"text\"\n class=\"w-64 h-8 border border-gray-300 outline-0\"\n :value=\"valueAsISOString\"\n @input=\"updateFromISO\">\n</div>";
3383
3700
 
3384
- /***/ }),
3701
+ /***/ },
3385
3702
 
3386
- /***/ "./frontend/src/edit-date/edit-date.js":
3703
+ /***/ "./frontend/src/edit-date/edit-date.js"
3387
3704
  /*!*********************************************!*\
3388
3705
  !*** ./frontend/src/edit-date/edit-date.js ***!
3389
3706
  \*********************************************/
3390
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3707
+ (module, __unused_webpack_exports, __webpack_require__) {
3391
3708
 
3392
3709
  "use strict";
3393
3710
 
@@ -3451,24 +3768,24 @@ module.exports = app => app.component('edit-date', {
3451
3768
  });
3452
3769
 
3453
3770
 
3454
- /***/ }),
3771
+ /***/ },
3455
3772
 
3456
- /***/ "./frontend/src/edit-default/edit-default.html":
3773
+ /***/ "./frontend/src/edit-default/edit-default.html"
3457
3774
  /*!*****************************************************!*\
3458
3775
  !*** ./frontend/src/edit-default/edit-default.html ***!
3459
3776
  \*****************************************************/
3460
- /***/ ((module) => {
3777
+ (module) {
3461
3778
 
3462
3779
  "use strict";
3463
3780
  module.exports = "<div>\n <input type=\"text\" :value=\"value\" @input=\"$emit('input', $event.target.value)\" class=\"w-full p-1 border border-gray-300 outline-0\">\n</div>";
3464
3781
 
3465
- /***/ }),
3782
+ /***/ },
3466
3783
 
3467
- /***/ "./frontend/src/edit-default/edit-default.js":
3784
+ /***/ "./frontend/src/edit-default/edit-default.js"
3468
3785
  /*!***************************************************!*\
3469
3786
  !*** ./frontend/src/edit-default/edit-default.js ***!
3470
3787
  \***************************************************/
3471
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3788
+ (module, __unused_webpack_exports, __webpack_require__) {
3472
3789
 
3473
3790
  "use strict";
3474
3791
 
@@ -3492,24 +3809,24 @@ module.exports = app => app.component('edit-default', {
3492
3809
  }
3493
3810
  });
3494
3811
 
3495
- /***/ }),
3812
+ /***/ },
3496
3813
 
3497
- /***/ "./frontend/src/edit-number/edit-number.html":
3814
+ /***/ "./frontend/src/edit-number/edit-number.html"
3498
3815
  /*!***************************************************!*\
3499
3816
  !*** ./frontend/src/edit-number/edit-number.html ***!
3500
3817
  \***************************************************/
3501
- /***/ ((module) => {
3818
+ (module) {
3502
3819
 
3503
3820
  "use strict";
3504
3821
  module.exports = "<div>\n <input type=\"number\" :value=\"value\" @input=\"$emit('input', $event.target.value)\">\n</div>";
3505
3822
 
3506
- /***/ }),
3823
+ /***/ },
3507
3824
 
3508
- /***/ "./frontend/src/edit-number/edit-number.js":
3825
+ /***/ "./frontend/src/edit-number/edit-number.js"
3509
3826
  /*!*************************************************!*\
3510
3827
  !*** ./frontend/src/edit-number/edit-number.js ***!
3511
3828
  \*************************************************/
3512
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3829
+ (module, __unused_webpack_exports, __webpack_require__) {
3513
3830
 
3514
3831
  "use strict";
3515
3832
 
@@ -3533,24 +3850,24 @@ module.exports = app => app.component('edit-number', {
3533
3850
  }
3534
3851
  });
3535
3852
 
3536
- /***/ }),
3853
+ /***/ },
3537
3854
 
3538
- /***/ "./frontend/src/edit-string/edit-string.html":
3855
+ /***/ "./frontend/src/edit-string/edit-string.html"
3539
3856
  /*!***************************************************!*\
3540
3857
  !*** ./frontend/src/edit-string/edit-string.html ***!
3541
3858
  \***************************************************/
3542
- /***/ ((module) => {
3859
+ (module) {
3543
3860
 
3544
3861
  "use strict";
3545
3862
  module.exports = "<div>\n <div v-if=\"hasEnumValues\" class=\"space-y-2\">\n <select\n class=\"w-full px-3 py-2 border border-gray-300 bg-white rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :value=\"selectedOption\"\n @change=\"onSelectChange\"\n >\n <option v-for=\"option in normalizedEnums\" :key=\"`enum-${option}`\" :value=\"option\">\n {{ option }}\n </option>\n <option :value=\"'__null'\">null</option>\n <option :value=\"'__other'\">Other</option>\n </select>\n <input\n v-if=\"selectedOption === '__other'\"\n type=\"text\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :value=\"otherValue\"\n @input=\"onOtherInput\"\n placeholder=\"Enter a value\"\n />\n </div>\n <div v-else>\n <input\n type=\"text\"\n class=\"w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 focus:border-transparent\"\n :value=\"value != null ? value : ''\"\n @input=\"onTextInput\"\n placeholder=\"Enter a value\"\n />\n </div>\n</div>\n";
3546
3863
 
3547
- /***/ }),
3864
+ /***/ },
3548
3865
 
3549
- /***/ "./frontend/src/edit-string/edit-string.js":
3866
+ /***/ "./frontend/src/edit-string/edit-string.js"
3550
3867
  /*!*************************************************!*\
3551
3868
  !*** ./frontend/src/edit-string/edit-string.js ***!
3552
3869
  \*************************************************/
3553
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
3870
+ (module, __unused_webpack_exports, __webpack_require__) {
3554
3871
 
3555
3872
  "use strict";
3556
3873
 
@@ -3703,24 +4020,24 @@ module.exports = app => app.component('edit-string', {
3703
4020
  });
3704
4021
 
3705
4022
 
3706
- /***/ }),
4023
+ /***/ },
3707
4024
 
3708
- /***/ "./frontend/src/edit-subdocument/edit-subdocument.html":
4025
+ /***/ "./frontend/src/edit-subdocument/edit-subdocument.html"
3709
4026
  /*!*************************************************************!*\
3710
4027
  !*** ./frontend/src/edit-subdocument/edit-subdocument.html ***!
3711
4028
  \*************************************************************/
3712
- /***/ ((module) => {
4029
+ (module) {
3713
4030
 
3714
4031
  "use strict";
3715
4032
  module.exports = "<div class=\"edit-subdocument\">\n <textarea\n ref=\"editor\"\n v-model=\"currentValue\"\n class=\"w-full border border-gray-300 p-1 h-[300px]\"></textarea>\n</div>";
3716
4033
 
3717
- /***/ }),
4034
+ /***/ },
3718
4035
 
3719
- /***/ "./frontend/src/edit-subdocument/edit-subdocument.js":
4036
+ /***/ "./frontend/src/edit-subdocument/edit-subdocument.js"
3720
4037
  /*!***********************************************************!*\
3721
4038
  !*** ./frontend/src/edit-subdocument/edit-subdocument.js ***!
3722
4039
  \***********************************************************/
3723
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4040
+ (module, __unused_webpack_exports, __webpack_require__) {
3724
4041
 
3725
4042
  "use strict";
3726
4043
 
@@ -3775,41 +4092,42 @@ module.exports = app => app.component('edit-subdocument', {
3775
4092
  });
3776
4093
 
3777
4094
 
3778
- /***/ }),
4095
+ /***/ },
3779
4096
 
3780
- /***/ "./frontend/src/export-query-results/export-query-results.css":
4097
+ /***/ "./frontend/src/export-query-results/export-query-results.css"
3781
4098
  /*!********************************************************************!*\
3782
4099
  !*** ./frontend/src/export-query-results/export-query-results.css ***!
3783
4100
  \********************************************************************/
3784
- /***/ ((module) => {
4101
+ (module) {
3785
4102
 
3786
4103
  "use strict";
3787
4104
  module.exports = "";
3788
4105
 
3789
- /***/ }),
4106
+ /***/ },
3790
4107
 
3791
- /***/ "./frontend/src/export-query-results/export-query-results.html":
4108
+ /***/ "./frontend/src/export-query-results/export-query-results.html"
3792
4109
  /*!*********************************************************************!*\
3793
4110
  !*** ./frontend/src/export-query-results/export-query-results.html ***!
3794
4111
  \*********************************************************************/
3795
- /***/ ((module) => {
4112
+ (module) {
3796
4113
 
3797
4114
  "use strict";
3798
4115
  module.exports = "<div class=\"export-query-results\">\n <h2>Export as CSV</h2>\n <div>\n Choose fields to export\n </div>\n <div v-for=\"(schemaPath,index) in schemaPaths\" class=\"w-5 flex items-center\">\n <input type=\"checkbox\" class=\"mt-0 h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-600 accent-sky-600\" v-model=\"shouldExport[schemaPath.path]\" :id=\"'schemaPath.path'+index\">\n <div class=\"ml-2 text-gray-700 grow shrink text-left\">\n <label :for=\"'schemaPath.path'+index\">{{schemaPath.path}}</label>\n </div>\n </div>\n <async-button class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\" @click=\"exportQueryResults\">Export</async-button>\n</div>";
3799
4116
 
3800
- /***/ }),
4117
+ /***/ },
3801
4118
 
3802
- /***/ "./frontend/src/export-query-results/export-query-results.js":
4119
+ /***/ "./frontend/src/export-query-results/export-query-results.js"
3803
4120
  /*!*******************************************************************!*\
3804
4121
  !*** ./frontend/src/export-query-results/export-query-results.js ***!
3805
4122
  \*******************************************************************/
3806
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4123
+ (module, __unused_webpack_exports, __webpack_require__) {
3807
4124
 
3808
4125
  "use strict";
3809
4126
 
3810
4127
 
3811
4128
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
3812
4129
  const template = __webpack_require__(/*! ./export-query-results.html */ "./frontend/src/export-query-results/export-query-results.html");
4130
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
3813
4131
 
3814
4132
  const appendCSS = __webpack_require__(/*! ../appendCSS */ "./frontend/src/appendCSS.js");
3815
4133
 
@@ -3838,19 +4156,25 @@ module.exports = app => app.component('export-query-results', {
3838
4156
  params.searchText = this.searchText;
3839
4157
  }
3840
4158
  await api.Model.exportQueryResults(params);
3841
-
4159
+ vanillatoasts.create({
4160
+ title: 'Export completed!',
4161
+ type: 'success',
4162
+ timeout: 3000,
4163
+ icon: 'images/success.png',
4164
+ positionClass: 'bottomRight'
4165
+ });
3842
4166
  this.$emit('done');
3843
4167
  }
3844
4168
  }
3845
4169
  });
3846
4170
 
3847
- /***/ }),
4171
+ /***/ },
3848
4172
 
3849
- /***/ "./frontend/src/format.js":
4173
+ /***/ "./frontend/src/format.js"
3850
4174
  /*!********************************!*\
3851
4175
  !*** ./frontend/src/format.js ***!
3852
4176
  \********************************/
3853
- /***/ ((__unused_webpack_module, exports) => {
4177
+ (__unused_webpack_module, exports) {
3854
4178
 
3855
4179
  "use strict";
3856
4180
 
@@ -3864,13 +4188,13 @@ exports.isoToLongDateTime = function isoToLongDateTime(str) {
3864
4188
  };
3865
4189
 
3866
4190
 
3867
- /***/ }),
4191
+ /***/ },
3868
4192
 
3869
- /***/ "./frontend/src/index.js":
4193
+ /***/ "./frontend/src/index.js"
3870
4194
  /*!*******************************!*\
3871
4195
  !*** ./frontend/src/index.js ***!
3872
4196
  \*******************************/
3873
- /***/ ((__unused_webpack_module, __unused_webpack_exports, __webpack_require__) => {
4197
+ (__unused_webpack_module, __unused_webpack_exports, __webpack_require__) {
3874
4198
 
3875
4199
  "use strict";
3876
4200
 
@@ -3884,6 +4208,7 @@ console.log(`Mongoose Studio Version ${version}`);
3884
4208
 
3885
4209
  const api = __webpack_require__(/*! ./api */ "./frontend/src/api.js");
3886
4210
  const format = __webpack_require__(/*! ./format */ "./frontend/src/format.js");
4211
+ const arrayUtils = __webpack_require__(/*! ./array-utils */ "./frontend/src/array-utils.js");
3887
4212
  const mothership = __webpack_require__(/*! ./mothership */ "./frontend/src/mothership.js");
3888
4213
  const { routes } = __webpack_require__(/*! ./routes */ "./frontend/src/routes.js");
3889
4214
  const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
@@ -4021,49 +4346,36 @@ router.beforeEach((to, from, next) => {
4021
4346
  }
4022
4347
  });
4023
4348
 
4024
- app.config.globalProperties = { format };
4349
+ app.config.globalProperties = { format, arrayUtils };
4025
4350
  app.use(router);
4026
4351
 
4027
4352
  app.mount('#content');
4028
4353
 
4029
4354
 
4030
- /***/ }),
4031
-
4032
- /***/ "./frontend/src/list-array/list-array.css":
4033
- /*!************************************************!*\
4034
- !*** ./frontend/src/list-array/list-array.css ***!
4035
- \************************************************/
4036
- /***/ ((module) => {
4355
+ /***/ },
4037
4356
 
4038
- "use strict";
4039
- module.exports = ".list-array pre {\n max-height: 6.5em;\n max-width: 30em;\n}\n\n.list-array pre.maximized {\n max-height: auto;\n}\n";
4040
-
4041
- /***/ }),
4042
-
4043
- /***/ "./frontend/src/list-array/list-array.html":
4357
+ /***/ "./frontend/src/list-array/list-array.html"
4044
4358
  /*!*************************************************!*\
4045
4359
  !*** ./frontend/src/list-array/list-array.html ***!
4046
4360
  \*************************************************/
4047
- /***/ ((module) => {
4361
+ (module) {
4048
4362
 
4049
4363
  "use strict";
4050
- module.exports = "<div class=\"list-array\">\n <pre><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n</div>";
4364
+ module.exports = "<div class=\"list-array\">\n <pre class=\"max-h-[6.5em] max-w-[30em]\"><code ref=\"code\" class=\"language-javascript\" v-text=\"displayValue\"></code></pre>\n</div>";
4051
4365
 
4052
- /***/ }),
4366
+ /***/ },
4053
4367
 
4054
- /***/ "./frontend/src/list-array/list-array.js":
4368
+ /***/ "./frontend/src/list-array/list-array.js"
4055
4369
  /*!***********************************************!*\
4056
4370
  !*** ./frontend/src/list-array/list-array.js ***!
4057
4371
  \***********************************************/
4058
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4372
+ (module, __unused_webpack_exports, __webpack_require__) {
4059
4373
 
4060
4374
  "use strict";
4061
4375
 
4062
4376
 
4063
4377
  const template = __webpack_require__(/*! ./list-array.html */ "./frontend/src/list-array/list-array.html");
4064
4378
 
4065
- __webpack_require__(/*! ../appendCSS */ "./frontend/src/appendCSS.js")(__webpack_require__(/*! ./list-array.css */ "./frontend/src/list-array/list-array.css"));
4066
-
4067
4379
  module.exports = app => app.component('list-array', {
4068
4380
  template: template,
4069
4381
  props: ['value'],
@@ -4078,35 +4390,35 @@ module.exports = app => app.component('list-array', {
4078
4390
  });
4079
4391
 
4080
4392
 
4081
- /***/ }),
4393
+ /***/ },
4082
4394
 
4083
- /***/ "./frontend/src/list-default/list-default.css":
4395
+ /***/ "./frontend/src/list-default/list-default.css"
4084
4396
  /*!****************************************************!*\
4085
4397
  !*** ./frontend/src/list-default/list-default.css ***!
4086
4398
  \****************************************************/
4087
- /***/ ((module) => {
4399
+ (module) {
4088
4400
 
4089
4401
  "use strict";
4090
4402
  module.exports = ".list-default pre {\n max-height: 6.5em;\n max-width: 30em;\n}\n";
4091
4403
 
4092
- /***/ }),
4404
+ /***/ },
4093
4405
 
4094
- /***/ "./frontend/src/list-default/list-default.html":
4406
+ /***/ "./frontend/src/list-default/list-default.html"
4095
4407
  /*!*****************************************************!*\
4096
4408
  !*** ./frontend/src/list-default/list-default.html ***!
4097
4409
  \*****************************************************/
4098
- /***/ ((module) => {
4410
+ (module) {
4099
4411
 
4100
4412
  "use strict";
4101
4413
  module.exports = "<div class=\"list-default\" ref=\"itemData\" class=\"tooltip\">\n {{displayValue}}\n <div class=\"tooltiptext\" style=\"display:flex; width: 100%; justify-content: space-around; align-items: center; min-width: 180px;\">\n <div class=\"tooltiptextchild\" v-if=\"allude\" @click.stop=\"goToDoc(value)\">View Document</div>\n <div class=\"tooltiptextchild\" @click.stop=\"copyText(value)\">copy &#x1F4CB;</div>\n </div>\n</div>\n";
4102
4414
 
4103
- /***/ }),
4415
+ /***/ },
4104
4416
 
4105
- /***/ "./frontend/src/list-default/list-default.js":
4417
+ /***/ "./frontend/src/list-default/list-default.js"
4106
4418
  /*!***************************************************!*\
4107
4419
  !*** ./frontend/src/list-default/list-default.js ***!
4108
4420
  \***************************************************/
4109
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4421
+ (module, __unused_webpack_exports, __webpack_require__) {
4110
4422
 
4111
4423
  "use strict";
4112
4424
 
@@ -4161,35 +4473,35 @@ module.exports = app => app.component('list-default', {
4161
4473
  }
4162
4474
  });
4163
4475
 
4164
- /***/ }),
4476
+ /***/ },
4165
4477
 
4166
- /***/ "./frontend/src/list-json/json-node.html":
4478
+ /***/ "./frontend/src/list-json/json-node.html"
4167
4479
  /*!***********************************************!*\
4168
4480
  !*** ./frontend/src/list-json/json-node.html ***!
4169
4481
  \***********************************************/
4170
- /***/ ((module) => {
4482
+ (module) {
4171
4483
 
4172
4484
  "use strict";
4173
4485
  module.exports = "<div>\n <div class=\"flex items-baseline whitespace-pre\" :style=\"indentStyle\">\n <button\n v-if=\"showToggle\"\n type=\"button\"\n class=\"w-4 h-4 mr-1 inline-flex items-center justify-center leading-none text-gray-500 hover:text-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-slate-400 cursor-pointer\"\n @click.stop=\"handleToggle\"\n >\n {{ isCollapsedNode ? '+' : '-' }}\n </button>\n <span v-else class=\"w-4 h-4 mr-1 inline-flex items-center justify-center invisible flex-shrink-0\"></span>\n <template v-if=\"hasKey\">\n <span class=\"text-blue-600\">\"{{ nodeKey }}\"</span><span>: </span>\n </template>\n <template v-if=\"isComplex\">\n <template v-if=\"hasChildren\">\n <span>{{ openingBracket }}</span>\n <span v-if=\"isCollapsedNode\" class=\"mx-1\">…</span>\n <span v-if=\"isCollapsedNode\">{{ closingBracket }}{{ comma }}</span>\n </template>\n <template v-else>\n <span>{{ openingBracket }}{{ closingBracket }}{{ comma }}</span>\n </template>\n </template>\n <template v-else>\n <!--\n If value is a string and overflows its container (i.e. goes over one line), show an ellipsis.\n This is done via CSS ellipsis strategy.\n -->\n <span\n v-if=\"shouldShowReferenceLink\"\n class=\"inline-flex items-baseline group\"\n >\n <span\n :class=\"[...valueClasses, 'underline', 'decoration-dotted', 'underline-offset-2']\"\n :style=\"typeof value === 'string'\n ? {\n display: 'inline-block',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom'\n }\n : {}\"\n :title=\"typeof value === 'string' && $el && $el.scrollWidth > $el.clientWidth ? value : undefined\"\n >\n {{ formattedValue }}\n </span>\n <span>\n {{ comma }}\n </span>\n <a\n href=\"#\"\n class=\"ml-1 text-sm text-sky-700 opacity-0 group-hover:opacity-100 focus:opacity-100 transition-opacity\"\n @click.stop.prevent=\"goToReference(value)\"\n >\n View Document\n </a>\n </span>\n <span\n v-else\n :class=\"valueClasses\"\n :style=\"typeof value === 'string'\n ? {\n display: 'inline-block',\n maxWidth: '100%',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n verticalAlign: 'bottom'\n }\n : {}\"\n :title=\"typeof value === 'string' && $el && $el.scrollWidth > $el.clientWidth ? value : undefined\"\n >\n {{ formattedValue }}{{ comma }}\n </span>\n </template>\n </div>\n <template v-if=\"isComplex && hasChildren && !isCollapsedNode\">\n <json-node\n v-for=\"child in children\"\n :key=\"child.path\"\n :node-key=\"child.displayKey\"\n :value=\"child.value\"\n :level=\"level + 1\"\n :is-last=\"child.isLast\"\n :path=\"child.path\"\n :toggle-collapse=\"toggleCollapse\"\n :is-collapsed=\"isCollapsed\"\n :create-child-path=\"createChildPath\"\n :indent-size=\"indentSize\"\n :max-top-level-fields=\"maxTopLevelFields\"\n :top-level-expanded=\"topLevelExpanded\"\n :expand-top-level=\"expandTopLevel\"\n :references=\"references\"\n ></json-node>\n <div\n v-if=\"hasHiddenRootChildren\"\n class=\"flex items-baseline whitespace-pre\"\n :style=\"indentStyle\"\n >\n <span class=\"w-4 h-4 mr-1 inline-flex items-center justify-center invisible\"></span>\n <button\n type=\"button\"\n class=\"text-xs inline-flex items-center gap-1 ml-4 text-slate-500 hover:text-slate-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-1 focus-visible:ring-slate-400\"\n :title=\"hiddenChildrenTooltip\"\n @click.stop=\"handleExpandTopLevel\"\n >\n <span aria-hidden=\"true\">{{hiddenChildrenLabel}}…</span>\n </button>\n </div>\n <div class=\"flex items-baseline whitespace-pre\" :style=\"indentStyle\">\n <span class=\"w-4 h-4 mr-1 inline-flex items-center justify-center invisible\"></span>\n <span>{{ closingBracket }}{{ comma }}</span>\n </div>\n </template>\n</div>\n";
4174
4486
 
4175
- /***/ }),
4487
+ /***/ },
4176
4488
 
4177
- /***/ "./frontend/src/list-json/list-json.html":
4489
+ /***/ "./frontend/src/list-json/list-json.html"
4178
4490
  /*!***********************************************!*\
4179
4491
  !*** ./frontend/src/list-json/list-json.html ***!
4180
4492
  \***********************************************/
4181
- /***/ ((module) => {
4493
+ (module) {
4182
4494
 
4183
4495
  "use strict";
4184
4496
  module.exports = "<div class=\"tooltip w-full font-mono text-sm py-3 text-slate-800\">\n <div class=\"w-full\">\n <json-node\n :node-key=\"null\"\n :value=\"value\"\n :level=\"0\"\n :is-last=\"true\"\n path=\"root\"\n :toggle-collapse=\"toggleCollapse\"\n :is-collapsed=\"isPathCollapsed\"\n :create-child-path=\"createChildPath\"\n :indent-size=\"indentSize\"\n :max-top-level-fields=\"maxTopLevelFields\"\n :top-level-expanded=\"topLevelExpanded\"\n :expand-top-level=\"expandTopLevel\"\n :references=\"references\"\n ></json-node>\n </div>\n</div>\n";
4185
4497
 
4186
- /***/ }),
4498
+ /***/ },
4187
4499
 
4188
- /***/ "./frontend/src/list-json/list-json.js":
4500
+ /***/ "./frontend/src/list-json/list-json.js"
4189
4501
  /*!*********************************************!*\
4190
4502
  !*** ./frontend/src/list-json/list-json.js ***!
4191
4503
  \*********************************************/
4192
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4504
+ (module, __unused_webpack_exports, __webpack_require__) {
4193
4505
 
4194
4506
  "use strict";
4195
4507
 
@@ -4509,35 +4821,35 @@ module.exports = app => app.component('list-json', {
4509
4821
  });
4510
4822
 
4511
4823
 
4512
- /***/ }),
4824
+ /***/ },
4513
4825
 
4514
- /***/ "./frontend/src/list-mixed/list-mixed.css":
4826
+ /***/ "./frontend/src/list-mixed/list-mixed.css"
4515
4827
  /*!************************************************!*\
4516
4828
  !*** ./frontend/src/list-mixed/list-mixed.css ***!
4517
4829
  \************************************************/
4518
- /***/ ((module) => {
4830
+ (module) {
4519
4831
 
4520
4832
  "use strict";
4521
4833
  module.exports = ".list-mixed pre {\n max-height: 6.5em;\n max-width: 30em;\n}\n\n";
4522
4834
 
4523
- /***/ }),
4835
+ /***/ },
4524
4836
 
4525
- /***/ "./frontend/src/list-mixed/list-mixed.html":
4837
+ /***/ "./frontend/src/list-mixed/list-mixed.html"
4526
4838
  /*!*************************************************!*\
4527
4839
  !*** ./frontend/src/list-mixed/list-mixed.html ***!
4528
4840
  \*************************************************/
4529
- /***/ ((module) => {
4841
+ (module) {
4530
4842
 
4531
4843
  "use strict";
4532
4844
  module.exports = "<div class=\"list-mixed tooltip\">\n <pre>\n <code ref=\"MixedCode\" class=\"language-javascript\">{{shortenValue}}</code>\n <span class=\"tooltiptext\" @click.stop=\"copyText(value)\">copy &#x1F4CB;</span>\n </pre>\n</div>\n ";
4533
4845
 
4534
- /***/ }),
4846
+ /***/ },
4535
4847
 
4536
- /***/ "./frontend/src/list-mixed/list-mixed.js":
4848
+ /***/ "./frontend/src/list-mixed/list-mixed.js"
4537
4849
  /*!***********************************************!*\
4538
4850
  !*** ./frontend/src/list-mixed/list-mixed.js ***!
4539
4851
  \***********************************************/
4540
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4852
+ (module, __unused_webpack_exports, __webpack_require__) {
4541
4853
 
4542
4854
  "use strict";
4543
4855
 
@@ -4583,35 +4895,35 @@ module.exports = app => app.component('list-mixed', {
4583
4895
 
4584
4896
 
4585
4897
 
4586
- /***/ }),
4898
+ /***/ },
4587
4899
 
4588
- /***/ "./frontend/src/list-string/list-string.css":
4900
+ /***/ "./frontend/src/list-string/list-string.css"
4589
4901
  /*!**************************************************!*\
4590
4902
  !*** ./frontend/src/list-string/list-string.css ***!
4591
4903
  \**************************************************/
4592
- /***/ ((module) => {
4904
+ (module) {
4593
4905
 
4594
4906
  "use strict";
4595
4907
  module.exports = ".list-string {\n display: inline;\n max-width: 300px;\n}";
4596
4908
 
4597
- /***/ }),
4909
+ /***/ },
4598
4910
 
4599
- /***/ "./frontend/src/list-string/list-string.html":
4911
+ /***/ "./frontend/src/list-string/list-string.html"
4600
4912
  /*!***************************************************!*\
4601
4913
  !*** ./frontend/src/list-string/list-string.html ***!
4602
4914
  \***************************************************/
4603
- /***/ ((module) => {
4915
+ (module) {
4604
4916
 
4605
4917
  "use strict";
4606
4918
  module.exports = "<div class=\"list-string tooltip\" ref=\"itemData\">\n {{displayValue}}\n <span class=\"tooltiptext\" @click.stop=\"copyText(value)\">copy &#x1F4CB;</span>\n</div>";
4607
4919
 
4608
- /***/ }),
4920
+ /***/ },
4609
4921
 
4610
- /***/ "./frontend/src/list-string/list-string.js":
4922
+ /***/ "./frontend/src/list-string/list-string.js"
4611
4923
  /*!*************************************************!*\
4612
4924
  !*** ./frontend/src/list-string/list-string.js ***!
4613
4925
  \*************************************************/
4614
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
4926
+ (module, __unused_webpack_exports, __webpack_require__) {
4615
4927
 
4616
4928
  "use strict";
4617
4929
 
@@ -4658,35 +4970,35 @@ module.exports = app => app.component('list-string', {
4658
4970
  }
4659
4971
  });
4660
4972
 
4661
- /***/ }),
4973
+ /***/ },
4662
4974
 
4663
- /***/ "./frontend/src/list-subdocument/list-subdocument.css":
4975
+ /***/ "./frontend/src/list-subdocument/list-subdocument.css"
4664
4976
  /*!************************************************************!*\
4665
4977
  !*** ./frontend/src/list-subdocument/list-subdocument.css ***!
4666
4978
  \************************************************************/
4667
- /***/ ((module) => {
4979
+ (module) {
4668
4980
 
4669
4981
  "use strict";
4670
4982
  module.exports = ".list-subdocument pre {\n max-height: 6.5em;\n max-width: 30em;\n}\n";
4671
4983
 
4672
- /***/ }),
4984
+ /***/ },
4673
4985
 
4674
- /***/ "./frontend/src/list-subdocument/list-subdocument.html":
4986
+ /***/ "./frontend/src/list-subdocument/list-subdocument.html"
4675
4987
  /*!*************************************************************!*\
4676
4988
  !*** ./frontend/src/list-subdocument/list-subdocument.html ***!
4677
4989
  \*************************************************************/
4678
- /***/ ((module) => {
4990
+ (module) {
4679
4991
 
4680
4992
  "use strict";
4681
4993
  module.exports = "<div class=\"list-subdocument tooltip\">\n <pre>\n <code ref=\"SubDocCode\" class=\"language-javascript\">{{shortenValue}}</code>\n <span class=\"tooltiptext\" @click.stop=\"copyText(value)\">copy &#x1F4CB;</span>\n </pre>\n</div>\n";
4682
4994
 
4683
- /***/ }),
4995
+ /***/ },
4684
4996
 
4685
- /***/ "./frontend/src/list-subdocument/list-subdocument.js":
4997
+ /***/ "./frontend/src/list-subdocument/list-subdocument.js"
4686
4998
  /*!***********************************************************!*\
4687
4999
  !*** ./frontend/src/list-subdocument/list-subdocument.js ***!
4688
5000
  \***********************************************************/
4689
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5001
+ (module, __unused_webpack_exports, __webpack_require__) {
4690
5002
 
4691
5003
  "use strict";
4692
5004
 
@@ -4729,35 +5041,35 @@ module.exports = app => app.component('list-subdocument', {
4729
5041
  }
4730
5042
  });
4731
5043
 
4732
- /***/ }),
5044
+ /***/ },
4733
5045
 
4734
- /***/ "./frontend/src/modal/modal.css":
5046
+ /***/ "./frontend/src/modal/modal.css"
4735
5047
  /*!**************************************!*\
4736
5048
  !*** ./frontend/src/modal/modal.css ***!
4737
5049
  \**************************************/
4738
- /***/ ((module) => {
5050
+ (module) {
4739
5051
 
4740
5052
  "use strict";
4741
5053
  module.exports = "/** Vue modal */\n\n.modal-mask {\n position: fixed;\n z-index: 9998;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n background-color: rgba(0, 0, 0, 0.5);\n display: table;\n transition: opacity 0.3s ease;\n}\n\n.modal-wrapper {\n display: table-cell;\n vertical-align: middle;\n}\n\n.modal-container {\n width: 600px;\n margin: 0px auto;\n padding: 20px 30px;\n padding-bottom: 40px;\n background-color: #fff;\n border-radius: 2px;\n box-shadow: 0 2px 8px rgba(0, 0, 0, 0.33);\n transition: all 0.3s ease;\n font-family: Helvetica, Arial, sans-serif;\n position: relative;\n}\n\n.modal-header {\n margin-top: 0;\n font-size: 18px;\n font-weight: bold;\n}\n\n.modal-header-success {\n color: #42b983;\n}\n\n.modal-header-error {\n color: #ff0000;\n}\n\n.modal-body {\n margin: 20px 0;\n max-height: calc(100vh - 40px - 60px - 10px);\n overflow: auto;\n}\n\n.modal__button--default {\n float: right;\n}\n\n/*\n * The following styles are auto-applied to elements with\n * transition=\"modal\" when their visibility is toggled\n * by Vue.js.\n *\n * You can easily play with the modal transition by editing\n * these styles.\n */\n\n.modal-enter {\n opacity: 0;\n}\n\n.modal-leave-active {\n opacity: 0;\n}\n\n.modal-enter .modal-container,\n.modal-leave-active .modal-container {\n -webkit-transform: scale(1.1);\n transform: scale(1.1);\n}\n\n.modal-container .modal-exit {\n position: absolute;\n right: 0.25em;\n top: 0.25em;\n cursor: pointer;\n font-size: 1.25em;\n height: 1.25em;\n width: 1.25em;\n border-radius: 100%;\n border: 1px solid #ddd;\n display: flex;\n align-items: center;\n justify-content: center;\n padding-bottom: 0.25em;\n}\n\n.modal-container .modal-exit:hover {\n background-color: #f1f5ff;\n}\n\n@media (max-width: 767px) {\n .modal-container {\n width: calc(100vw - 10px);\n margin: 0;\n margin-left: 5px;\n }\n}\n";
4742
5054
 
4743
- /***/ }),
5055
+ /***/ },
4744
5056
 
4745
- /***/ "./frontend/src/modal/modal.html":
5057
+ /***/ "./frontend/src/modal/modal.html"
4746
5058
  /*!***************************************!*\
4747
5059
  !*** ./frontend/src/modal/modal.html ***!
4748
5060
  \***************************************/
4749
- /***/ ((module) => {
5061
+ (module) {
4750
5062
 
4751
5063
  "use strict";
4752
5064
  module.exports = "<transition name=\"modal\">\n <div class=\"modal-mask\">\n <div class=\"modal-wrapper\">\n <div class=\"modal-container\" :class=\"containerClass\">\n <div class=\"modal-body\">\n <slot name=\"body\">\n </slot>\n </div>\n </div>\n </div>\n </div>\n</transition>\n";
4753
5065
 
4754
- /***/ }),
5066
+ /***/ },
4755
5067
 
4756
- /***/ "./frontend/src/modal/modal.js":
5068
+ /***/ "./frontend/src/modal/modal.js"
4757
5069
  /*!*************************************!*\
4758
5070
  !*** ./frontend/src/modal/modal.js ***!
4759
5071
  \*************************************/
4760
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5072
+ (module, __unused_webpack_exports, __webpack_require__) {
4761
5073
 
4762
5074
  "use strict";
4763
5075
 
@@ -4773,24 +5085,24 @@ module.exports = app => app.component('modal', {
4773
5085
  });
4774
5086
 
4775
5087
 
4776
- /***/ }),
5088
+ /***/ },
4777
5089
 
4778
- /***/ "./frontend/src/models/document-search/document-search.html":
5090
+ /***/ "./frontend/src/models/document-search/document-search.html"
4779
5091
  /*!******************************************************************!*\
4780
5092
  !*** ./frontend/src/models/document-search/document-search.html ***!
4781
5093
  \******************************************************************/
4782
- /***/ ((module) => {
5094
+ (module) {
4783
5095
 
4784
5096
  "use strict";
4785
5097
  module.exports = "<form @submit.prevent=\"emitSearch\" class=\"relative flex-grow m-0\">\n <input\n ref=\"searchInput\"\n class=\"w-full font-mono rounded-md p-1 border border-gray-300 outline-gray-300 text-lg focus:ring-1 focus:ring-ultramarine-200 focus:ring-offset-0 focus:outline-none\"\n type=\"text\"\n placeholder=\"Filter\"\n v-model=\"searchText\"\n @click=\"initFilter\"\n @input=\"updateAutocomplete\"\n @keydown=\"handleKeyDown\"\n />\n <ul v-if=\"autocompleteSuggestions.length\" class=\"absolute z-[9999] bg-white border border-gray-300 rounded mt-1 w-full max-h-40 overflow-y-auto shadow\">\n <li\n v-for=\"(suggestion, index) in autocompleteSuggestions\"\n :key=\"suggestion\"\n class=\"px-2 py-1 cursor-pointer\"\n :class=\"{ 'bg-ultramarine-100': index === autocompleteIndex }\"\n @mousedown.prevent=\"applySuggestion(index)\"\n >\n {{ suggestion }}\n </li>\n </ul>\n</form>\n";
4786
5098
 
4787
- /***/ }),
5099
+ /***/ },
4788
5100
 
4789
- /***/ "./frontend/src/models/document-search/document-search.js":
5101
+ /***/ "./frontend/src/models/document-search/document-search.js"
4790
5102
  /*!****************************************************************!*\
4791
5103
  !*** ./frontend/src/models/document-search/document-search.js ***!
4792
5104
  \****************************************************************/
4793
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5105
+ (module, __unused_webpack_exports, __webpack_require__) {
4794
5106
 
4795
5107
  "use strict";
4796
5108
 
@@ -5022,35 +5334,35 @@ module.exports = app => app.component('document-search', {
5022
5334
  });
5023
5335
 
5024
5336
 
5025
- /***/ }),
5337
+ /***/ },
5026
5338
 
5027
- /***/ "./frontend/src/models/models.css":
5339
+ /***/ "./frontend/src/models/models.css"
5028
5340
  /*!****************************************!*\
5029
5341
  !*** ./frontend/src/models/models.css ***!
5030
5342
  \****************************************/
5031
- /***/ ((module) => {
5343
+ (module) {
5032
5344
 
5033
5345
  "use strict";
5034
5346
  module.exports = ".models {\n position: relative;\n display: flex;\n flex-direction: row;\n min-height: calc(100% - 56px);\n}\n\n.models button.gray {\n color: black;\n background-color: #eee;\n}\n\n.models .model-selector {\n background-color: #eee;\n flex-grow: 0;\n padding: 15px;\n padding-top: 0px;\n}\n\n.models h1 {\n margin-top: 0px;\n}\n\n.models .documents {\n flex-grow: 1;\n overflow: scroll;\n max-height: calc(100vh - 56px);\n}\n\n.models .documents table {\n /* max-width: -moz-fit-content;\n max-width: fit-content; */\n width: 100%;\n table-layout: auto;\n font-size: small;\n padding: 0;\n margin-right: 1em;\n white-space: nowrap;\n z-index: -1;\n border-collapse: collapse;\n line-height: 1.5em;\n}\n\n.models .documents table th {\n position: sticky;\n top: 42px;\n background-color: white;\n z-index: 1;\n}\n\n.models .documents table th:after {\n content: \"\";\n position: absolute;\n left: 0;\n width: 100%;\n bottom: -1px;\n border-bottom: thin solid rgba(0, 0, 0, 0.12);\n}\n\n.models .documents table tr {\n color: black;\n border-spacing: 0px 0px;\n background-color: white;\n cursor: pointer;\n}\n\n.models .documents table tr:nth-child(even) {\n background-color: #f5f5f5;\n}\n\n.models .documents table tr:hover {\n background-color: #a7b9ff;\n}\n\n.models .documents table th,\ntd {\n border-bottom: thin solid rgba(0, 0, 0, 0.12);\n text-align: left;\n padding: 0 16px;\n height: 48px;\n}\n\n.models textarea {\n font-size: 1.2em;\n}\n\n.models .path-type {\n color: rgba(0, 0, 0, 0.36);\n font-size: 0.8em;\n}\n\n.models .documents-menu {\n position: fixed;\n background-color: white;\n z-index: 1;\n padding: 4px;\n display: flex;\n width: 100vw;\n}\n\n@media (min-width: 1024px) {\n .models .documents-menu {\n width: calc(100vw - 12rem);\n }\n}\n\n.models .documents-menu .search-input {\n flex-grow: 1;\n align-items: center;\n}\n\n.models .search-input input {\n padding: 0.25em 0.5em;\n font-size: 1.1em;\n border: 1px solid #ddd;\n border-radius: 3px;\n width: calc(100% - 1em);\n}\n\n.models .sort-arrow {\n padding-left: 10px;\n padding-right: 10px;\n}\n\n.models .loader {\n width: 100%;\n text-align: center;\n}\n\n.models .loader img {\n height: 4em;\n}\n\n.models .documents .buttons {\n display: inline-flex;\n justify-content: space-around;\n align-items: center;\n}\n\n";
5035
5347
 
5036
- /***/ }),
5348
+ /***/ },
5037
5349
 
5038
- /***/ "./frontend/src/models/models.html":
5350
+ /***/ "./frontend/src/models/models.html"
5039
5351
  /*!*****************************************!*\
5040
5352
  !*** ./frontend/src/models/models.html ***!
5041
5353
  \*****************************************/
5042
- /***/ ((module) => {
5354
+ (module) {
5043
5355
 
5044
5356
  "use strict";
5045
- module.exports = "<div class=\"models flex\" style=\"height: calc(100vh - 55px); height: calc(100dvh - 55px)\">\n <div class=\"fixed top-[65px] cursor-pointer bg-gray-100 rounded-r-md z-10\" @click=\"hideSidebar = false\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"#5f6368\"><path d=\"M360-120v-720h80v720h-80Zm160-160v-400l200 200-200 200Z\"/></svg>\n </div>\n <aside class=\"bg-white border-r overflow-y-auto overflow-x-hidden h-full transition-all duration-300 ease-in-out z-20 w-0 lg:w-48 fixed lg:relative shrink-0\" :class=\"hideSidebar === true ? '!w-0' : hideSidebar === false ? '!w-48' : ''\">\n <div class=\"flex items-center border-b border-gray-100 w-48 overflow-x-hidden\">\n <div class=\"p-4 font-bold text-lg\">Models</div>\n <button\n @click=\"hideSidebar = true\"\n class=\"ml-auto mr-2 p-2 rounded hover:bg-gray-200 focus:outline-none\"\n aria-label=\"Close sidebar\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"currentColor\"><path d=\"M660-320v-320L500-480l160 160ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\"/></svg>\n </button>\n </div>\n <nav class=\"flex flex-1 flex-col\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n <li>\n <ul role=\"list\">\n <li v-for=\"model in models\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"block truncate rounded-md py-2 pr-2 pl-2 text-sm font-semibold text-gray-700\"\n :class=\"model === currentModel ? 'bg-ultramarine-100 font-bold' : 'hover:bg-ultramarine-100'\">\n {{model}}\n </router-link>\n </li>\n </ul>\n </li>\n </ul>\n <div v-if=\"models.length === 0 && status === 'loaded'\" class=\"p-2 bg-red-100\">\n No models found\n </div>\n </nav>\n </aside>\n <div class=\"documents\" ref=\"documentsList\">\n <div class=\"relative h-[42px] z-10\">\n <div class=\"documents-menu\">\n <div class=\"flex flex-row items-center w-full gap-2\">\n <document-search\n ref=\"documentSearch\"\n :value=\"searchText\"\n :schema-paths=\"schemaPaths\"\n @search=\"search\"\n >\n </document-search>\n <div>\n <span v-if=\"numDocuments == null\">Loading ...</span>\n <span v-else-if=\"typeof numDocuments === 'number'\">{{numDocuments === 1 ? numDocuments+ ' document' : numDocuments + ' documents'}}</span>\n </div>\n <button\n @click=\"shouldShowExportModal = true\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Export\n </button>\n <button\n @click=\"stagingSelect\"\n type=\"button\"\n :class=\"{ 'bg-gray-500 ring-inset ring-2 ring-gray-300 hover:bg-gray-600': selectMultiple, 'bg-ultramarine-600 hover:bg-ultramarine-500' : !selectMultiple }\"\n class=\"rounded px-2 py-2 text-sm font-semibold text-white shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\"\n >\n {{ selectMultiple ? 'Cancel' : 'Select' }}\n </button>\n <button\n v-show=\"selectMultiple\"\n @click=\"shouldShowUpdateMultipleModal=true;\"\n type=\"button\"\n class=\"rounded bg-green-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n >\n Update\n </button>\n <button\n @click=\"shouldShowDeleteMultipleModal=true;\"\n type=\"button\"\n v-show=\"selectMultiple\"\n class=\"rounded bg-red-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n >\n Delete\n </button>\n <button\n @click=\"openIndexModal\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Indexes\n </button>\n <button\n @click=\"shouldShowCreateModal = true;\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Create\n </button>\n <button\n @click=\"openFieldSelection\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Fields\n </button>\n <span class=\"isolate inline-flex rounded-md shadow-sm\">\n <button\n @click=\"setOutputType('table')\"\n type=\"button\"\n class=\"relative inline-flex items-center rounded-none rounded-l-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n :class=\"outputType === 'table' ? 'bg-gray-200' : 'bg-white'\">\n <img class=\"h-5 w-5\" src=\"images/table.svg\">\n </button>\n <button\n @click=\"setOutputType('json')\"\n type=\"button\"\n class=\"relative -ml-px inline-flex items-center rounded-none rounded-r-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n :class=\"outputType === 'json' ? 'bg-gray-200' : 'bg-white'\">\n <img class=\"h-5 w-5\" src=\"images/json.svg\">\n </button>\n </span>\n </div>\n </div>\n </div>\n <div class=\"documents-container relative\">\n <div v-if=\"error\">\n <div class=\"bg-red-100 border border-red-400 text-red-700 px-4 py-3 relative m-4 rounded-md\" role=\"alert\">\n <span class=\"block font-bold\">Error</span>\n <span class=\"block\">{{ error }}</span>\n </div>\n </div>\n <table v-else-if=\"outputType === 'table'\">\n <thead>\n <th v-for=\"path in filteredPaths\" @click=\"addPathFilter(path.path)\" class=\"cursor-pointer\">\n {{path.path}}\n <span class=\"path-type\">\n ({{(path.instance || 'unknown')}})\n </span>\n <span class=\"sort-arrow\" @click=\"sortDocs(1, path.path)\">{{sortBy[path.path] == 1 ? 'X' : '↑'}}</span>\n <span class=\"sort-arrow\" @click=\"sortDocs(-1, path.path)\">{{sortBy[path.path] == -1 ? 'X' : '↓'}}</span>\n </th>\n </thead>\n <tbody>\n <tr v-for=\"document in documents\" @click=\"handleDocumentClick(document, $event)\" :key=\"document._id\">\n <td v-for=\"schemaPath in filteredPaths\" :class=\"{ 'bg-blue-200': selectedDocuments.some(x => x._id.toString() === document._id.toString()) }\">\n <component\n :is=\"getComponentForPath(schemaPath)\"\n :value=\"getValueForPath(document, schemaPath.path)\"\n :allude=\"getReferenceModel(schemaPath)\">\n </component>\n </td>\n </tr>\n </tbody>\n </table>\n <div v-else-if=\"outputType === 'json'\" class=\"flex flex-col space-y-6\">\n <div\n v-for=\"document in documents\"\n :key=\"document._id\"\n @click=\"handleDocumentContainerClick(document, $event)\"\n :class=\"[\n 'group relative transition-colors',\n selectedDocuments.some(x => x._id.toString() === document._id.toString()) ? 'bg-blue-200' : 'hover:bg-slate-100'\n ]\"\n >\n <button\n type=\"button\"\n class=\"absolute top-2 right-2 z-10 inline-flex items-center rounded bg-ultramarine-600 px-2 py-1 text-xs font-semibold text-white shadow-sm transition-opacity duration-150 opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\"\n @click.stop=\"openDocument(document)\"\n >\n Open this Document\n </button>\n <list-json :value=\"filterDocument(document)\" :references=\"referenceMap\">\n </list-json>\n </div>\n </div>\n <div v-if=\"status === 'loading'\" class=\"loader\">\n <img src=\"images/loader.gif\">\n </div>\n </div>\n </div>\n <modal v-if=\"shouldShowExportModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowExportModal = false\">&times;</div>\n <export-query-results\n :schemaPaths=\"schemaPaths\"\n :search-text=\"searchText\"\n :currentModel=\"currentModel\"\n @done=\"shouldShowExportModal = false\">\n </export-query-results>\n </template>\n </modal>\n <modal v-if=\"shouldShowIndexModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowIndexModal = false\">&times;</div>\n <div class=\"text-xl font-bold mb-2\">Indexes</div>\n <div v-for=\"index in mongoDBIndexes\" class=\"w-full flex items-center\">\n <div class=\"grow shrink text-left flex justify-between items-center\" v-if=\"index.name != '_id_'\">\n <div>\n <div class=\"font-bold\">{{ index.name }}</div>\n <div class=\"text-sm font-mono\">{{ JSON.stringify(index.key) }}</div>\n </div>\n <div>\n <async-button\n type=\"button\"\n @click=\"dropIndex(index.name)\"\n class=\"rounded-md bg-valencia-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600 disabled:bg-gray-400 disabled:cursor-not-allowed\">\n Drop\n </async-button>\n </div>\n </div>\n </div>\n </template>\n </modal>\n <modal v-if=\"shouldShowFieldModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowFieldModal = false; selectedPaths = [...filteredPaths];\">&times;</div>\n <div v-for=\"(path, index) in schemaPaths\" :key=\"index\" class=\"w-5 flex items-center\">\n <input class=\"mt-0 h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-600 accent-sky-600\" type=\"checkbox\" :id=\"'path.path'+index\" @change=\"addOrRemove(path)\" :value=\"path.path\" :checked=\"isSelected(path.path)\" />\n <div class=\"ml-2 text-gray-700 grow shrink text-left\">\n <label :for=\"'path.path' + index\">{{path.path}}</label>\n </div>\n </div>\n <div class=\"mt-4 flex gap-2\">\n <button type=\"button\" @click=\"filterDocuments()\" class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">Filter Selection</button>\n <button type=\"button\" @click=\"selectAll()\" class=\"rounded-md bg-forest-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\">Select All</button>\n <button type=\"button\" @click=\"deselectAll()\" class=\"rounded-md bg-valencia-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">Deselect All</button>\n <button type=\"button\" @click=\"resetDocuments()\" class=\"rounded-md bg-gray-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-gray-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\" >Cancel</button>\n </div>\n </template>\n </modal>\n <modal v-if=\"shouldShowCreateModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowCreateModal = false;\">&times;</div>\n <create-document :currentModel=\"currentModel\" :paths=\"schemaPaths\" @close=\"closeCreationModal\"></create-document>\n </template>\n </modal>\n <modal v-if=\"shouldShowUpdateMultipleModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowUpdateMultipleModal = false;\">&times;</div>\n <update-document :currentModel=\"currentModel\" :document=\"selectedDocuments\" :multiple=\"true\" @update=\"updateDocuments\" @close=\"shouldShowUpdateMultipleModal=false;\"></update-document>\n </template>\n </modal>\n <modal v-if=\"shouldShowDeleteMultipleModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowDeleteMultipleModal = false;\">&times;</div>\n <h2>Are you sure you want to delete {{selectedDocuments.length}} documents?</h2>\n <div>\n <list-json :value=\"selectedDocuments\"></list-json>\n </div>\n <div class=\"flex gap-4\">\n <async-button @click=\"deleteDocuments\" class=\"rounded bg-red-500 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">\n Confirm\n </async-button>\n <button @click=\"shouldShowDeleteMultipleModal = false;\" class=\"rounded bg-gray-400 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-gray-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500\">\n Cancel\n </button>\n </div>\n </template>\n </modal>\n</div>\n";
5357
+ module.exports = "<div class=\"models flex\" style=\"height: calc(100vh - 55px); height: calc(100dvh - 55px)\">\n <div class=\"fixed top-[65px] cursor-pointer bg-gray-100 rounded-r-md z-10\" @click=\"hideSidebar = false\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"#5f6368\"><path d=\"M360-120v-720h80v720h-80Zm160-160v-400l200 200-200 200Z\"/></svg>\n </div>\n <aside class=\"bg-white border-r overflow-y-auto overflow-x-hidden h-full transition-all duration-300 ease-in-out z-20 w-0 lg:w-48 fixed lg:relative shrink-0\" :class=\"hideSidebar === true ? '!w-0' : hideSidebar === false ? '!w-48' : ''\">\n <div class=\"flex items-center border-b border-gray-100 w-48 overflow-x-hidden\">\n <div class=\"p-4 font-bold text-lg\">Models</div>\n <button\n @click=\"hideSidebar = true\"\n class=\"ml-auto mr-2 p-2 rounded hover:bg-gray-200 focus:outline-none\"\n aria-label=\"Close sidebar\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"h-5 w-5\" viewBox=\"0 -960 960 960\" class=\"w-5\" fill=\"currentColor\"><path d=\"M660-320v-320L500-480l160 160ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Zm120-80v-560H200v560h120Zm80 0h360v-560H400v560Zm-80 0H200h120Z\"/></svg>\n </button>\n </div>\n <nav class=\"flex flex-1 flex-col\">\n <ul role=\"list\" class=\"flex flex-1 flex-col gap-y-7\">\n <li>\n <ul role=\"list\">\n <li v-for=\"model in models\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"block truncate rounded-md py-2 pr-2 pl-2 text-sm font-semibold text-gray-700\"\n :class=\"model === currentModel ? 'bg-ultramarine-100 font-bold' : 'hover:bg-ultramarine-100'\">\n {{model}}\n </router-link>\n </li>\n </ul>\n </li>\n </ul>\n <div v-if=\"models.length === 0 && status === 'loaded'\" class=\"p-2 bg-red-100\">\n No models found\n </div>\n </nav>\n </aside>\n <div class=\"documents\" ref=\"documentsList\">\n <div class=\"relative h-[42px] z-10\">\n <div class=\"documents-menu\">\n <div class=\"flex flex-row items-center w-full gap-2\">\n <document-search\n ref=\"documentSearch\"\n :value=\"searchText\"\n :schema-paths=\"schemaPaths\"\n @search=\"search\"\n >\n </document-search>\n <div>\n <span v-if=\"numDocuments == null\">Loading ...</span>\n <span v-else-if=\"typeof numDocuments === 'number'\">{{numDocuments === 1 ? numDocuments+ ' document' : numDocuments + ' documents'}}</span>\n </div>\n <button\n @click=\"shouldShowExportModal = true\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Export\n </button>\n <button\n @click=\"stagingSelect\"\n type=\"button\"\n :class=\"{ 'bg-gray-500 ring-inset ring-2 ring-gray-300 hover:bg-gray-600': selectMultiple, 'bg-ultramarine-600 hover:bg-ultramarine-500' : !selectMultiple }\"\n class=\"rounded px-2 py-2 text-sm font-semibold text-white shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\"\n >\n {{ selectMultiple ? 'Cancel' : 'Select' }}\n </button>\n <button\n v-show=\"selectMultiple\"\n @click=\"shouldShowUpdateMultipleModal=true;\"\n type=\"button\"\n class=\"rounded bg-green-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\"\n >\n Update\n </button>\n <button\n @click=\"shouldShowDeleteMultipleModal=true;\"\n type=\"button\"\n v-show=\"selectMultiple\"\n class=\"rounded bg-red-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-500\"\n >\n Delete\n </button>\n <button\n @click=\"shouldShowCreateModal = true;\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Create\n </button>\n <button\n @click=\"openFieldSelection\"\n type=\"button\"\n v-show=\"!selectMultiple\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Fields\n </button>\n <div class=\"relative\" v-show=\"!selectMultiple\" ref=\"actionsMenuContainer\" @keyup.esc.prevent=\"closeActionsMenu\">\n <button\n @click=\"toggleActionsMenu\"\n type=\"button\"\n aria-label=\"More actions\"\n class=\"rounded bg-white px-2 py-2 text-sm font-semibold text-gray-700 shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-5 h-5\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Zm0 6a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Zm0 6a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z\" />\n </svg>\n </button>\n <div\n v-if=\"showActionsMenu\"\n class=\"absolute right-0 mt-2 w-48 origin-top-right rounded-md bg-white shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none z-20\"\n >\n <div class=\"py-1\">\n <button\n @click=\"openIndexModal\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100\"\n >\n Indexes\n </button>\n <button\n @click=\"openCollectionInfo\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-gray-700 hover:bg-gray-100\"\n >\n Collection Info\n </button>\n </div>\n </div>\n </div>\n <span class=\"isolate inline-flex rounded-md shadow-sm\">\n <button\n @click=\"setOutputType('table')\"\n type=\"button\"\n class=\"relative inline-flex items-center rounded-none rounded-l-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n :class=\"outputType === 'table' ? 'bg-gray-200' : 'bg-white'\">\n <img class=\"h-5 w-5\" src=\"images/table.svg\">\n </button>\n <button\n @click=\"setOutputType('json')\"\n type=\"button\"\n class=\"relative -ml-px inline-flex items-center rounded-none rounded-r-md px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-gray-50 focus:z-10\"\n :class=\"outputType === 'json' ? 'bg-gray-200' : 'bg-white'\">\n <img class=\"h-5 w-5\" src=\"images/json.svg\">\n </button>\n </span>\n </div>\n </div>\n </div>\n <div class=\"documents-container relative\">\n <div v-if=\"error\">\n <div class=\"bg-red-100 border border-red-400 text-red-700 px-4 py-3 relative m-4 rounded-md\" role=\"alert\">\n <span class=\"block font-bold\">Error</span>\n <span class=\"block\">{{ error }}</span>\n </div>\n </div>\n <table v-else-if=\"outputType === 'table'\">\n <thead>\n <th v-for=\"path in filteredPaths\" @click=\"addPathFilter(path.path)\" class=\"cursor-pointer\">\n {{path.path}}\n <span class=\"path-type\">\n ({{(path.instance || 'unknown')}})\n </span>\n <span class=\"sort-arrow\" @click=\"sortDocs(1, path.path)\">{{sortBy[path.path] == 1 ? 'X' : '↑'}}</span>\n <span class=\"sort-arrow\" @click=\"sortDocs(-1, path.path)\">{{sortBy[path.path] == -1 ? 'X' : '↓'}}</span>\n </th>\n </thead>\n <tbody>\n <tr v-for=\"document in documents\" @click=\"handleDocumentClick(document, $event)\" :key=\"document._id\">\n <td v-for=\"schemaPath in filteredPaths\" :class=\"{ 'bg-blue-200': selectedDocuments.some(x => x._id.toString() === document._id.toString()) }\">\n <component\n :is=\"getComponentForPath(schemaPath)\"\n :value=\"getValueForPath(document, schemaPath.path)\"\n :allude=\"getReferenceModel(schemaPath)\">\n </component>\n </td>\n </tr>\n </tbody>\n </table>\n <div v-else-if=\"outputType === 'json'\" class=\"flex flex-col space-y-6\">\n <div\n v-for=\"document in documents\"\n :key=\"document._id\"\n @click=\"handleDocumentContainerClick(document, $event)\"\n :class=\"[\n 'group relative transition-colors',\n selectedDocuments.some(x => x._id.toString() === document._id.toString()) ? 'bg-blue-200' : 'hover:bg-slate-100'\n ]\"\n >\n <button\n type=\"button\"\n class=\"absolute top-2 right-2 z-10 inline-flex items-center rounded bg-ultramarine-600 px-2 py-1 text-xs font-semibold text-white shadow-sm transition-opacity duration-150 opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\"\n @click.stop=\"openDocument(document)\"\n >\n Open this Document\n </button>\n <list-json :value=\"filterDocument(document)\" :references=\"referenceMap\">\n </list-json>\n </div>\n </div>\n <div v-if=\"status === 'loading'\" class=\"loader\">\n <img src=\"images/loader.gif\">\n </div>\n </div>\n </div>\n <modal v-if=\"shouldShowExportModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowExportModal = false\">&times;</div>\n <export-query-results\n :schemaPaths=\"schemaPaths\"\n :search-text=\"searchText\"\n :currentModel=\"currentModel\"\n @done=\"shouldShowExportModal = false\">\n </export-query-results>\n </template>\n </modal>\n <modal v-if=\"shouldShowIndexModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowIndexModal = false\">&times;</div>\n <div class=\"text-xl font-bold mb-2\">Indexes</div>\n <div v-for=\"index in mongoDBIndexes\" class=\"w-full flex items-center\">\n <div class=\"grow shrink text-left flex justify-between items-center\" v-if=\"index.name != '_id_'\">\n <div>\n <div class=\"font-bold flex items-center gap-2\">\n <div>{{ index.name }}</div>\n <div v-if=\"isTTLIndex(index)\" class=\"rounded-full bg-ultramarine-100 px-2 py-0.5 text-xs font-semibold text-ultramarine-700\">\n TTL: {{ formatTTL(index.expireAfterSeconds) }}\n </div>\n </div>\n <div class=\"text-sm font-mono\">{{ JSON.stringify(index.key) }}</div>\n </div>\n <div>\n <async-button\n type=\"button\"\n @click=\"dropIndex(index.name)\"\n class=\"rounded-md bg-valencia-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600 disabled:bg-gray-400 disabled:cursor-not-allowed\">\n Drop\n </async-button>\n </div>\n </div>\n </div>\n </template>\n </modal>\n <modal v-if=\"shouldShowCollectionInfoModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowCollectionInfoModal = false\">&times;</div>\n <div class=\"text-xl font-bold mb-2\">Collection Info</div>\n <div v-if=\"!collectionInfo\" class=\"text-gray-600\">Loading collection details...</div>\n <div v-else class=\"space-y-3\">\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Documents</div>\n <div class=\"text-gray-900\">{{ formatNumber(collectionInfo.documentCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Indexes</div>\n <div class=\"text-gray-900\">{{ formatNumber(collectionInfo.indexCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Total Index Size</div>\n <div class=\"text-gray-900\">{{ formatCollectionSize(collectionInfo.totalIndexSize) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Total Storage Size</div>\n <div class=\"text-gray-900\">{{ formatCollectionSize(collectionInfo.size) }}</div>\n </div>\n <div class=\"flex flex-col gap-1\">\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Collation</div>\n <div class=\"text-gray-900\">{{ collectionInfo.hasCollation ? 'Yes' : 'No' }}</div>\n </div>\n <div v-if=\"collectionInfo.hasCollation\" class=\"rounded bg-gray-100 p-3 text-sm text-gray-800 overflow-x-auto\">\n <pre class=\"whitespace-pre-wrap\">{{ JSON.stringify(collectionInfo.collation, null, 2) }}</pre>\n </div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-gray-700\">Capped</div>\n <div class=\"text-gray-900\">{{ collectionInfo.capped ? 'Yes' : 'No' }}</div>\n </div>\n </div>\n </template>\n </modal>\n <modal v-if=\"shouldShowFieldModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowFieldModal = false; selectedPaths = [...filteredPaths];\">&times;</div>\n <div v-for=\"(path, index) in schemaPaths\" :key=\"index\" class=\"w-5 flex items-center\">\n <input class=\"mt-0 h-4 w-4 rounded border-gray-300 text-sky-600 focus:ring-sky-600 accent-sky-600\" type=\"checkbox\" :id=\"'path.path'+index\" @change=\"addOrRemove(path)\" :value=\"path.path\" :checked=\"isSelected(path.path)\" />\n <div class=\"ml-2 text-gray-700 grow shrink text-left\">\n <label :for=\"'path.path' + index\">{{path.path}}</label>\n </div>\n </div>\n <div class=\"mt-4 flex gap-2\">\n <button type=\"button\" @click=\"filterDocuments()\" class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">Filter Selection</button>\n <button type=\"button\" @click=\"selectAll()\" class=\"rounded-md bg-forest-green-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-green-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\">Select All</button>\n <button type=\"button\" @click=\"deselectAll()\" class=\"rounded-md bg-valencia-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-valencia-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">Deselect All</button>\n <button type=\"button\" @click=\"resetDocuments()\" class=\"rounded-md bg-gray-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-gray-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-green-600\" >Cancel</button>\n </div>\n </template>\n </modal>\n <modal v-if=\"shouldShowCreateModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowCreateModal = false;\">&times;</div>\n <create-document :currentModel=\"currentModel\" :paths=\"schemaPaths\" @close=\"closeCreationModal\"></create-document>\n </template>\n </modal>\n <modal v-if=\"shouldShowUpdateMultipleModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowUpdateMultipleModal = false;\">&times;</div>\n <update-document :currentModel=\"currentModel\" :document=\"selectedDocuments\" :multiple=\"true\" @update=\"updateDocuments\" @close=\"shouldShowUpdateMultipleModal=false;\"></update-document>\n </template>\n </modal>\n <modal v-if=\"shouldShowDeleteMultipleModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"shouldShowDeleteMultipleModal = false;\">&times;</div>\n <h2>Are you sure you want to delete {{selectedDocuments.length}} documents?</h2>\n <div>\n <list-json :value=\"selectedDocuments\"></list-json>\n </div>\n <div class=\"flex gap-4\">\n <async-button @click=\"deleteDocuments\" class=\"rounded bg-red-500 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-red-600 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-red-600\">\n Confirm\n </async-button>\n <button @click=\"shouldShowDeleteMultipleModal = false;\" class=\"rounded bg-gray-400 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-gray-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-gray-500\">\n Cancel\n </button>\n </div>\n </template>\n </modal>\n</div>\n";
5046
5358
 
5047
- /***/ }),
5359
+ /***/ },
5048
5360
 
5049
- /***/ "./frontend/src/models/models.js":
5361
+ /***/ "./frontend/src/models/models.js"
5050
5362
  /*!***************************************!*\
5051
5363
  !*** ./frontend/src/models/models.js ***!
5052
5364
  \***************************************/
5053
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
5365
+ (module, __unused_webpack_exports, __webpack_require__) {
5054
5366
 
5055
5367
  "use strict";
5056
5368
 
@@ -5058,6 +5370,7 @@ module.exports = "<div class=\"models flex\" style=\"height: calc(100vh - 55px);
5058
5370
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
5059
5371
  const template = __webpack_require__(/*! ./models.html */ "./frontend/src/models/models.html");
5060
5372
  const mpath = __webpack_require__(/*! mpath */ "./node_modules/mpath/index.js");
5373
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
5061
5374
 
5062
5375
  const appendCSS = __webpack_require__(/*! ../appendCSS */ "./frontend/src/appendCSS.js");
5063
5376
  appendCSS(__webpack_require__(/*! ./models.css */ "./frontend/src/models/models.css"));
@@ -5089,6 +5402,7 @@ module.exports = app => app.component('models', {
5089
5402
  shouldShowCreateModal: false,
5090
5403
  shouldShowFieldModal: false,
5091
5404
  shouldShowIndexModal: false,
5405
+ shouldShowCollectionInfoModal: false,
5092
5406
  shouldShowUpdateMultipleModal: false,
5093
5407
  shouldShowDeleteMultipleModal: false,
5094
5408
  shouldExport: {},
@@ -5099,7 +5413,9 @@ module.exports = app => app.component('models', {
5099
5413
  outputType: 'table', // json, table
5100
5414
  hideSidebar: null,
5101
5415
  lastSelectedIndex: null,
5102
- error: null
5416
+ error: null,
5417
+ showActionsMenu: false,
5418
+ collectionInfo: null
5103
5419
  }),
5104
5420
  created() {
5105
5421
  this.currentModel = this.model;
@@ -5108,12 +5424,23 @@ module.exports = app => app.component('models', {
5108
5424
  beforeDestroy() {
5109
5425
  document.removeEventListener('scroll', this.onScroll, true);
5110
5426
  window.removeEventListener('popstate', this.onPopState, true);
5427
+ document.removeEventListener('click', this.onOutsideActionsMenuClick, true);
5111
5428
  },
5112
5429
  async mounted() {
5113
5430
  this.onScroll = () => this.checkIfScrolledToBottom();
5114
5431
  document.addEventListener('scroll', this.onScroll, true);
5115
5432
  this.onPopState = () => this.initSearchFromUrl();
5116
5433
  window.addEventListener('popstate', this.onPopState, true);
5434
+ this.onOutsideActionsMenuClick = event => {
5435
+ if (!this.showActionsMenu) {
5436
+ return;
5437
+ }
5438
+ const actionsMenu = this.$refs.actionsMenuContainer;
5439
+ if (actionsMenu && !actionsMenu.contains(event.target)) {
5440
+ this.closeActionsMenu();
5441
+ }
5442
+ };
5443
+ document.addEventListener('click', this.onOutsideActionsMenuClick, true);
5117
5444
  const { models, readyState } = await api.Model.listModels();
5118
5445
  this.models = models;
5119
5446
  if (this.currentModel == null && this.models.length > 0) {
@@ -5215,6 +5542,13 @@ module.exports = app => app.component('models', {
5215
5542
  async dropIndex(name) {
5216
5543
  const { mongoDBIndexes } = await api.Model.dropIndex({ model: this.currentModel, name });
5217
5544
  this.mongoDBIndexes = mongoDBIndexes;
5545
+ vanillatoasts.create({
5546
+ title: 'Index dropped!',
5547
+ type: 'success',
5548
+ timeout: 3000,
5549
+ icon: 'images/success.png',
5550
+ positionClass: 'bottomRight'
5551
+ });
5218
5552
  },
5219
5553
  async closeCreationModal() {
5220
5554
  this.shouldShowCreateModal = false;
@@ -5287,11 +5621,86 @@ module.exports = app => app.component('models', {
5287
5621
  }
5288
5622
  },
5289
5623
  async openIndexModal() {
5624
+ this.closeActionsMenu();
5290
5625
  this.shouldShowIndexModal = true;
5291
5626
  const { mongoDBIndexes, schemaIndexes } = await api.Model.getIndexes({ model: this.currentModel });
5292
5627
  this.mongoDBIndexes = mongoDBIndexes;
5293
5628
  this.schemaIndexes = schemaIndexes;
5294
5629
  },
5630
+ toggleActionsMenu() {
5631
+ this.showActionsMenu = !this.showActionsMenu;
5632
+ },
5633
+ closeActionsMenu() {
5634
+ this.showActionsMenu = false;
5635
+ },
5636
+ async openCollectionInfo() {
5637
+ this.closeActionsMenu();
5638
+ this.shouldShowCollectionInfoModal = true;
5639
+ this.collectionInfo = null;
5640
+ const { info } = await api.Model.getCollectionInfo({ model: this.currentModel });
5641
+ this.collectionInfo = info;
5642
+ },
5643
+ isTTLIndex(index) {
5644
+ return index != null && index.expireAfterSeconds != null;
5645
+ },
5646
+ formatTTL(expireAfterSeconds) {
5647
+ if (typeof expireAfterSeconds !== 'number') {
5648
+ return '';
5649
+ }
5650
+
5651
+ let remaining = expireAfterSeconds;
5652
+ const days = Math.floor(remaining / (24 * 60 * 60));
5653
+ remaining = remaining % (24 * 60 * 60);
5654
+ const hours = Math.floor(remaining / (60 * 60));
5655
+ remaining = remaining % (60 * 60);
5656
+ const minutes = Math.floor(remaining / 60);
5657
+ const seconds = remaining % 60;
5658
+
5659
+ const parts = [];
5660
+ if (days > 0) {
5661
+ parts.push(`${days} day${days === 1 ? '' : 's'}`);
5662
+ }
5663
+ if (hours > 0) {
5664
+ parts.push(`${hours} hour${hours === 1 ? '' : 's'}`);
5665
+ }
5666
+ if (minutes > 0) {
5667
+ parts.push(`${minutes} minute${minutes === 1 ? '' : 's'}`);
5668
+ }
5669
+ if (seconds > 0 || parts.length === 0) {
5670
+ parts.push(`${seconds} second${seconds === 1 ? '' : 's'}`);
5671
+ }
5672
+
5673
+ return parts.join(', ');
5674
+ },
5675
+ formatCollectionSize(size) {
5676
+ if (typeof size !== 'number') {
5677
+ return 'Unknown';
5678
+ }
5679
+
5680
+ const KB = 1024;
5681
+ const MB = KB * 1024;
5682
+ const GB = MB * 1024;
5683
+ const TB = GB * 1024;
5684
+
5685
+ if (size >= TB) {
5686
+ return `${(size / TB).toFixed(3)} TB`;
5687
+ } else if (size >= GB) {
5688
+ return `${(size / GB).toFixed(3)} GB`;
5689
+ } else if (size >= MB) {
5690
+ return `${(size / MB).toFixed(3)} MB`;
5691
+ } else if (size >= KB) {
5692
+ return `${(size / KB).toFixed(3)} KB`;
5693
+ } else {
5694
+ return `${size.toLocaleString()} bytes`;
5695
+ }
5696
+ },
5697
+ formatNumber(value) {
5698
+ if (typeof value !== 'number') {
5699
+ return 'Unknown';
5700
+ }
5701
+
5702
+ return value.toLocaleString();
5703
+ },
5295
5704
  checkIndexLocation(indexName) {
5296
5705
  if (this.schemaIndexes.find(x => x.name == indexName) && this.mongoDBIndexes.find(x => x.name == indexName)) {
5297
5706
  return 'text-gray-500';
@@ -5465,6 +5874,13 @@ module.exports = app => app.component('models', {
5465
5874
  this.documents[index] = res.doc;
5466
5875
  }
5467
5876
  this.edittingDoc = null;
5877
+ vanillatoasts.create({
5878
+ title: 'Document updated!',
5879
+ type: 'success',
5880
+ timeout: 3000,
5881
+ icon: 'images/success.png',
5882
+ positionClass: 'bottomRight'
5883
+ });
5468
5884
  },
5469
5885
  handleDocumentClick(document, event) {
5470
5886
  if (this.selectMultiple) {
@@ -5528,6 +5944,13 @@ module.exports = app => app.component('models', {
5528
5944
  this.lastSelectedIndex = null;
5529
5945
  this.shouldShowDeleteMultipleModal = false;
5530
5946
  this.selectMultiple = false;
5947
+ vanillatoasts.create({
5948
+ title: 'Documents deleted!',
5949
+ type: 'success',
5950
+ timeout: 3000,
5951
+ icon: 'images/success.png',
5952
+ positionClass: 'bottomRight'
5953
+ });
5531
5954
  },
5532
5955
  async updateDocuments() {
5533
5956
  await this.getDocuments();
@@ -5548,13 +5971,13 @@ module.exports = app => app.component('models', {
5548
5971
  });
5549
5972
 
5550
5973
 
5551
- /***/ }),
5974
+ /***/ },
5552
5975
 
5553
- /***/ "./frontend/src/models/trie.js":
5976
+ /***/ "./frontend/src/models/trie.js"
5554
5977
  /*!*************************************!*\
5555
5978
  !*** ./frontend/src/models/trie.js ***!
5556
5979
  \*************************************/
5557
- /***/ ((module) => {
5980
+ (module) {
5558
5981
 
5559
5982
  "use strict";
5560
5983
 
@@ -5702,13 +6125,13 @@ module.exports = {
5702
6125
  };
5703
6126
 
5704
6127
 
5705
- /***/ }),
6128
+ /***/ },
5706
6129
 
5707
- /***/ "./frontend/src/mothership.js":
6130
+ /***/ "./frontend/src/mothership.js"
5708
6131
  /*!************************************!*\
5709
6132
  !*** ./frontend/src/mothership.js ***!
5710
6133
  \************************************/
5711
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
6134
+ (__unused_webpack_module, exports, __webpack_require__) {
5712
6135
 
5713
6136
  "use strict";
5714
6137
 
@@ -5774,35 +6197,35 @@ exports.updateWorkspaceMember = function updateWorkspaceMember(params) {
5774
6197
  exports.hasAPIKey = client.hasAPIKey;
5775
6198
 
5776
6199
 
5777
- /***/ }),
6200
+ /***/ },
5778
6201
 
5779
- /***/ "./frontend/src/navbar/navbar.css":
6202
+ /***/ "./frontend/src/navbar/navbar.css"
5780
6203
  /*!****************************************!*\
5781
6204
  !*** ./frontend/src/navbar/navbar.css ***!
5782
6205
  \****************************************/
5783
- /***/ ((module) => {
6206
+ (module) {
5784
6207
 
5785
6208
  "use strict";
5786
6209
  module.exports = ".active {\n text-decoration: underline;\n}\n\n.navbar .nav-left {\n float: left;\n line-height: 54px;\n font-size: 20px;\n padding-left: 20px;\n}\n\n.navbar .nav-left a {\n color: #232323;\n}\n\n.navbar .nav-right {\n float: right;\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n font-size: 16px;\n line-height: 54px;\n padding-right: 20px;\n}\n\n.navbar .nav-right .nav-item {\n flex-grow: 1;\n padding: 0px 12px;\n position: relative;\n z-index: 21000;\n}\n\n.navbar .nav-right .nav-item:hover {\n flex-grow: 1;\n padding: 0px 12px;\n border-bottom: 1px solid #E1B9A0;\n}\n\n.navbar .nav-right .nav-item.active {\n border-bottom: 1px solid #E1B9A0;\n}\n\n.navbar .nav-action {\n cursor: pointer;\n color: #E1B9A0;\n}\n\n.navbar .nav-action svg {\n height: 1em;\n vertical-align: middle;\n}\n\n.navbar .nav-right .nav-item .flyout {\n position: absolute;\n top: 55px;\n right: 0px;\n visibility: hidden;\n opacity: 0;\n transition: opacity .25s,visibility .25s,transform .25s;\n width: auto;\n box-shadow: 0 12px 32px rgba(0, 0, 0, .1), 0 2px 6px rgba(0, 0, 0, .08);\n background-color: #393944;\n padding-left: 0.5em;\n padding-right: 0.5em;\n z-index: 1000;\n min-width: 192px;\n font-size: 0.9em;\n}\n\n.navbar .nav-right .nav-item:hover .flyout a {\n color: #E1B9A0;\n margin-top: 0.25em;\n margin-bottom: 0.25em;\n}\n\n.navbar .nav-right .nav-item:hover .flyout a:hover {\n color: #E1B9A0;\n}\n\n.navbar .nav-right .nav-item:hover .flyout .nav-action {\n color: #E1B9A0;\n margin-top: 0.25em;\n margin-bottom: 0.25em;\n}\n\n.navbar .nav-right .nav-item:hover .flyout .nav-action:hover {\n color: #E1B9A0;\n}\n\n.navbar .nav-right .nav-item:hover .flyout {\n visibility: visible;\n opacity: 1;\n}\n\n#bar-1 {\n\ttransform: translateY(-4px);\n}\n#bar-3 {\n\ttransform: translateY(4px);\n}\n.menu {\n display: none;\n}\n.menu {\n\twidth: 35px;\n\theight: 30px;\n\tmargin: 18px 2px 0px 0px;\n\tcursor: pointer;\n float: right;\n}\n.bar {\n\theight: 5px;\n\twidth: 100%;\n\tbackground-color: #fff;\n\tdisplay: block;\n\tborder-radius: 5px;\n\ttransition: 0.4s ease;\n}\n.change-icon #bar-1 {\n transform: translateY(4px) rotateZ(-405deg);\n}\n.change-icon #bar-2 {\n opacity: 0;\n}\n.change-icon #bar-3 {\n transform: translateY(-6px) rotateZ(405deg);\n}\n\n@media (max-width: 767px) {\n .menu {\n display: block;\n }\n\n .change-icon ~ div.nav-right {\n left: 0;\n }\n\n .navbar .nav-right {\n\t\tposition: fixed;\n\t\ttop: 55px;\n\t\tleft: -130%;\n\t\tbackground: #111;\n\t\theight: 100vh;\n\t\twidth: 100%;\n\t\ttext-align: center;\n\t\tdisplay: block;\n\t\ttransition: all 0.3s ease;\n z-index: 10000;\n\t}\n}\n";
5787
6210
 
5788
- /***/ }),
6211
+ /***/ },
5789
6212
 
5790
- /***/ "./frontend/src/navbar/navbar.html":
6213
+ /***/ "./frontend/src/navbar/navbar.html"
5791
6214
  /*!*****************************************!*\
5792
6215
  !*** ./frontend/src/navbar/navbar.html ***!
5793
6216
  \*****************************************/
5794
- /***/ ((module) => {
6217
+ (module) {
5795
6218
 
5796
6219
  "use strict";
5797
6220
  module.exports = "<div class=\"navbar w-full bg-gray-50 flex justify-between border-b border-gray-200 !h-[55px]\">\n <div class=\"flex items-center gap-4 h-full pl-4\">\n <router-link :to=\"{ name: defaultRoute }\">\n <img src=\"images/logo.svg\" class=\"h-[32px] mr-1\" alt=\"Mongoose Studio Logo\" />\n </router-link>\n <div v-if=\"!!state.nodeEnv\" title=\"NODE_ENV\" class=\"inline-flex items-center rounded-md px-2 py-1 text-sm font-medium text-gray-900\" :class=\"warnEnv ? 'bg-red-300' : 'bg-yellow-300'\">\n {{state.nodeEnv}}\n </div>\n </div>\n <div class=\"h-full pr-4 hidden md:block\">\n <div class=\"sm:ml-6 sm:flex sm:space-x-8 h-full\">\n <a v-if=\"hasAccess(roles, 'root')\"\n href=\"#/\"\n class=\"inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium\"\n :class=\"documentView ? 'text-gray-900 border-ultramarine-500' : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700'\">Documents</a>\n <span v-else class=\"inline-flex items-center px-1 pt-1 border-b-2 text-sm font-medium text-gray-300 cursor-not-allowed\" aria-disabled=\"true\">\n Documents\n <svg class=\"h-4 w-4 ml-1\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <a v-if=\"hasAccess(roles, 'dashboards')\"\n href=\"#/dashboards\"\n class=\"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium\"\n :class=\"dashboardView ? 'text-gray-900 border-ultramarine-500' : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700'\">Dashboards</a>\n <span v-else class=\"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium text-gray-300 cursor-not-allowed\">\n Dashboards\n <svg class=\"h-4 w-4 ml-1\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <a v-if=\"hasAccess(roles, 'chat')\"\n href=\"#/chat\"\n class=\"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium\"\n :class=\"chatView ? 'text-gray-900 border-ultramarine-500' : 'border-transparent text-gray-500 hover:border-gray-300 hover:text-gray-700'\">Chat</a>\n <span v-else class=\"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium text-gray-300 cursor-not-allowed\">\n Chat\n <svg class=\"h-4 w-4 ml-1\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <a\n href=\"https://studio.mongoosejs.io/docs\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"inline-flex items-center border-b-2 px-1 pt-1 text-sm font-medium text-gray-500 hover:border-gray-300 hover:text-gray-700 border-transparent\"\n >\n Docs\n <svg xmlns=\"http://www.w3.org/2000/svg\" class=\"ml-1 h-4 w-4\" viewBox=\"0 -960 960 960\" fill=\"currentColor\"><path d=\"M200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h280v80H200v560h560v-280h80v280q0 33-23.5 56.5T760-120H200Zm188-212-56-56 372-372H560v-80h280v280h-80v-144L388-332Z\"/></svg>\n </a>\n\n <div class=\"h-full flex items-center\" v-if=\"!user && hasAPIKey\">\n <button\n type=\"button\"\n @click=\"loginWithGithub\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Login\n </button>\n </div>\n <div v-if=\"user && hasAPIKey\" class=\"h-full flex items-center relative\" v-clickOutside=\"hideFlyout\">\n <div>\n <button type=\"button\" @click=\"showFlyout = !showFlyout\" class=\"relative flex rounded-full bg-gray-800 text-sm focus:outline-none focus:ring-2 focus:ring-white focus:ring-offset-2 focus:ring-offset-gray-800\" id=\"user-menu-button\" aria-expanded=\"false\" aria-haspopup=\"true\">\n <span class=\"absolute -inset-1.5\"></span>\n <span class=\"sr-only\">Open user menu</span>\n <img class=\"size-8 rounded-full\" :src=\"user.picture\" alt=\"\">\n </button>\n </div>\n\n <div v-if=\"showFlyout\" class=\"absolute right-0 z-[100] top-[90%] w-48 origin-top-right rounded-md bg-white py-1 shadow-lg ring-1 ring-black/5 focus:outline-none\" role=\"menu\" aria-orientation=\"vertical\" aria-labelledby=\"user-menu-button\" tabindex=\"-1\">\n <router-link to=\"/team\" v-if=\"hasAccess(roles, 'team')\" @click=\"showFlyout = false\" class=\"cursor-pointer block px-4 py-2 text-sm text-gray-700 hover:bg-ultramarine-200\" role=\"menuitem\" tabindex=\"-1\" id=\"user-menu-item-2\">Team</router-link>\n <span v-else class=\"block px-4 py-2 text-sm text-gray-300 cursor-not-allowed\" role=\"menuitem\" tabindex=\"-1\" id=\"user-menu-item-2\">\n Team\n <svg class=\"h-4 w-4 ml-1 inline\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span @click=\"logout\" class=\"cursor-pointer block px-4 py-2 text-sm text-gray-700 hover:bg-ultramarine-200\" role=\"menuitem\" tabindex=\"-1\" id=\"user-menu-item-2\">Sign out</span>\n </div>\n </div>\n\n </div>\n </div>\n <div class=\"md:hidden flex items-center\">\n <!-- Mobile menu toggle, controls the 'mobileMenuOpen' state. -->\n <button type=\"button\" id=\"open-mobile-menu\" class=\"-ml-2 rounded-md p-2 pr-4 text-gray-400\">\n <span class=\"sr-only\">Open menu</span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M3.75 6.75h16.5M3.75 12h16.5m-16.5 5.25h16.5\" />\n </svg>\n </button>\n </div>\n\n <!-- Mobile menu mask -->\n <div id=\"mobile-menu-mask\" class=\"fixed inset-0 bg-black bg-opacity-40 z-40 hidden\"></div>\n <!-- Mobile menu drawer -->\n <div id=\"mobile-menu\" class=\"fixed inset-0 bg-white shadow-lg z-50 transform translate-x-full transition-transform duration-200 ease-in-out flex flex-col\">\n <div class=\"flex items-center justify-between px-4 !h-[55px] border-b border-gray-200\">\n <router-link :to=\"{ name: defaultRoute }\">\n <img src=\"images/logo.svg\" class=\"h-[32px]\" alt=\"Mongoose Studio Logo\" />\n </router-link>\n <button type=\"button\" id=\"close-mobile-menu\" class=\"text-gray-400 p-2 rounded-md\">\n <span class=\"sr-only\">Close menu</span>\n <svg class=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n <nav class=\"flex-1 px-4 py-4 space-y-2\">\n <a v-if=\"hasAccess(roles, 'root')\"\n href=\"#/\"\n class=\"block px-3 py-2 rounded-md text-base font-medium\"\n :class=\"documentView ? 'text-ultramarine-700 bg-ultramarine-100' : 'text-gray-700 hover:bg-gray-100'\">Documents</a>\n <span v-else class=\"block px-3 py-2 rounded-md text-base font-medium text-gray-300 cursor-not-allowed\">\n Documents\n <svg class=\"h-4 w-4 ml-1 inline\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <a v-if=\"hasAccess(roles, 'dashboards')\"\n href=\"#/dashboards\"\n class=\"block px-3 py-2 rounded-md text-base font-medium\"\n :class=\"dashboardView ? 'text-ultramarine-700 bg-ultramarine-100' : 'text-gray-700 hover:bg-gray-100'\">Dashboards</a>\n <span v-else class=\"block px-3 py-2 rounded-md text-base font-medium text-gray-300 cursor-not-allowed\">\n Dashboards\n <svg class=\"h-4 w-4 ml-1 inline\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <a v-if=\"hasAccess(roles, 'chat')\"\n href=\"#/chat\"\n class=\"block px-3 py-2 rounded-md text-base font-medium\"\n :class=\"chatView ? 'text-ultramarine-700 bg-ultramarine-100' : 'text-gray-700 hover:bg-gray-100'\">Chat</a>\n <span v-else class=\"block px-3 py-2 rounded-md text-base font-medium text-gray-300 cursor-not-allowed\">\n Chat\n <svg class=\"h-4 w-4 ml-1 inline\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <div v-if=\"!user && hasAPIKey\" class=\"mt-4\">\n <button\n type=\"button\"\n @click=\"loginWithGithub\"\n class=\"w-full rounded bg-ultramarine-600 px-3 py-2 text-base font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n Login\n </button>\n </div>\n <div v-if=\"user && hasAPIKey\" class=\"mt-4\">\n <div class=\"flex items-center gap-3 px-3 py-2 bg-gray-50 rounded-md\">\n <img class=\"size-8 rounded-full\" :src=\"user.picture\" alt=\"\">\n <span class=\"text-gray-900 font-medium\">{{ user.name }}</span>\n </div>\n <div class=\"mt-2 space-y-1\">\n <router-link to=\"/team\" v-if=\"hasAccess(roles, 'team')\" class=\"block px-3 py-2 rounded-md text-base text-gray-700 hover:bg-ultramarine-100\">Team</router-link>\n <span v-else class=\"block px-3 py-2 rounded-md text-base text-gray-300 cursor-not-allowed\">\n Team\n <svg class=\"h-4 w-4 ml-1 inline\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 2a4 4 0 00-4 4v2H5a2 2 0 00-2 2v6a2 2 0 002 2h10a2 2 0 002-2v-6a2 2 0 00-2-2h-1V6a4 4 0 00-4-4zm-3 6V6a3 3 0 116 0v2H7z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span @click=\"logout\" class=\"block px-3 py-2 rounded-md text-base text-gray-700 hover:bg-ultramarine-100 cursor-pointer\">Sign out</span>\n </div>\n </div>\n </nav>\n </div>\n</div>\n";
5798
6221
 
5799
- /***/ }),
6222
+ /***/ },
5800
6223
 
5801
- /***/ "./frontend/src/navbar/navbar.js":
6224
+ /***/ "./frontend/src/navbar/navbar.js"
5802
6225
  /*!***************************************!*\
5803
6226
  !*** ./frontend/src/navbar/navbar.js ***!
5804
6227
  \***************************************/
5805
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6228
+ (module, __unused_webpack_exports, __webpack_require__) {
5806
6229
 
5807
6230
  "use strict";
5808
6231
 
@@ -5902,13 +6325,13 @@ module.exports = app => app.component('navbar', {
5902
6325
  });
5903
6326
 
5904
6327
 
5905
- /***/ }),
6328
+ /***/ },
5906
6329
 
5907
- /***/ "./frontend/src/routes.js":
6330
+ /***/ "./frontend/src/routes.js"
5908
6331
  /*!********************************!*\
5909
6332
  !*** ./frontend/src/routes.js ***!
5910
6333
  \********************************/
5911
- /***/ ((module) => {
6334
+ (module) {
5912
6335
 
5913
6336
  "use strict";
5914
6337
 
@@ -6003,24 +6426,24 @@ module.exports = {
6003
6426
  };
6004
6427
 
6005
6428
 
6006
- /***/ }),
6429
+ /***/ },
6007
6430
 
6008
- /***/ "./frontend/src/splash/splash.html":
6431
+ /***/ "./frontend/src/splash/splash.html"
6009
6432
  /*!*****************************************!*\
6010
6433
  !*** ./frontend/src/splash/splash.html ***!
6011
6434
  \*****************************************/
6012
- /***/ ((module) => {
6435
+ (module) {
6013
6436
 
6014
6437
  "use strict";
6015
6438
  module.exports = "<div class=\"w-full h-full flex items-center justify-center\">\n <div class=\"text-center\">\n <div class=\"rounded-full bg-gray-100 p-6 inline-block\">\n <img src=\"images/logo.svg\" class=\"w-48 h-48\">\n </div>\n <div class=\"text-lg mt-2 font-bold\">\n Mongoose Studio\n </div>\n <div v-if=\"loading\" class=\"mt-2\">\n <img src=\"images/loader.gif\" class=\"inline w-16 h-16\">\n </div>\n <div class=\"mt-2 text-gray-700\" v-if=\"!loading\">\n {{workspaceName}}\n </div>\n <div class=\"mt-4 flex gap-4 justify-center\" v-if=\"!loading\">\n <div>\n <async-button\n type=\"button\"\n @click=\"loginWithGithub\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600 disabled:bg-gray-500\">\n <svg viewBox=\"0 0 98 98\" class=\"inline mr-1\" height=\"1.5em\" xmlns=\"http://www.w3.org/2000/svg\"><path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M48.854 0C21.839 0 0 22 0 49.217c0 21.756 13.993 40.172 33.405 46.69 2.427.49 3.316-1.059 3.316-2.362 0-1.141-.08-5.052-.08-9.127-13.59 2.934-16.42-5.867-16.42-5.867-2.184-5.704-5.42-7.17-5.42-7.17-4.448-3.015.324-3.015.324-3.015 4.934.326 7.523 5.052 7.523 5.052 4.367 7.496 11.404 5.378 14.235 4.074.404-3.178 1.699-5.378 3.074-6.6-10.839-1.141-22.243-5.378-22.243-24.283 0-5.378 1.94-9.778 5.014-13.2-.485-1.222-2.184-6.275.486-13.038 0 0 4.125-1.304 13.426 5.052a46.97 46.97 0 0 1 12.214-1.63c4.125 0 8.33.571 12.213 1.63 9.302-6.356 13.427-5.052 13.427-5.052 2.67 6.763.97 11.816.485 13.038 3.155 3.422 5.015 7.822 5.015 13.2 0 18.905-11.404 23.06-22.324 24.283 1.78 1.548 3.316 4.481 3.316 9.126 0 6.6-.08 11.897-.08 13.526 0 1.304.89 2.853 3.316 2.364 19.412-6.52 33.405-24.935 33.405-46.691C97.707 22 75.788 0 48.854 0z\" fill=\"#fff\"/></svg>\n Login With GitHub\n </async-button>\n </div>\n <div>\n <async-button\n type=\"button\"\n @click=\"loginWithGoogle\"\n class=\"rounded bg-ultramarine-600 px-2 py-2 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600 disabled:bg-gray-500\">\n <svg class=\"inline\" xmlns=\"http://www.w3.org/2000/svg\" height=\"1.5em\" viewBox=\"0 0 512 512\"><path fill=\"#fff\" d=\"M386 400c45-42 65-112 53-179H260v74h102c-4 24-18 44-38 57z\"/><path fill=\"#fff\" d=\"M90 341a192 192 0 0 0 296 59l-62-48c-53 35-141 22-171-60z\"/><path fill=\"#fff\" d=\"M153 292c-8-25-8-48 0-73l-63-49c-23 46-30 111 0 171z\"/><path fill=\"#fff\" d=\"M153 219c22-69 116-109 179-50l55-54c-78-75-230-72-297 55z\"/></svg>\n Login With Google\n </async-button>\n </div>\n </div>\n <div class=\"mt-4\" v-if=\"state.authError\">\n <div class=\"rounded-md bg-red-50 p-4\">\n <div class=\"flex\">\n <div class=\"shrink-0\">\n <svg class=\"size-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">{{state.authError}}</h3>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n";
6016
6439
 
6017
- /***/ }),
6440
+ /***/ },
6018
6441
 
6019
- /***/ "./frontend/src/splash/splash.js":
6442
+ /***/ "./frontend/src/splash/splash.js"
6020
6443
  /*!***************************************!*\
6021
6444
  !*** ./frontend/src/splash/splash.js ***!
6022
6445
  \***************************************/
6023
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6446
+ (module, __unused_webpack_exports, __webpack_require__) {
6024
6447
 
6025
6448
  "use strict";
6026
6449
 
@@ -6051,24 +6474,24 @@ module.exports = app => app.component('splash', {
6051
6474
  });
6052
6475
 
6053
6476
 
6054
- /***/ }),
6477
+ /***/ },
6055
6478
 
6056
- /***/ "./frontend/src/team/new-invitation/new-invitation.html":
6479
+ /***/ "./frontend/src/team/new-invitation/new-invitation.html"
6057
6480
  /*!**************************************************************!*\
6058
6481
  !*** ./frontend/src/team/new-invitation/new-invitation.html ***!
6059
6482
  \**************************************************************/
6060
- /***/ ((module) => {
6483
+ (module) {
6061
6484
 
6062
6485
  "use strict";
6063
6486
  module.exports = "<div class=\"p-1\">\n <form class=\"space-y-4\">\n <div class=\"text-lg font-bold\">\n New Invitation\n </div>\n\n <div>\n <label for=\"githubUsername\" class=\"block text-sm/6 font-medium text-gray-900\">GitHub Username</label>\n <div class=\"mt-2\">\n <input type=\"githubUsername\" name=\"githubUsername\" id=\"githubUsername\" v-model=\"githubUsername\" class=\"block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-ultramarine-600 sm:text-sm/6\" placeholder=\"johnsmith12\">\n </div>\n </div>\n\n <div>\n <label for=\"email\" class=\"block text-sm/6 font-medium text-gray-900\">Email (Optional)</label>\n <div class=\"mt-2\">\n <input type=\"email\" name=\"email\" id=\"email\" v-model=\"email\" class=\"block w-full rounded-md bg-white px-3 py-1.5 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 placeholder:text-gray-400 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-ultramarine-600 sm:text-sm/6\" placeholder=\"you@example.com\">\n </div>\n </div>\n\n <div>\n <label for=\"location\" class=\"block text-sm/6 font-medium text-gray-900\">Role</label>\n <div class=\"mt-2 grid grid-cols-1\">\n <select id=\"role\" :disabled=\"tier == null\" name=\"role\" v-model=\"role\" class=\"col-start-1 row-start-1 w-full appearance-none rounded-md bg-white py-1.5 pl-3 pr-8 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:text-sm/6\">\n <option value=\"admin\">Admin</option>\n <option value=\"member\">Member</option>\n <option value=\"readonly\">Read-only</option>\n <option value=\"dashboards\">Dashboards Only</option>\n </select>\n <svg class=\"pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-gray-500 sm:size-4\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n <path fill-rule=\"evenodd\" d=\"M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div v-if=\"tier == null\" class=\"text-sm text-gray-700\">\n You can only invite \"Dashboards Only\" users until you set up a subscription.\n </div>\n </div>\n\n <async-button\n type=\"submit\"\n @click=\"inviteToWorkspace\"\n class=\"inline-flex justify-center rounded-md border border-transparent bg-forest-green-600 py-2 px-4 text-sm font-medium text-white shadow-sm hover:bg-forest-green-500 focus:outline-none focus:ring-2 focus:ring-forest-green-500 focus:ring-offset-2\">\n Submit\n </async-button>\n </form>\n</div>\n";
6064
6487
 
6065
- /***/ }),
6488
+ /***/ },
6066
6489
 
6067
- /***/ "./frontend/src/team/new-invitation/new-invitation.js":
6490
+ /***/ "./frontend/src/team/new-invitation/new-invitation.js"
6068
6491
  /*!************************************************************!*\
6069
6492
  !*** ./frontend/src/team/new-invitation/new-invitation.js ***!
6070
6493
  \************************************************************/
6071
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6494
+ (module, __unused_webpack_exports, __webpack_require__) {
6072
6495
 
6073
6496
  "use strict";
6074
6497
 
@@ -6100,24 +6523,24 @@ module.exports = app => app.component('new-invitation', {
6100
6523
  });
6101
6524
 
6102
6525
 
6103
- /***/ }),
6526
+ /***/ },
6104
6527
 
6105
- /***/ "./frontend/src/team/team.html":
6528
+ /***/ "./frontend/src/team/team.html"
6106
6529
  /*!*************************************!*\
6107
6530
  !*** ./frontend/src/team/team.html ***!
6108
6531
  \*************************************/
6109
- /***/ ((module) => {
6532
+ (module) {
6110
6533
 
6111
6534
  "use strict";
6112
6535
  module.exports = "<div class=\"mx-auto max-w-5xl py-6 px-2 flex flex-col gap-8\">\n <div>\n <div class=\"text-xl font-bold\">\n Subscription Details\n </div>\n <div v-if=\"status === 'loading'\" class=\"mt-4\">\n <img src=\"images/loader.gif\" class=\"inline w-8 h-8\">\n </div>\n <div v-else-if=\"workspace && workspace.subscriptionTier\" class=\"mt-4 flex justify-between items-center\">\n <div>\n <span class=\"font-bold\">Tier:</span> {{workspace.subscriptionTier ?? 'No subscription'}}\n </div>\n <div>\n <async-button\n type=\"submit\"\n @click=\"getWorkspaceCustomerPortalLink\"\n class=\"inline-flex items-center justify-center rounded-md border border-transparent bg-ultramarine-600 py-1 px-2 text-sm font-medium text-white shadow-sm hover:bg-ultramarine-500 focus:outline-none focus:ring-2 focus:ring-forest-green-500 focus:ring-offset-2\">\n View in Stripe\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-4 h-4 ml-1\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\" />\n </svg>\n </async-button>\n </div>\n </div>\n <div v-else-if=\"workspace && !workspace.subscriptionTier\" class=\"mt-4 flex justify-between items-center\">\n <div>\n <span class=\"font-bold\">No active subscription</span>\n <div class=\"text-sm text-gray-700\">\n You won't be able to invite your team until you activate a subscription\n </div>\n </div>\n <div>\n <a\n :href=\"paymentLink\"\n target=\"_blank\"\n class=\"inline-flex items-center justify-center rounded-md border border-transparent bg-ultramarine-600 py-1 px-2 text-sm font-medium text-white shadow-sm hover:bg-ultramarine-500 focus:outline-none focus:ring-2 focus:ring-ultramarine-500 focus:ring-offset-2\">\n Subscribe With Stripe\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\" class=\"w-4 h-4 ml-1\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M13.5 6H5.25A2.25 2.25 0 003 8.25v10.5A2.25 2.25 0 005.25 21h10.5A2.25 2.25 0 0018 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25\" />\n </svg>\n </a>\n </div>\n </div>\n </div>\n <div>\n <div class=\"text-xl font-bold\">\n Current Members\n </div>\n <div v-if=\"status === 'loading'\" class=\"mt-4\">\n <img src=\"images/loader.gif\" class=\"inline w-8 h-8\">\n </div>\n <ul v-else role=\"list\" class=\"divide-y divide-gray-100\">\n <li class=\"flex justify-between gap-x-6 py-5\" v-for=\"user in users\">\n <div class=\"flex min-w-0 gap-x-4\">\n <img class=\"size-12 flex-none rounded-full bg-gray-50\" :src=\"user.picture ?? 'images/logo.svg'\" alt=\"\">\n <div class=\"min-w-0 flex-auto\">\n <p class=\"text-sm/6 font-semibold text-gray-900\">\n {{user.name || user.githubUsername}}\n <span v-if=\"user.isFreeUser\" class=\"ml-1 inline-flex items-center rounded-md bg-green-50 px-2 py-1 text-xs font-medium text-green-700 ring-1 ring-inset ring-green-600/20\">Free</span>\n </p>\n <p class=\"mt-1 truncate text-xs/5 text-gray-500\">{{user.email ?? 'No Email'}}</p>\n </div>\n </div>\n <div class=\"hidden shrink-0 sm:flex sm:flex-col sm:items-end\">\n <p class=\"text-sm/6 text-gray-900 capitalize\">{{getRolesForUser(user).join(', ')}}</p>\n <div class=\"flex gap-3\">\n <button\n type=\"button\"\n class=\"mt-1 text-xs/5 text-gray-500 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300\"\n :disabled=\"getRolesForUser(user).includes('owner')\"\n @click=\"openEditModal(user)\">\n Edit\n </button>\n <button\n class=\"mt-1 text-xs/5 text-valencia-500 cursor-pointer disabled:cursor-not-allowed disabled:text-gray-300\"\n :disabled=\"getRolesForUser(user).includes('owner')\"\n @click=\"showRemoveModal = user\">\n Remove\n </button>\n </div>\n </div>\n </li>\n </ul>\n </div>\n <div>\n <div class=\"flex items-center justify-between\">\n <div class=\"text-xl font-bold\">\n Invitations\n </div>\n <div class=\"mt-4 sm:ml-16 sm:mt-0 sm:flex-none\">\n <button\n type=\"button\"\n @click=\"showNewInvitationModal = true\"\n :disabled=\"status === 'loading'\"\n :tier=\"workspace?.subscriptionTier\"\n class=\"block rounded-md bg-ultramarine-600 px-3 py-2 text-center text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 disabled:bg-gray-500 disabled:cursor-not-allowed focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-600\">\n New Invitation\n <svg class=\"inline w-4 h-4 ml-1\" v-if=\"workspace && !workspace.subscriptionTier\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n <path fill-rule=\"evenodd\" d=\"M12 1.5a5.25 5.25 0 00-5.25 5.25v3a3 3 0 00-3 3v6.75a3 3 0 003 3h10.5a3 3 0 003-3v-6.75a3 3 0 00-3-3v-3c0-2.9-2.35-5.25-5.25-5.25zm3.75 8.25v-3a3.75 3.75 0 10-7.5 0v3h7.5z\" clip-rule=\"evenodd\" />\n </svg>\n </button>\n </div>\n </div>\n <div v-if=\"status === 'loading'\" class=\"mt-4\">\n <img src=\"images/loader.gif\" class=\"inline w-8 h-8\">\n </div>\n <div v-else-if=\"invitations?.length > 0\" class=\"mt-8 flow-root\" v-if=\"invitations?.length > 0\">\n <div class=\"-mx-4 -my-2 overflow-x-auto sm:-mx-6 lg:-mx-8\">\n <div class=\"inline-block min-w-full py-2 align-middle sm:px-6 lg:px-8\">\n <table class=\"min-w-full divide-y divide-gray-300\">\n <thead>\n <tr>\n <th scope=\"col\" class=\"py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900 sm:pl-0\">GitHub Username</th>\n <th scope=\"col\" class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\">Email</th>\n <th scope=\"col\" class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\">Status</th>\n <th scope=\"col\" class=\"px-3 py-3.5 text-left text-sm font-semibold text-gray-900\">Role</th>\n </tr>\n </thead>\n <tbody class=\"divide-y divide-gray-200 bg-white\">\n <tr v-for=\"invitation in invitations\">\n <td class=\"whitespace-nowrap py-5 pl-4 pr-3 text-sm sm:pl-0\">\n {{invitation.githubUsername}}\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500\">\n {{invitation.email}}\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500\">\n <span class=\"inline-flex items-center rounded-md bg-gray-50 px-2 py-1 text-xs font-medium text-gray-700 ring-1 ring-inset ring-gray-600/20\">\n Pending\n </span>\n </td>\n <td class=\"whitespace-nowrap px-3 py-5 text-sm text-gray-500\">\n {{invitation.roles.join(', ')}}\n </td>\n </tr>\n </tbody>\n </table>\n </div>\n </div>\n </div>\n <div v-else-if=\"invitations?.length === 0\" class=\"mt-4\">\n <div class=\"text-center\">\n <svg class=\"mx-auto size-12 text-gray-400\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path vector-effect=\"non-scaling-stroke\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z\" />\n </svg>\n <h3 class=\"mt-2 text-sm font-semibold text-gray-900\">No invitations</h3>\n <p class=\"mt-1 text-sm text-gray-500\">You have no outstanding invitations</p>\n </div>\n </div>\n </div>\n\n <modal v-if=\"showNewInvitationModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"showNewInvitationModal = false\">&times;</div>\n <new-invitation @close=\"showNewInvitationModal = false\" @invitationCreated=\"invitations.push($event.invitation)\"></new-invitation>\n </template>\n </modal>\n\n <modal v-if=\"showEditModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"closeEditModal\">&times;</div>\n <div class=\"p-1 space-y-4\">\n <div class=\"text-lg font-bold\">\n Edit Member\n </div>\n\n <div>\n <div class=\"text-sm/6 font-semibold text-gray-900\">\n {{showEditModal.user.name || showEditModal.user.githubUsername}}\n </div>\n <div class=\"text-xs/5 text-gray-500\">\n {{showEditModal.user.email ?? 'No Email'}}\n </div>\n </div>\n\n <div>\n <label for=\"editRole\" class=\"block text-sm/6 font-medium text-gray-900\">Role</label>\n <div class=\"mt-2 grid grid-cols-1\">\n <select\n id=\"editRole\"\n name=\"editRole\"\n v-model=\"showEditModal.role\"\n class=\"col-start-1 row-start-1 w-full appearance-none rounded-md bg-white py-1.5 pl-3 pr-8 text-base text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-ultramarine-600 sm:text-sm/6\">\n <option value=\"admin\" :disabled=\"disableRoleOption('admin')\">Admin</option>\n <option value=\"member\" :disabled=\"disableRoleOption('member')\">Member</option>\n <option value=\"readonly\" :disabled=\"disableRoleOption('readonly')\">Read-only</option>\n <option value=\"dashboards\" :disabled=\"disableRoleOption('dashboards')\">Dashboards Only</option>\n </select>\n <svg class=\"pointer-events-none col-start-1 row-start-1 mr-2 size-5 self-center justify-self-end text-gray-500 sm:size-4\" viewBox=\"0 0 16 16\" fill=\"currentColor\" aria-hidden=\"true\" data-slot=\"icon\">\n <path fill-rule=\"evenodd\" d=\"M4.22 6.22a.75.75 0 0 1 1.06 0L8 8.94l2.72-2.72a.75.75 0 1 1 1.06 1.06l-3.25 3.25a.75.75 0 0 1-1.06 0L4.22 7.28a.75.75 0 0 1 0-1.06Z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div v-if=\"!workspace?.subscriptionTier\" class=\"mt-2 text-sm text-gray-700\">\n You can only assign the \"Dashboards Only\" role until you activate a subscription.\n </div>\n </div>\n\n <div class=\"mt-6 grid grid-cols-2 gap-4\">\n <async-button\n @click=\"updateWorkspaceMember\"\n :disabled=\"showEditModal.role === showEditModal.originalRole\"\n class=\"border-0 mt-0 flex w-full items-center justify-center gap-3 rounded-md bg-ultramarine-600 hover:bg-ultramarine-500 px-3 py-1.5 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-ultramarine-500\">\n <span class=\"text-sm font-semibold leading-6\">Save</span>\n </async-button>\n\n <span @click=\"closeEditModal\" class=\"cursor-pointer flex w-full items-center justify-center gap-3 rounded-md bg-slate-500 hover:bg-slate-400 px-3 py-1.5 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-400\">\n <span class=\"text-sm font-semibold leading-6\">Cancel</span>\n </span>\n </div>\n </div>\n </template>\n </modal>\n\n <modal v-if=\"showRemoveModal\">\n <template v-slot:body>\n <div class=\"modal-exit\" @click=\"showRemoveModal = null\">&times;</div>\n <div>\n Are you sure you want to remove user <span class=\"font-bold\">{{showRemoveModal.githubUsername}}</span> from this workspace?\n </div>\n <div class=\"mt-6 grid grid-cols-2 gap-4\">\n <async-button\n @click=\"removeFromWorkspace\"\n class=\"border-0 mt-0 flex w-full items-center justify-center gap-3 rounded-md bg-valencia-500 hover:bg-valencia-400 px-3 py-1.5 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-orange-400\">\n <span class=\"text-sm font-semibold leading-6\">Yes, Remove</span>\n </async-button>\n\n <span @click=\"showRemoveModal = null\" class=\"cursor-pointer flex w-full items-center justify-center gap-3 rounded-md bg-slate-500 hover:bg-slate-400 px-3 py-1.5 text-white focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-slate-400\">\n <span class=\"text-sm font-semibold leading-6\">Cancel</span>\n </span>\n </div>\n </template>\n </modal>\n</div>\n";
6113
6536
 
6114
- /***/ }),
6537
+ /***/ },
6115
6538
 
6116
- /***/ "./frontend/src/team/team.js":
6539
+ /***/ "./frontend/src/team/team.js"
6117
6540
  /*!***********************************!*\
6118
6541
  !*** ./frontend/src/team/team.js ***!
6119
6542
  \***********************************/
6120
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6543
+ (module, __unused_webpack_exports, __webpack_require__) {
6121
6544
 
6122
6545
  "use strict";
6123
6546
 
@@ -6214,40 +6637,41 @@ module.exports = app => app.component('team', {
6214
6637
  });
6215
6638
 
6216
6639
 
6217
- /***/ }),
6640
+ /***/ },
6218
6641
 
6219
- /***/ "./frontend/src/update-document/update-document.css":
6642
+ /***/ "./frontend/src/update-document/update-document.css"
6220
6643
  /*!**********************************************************!*\
6221
6644
  !*** ./frontend/src/update-document/update-document.css ***!
6222
6645
  \**********************************************************/
6223
- /***/ ((module) => {
6646
+ (module) {
6224
6647
 
6225
6648
  "use strict";
6226
6649
  module.exports = "";
6227
6650
 
6228
- /***/ }),
6651
+ /***/ },
6229
6652
 
6230
- /***/ "./frontend/src/update-document/update-document.html":
6653
+ /***/ "./frontend/src/update-document/update-document.html"
6231
6654
  /*!***********************************************************!*\
6232
6655
  !*** ./frontend/src/update-document/update-document.html ***!
6233
6656
  \***********************************************************/
6234
- /***/ ((module) => {
6657
+ (module) {
6235
6658
 
6236
6659
  "use strict";
6237
6660
  module.exports = "<div>\n <div class=\"mb-2\">\n <textarea class=\"border border-gray-200 p-2 h-[300px] w-full\" ref=\"codeEditor\"></textarea>\n </div>\n <button @click=\"updateDocument()\" class=\"rounded-md bg-ultramarine-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-ultramarine-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-teal-600\">Submit</button>\n <div v-if=\"errors.length > 0\" class=\"rounded-md bg-red-50 p-4 mt-1\">\n <div class=\"flex\">\n <div class=\"flex-shrink-0\">\n <svg class=\"h-5 w-5 text-red-400\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z\" clip-rule=\"evenodd\" />\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-sm font-medium text-red-800\">There were {{errors.length}} errors with your submission</h3>\n <div class=\"mt-2 text-sm text-red-700\">\n <ul role=\"list\" class=\"list-disc space-y-1 pl-5\">\n <li v-for=\"error in errors\">\n {{error}}\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>";
6238
6661
 
6239
- /***/ }),
6662
+ /***/ },
6240
6663
 
6241
- /***/ "./frontend/src/update-document/update-document.js":
6664
+ /***/ "./frontend/src/update-document/update-document.js"
6242
6665
  /*!*********************************************************!*\
6243
6666
  !*** ./frontend/src/update-document/update-document.js ***!
6244
6667
  \*********************************************************/
6245
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6668
+ (module, __unused_webpack_exports, __webpack_require__) {
6246
6669
 
6247
6670
  "use strict";
6248
6671
 
6249
6672
 
6250
6673
  const api = __webpack_require__(/*! ../api */ "./frontend/src/api.js");
6674
+ const vanillatoasts = __webpack_require__(/*! vanillatoasts */ "./node_modules/vanillatoasts/vanillatoasts.js");
6251
6675
 
6252
6676
  const { BSON, EJSON } = __webpack_require__(/*! mongodb/lib/bson */ "./node_modules/mongodb/lib/bson.js");
6253
6677
 
@@ -6275,35 +6699,35 @@ module.exports = app => app.component('update-document', {
6275
6699
  methods: {
6276
6700
  async updateDocument() {
6277
6701
  const data = EJSON.serialize(eval(`(${this.editor.getValue()})`));
6278
- if (this.multiple) {
6279
- const ids = this.document.map(x => x._id);
6280
- await api.Model.updateDocuments({ model: this.currentModel, _id: ids, update: data }).catch(err => {
6281
- if (err.response?.data?.message) {
6282
- console.log(err.response.data);
6283
- const message = err.response.data.message.split(': ').slice(1).join(': ');
6284
- this.errors = message.split(',').map(error => {
6285
- return error.split(': ').slice(1).join(': ').trim();
6286
- });
6287
- throw new Error(err.response?.data?.message);
6288
- }
6289
- throw err;
6290
- });
6291
- } else {
6292
- await api.Model.updateDocument({ model: this.currentModel, _id: this.document._id, update: data }).catch(err => {
6293
- if (err.response?.data?.message) {
6294
- console.log(err.response.data);
6295
- const message = err.response.data.message.split(': ').slice(1).join(': ');
6296
- this.errors = message.split(',').map(error => {
6297
- return error.split(': ').slice(1).join(': ').trim();
6298
- });
6299
- throw new Error(err.response?.data?.message);
6300
- }
6301
- throw err;
6702
+ try {
6703
+ if (this.multiple) {
6704
+ const ids = this.document.map(x => x._id);
6705
+ await api.Model.updateDocuments({ model: this.currentModel, _id: ids, update: data });
6706
+ } else {
6707
+ await api.Model.updateDocument({ model: this.currentModel, _id: this.document._id, update: data });
6708
+ }
6709
+ this.errors.length = 0;
6710
+ this.$emit('update');
6711
+ this.$emit('close');
6712
+ this.$nextTick(() => {
6713
+ vanillatoasts.create({
6714
+ title: this.multiple ? 'Documents updated!' : 'Document updated!',
6715
+ type: 'success',
6716
+ timeout: 3000,
6717
+ icon: 'images/success.png',
6718
+ positionClass: 'bottomRight'
6719
+ });
6302
6720
  });
6721
+ } catch (err) {
6722
+ if (err.response?.data?.message) {
6723
+ console.log(err.response.data);
6724
+ const message = err.response.data.message.split(': ').slice(1).join(': ');
6725
+ this.errors = message.split(',').map(error => {
6726
+ return error.split(': ').slice(1).join(': ').trim();
6727
+ });
6728
+ }
6729
+ throw err;
6303
6730
  }
6304
- this.errors.length = 0;
6305
- this.$emit('update');
6306
- this.$emit('close');
6307
6731
  }
6308
6732
  },
6309
6733
  mounted: function() {
@@ -6317,13 +6741,13 @@ module.exports = app => app.component('update-document', {
6317
6741
  });
6318
6742
 
6319
6743
 
6320
- /***/ }),
6744
+ /***/ },
6321
6745
 
6322
- /***/ "./node_modules/axios/dist/browser/axios.cjs":
6746
+ /***/ "./node_modules/axios/dist/browser/axios.cjs"
6323
6747
  /*!***************************************************!*\
6324
6748
  !*** ./node_modules/axios/dist/browser/axios.cjs ***!
6325
6749
  \***************************************************/
6326
- /***/ ((module, __unused_webpack_exports, __webpack_require__) => {
6750
+ (module, __unused_webpack_exports, __webpack_require__) {
6327
6751
 
6328
6752
  "use strict";
6329
6753
  // Axios v1.2.2 Copyright (c) 2022 Matt Zabriskie and contributors
@@ -9483,13 +9907,13 @@ module.exports = axios;
9483
9907
  //# sourceMappingURL=axios.cjs.map
9484
9908
 
9485
9909
 
9486
- /***/ }),
9910
+ /***/ },
9487
9911
 
9488
- /***/ "./node_modules/bson/lib/bson.mjs":
9912
+ /***/ "./node_modules/bson/lib/bson.mjs"
9489
9913
  /*!****************************************!*\
9490
9914
  !*** ./node_modules/bson/lib/bson.mjs ***!
9491
9915
  \****************************************/
9492
- /***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
9916
+ (__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
9493
9917
 
9494
9918
  "use strict";
9495
9919
  __webpack_require__.r(__webpack_exports__);
@@ -14166,13 +14590,13 @@ var bson = /*#__PURE__*/Object.freeze({
14166
14590
  //# sourceMappingURL=bson.mjs.map
14167
14591
 
14168
14592
 
14169
- /***/ }),
14593
+ /***/ },
14170
14594
 
14171
- /***/ "./node_modules/marked/lib/marked.cjs":
14595
+ /***/ "./node_modules/marked/lib/marked.cjs"
14172
14596
  /*!********************************************!*\
14173
14597
  !*** ./node_modules/marked/lib/marked.cjs ***!
14174
14598
  \********************************************/
14175
- /***/ ((module) => {
14599
+ (module) {
14176
14600
 
14177
14601
  "use strict";
14178
14602
  /**
@@ -16388,13 +16812,13 @@ var lexer = _Lexer.lex;
16388
16812
  //# sourceMappingURL=marked.cjs.map
16389
16813
 
16390
16814
 
16391
- /***/ }),
16815
+ /***/ },
16392
16816
 
16393
- /***/ "./node_modules/mongodb/lib/bson.js":
16817
+ /***/ "./node_modules/mongodb/lib/bson.js"
16394
16818
  /*!******************************************!*\
16395
16819
  !*** ./node_modules/mongodb/lib/bson.js ***!
16396
16820
  \******************************************/
16397
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16821
+ (__unused_webpack_module, exports, __webpack_require__) {
16398
16822
 
16399
16823
  "use strict";
16400
16824
 
@@ -16482,13 +16906,13 @@ function parseUtf8ValidationOption(options) {
16482
16906
  }
16483
16907
  //# sourceMappingURL=bson.js.map
16484
16908
 
16485
- /***/ }),
16909
+ /***/ },
16486
16910
 
16487
- /***/ "./node_modules/mpath/index.js":
16911
+ /***/ "./node_modules/mpath/index.js"
16488
16912
  /*!*************************************!*\
16489
16913
  !*** ./node_modules/mpath/index.js ***!
16490
16914
  \*************************************/
16491
- /***/ ((module, exports, __webpack_require__) => {
16915
+ (module, exports, __webpack_require__) {
16492
16916
 
16493
16917
  "use strict";
16494
16918
 
@@ -16496,13 +16920,13 @@ function parseUtf8ValidationOption(options) {
16496
16920
  module.exports = exports = __webpack_require__(/*! ./lib */ "./node_modules/mpath/lib/index.js");
16497
16921
 
16498
16922
 
16499
- /***/ }),
16923
+ /***/ },
16500
16924
 
16501
- /***/ "./node_modules/mpath/lib/index.js":
16925
+ /***/ "./node_modules/mpath/lib/index.js"
16502
16926
  /*!*****************************************!*\
16503
16927
  !*** ./node_modules/mpath/lib/index.js ***!
16504
16928
  \*****************************************/
16505
- /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
16929
+ (__unused_webpack_module, exports, __webpack_require__) {
16506
16930
 
16507
16931
  /* eslint strict:off */
16508
16932
  /* eslint no-var: off */
@@ -16831,13 +17255,13 @@ function K(v) {
16831
17255
  return v;
16832
17256
  }
16833
17257
 
16834
- /***/ }),
17258
+ /***/ },
16835
17259
 
16836
- /***/ "./node_modules/mpath/lib/stringToParts.js":
17260
+ /***/ "./node_modules/mpath/lib/stringToParts.js"
16837
17261
  /*!*************************************************!*\
16838
17262
  !*** ./node_modules/mpath/lib/stringToParts.js ***!
16839
17263
  \*************************************************/
16840
- /***/ ((module) => {
17264
+ (module) {
16841
17265
 
16842
17266
  "use strict";
16843
17267
 
@@ -16889,27 +17313,27 @@ module.exports = function stringToParts(str) {
16889
17313
  return result;
16890
17314
  };
16891
17315
 
16892
- /***/ }),
17316
+ /***/ },
16893
17317
 
16894
- /***/ "./node_modules/node-inspect-extracted/dist/inspect.js":
17318
+ /***/ "./node_modules/node-inspect-extracted/dist/inspect.js"
16895
17319
  /*!*************************************************************!*\
16896
17320
  !*** ./node_modules/node-inspect-extracted/dist/inspect.js ***!
16897
17321
  \*************************************************************/
16898
- /***/ (function(module) {
17322
+ (module) {
16899
17323
 
16900
17324
  /*! For license information please see inspect.js.LICENSE.txt */
16901
- !function(t,e){ true?module.exports=e():0}(this,()=>(()=>{"use strict";var t={0:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,l=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw o}}return c}}(t,e)||i(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=i(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,a=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){if(t){if("string"==typeof t)return c(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var u=r(798),l=u.BigInt,f=u.Error,s=u.NumberParseInt,y=u.ObjectEntries,p=u.ObjectGetOwnPropertyDescriptor,g=u.ObjectGetOwnPropertyDescriptors,v=u.ObjectGetOwnPropertySymbols,h=u.ObjectPrototypeToString,d=u.Symbol,b=r(522),m=d("kPending"),S=d("kRejected");t.exports={constants:{kPending:m,kRejected:S,ALL_PROPERTIES:0,ONLY_ENUMERABLE:2},getOwnNonIndexProperties:function(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=g(t),i=[],c=a(y(n));try{for(c.s();!(e=c.n()).done;){var u=o(e.value,2),l=u[0],f=u[1];if(!/^(0|[1-9][0-9]*)$/.test(l)||s(l,10)>=Math.pow(2,32)-1){if(2===r&&!f.enumerable)continue;i.push(l)}}}catch(t){c.e(t)}finally{c.f()}var h,d=a(v(t));try{for(d.s();!(h=d.n()).done;){var b=h.value,m=p(t,b);(2!==r||m.enumerable)&&i.push(b)}}catch(t){d.e(t)}finally{d.f()}return i},getPromiseDetails:function(){return[m,void 0]},getProxyDetails:b.getProxyDetails,Proxy:b.Proxy,previewEntries:function(t){return[[],!1]},getConstructorName:function(t){var e;if(!t||"object"!==n(t))throw new f("Invalid object");if(null!==(e=t.constructor)&&void 0!==e&&e.name)return t.constructor.name;var r=h(t).match(/^\[object ([^\]]+)\]/);return r?r[1]:"Object"},getExternalValue:function(){return l(0)}}},315:t=>{t.exports={CHAR_DOT:46,CHAR_FORWARD_SLASH:47,CHAR_BACKWARD_SLASH:92}},338:(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return c(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||i(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=i(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,a=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){if(t){if("string"==typeof t)return c(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function u(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function l(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?u(Object(r),!0).forEach(function(e){f(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function f(t,e,r){return(e=function(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var s,y,p,g=r(798),v=g.AggregateError,h=g.AggregateErrorPrototype,d=g.Array,b=g.ArrayBuffer,m=g.ArrayBufferPrototype,S=g.ArrayIsArray,P=g.ArrayPrototype,x=g.ArrayPrototypeFilter,w=g.ArrayPrototypeForEach,A=g.ArrayPrototypeIncludes,O=g.ArrayPrototypeIndexOf,_=g.ArrayPrototypeJoin,j=g.ArrayPrototypeMap,E=g.ArrayPrototypePop,k=g.ArrayPrototypePush,I=g.ArrayPrototypePushApply,R=g.ArrayPrototypeSlice,L=g.ArrayPrototypeSort,T=g.ArrayPrototypeSplice,B=g.ArrayPrototypeUnshift,z=g.BigIntPrototypeValueOf,M=g.Boolean,C=g.BooleanPrototype,D=g.BooleanPrototypeValueOf,N=g.DataView,F=g.DataViewPrototype,W=g.Date,H=g.DatePrototype,U=g.DatePrototypeGetTime,G=g.DatePrototypeToISOString,V=g.DatePrototypeToString,Z=g.Error,$=g.ErrorPrototype,Y=g.ErrorPrototypeToString,q=g.Function,J=g.FunctionPrototype,K=g.FunctionPrototypeBind,Q=g.FunctionPrototypeCall,X=g.FunctionPrototypeSymbolHasInstance,tt=g.FunctionPrototypeToString,et=g.JSONStringify,rt=g.Map,nt=g.MapPrototype,ot=g.MapPrototypeEntries,at=g.MapPrototypeGetSize,it=g.MathFloor,ct=g.MathMax,ut=g.MathMin,lt=g.MathRound,ft=g.MathSqrt,st=g.MathTrunc,yt=g.Number,pt=g.NumberIsFinite,gt=g.NumberIsNaN,vt=g.NumberParseFloat,ht=g.NumberParseInt,dt=g.NumberPrototype,bt=g.NumberPrototypeToString,mt=g.NumberPrototypeValueOf,St=g.Object,Pt=g.ObjectAssign,xt=g.ObjectDefineProperty,wt=g.ObjectGetOwnPropertyDescriptor,At=g.ObjectGetOwnPropertyNames,Ot=g.ObjectGetOwnPropertySymbols,_t=g.ObjectGetPrototypeOf,jt=g.ObjectIs,Et=g.ObjectKeys,kt=g.ObjectPrototype,It=g.ObjectPrototypeHasOwnProperty,Rt=g.ObjectPrototypePropertyIsEnumerable,Lt=g.ObjectSeal,Tt=g.ObjectSetPrototypeOf,Bt=g.Promise,zt=g.PromisePrototype,Mt=g.RangeError,Ct=g.RangeErrorPrototype,Dt=g.ReflectApply,Nt=g.ReflectOwnKeys,Ft=g.RegExp,Wt=g.RegExpPrototype,Ht=g.RegExpPrototypeExec,Ut=g.RegExpPrototypeSymbolReplace,Gt=g.RegExpPrototypeSymbolSplit,Vt=g.RegExpPrototypeToString,Zt=g.SafeMap,$t=g.SafeSet,Yt=g.SafeStringIterator,qt=g.Set,Jt=g.SetPrototype,Kt=g.SetPrototypeGetSize,Qt=g.SetPrototypeValues,Xt=g.String,te=g.StringPrototype,ee=g.StringPrototypeCharCodeAt,re=g.StringPrototypeCodePointAt,ne=g.StringPrototypeEndsWith,oe=g.StringPrototypeIncludes,ae=g.StringPrototypeIndexOf,ie=g.StringPrototypeLastIndexOf,ce=g.StringPrototypeNormalize,ue=g.StringPrototypePadEnd,le=g.StringPrototypePadStart,fe=g.StringPrototypeRepeat,se=g.StringPrototypeReplace,ye=g.StringPrototypeReplaceAll,pe=g.StringPrototypeSlice,ge=g.StringPrototypeSplit,ve=g.StringPrototypeStartsWith,he=g.StringPrototypeToLowerCase,de=g.StringPrototypeTrim,be=g.StringPrototypeValueOf,me=g.SymbolIterator,Se=g.SymbolPrototypeToString,Pe=g.SymbolPrototypeValueOf,xe=g.SymbolToPrimitive,we=g.SymbolToStringTag,Ae=g.TypeError,Oe=g.TypeErrorPrototype,_e=g.TypedArray,je=g.TypedArrayPrototype,Ee=g.TypedArrayPrototypeGetLength,ke=g.TypedArrayPrototypeGetSymbolToStringTag,Ie=g.Uint8Array,Re=g.WeakMap,Le=g.WeakMapPrototype,Te=g.WeakSet,Be=g.WeakSetPrototype,ze=g.globalThis,Me=g.internalBinding,Ce=g.uncurryThis,De=r(0),Ne=De.constants,Fe=Ne.ALL_PROPERTIES,We=Ne.ONLY_ENUMERABLE,He=Ne.kPending,Ue=Ne.kRejected,Ge=De.getOwnNonIndexProperties,Ve=De.getPromiseDetails,Ze=De.getProxyDetails,$e=De.previewEntries,Ye=De.getConstructorName,qe=De.getExternalValue,Je=De.Proxy,Ke=r(948),Qe=Ke.customInspectSymbol,Xe=Ke.isError,tr=Ke.join,er=Ke.removeColors,rr=r(799).isStackOverflowError,nr=r(730),or=nr.isAsyncFunction,ar=nr.isGeneratorFunction,ir=nr.isAnyArrayBuffer,cr=nr.isArrayBuffer,ur=nr.isArgumentsObject,lr=nr.isBoxedPrimitive,fr=nr.isDataView,sr=nr.isExternal,yr=nr.isMap,pr=nr.isMapIterator,gr=nr.isModuleNamespaceObject,vr=nr.isNativeError,hr=nr.isPromise,dr=nr.isSet,br=nr.isSetIterator,mr=nr.isWeakMap,Sr=nr.isWeakSet,Pr=nr.isRegExp,xr=nr.isDate,wr=nr.isTypedArray,Ar=nr.isStringObject,Or=nr.isNumberObject,_r=nr.isBooleanObject,jr=nr.isBigIntObject,Er=r(758),kr=r(496).BuiltinModule,Ir=r(755),Rr=Ir.validateObject,Lr=Ir.validateString,Tr=Ir.kValidateObjectAllowArray;function Br(t){return(y=y||r(411)).pathToFileURL(t).href}var zr,Mr,Cr,Dr,Nr,Fr=new $t(x(At(ze),function(t){return null!==Ht(/^[A-Z][a-zA-Z0-9]+$/,t)})),Wr=function(t){return void 0===t&&void 0!==t},Hr=Lt({showHidden:!1,depth:2,colors:!1,customInspect:!0,showProxy:!1,maxArrayLength:100,maxStringLength:1e4,breakLength:80,compact:3,sorted:!1,getters:!1,numericSeparator:!1});try{zr=new Ft("[\\x00-\\x1f\\x27\\x5c\\x7f-\\x9f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?<![\\ud800-\\udbff])[\\udc00-\\udfff]"),Mr=new Ft("[\0-\\x1f\\x27\\x5c\\x7f-\\x9f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?<![\\ud800-\\udbff])[\\udc00-\\udfff]","g"),Cr=new Ft("[\\x00-\\x1f\\x5c\\x7f-\\x9f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?<![\\ud800-\\udbff])[\\udc00-\\udfff]"),Dr=new Ft("[\\x00-\\x1f\\x5c\\x7f-\\x9f]|[\\ud800-\\udbff](?![\\udc00-\\udfff])|(?<![\\ud800-\\udbff])[\\udc00-\\udfff]","g");var Ur=new Ft("(?<=\\n)");Nr=function(t){return Gt(Ur,t)}}catch(t){zr=/[\x00-\x1f\x27\x5c\x7f-\x9f]/,Mr=/[\x00-\x1f\x27\x5c\x7f-\x9f]/g,Cr=/[\x00-\x1f\x5c\x7f-\x9f]/,Dr=/[\x00-\x1f\x5c\x7f-\x9f]/g,Nr=function(t){var e=Gt(/\n/,t),r=E(e),n=j(e,function(t){return t+"\n"});return""!==r&&n.push(r),n}}var Gr,Vr=/^[a-zA-Z_][a-zA-Z_0-9]*$/,Zr=/^(0|[1-9][0-9]*)$/,$r=/^ {4}at (?:[^/\\(]+ \(|)node:(.+):\d+:\d+\)?$/,Yr=/^(\s+[^(]*?)\s*{/,qr=/(\/\/.*?\n)|(\/\*(.|\n)*?\*\/)/g,Jr=["\\x00","\\x01","\\x02","\\x03","\\x04","\\x05","\\x06","\\x07","\\b","\\t","\\n","\\x0B","\\f","\\r","\\x0E","\\x0F","\\x10","\\x11","\\x12","\\x13","\\x14","\\x15","\\x16","\\x17","\\x18","\\x19","\\x1A","\\x1B","\\x1C","\\x1D","\\x1E","\\x1F","","","","","","","","\\'","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\x7F","\\x80","\\x81","\\x82","\\x83","\\x84","\\x85","\\x86","\\x87","\\x88","\\x89","\\x8A","\\x8B","\\x8C","\\x8D","\\x8E","\\x8F","\\x90","\\x91","\\x92","\\x93","\\x94","\\x95","\\x96","\\x97","\\x98","\\x99","\\x9A","\\x9B","\\x9C","\\x9D","\\x9E","\\x9F"],Kr=new Ft("[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/\\#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/\\#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))","g");function Qr(t,e){var r={budget:{},indentationLvl:0,seen:[],currentDepth:0,stylize:cn,showHidden:Hr.showHidden,depth:Hr.depth,colors:Hr.colors,customInspect:Hr.customInspect,showProxy:Hr.showProxy,maxArrayLength:Hr.maxArrayLength,maxStringLength:Hr.maxStringLength,breakLength:Hr.breakLength,compact:Hr.compact,sorted:Hr.sorted,getters:Hr.getters,numericSeparator:Hr.numericSeparator};if(arguments.length>1)if(arguments.length>2&&(void 0!==arguments[2]&&(r.depth=arguments[2]),arguments.length>3&&void 0!==arguments[3]&&(r.colors=arguments[3])),"boolean"==typeof e)r.showHidden=e;else if(e)for(var n=Et(e),o=0;o<n.length;++o){var a=n[o];It(Hr,a)||"stylize"===a?r[a]=e[a]:void 0===r.userOptions&&(r.userOptions=e)}return r.colors&&(r.stylize=an),null===r.maxArrayLength&&(r.maxArrayLength=1/0),null===r.maxStringLength&&(r.maxStringLength=1/0),hn(r,t,0)}Qr.custom=Qe,xt(Qr,"defaultOptions",{__proto__:null,get:function(){return Hr},set:function(t){return Rr(t,"options"),Pt(Hr,t)}});var Xr=39,tn=49;function en(t,e){xt(Qr.colors,e,{__proto__:null,get:function(){return this[t]},set:function(e){this[t]=e},configurable:!0,enumerable:!1})}function rn(t,e){return-1===e?'"'.concat(t,'"'):-2===e?"`".concat(t,"`"):"'".concat(t,"'")}function nn(t){var e=ee(t);return Jr.length>e?Jr[e]:"\\u".concat(bt(e,16))}function on(t){var e=zr,r=Mr,n=39;if(oe(t,"'")&&(oe(t,'"')?oe(t,"`")||oe(t,"${")||(n=-2):n=-1,39!==n&&(e=Cr,r=Dr)),t.length<5e3&&null===Ht(e,t))return rn(t,n);if(t.length>100)return rn(t=Ut(r,t,nn),n);for(var o="",a=0,i=0;i<t.length;i++){var c=ee(t,i);if(c===n||92===c||c<32||c>126&&c<160)o+=a===i?Jr[c]:"".concat(pe(t,a,i)).concat(Jr[c]),a=i+1;else if(c>=55296&&c<=57343){if(c<=56319&&i+1<t.length){var u=ee(t,i+1);if(u>=56320&&u<=57343){i++;continue}}o+="".concat(pe(t,a,i),"\\u").concat(bt(c,16)),a=i+1}}return a!==t.length&&(o+=pe(t,a)),rn(o,n)}function an(t,e){var r=Qr.styles[e];if(void 0!==r){var n=Qr.colors[r];if(void 0!==n)return"[".concat(n[0],"m").concat(t,"[").concat(n[1],"m")}return t}function cn(t){return t}function un(){return[]}function ln(t,e){try{return t instanceof e}catch(t){return!1}}Qr.colors={__proto__:null,reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],blink:[5,25],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],doubleunderline:[21,24],black:[30,Xr],red:[31,Xr],green:[32,Xr],yellow:[33,Xr],blue:[34,Xr],magenta:[35,Xr],cyan:[36,Xr],white:[37,Xr],bgBlack:[40,tn],bgRed:[41,tn],bgGreen:[42,tn],bgYellow:[43,tn],bgBlue:[44,tn],bgMagenta:[45,tn],bgCyan:[46,tn],bgWhite:[47,tn],framed:[51,54],overlined:[53,55],gray:[90,Xr],redBright:[91,Xr],greenBright:[92,Xr],yellowBright:[93,Xr],blueBright:[94,Xr],magentaBright:[95,Xr],cyanBright:[96,Xr],whiteBright:[97,Xr],bgGray:[100,tn],bgRedBright:[101,tn],bgGreenBright:[102,tn],bgYellowBright:[103,tn],bgBlueBright:[104,tn],bgMagentaBright:[105,tn],bgCyanBright:[106,tn],bgWhiteBright:[107,tn]},en("gray","grey"),en("gray","blackBright"),en("bgGray","bgGrey"),en("bgGray","bgBlackBright"),en("dim","faint"),en("strikethrough","crossedout"),en("strikethrough","strikeThrough"),en("strikethrough","crossedOut"),en("hidden","conceal"),en("inverse","swapColors"),en("inverse","swapcolors"),en("doubleunderline","doubleUnderline"),Qr.styles=Pt({__proto__:null},{special:"cyan",number:"yellow",bigint:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",symbol:"green",date:"magenta",regexp:"red",module:"underline"});var fn=(new Zt).set(P,{name:"Array",constructor:d}).set(m,{name:"ArrayBuffer",constructor:b}).set(J,{name:"Function",constructor:q}).set(nt,{name:"Map",constructor:rt}).set(Jt,{name:"Set",constructor:qt}).set(kt,{name:"Object",constructor:St}).set(je,{name:"TypedArray",constructor:_e}).set(Wt,{name:"RegExp",constructor:Ft}).set(H,{name:"Date",constructor:W}).set(F,{name:"DataView",constructor:N}).set($,{name:"Error",constructor:Z}).set(h,{name:"AggregateError",constructor:v}).set(Ct,{name:"RangeError",constructor:Mt}).set(Oe,{name:"TypeError",constructor:Ae}).set(C,{name:"Boolean",constructor:M}).set(dt,{name:"Number",constructor:yt}).set(te,{name:"String",constructor:Xt}).set(zt,{name:"Promise",constructor:Bt}).set(Le,{name:"WeakMap",constructor:Re}).set(Be,{name:"WeakSet",constructor:Te});function sn(t,e,r,n){for(var o,a=t;t||Wr(t);){var i=fn.get(t);if(void 0!==i){var c=i.name,u=i.constructor;if(X(u,a))return void 0!==n&&o!==t&&yn(e,a,o||a,r,n),c}var f=wt(t,"constructor");if(void 0!==f&&"function"==typeof f.value&&""!==f.value.name&&ln(a,f.value))return void 0===n||o===t&&Fr.has(f.value.name)||yn(e,a,o||a,r,n),Xt(f.value.name);t=_t(t),void 0===o&&(o=t)}if(null===o)return null;var s=Ye(a);if(r>e.depth&&null!==e.depth)return"".concat(s," <Complex prototype>");var y=sn(o,e,r+1,n);return null===y?"".concat(s," <").concat(Qr(o,l(l({},e),{},{customInspect:!1,depth:-1})),">"):"".concat(s," <").concat(y,">")}function yn(t,e,r,n,o){var i,c,u=0;do{if(0!==u||e===r){if(null===(r=_t(r)))return;var l=wt(r,"constructor");if(void 0!==l&&"function"==typeof l.value&&Fr.has(l.value.name))return}0===u?c=new $t:w(i,function(t){return c.add(t)}),i=Nt(r),k(t.seen,e);var f,s=a(i);try{for(s.s();!(f=s.n()).done;){var y=f.value;if(!("constructor"===y||It(e,y)||0!==u&&c.has(y))){var p=wt(r,y);if("function"!=typeof p.value){var g=Wn(t,r,n,y,0,p,e);t.colors?k(o,"".concat(g,"")):k(o,g)}}}}catch(t){s.e(t)}finally{s.f()}E(t.seen)}while(3!==++u)}function pn(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(null===t)return""!==e&&r!==e?"[".concat(r).concat(n,": null prototype] [").concat(e,"] "):"[".concat(r).concat(n,": null prototype] ");var o="".concat(t).concat(n," ");if(""!==e){var a=t.indexOf(e);if(-1===a)o+="[".concat(e,"] ");else{var i=a+e.length;i!==t.length&&t[i]===t[i].toLowerCase()&&(o+="[".concat(e,"] "))}}return o}function gn(t,e){var r,n=Ot(t);if(e)r=At(t),0!==n.length&&I(r,n);else{try{r=Et(t)}catch(e){Er(vr(e)&&"ReferenceError"===e.name&&gr(t)),r=At(t)}0!==n.length&&I(r,x(n,function(e){return Rt(t,e)}))}return r}function vn(t,e,r){var n="";return null===e&&(n=Ye(t))===r&&(n="Object"),pn(e,r,n)}function hn(t,e,i,c){if("object"!==o(e)&&"function"!=typeof e&&!Wr(e))return _n(t.stylize,e,t);if(null===e)return t.stylize("null","null");var u=e,f=Ze(e,!!t.showProxy);if(void 0!==f){if(null===f||null===f[0])return t.stylize("<Revoked Proxy>","special");if(t.showProxy)return function(t,e,r){if(r>t.depth&&null!==t.depth)return t.stylize("Proxy [Array]","special");r+=1,t.indentationLvl+=2;var n=[hn(t,e[0],r),hn(t,e[1],r)];return t.indentationLvl-=2,Un(t,n,"",["Proxy [","]"],2,r)}(t,f,i);e=f}if(t.customInspect){var s,v=e[Qe];if("function"==typeof v&&v!==Qr&&(null===(s=wt(e,"constructor"))||void 0===s||null===(s=s.value)||void 0===s?void 0:s.prototype)!==e){var h=null===t.depth?null:t.depth-i,d=void 0!==f||!X(St,u),b=Q(v,u,h,function(t,e){var r=l({stylize:t.stylize,showHidden:t.showHidden,depth:t.depth,colors:t.colors,customInspect:t.customInspect,showProxy:t.showProxy,maxArrayLength:t.maxArrayLength,maxStringLength:t.maxStringLength,breakLength:t.breakLength,compact:t.compact,sorted:t.sorted,getters:t.getters,numericSeparator:t.numericSeparator},t.userOptions);if(e){Tt(r,null);var n,i=a(Et(r));try{for(i.s();!(n=i.n()).done;){var c=n.value;"object"!==o(r[c])&&"function"!=typeof r[c]||null===r[c]||delete r[c]}}catch(t){i.e(t)}finally{i.f()}r.stylize=Tt(function(e,r){var n;try{n="".concat(t.stylize(e,r))}catch(t){}return"string"!=typeof n?e:n},null)}return r}(t,d),Qr);if(b!==u)return"string"!=typeof b?hn(t,b,i):ye(b,"\n","\n".concat(fe(" ",t.indentationLvl)))}}if(t.seen.includes(e)){var m=1;return void 0===t.circular?(t.circular=new Zt,t.circular.set(e,m)):void 0===(m=t.circular.get(e))&&(m=t.circular.size+1,t.circular.set(e,m)),t.stylize("[Circular *".concat(m,"]"),"special")}return function(t,e,o,i){var c,u;t.showHidden&&(o<=t.depth||null===t.depth)&&(u=[]);var l=sn(e,t,o,u);void 0!==u&&0===u.length&&(u=void 0);var f="";try{f=e[we]}catch(t){}("string"!=typeof f||""!==f&&(t.showHidden?It:Rt)(e,we))&&(f="");var s,v,h="",d=un,b=!0,m=0,P=t.showHidden?Fe:We,x=0;if(me in e||null===l)if(b=!1,S(e)){var w="Array"!==l||""!==f?pn(l,f,"Array","(".concat(e.length,")")):"";if(c=Ge(e,P),s=["".concat(w,"["),"]"],0===e.length&&0===c.length&&void 0===u)return"".concat(s[0],"]");x=2,d=In}else if(dr(e)){var j=Kt(e),E=pn(l,f,"Set","(".concat(j,")"));if(c=gn(e,t.showHidden),d=K(Ln,null,null!==l?e:Qt(e)),0===j&&0===c.length&&void 0===u)return"".concat(E,"{}");s=["".concat(E,"{"),"}"]}else if(yr(e)){var M=at(e),C=pn(l,f,"Map","(".concat(M,")"));if(c=gn(e,t.showHidden),d=K(Tn,null,null!==l?e:ot(e)),0===M&&0===c.length&&void 0===u)return"".concat(C,"{}");s=["".concat(C,"{"),"}"]}else if(wr(e)){c=Ge(e,P);var N=e,F="";null===l&&(F=ke(e),N=new g[F](e));var W=Ee(e),H=pn(l,f,F,"(".concat(W,")"));if(s=["".concat(H,"["),"]"],0===e.length&&0===c.length&&!t.showHidden)return"".concat(s[0],"]");d=K(Rn,null,N,W),x=2}else pr(e)?(c=gn(e,t.showHidden),s=dn("Map",f),d=K(Nn,null,s)):br(e)?(c=gn(e,t.showHidden),s=dn("Set",f),d=K(Nn,null,s)):b=!0;if(b)if(c=gn(e,t.showHidden),s=["{","}"],"function"==typeof e){if(h=function(t,e,r,n){var o=tt(e);if(ve(o,"class")&&"}"===o[o.length-1]){var a=pe(o,5,-1),i=ae(a,"{");if(-1!==i&&(!oe(pe(a,0,i),"(")||null!==Ht(Yr,Ut(qr,a))))return function(t,e,r){var n=It(t,"name")&&t.name||"(anonymous)",o="class ".concat(n);if("Function"!==e&&null!==e&&(o+=" [".concat(e,"]")),""!==r&&e!==r&&(o+=" [".concat(r,"]")),null!==e){var a=_t(t).name;a&&(o+=" extends ".concat(a))}else o+=" extends [null prototype]";return"[".concat(o,"]")}(e,r,n)}var c="Function";ar(e)&&(c="Generator".concat(c)),or(e)&&(c="Async".concat(c));var u="[".concat(c);return null===r&&(u+=" (null prototype)"),""===e.name?u+=" (anonymous)":u+=": ".concat("string"==typeof e.name?e.name:hn(t,e.name)),u+="]",r!==c&&null!==r&&(u+=" ".concat(r)),""!==n&&r!==n&&(u+=" [".concat(n,"]")),u}(t,e,l,f),0===c.length&&void 0===u)return t.stylize(h,"special")}else if("Object"===l){if(ur(e)?s[0]="[Arguments] {":""!==f&&(s[0]="".concat(pn(l,f,"Object"),"{")),0===c.length&&void 0===u)return"".concat(s[0],"}")}else if(Pr(e)){h=Vt(null!==l?e:new Ft(e));var Z=pn(l,f,"RegExp");if("RegExp "!==Z&&(h="".concat(Z).concat(h)),0===c.length&&void 0===u||o>t.depth&&null!==t.depth)return t.stylize(h,"regexp")}else if(xr(e)){h=gt(U(e))?V(e):G(e);var $=pn(l,f,"Date");if("Date "!==$&&(h="".concat($).concat(h)),0===c.length&&void 0===u)return t.stylize(h,"date")}else if(Xe(e)){if(h=function(t,e,r,o,i){var c=null!=t.name?t.name:"Error",u=mn(o,t);(function(t,e,r,n){if(!t.showHidden&&0!==e.length)for(var o=0,a=["name","message","stack"];o<a.length;o++){var i=a[o],c=O(e,i);-1===c||"string"==typeof r[i]&&!oe(n,r[i])||T(e,c,1)}})(o,i,t,u),!("cause"in t)||0!==i.length&&A(i,"cause")||k(i,"cause"),!S(t.errors)||0!==i.length&&A(i,"errors")||k(i,"errors"),u=function(t,e,r,n){var o=r.length;if("string"!=typeof r&&(t=se(t,"".concat(r),"".concat(r," [").concat(pe(pn(e,n,"Error"),0,-1),"]"))),null===e||ne(r,"Error")&&ve(t,r)&&(t.length===o||":"===t[o]||"\n"===t[o])){var a="Error";if(null===e){var i=Ht(/^([A-Z][a-z_ A-Z0-9[\]()-]+)(?::|\n {4}at)/,t)||Ht(/^([a-z_A-Z0-9-]*Error)$/,t);o=(a=(null==i?void 0:i[1])||"").length,a=a||"Error"}var c=pe(pn(e,n,a),0,-1);r!==c&&(t=oe(c,r)?0===o?"".concat(c,": ").concat(t):"".concat(c).concat(pe(t,o)):"".concat(c," [").concat(r,"]").concat(pe(t,o)))}return t}(u,e,c,r);var l=t.message&&ae(u,t.message)||-1;-1!==l&&(l+=t.message.length);var f=ae(u,"\n at",l);if(-1===f)u="[".concat(u,"]");else{var s=pe(u,0,f),y=function(t,e,r){var o,a=ge(r,"\n");try{o=e.cause}catch(t){}if(null!=o&&Xe(o)){var i=mn(t,o),c=ae(i,"\n at");if(-1!==c){var u=bn(a,ge(pe(i,c+1),"\n")),l=u[0],f=u[1];if(l>0){var s=l-2,y=" ... ".concat(s," lines matching cause stack trace ...");a.splice(f+1,s,t.stylize(y,"undefined"))}}}if(a.length>10)for(var p=function(t){for(var e=[],r=new Zt,o=0;o<t.length;o++){var a=r.get(t[o]);void 0===a?r.set(t[o],[o]):a[a.length]=o}if(t.length-r.size<=3)return e;for(var i=0;i<t.length-3;i++){var c=r.get(t[i]);if(1!==c.length&&c[c.length-1]!==i){var u=c.indexOf(i)+1;if(u!==c.length){var l=c[c.length-1]-i;if(!(l<3)){var f=void 0;if(u+1<c.length){for(var s=0,y=u;y<c.length;y++){for(var p=c[y]-i;0!==p;){var g=s%p;0!==s&&(f=f||new $t).add(s),s=p,p=g}if(1===s)break}l=s,f&&(f.delete(l),f=n(f))}for(var v=l,h=0,d=0,b=i+l;;b+=l){for(var m=0,S=0;S<l&&t[i+S]===t[b+S];S++)m++;if(m===l)d++;else{var P;if(null===(P=f)||void 0===P||!P.length)break;0!==d&&v*h<l*d&&(v=l,h=d),l=f.pop(),b=i,d=0}}0!==h&&v*h>=l*d&&(l=v,d=h),d*l>=3&&(e.push(i+l,l,d),i+=l*(d+1)-1)}}}}return e}(a),g=p.length-3;g>=0;g-=3){var v=p[g],h=p[g+1],d=p[g+2],b=" ... collapsed ".concat(h*d," duplicate lines ")+"matching above "+(d>1?"".concat(h," lines ").concat(d," times..."):"lines ...");a.splice(v,h*d,t.stylize(b,"undefined"))}return a}(o,t,pe(u,f+1));if(o.colors){var p,g,v=function(){var t;try{t=process.cwd()}catch(t){return}return t}(),h=a(y);try{for(h.s();!(g=h.n()).done;){var d=g.value,b=Ht($r,d);if(null!==b&&kr.exists(b[1]))s+="\n".concat(o.stylize(d,"undefined"));else{if(s+="\n",d=Sn(o,d),void 0!==v){var m=Pn(o,d,v);m===d&&(m=Pn(o,d,p=p||Br(v))),d=m}s+=d}}}catch(t){h.e(t)}finally{h.f()}}else s+="\n".concat(_(y,"\n"));u=s}if(0!==o.indentationLvl){var P=fe(" ",o.indentationLvl);u=ye(u,"\n","\n".concat(P))}return u}(e,l,f,t,c),0===c.length&&void 0===u)return h}else if(ir(e)){var Y=pn(l,f,cr(e)?"ArrayBuffer":"SharedArrayBuffer");if(void 0===i)d=kn;else if(0===c.length&&void 0===u)return Y+"{ byteLength: ".concat(An(t.stylize,e.byteLength,!1)," }");s[0]="".concat(Y,"{"),B(c,"byteLength")}else if(fr(e))s[0]="".concat(pn(l,f,"DataView"),"{"),B(c,"byteLength","byteOffset","buffer");else if(hr(e))s[0]="".concat(pn(l,f,"Promise"),"{"),d=Fn;else if(Sr(e))s[0]="".concat(pn(l,f,"WeakSet"),"{"),d=t.showHidden?Cn:Mn;else if(mr(e))s[0]="".concat(pn(l,f,"WeakMap"),"{"),d=t.showHidden?Dn:Mn;else if(gr(e))s[0]="".concat(pn(l,f,"Module"),"{"),d=jn.bind(null,c);else if(lr(e)){if(h=function(t,e,r,n,o){var a,i;Or(t)?(a=mt,i="Number"):Ar(t)?(a=be,i="String",r.splice(0,t.length)):_r(t)?(a=D,i="Boolean"):jr(t)?(a=z,i="BigInt"):(a=Pe,i="Symbol");var c="[".concat(i);return i!==n&&(c+=null===n?" (null prototype)":" (".concat(n,")")),c+=": ".concat(_n(cn,a(t),e),"]"),""!==o&&o!==n&&(c+=" [".concat(o,"]")),0!==r.length||e.stylize===cn?c:e.stylize(c,he(i))}(e,t,c,l,f),0===c.length&&void 0===u)return h}else if(!function(t){return y=y||r(411),"string"==typeof t.href&&t instanceof y.URL}(e)||o>t.depth&&null!==t.depth){if(0===c.length&&void 0===u){if(sr(e)){var q=qe(e).toString(16);return t.stylize("[External: ".concat(q,"]"),"special")}return"".concat(vn(e,l,f),"{}")}s[0]="".concat(vn(e,l,f),"{")}else if(c=function(t){return p=p||Ot(new y.URL("http://user:pass@localhost:8080/?foo=bar#baz")),t.filter(function(t){return-1===p[t]})}(c),h=e.href,0===c.length&&void 0===u)return h;if(o>t.depth&&null!==t.depth){var J=pe(vn(e,l,f),0,-1);return null!==l&&(J="[".concat(J,"]")),t.stylize(J,"special")}o+=1,t.seen.push(e),t.currentDepth=o;var Q=t.indentationLvl;try{for(v=d(t,e,o),m=0;m<c.length;m++)k(v,Wn(t,e,o,c[m],x));void 0!==u&&I(v,u)}catch(r){if(!rr(r))throw r;return function(t,e,r,n){return t.seen.pop(),t.indentationLvl=n,t.stylize("[".concat(r,": Inspection interrupted ")+"prematurely. Maximum call stack size exceeded.]","special")}(t,0,pe(vn(e,l,f),0,-1),Q)}if(void 0!==t.circular){var X=t.circular.get(e);if(void 0!==X){var et=t.stylize("<ref *".concat(X,">"),"special");!0!==t.compact?h=""===h?et:"".concat(et," ").concat(h):s[0]="".concat(et," ").concat(s[0])}}if(t.seen.pop(),t.sorted){var rt=!0===t.sorted?void 0:t.sorted;if(0===x)L(v,rt);else if(c.length>1){var nt=L(R(v,v.length-c.length),rt);B(nt,v,v.length-c.length,c.length),Dt(T,null,nt)}}var it=Un(t,v,h,s,x,o,e),ct=(t.budget[t.indentationLvl]||0)+it.length;return t.budget[t.indentationLvl]=ct,ct>Math.pow(2,27)&&(t.depth=-1),it}(t,e,i,c)}function dn(t,e){return e!=="".concat(t," Iterator")&&(""!==e&&(e+="] ["),e+="".concat(t," Iterator")),["[".concat(e,"] {"),"}"]}function bn(t,e){for(var r=0;r<t.length-3;r++){var n=O(e,t[r]);if(-1!==n){var o=e.length-n;if(o>3){for(var a=1,i=ut(t.length-r,o);i>a&&t[r+a]===e[n+a];)a++;if(a>3)return[a,r]}}}return[0,0]}function mn(t,e){if(e.stack){if("string"==typeof e.stack)return e.stack;t.seen.push(e),t.indentationLvl+=4;var r=hn(t,e.stack);return t.indentationLvl-=4,t.seen.pop(),"".concat(Y(e),"\n ").concat(r)}return Y(e)}function Sn(t,e){for(var r="",n=0,o=0;;){var a=ae(e,"node_modules",o);if(-1===a)break;var i=e[a-1],c=e[a+12];if("/"!==c&&"\\"!==c||"/"!==i&&"\\"!==i)o=a+1;else{var u=a+13;r+=pe(e,n,u);var l=ae(e,i,u);"@"===e[u]&&(l=ae(e,i,l+1));var f=pe(e,u,l);r+=t.stylize(f,"module"),n=l,o=l}}return 0!==n&&(e=r+pe(e,n)),e}function Pn(t,e,r){var n=ae(e,r),o="",a=r.length;if(-1!==n){"file://"===pe(e,n-7,n)&&(a+=7,n-=7);var i="("===e[n-1]?n-1:n,c=i!==n&&ne(e,")")?-1:e.length,u=n+a+1,l=pe(e,i,u);o+=pe(e,0,i),o+=t.stylize(l,"undefined"),o+=pe(e,u,c),-1===c&&(o+=t.stylize(")","undefined"))}else o+=e;return o}function xn(t){var e="",r=t.length;Er(0!==r);for(var n="-"===t[0]?1:0;r>=n+4;r-=3)e="_".concat(pe(t,r-3,r)).concat(e);return r===t.length?t:"".concat(pe(t,0,r)).concat(e)}var wn=function(t){return"... ".concat(t," more item").concat(t>1?"s":"")};function An(t,e,r){if(!r)return jt(e,-0)?t("-0","number"):t("".concat(e),"number");var n=Xt(e);if(st(e)===e)return!pt(e)||oe(n,"e")?t(n,"number"):t(xn(n),"number");if(gt(e))return t(n,"number");var o=ae(n,"."),a=pe(n,0,o),i=pe(n,o+1);return t("".concat(xn(a),".").concat(function(t){for(var e="",r=0;r<t.length-3;r+=3)e+="".concat(pe(t,r,r+3),"_");return 0===r?t:"".concat(e).concat(pe(t,r))}(i)),"number")}function On(t,e,r){var n=Xt(e);return t("".concat(r?xn(n):n,"n"),"bigint")}function _n(t,e,r){if("string"==typeof e){var n="";if(e.length>r.maxStringLength){var o=e.length-r.maxStringLength;e=pe(e,0,r.maxStringLength),n="... ".concat(o," more character").concat(o>1?"s":"")}return!0!==r.compact&&e.length>16&&e.length>r.breakLength-r.indentationLvl-4?_(j(Nr(e),function(e){return t(on(e),"string")})," +\n".concat(fe(" ",r.indentationLvl+2)))+n:t(on(e),"string")+n}return"number"==typeof e?An(t,e,r.numericSeparator):"bigint"==typeof e?On(t,e,r.numericSeparator):"boolean"==typeof e?t("".concat(e),"boolean"):void 0===e?t("undefined","undefined"):t(Se(e),"symbol")}function jn(t,e,r,n){for(var o=new d(t.length),a=0;a<t.length;a++)try{o[a]=Wn(e,r,n,t[a],0)}catch(r){Er(vr(r)&&"ReferenceError"===r.name);var i=f({},t[a],"");o[a]=Wn(e,i,n,t[a],0);var c=ie(o[a]," ");o[a]=pe(o[a],0,c+1)+e.stylize("<uninitialized>","special")}return t.length=0,o}function En(t,e,r,n,o,a){for(var i=Et(e),c=a;a<i.length&&o.length<n;a++){var u=i[a],l=+u;if(l>Math.pow(2,32)-2)break;if("".concat(c)!==u){if(null===Ht(Zr,u))break;var f=l-c,s=f>1?"s":"",y="<".concat(f," empty item").concat(s,">");if(k(o,t.stylize(y,"undefined")),c=l,o.length===n)break}k(o,Wn(t,e,r,u,1)),c++}var p=e.length-c;if(o.length!==n){if(p>0){var g=p>1?"s":"",v="<".concat(p," empty item").concat(g,">");k(o,t.stylize(v,"undefined"))}}else p>0&&k(o,wn(p));return o}function kn(t,e){var n;try{n=new Ie(e)}catch(e){return[t.stylize("(detached)","special")]}void 0===s&&(s=Ce(r(526).h.prototype.hexSlice));var o=de(Ut(/(.{2})/g,s(n,0,ut(t.maxArrayLength,n.length)),"$1 ")),a=n.length-t.maxArrayLength;return a>0&&(o+=" ... ".concat(a," more byte").concat(a>1?"s":"")),["".concat(t.stylize("[Uint8Contents]","special"),": <").concat(o,">")]}function In(t,e,r){for(var n=e.length,o=ut(ct(0,t.maxArrayLength),n),a=n-o,i=[],c=0;c<o;c++){var u=wt(e,c);if(void 0===u)return En(t,e,r,o,i,c);k(i,Wn(t,e,r,c,1,u))}return a>0&&k(i,wn(a)),i}function Rn(t,e,r,n,o){for(var a=ut(ct(0,r.maxArrayLength),e),i=t.length-a,c=new d(a),u=t.length>0&&"number"==typeof t[0]?An:On,l=0;l<a;++l)c[l]=u(r.stylize,t[l],r.numericSeparator);if(i>0&&(c[a]=wn(i)),r.showHidden){r.indentationLvl+=2;for(var f=0,s=["BYTES_PER_ELEMENT","length","byteLength","byteOffset","buffer"];f<s.length;f++){var y=s[f],p=hn(r,t[y],o,!0);k(c,"[".concat(y,"]: ").concat(p))}r.indentationLvl-=2}return c}function Ln(t,e,r,n){var o=t.size,i=ut(ct(0,e.maxArrayLength),o),c=o-i,u=[];e.indentationLvl+=2;var l,f=0,s=a(t);try{for(s.s();!(l=s.n()).done;){var y=l.value;if(f>=i)break;k(u,hn(e,y,n)),f++}}catch(t){s.e(t)}finally{s.f()}return c>0&&k(u,wn(c)),e.indentationLvl-=2,u}function Tn(t,e,r,n){var o=t.size,i=ut(ct(0,e.maxArrayLength),o),c=o-i,u=[];e.indentationLvl+=2;var l,f=0,s=a(t);try{for(s.s();!(l=s.n()).done;){var y=l.value,p=y[0],g=y[1];if(f>=i)break;k(u,"".concat(hn(e,p,n)," => ").concat(hn(e,g,n))),f++}}catch(t){s.e(t)}finally{s.f()}return c>0&&k(u,wn(c)),e.indentationLvl-=2,u}function Bn(t,e,r,n){var o=ct(t.maxArrayLength,0),a=ut(o,r.length),i=new d(a);t.indentationLvl+=2;for(var c=0;c<a;c++)i[c]=hn(t,r[c],e);t.indentationLvl-=2,0!==n||t.sorted||L(i);var u=r.length-a;return u>0&&k(i,wn(u)),i}function zn(t,e,r,n){var o=ct(t.maxArrayLength,0),a=r.length/2,i=a-o,c=ut(o,a),u=new d(c),l=0;if(t.indentationLvl+=2,0===n){for(;l<c;l++){var f=2*l;u[l]="".concat(hn(t,r[f],e)," => ").concat(hn(t,r[f+1],e))}t.sorted||L(u)}else for(;l<c;l++){var s=2*l,y=[hn(t,r[s],e),hn(t,r[s+1],e)];u[l]=Un(t,y,"",["[","]"],2,e)}return t.indentationLvl-=2,i>0&&k(u,wn(i)),u}function Mn(t){return[t.stylize("<items unknown>","special")]}function Cn(t,e,r){return Bn(t,r,$e(e),0)}function Dn(t,e,r){return zn(t,r,$e(e),0)}function Nn(t,e,r,n){var o=$e(r,!0),a=o[0];return o[1]?(t[0]=Ut(/ Iterator] {$/,t[0]," Entries] {"),zn(e,n,a,2)):Bn(e,n,a,1)}function Fn(t,e,r){var n,o=Ve(e),a=o[0],i=o[1];if(a===He)n=[t.stylize("<pending>","special")];else{t.indentationLvl+=2;var c=hn(t,i,r);t.indentationLvl-=2,n=[a===Ue?"".concat(t.stylize("<rejected>","special")," ").concat(c):c]}return n}function Wn(t,e,r,n,a,i){var c,u,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:e,f=" ";if(void 0!==(i=i||wt(e,n)||{value:e[n],enumerable:!0}).value){var s=!0!==t.compact||0!==a?2:3;t.indentationLvl+=s,u=hn(t,i.value,r),3===s&&t.breakLength<Gr(u,t.colors)&&(f="\n".concat(fe(" ",t.indentationLvl))),t.indentationLvl-=s}else if(void 0!==i.get){var y=void 0!==i.set?"Getter/Setter":"Getter",p=t.stylize,g="special";if(t.getters&&(!0===t.getters||"get"===t.getters&&void 0===i.set||"set"===t.getters&&void 0!==i.set))try{var v=Q(i.get,l);if(t.indentationLvl+=2,null===v)u="".concat(p("[".concat(y,":"),g)," ").concat(p("null","null")).concat(p("]",g));else if("object"===o(v))u="".concat(p("[".concat(y,"]"),g)," ").concat(hn(t,v,r));else{var h=_n(p,v,t);u="".concat(p("[".concat(y,":"),g)," ").concat(h).concat(p("]",g))}t.indentationLvl-=2}catch(t){var d="<Inspection threw (".concat(t.message,")>");u="".concat(p("[".concat(y,":"),g)," ").concat(d).concat(p("]",g))}else u=t.stylize("[".concat(y,"]"),g)}else u=void 0!==i.set?t.stylize("[Setter]","special"):t.stylize("undefined","undefined");if(1===a)return u;if("symbol"===o(n)){var b=Ut(Mr,Se(n),nn);c=t.stylize(b,"symbol")}else c=null!==Ht(Vr,n)?"__proto__"===n?"['__proto__']":t.stylize(n,"name"):t.stylize(on(n),"string");return!1===i.enumerable&&(c="[".concat(c,"]")),"".concat(c,":").concat(f).concat(u)}function Hn(t,e,r,n){var o=e.length+r;if(o+e.length>t.breakLength)return!1;for(var a=0;a<e.length;a++)if(t.colors?o+=er(e[a]).length:o+=e[a].length,o>t.breakLength)return!1;return""===n||!oe(n,"\n")}function Un(t,e,r,n,o,a,i){if(!0!==t.compact){if("number"==typeof t.compact&&t.compact>=1){var c=e.length;if(2===o&&c>6&&(e=function(t,e,r){var n=0,o=0,a=0,i=e.length;t.maxArrayLength<e.length&&i--;for(var c=new d(i);a<i;a++){var u=Gr(e[a],t.colors);c[a]=u,n+=u+2,o<u&&(o=u)}var l=o+2;if(3*l+t.indentationLvl<t.breakLength&&(n/l>5||o<=6)){var f=ft(l-n/e.length),s=ct(l-3-f,1),y=ut(lt(ft(2.5*s*i)/s),it((t.breakLength-t.indentationLvl)/l),4*t.compact,15);if(y<=1)return e;for(var p=[],g=[],v=0;v<y;v++){for(var h=0,b=v;b<e.length;b+=y)c[b]>h&&(h=c[b]);h+=2,g[v]=h}var m=le;if(void 0!==r)for(var S=0;S<e.length;S++)if("number"!=typeof r[S]&&"bigint"!=typeof r[S]){m=ue;break}for(var P=0;P<i;P+=y){for(var x=ut(P+y,i),w="",A=P;A<x-1;A++){var O=g[A-P]+e[A].length-c[A];w+=m("".concat(e[A],", "),O," ")}if(m===le){var _=g[A-P]+e[A].length-c[A]-2;w+=le(e[A],_," ")}else w+=e[A];k(p,w)}t.maxArrayLength<e.length&&k(p,e[i]),e=p}return e}(t,e,i)),t.currentDepth-a<t.compact&&c===e.length&&Hn(t,e,e.length+t.indentationLvl+n[0].length+r.length+10,r)){var u=tr(e,", ");if(!oe(u,"\n"))return"".concat(r?"".concat(r," "):"").concat(n[0]," ").concat(u)+" ".concat(n[1])}}var l="\n".concat(fe(" ",t.indentationLvl));return"".concat(r?"".concat(r," "):"").concat(n[0]).concat(l," ")+"".concat(tr(e,",".concat(l," "))).concat(l).concat(n[1])}if(Hn(t,e,0,r))return"".concat(n[0]).concat(r?" ".concat(r):""," ").concat(tr(e,", ")," ")+n[1];var f=fe(" ",t.indentationLvl),s=""===r&&1===n[0].length?" ":"".concat(r?" ".concat(r):"","\n").concat(f," ");return"".concat(n[0]).concat(s).concat(tr(e,",\n".concat(f," "))," ").concat(n[1])}function Gn(t){var e=Ze(t,!1);if(void 0!==e){if(null===e)return!0;t=e}var r=It,n=It;if("function"!=typeof t.toString){if("function"!=typeof t[xe])return!0;if(It(t,xe))return!1;r=Vn}else{if(It(t,"toString"))return!1;if("function"!=typeof t[xe])n=Vn;else if(It(t,xe))return!1}var o=t;do{o=_t(o)}while(!r(o,"toString")&&!n(o,xe));var a=wt(o,"constructor");return void 0!==a&&"function"==typeof a.value&&Fr.has(a.value.name)}function Vn(){return!1}var Zn,$n=function(t){return ge(t.message,"\n",1)[0]};function Yn(t){try{return et(t)}catch(t){if(!Zn)try{var e={};e.a=e,et(e)}catch(t){Zn=$n(t)}if("TypeError"===t.name&&$n(t)===Zn)return"[Circular]";throw t}}function qn(t,e){var r;return An(cn,t,null!==(r=null==e?void 0:e.numericSeparator)&&void 0!==r?r:Hr.numericSeparator)}function Jn(t,e){var r;return On(cn,t,null!==(r=null==e?void 0:e.numericSeparator)&&void 0!==r?r:Hr.numericSeparator)}function Kn(t,e){var r=e[0],n=0,a="",i="";if("string"==typeof r){if(1===e.length)return r;for(var c,u=0,f=0;f<r.length-1;f++)if(37===ee(r,f)){var s=ee(r,++f);if(n+1!==e.length){switch(s){case 115:var y=e[++n];c="number"==typeof y?qn(y,t):"bigint"==typeof y?Jn(y,t):"object"===o(y)&&null!==y&&Gn(y)?Qr(y,l(l({},t),{},{compact:3,colors:!1,depth:0})):Xt(y);break;case 106:c=Yn(e[++n]);break;case 100:var p=e[++n];c="bigint"==typeof p?Jn(p,t):"symbol"===o(p)?"NaN":qn(yt(p),t);break;case 79:c=Qr(e[++n],t);break;case 111:c=Qr(e[++n],l(l({},t),{},{showHidden:!0,showProxy:!0,depth:4}));break;case 105:var g=e[++n];c="bigint"==typeof g?Jn(g,t):"symbol"===o(g)?"NaN":qn(ht(g),t);break;case 102:var v=e[++n];c="symbol"===o(v)?"NaN":qn(vt(v),t);break;case 99:n+=1,c="";break;case 37:a+=pe(r,u,f),u=f+1;continue;default:continue}u!==f-1&&(a+=pe(r,u,f-1)),a+=c,u=f+1}else 37===s&&(a+=pe(r,u,f),u=f+1)}0!==u&&(n++,i=" ",u<r.length&&(a+=pe(r,u)))}for(;n<e.length;){var h=e[n];a+=i,a+="string"!=typeof h?Qr(h,t):h,i=" ",n++}return a}function Qn(t){return t<=31||t>=127&&t<=159||t>=768&&t<=879||t>=8203&&t<=8207||t>=8400&&t<=8447||t>=65024&&t<=65039||t>=65056&&t<=65071||t>=917760&&t<=917999}if(Me("config").hasIntl)Er(!1);else{Gr=function(t){var e=0;(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(t=to(t)),t=ce(t,"NFC");var r,n=a(new Yt(t));try{for(n.s();!(r=n.n()).done;){var o=r.value,i=re(o,0);Xn(i)?e+=2:Qn(i)||e++}}catch(t){n.e(t)}finally{n.f()}return e};var Xn=function(t){return t>=4352&&(t<=4447||9001===t||9002===t||t>=11904&&t<=12871&&12351!==t||t>=12880&&t<=19903||t>=19968&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65131||t>=65281&&t<=65376||t>=65504&&t<=65510||t>=110592&&t<=110593||t>=127488&&t<=127569||t>=127744&&t<=128591||t>=131072&&t<=262141)}}function to(t){return Lr(t,"str"),Ut(Kr,t,"")}var eo={34:"&quot;",38:"&amp;",39:"&apos;",60:"&lt;",62:"&gt;",160:"&nbsp;"};function ro(t){return t.replace(/[\u0000-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u00FF]/g,function(t){var e=Xt(t.charCodeAt(0));return eo[e]||"&#"+e+";"})}t.exports={identicalSequenceRange:bn,inspect:Qr,inspectDefaultOptions:Hr,format:function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return Kn(void 0,e)},formatWithOptions:function(t){Rr(t,"inspectOptions",Tr);for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n<e;n++)r[n-1]=arguments[n];return Kn(t,r)},getStringWidth:Gr,stripVTControlCharacters:to,isZeroWidthCodePoint:Qn,stylizeWithColor:an,stylizeWithHTML:function(t,e){var r=Qr.styles[e];return void 0!==r?'<span style="color:'.concat(r,';">').concat(ro(t),"</span>"):ro(t)},Proxy:Je}},411:(t,e,r)=>{var n=r(798),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeIncludes,i=n.StringPrototypeReplace,c=r(999),u=r(315).CHAR_FORWARD_SLASH,l=r(503),f=/%/g,s=/\\/g,y=/\n/g,p=/\r/g,g=/\t/g;t.exports={pathToFileURL:function(t){var e=new c("file://"),r=l.resolve(t);return o(t,t.length-1)===u&&r[r.length-1]!==l.sep&&(r+="/"),e.pathname=function(t){return a(t,"%")&&(t=i(t,f,"%25")),a(t,"\\")&&(t=i(t,s,"%5C")),a(t,"\n")&&(t=i(t,y,"%0A")),a(t,"\r")&&(t=i(t,p,"%0D")),a(t,"\t")&&(t=i(t,g,"%09")),t}(r),e},URL:c}},496:t=>{var e=["_http_agent","_http_client","_http_common","_http_incoming","_http_outgoing","_http_server","_stream_duplex","_stream_passthrough","_stream_readable","_stream_transform","_stream_wrap","_stream_writable","_tls_common","_tls_wrap","assert","assert/strict","async_hooks","buffer","child_process","cluster","console","constants","crypto","dgram","diagnostics_channel","dns","dns/promises","domain","events","fs","fs/promises","http","http2","https","inspector","module","Module","net","os","path","path/posix","path/win32","perf_hooks","process","punycode","querystring","readline","readline/promises","repl","stream","stream/consumers","stream/promises","stream/web","string_decoder","sys","timers","timers/promises","tls","trace_events","tty","url","util","util/types","v8","vm","wasi","worker_threads","zlib"];t.exports.BuiltinModule={exists:function(t){return"internal/modules/cjs/foo"!==t&&(t.startsWith("internal/")||-1!==e.indexOf(t))}}},503:(t,e,r)=>{var n=r(798),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeLastIndexOf,i=n.StringPrototypeSlice,c=r(315),u=c.CHAR_DOT,l=c.CHAR_FORWARD_SLASH,f=r(755).validateString;function s(t){return t===l}function y(t,e,r,n){for(var c="",f=0,s=-1,y=0,p=0,g=0;g<=t.length;++g){if(g<t.length)p=o(t,g);else{if(n(p))break;p=l}if(n(p)){if(s===g-1||1===y);else if(2===y){if(c.length<2||2!==f||o(c,c.length-1)!==u||o(c,c.length-2)!==u){if(c.length>2){var v=a(c,r);-1===v?(c="",f=0):f=(c=i(c,0,v)).length-1-a(c,r),s=g,y=0;continue}if(0!==c.length){c="",f=0,s=g,y=0;continue}}e&&(c+=c.length>0?"".concat(r,".."):"..",f=2)}else c.length>0?c+="".concat(r).concat(i(t,s+1,g)):c=i(t,s+1,g),f=g-s-1;s=g,y=0}else p===u&&-1!==y?++y:y=-1}return c}t.exports={isPosixPathSeparator:s,normalizeString:y,resolve:function(){if((0===arguments.length||1===arguments.length&&(""===(arguments.length<=0?void 0:arguments[0])||"."===(arguments.length<=0?void 0:arguments[0])))&&o("/",0)===l)return"/";for(var t="",e=!1,r=arguments.length-1;r>=0&&!e;r--){var n=r<0||arguments.length<=r?void 0:arguments[r];f(n,"paths[".concat(r,"]")),0!==n.length&&(t="".concat(n,"/").concat(t),e=o(n,0)===l)}return e||(t="".concat("/","/").concat(t),e=o("/",0)===l),t=y(t,!e,"/",s),e?"/".concat(t):t.length>0?t:"."}}},522:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}var i=r(798),c=i.Proxy,u=i.ProxyRevocable,l=new(0,i.SafeWeakMap),f=function(){return t=function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=new c(e,r);return l.set(n,[e,r]),n},e=[{key:"getProxyDetails",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=l.get(t);if(r)return e?r:r[0]}},{key:"revocable",value:function(t,e){var r=u(t,e);l.set(r.proxy,[t,e]);var n=r.revoke;return r.revoke=function(){l.set(r.proxy,[null,null]),n()},r}}],null&&0,e&&o(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;// removed by dead control flow
16902
- var t, e; }();t.exports={getProxyDetails:f.getProxyDetails.bind(f),Proxy:f}},526:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}var i=r(798).ArrayPrototypeMap,c=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},e=[{key:"hexSlice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1?arguments[1]:void 0;return i(this.slice(t,e),function(t){return("00"+t.toString(16)).slice(-2)}).join("")}}],e&&o(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;// removed by dead control flow
16903
- var t, e; }();e.h=c},730:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=r(798),a=o.ArrayIsArray,i=o.BigInt,c=o.Boolean,u=o.DatePrototype,l=o.Error,f=o.FunctionPrototype,s=o.MapPrototypeHas,y=o.Number,p=o.ObjectDefineProperty,g=o.ObjectGetOwnPropertyDescriptor,v=o.ObjectGetPrototypeOf,h=o.ObjectIsFrozen,d=o.ObjectPrototype,b=o.SetPrototypeHas,m=o.String,S=o.Symbol,P=o.SymbolToStringTag,x=o.globalThis,w=r(0).getConstructorName;function A(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),o=1;o<e;o++)r[o-1]=arguments[o];for(var a=0,i=r;a<i.length;a++){var c=i[a],u=x[c];if(u&&t instanceof u)return!0}for(;t;){if("object"!==n(t))return!1;if(r.indexOf(w(t))>=0)return!0;t=v(t)}return!1}function O(t){return function(e){if(!A(e,t.name))return!1;try{t.prototype.valueOf.call(e)}catch(t){return!1}return!0}}"object"!==n(x)&&(p(d,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete d.__magic__);var _=O(m),j=O(y),E=O(c),k=O(i),I=O(S);t.exports={isAsyncFunction:function(t){return"function"==typeof t&&f.toString.call(t).startsWith("async")},isGeneratorFunction:function(t){return"function"==typeof t&&f.toString.call(t).match(/^(async\s+)?function *\*/)},isAnyArrayBuffer:function(t){return A(t,"ArrayBuffer","SharedArrayBuffer")},isArrayBuffer:function(t){return A(t,"ArrayBuffer")},isArgumentsObject:function(t){if(null!==t&&"object"===n(t)&&!a(t)&&"number"==typeof t.length&&t.length===(0|t.length)&&t.length>=0){var e=g(t,"callee");return e&&!e.enumerable}return!1},isBoxedPrimitive:function(t){return j(t)||_(t)||E(t)||k(t)||I(t)},isDataView:function(t){return A(t,"DataView")},isExternal:function(t){return"object"===n(t)&&h(t)&&null==v(t)},isMap:function(t){if(!A(t,"Map"))return!1;try{s(t)}catch(t){return!1}return!0},isMapIterator:function(t){return"[object Map Iterator]"===d.toString.call(v(t))},isModuleNamespaceObject:function(t){try{return t&&"object"===n(t)&&"Module"===t[P]}catch(t){return!1}},isNativeError:function(t){return t instanceof l&&A(t,"Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","AggregateError")},isPromise:function(t){return A(t,"Promise")},isSet:function(t){if(!A(t,"Set"))return!1;try{b(t)}catch(t){return!1}return!0},isSetIterator:function(t){return"[object Set Iterator]"===d.toString.call(v(t))},isWeakMap:function(t){return A(t,"WeakMap")},isWeakSet:function(t){return A(t,"WeakSet")},isRegExp:function(t){return A(t,"RegExp")},isDate:function(t){if(A(t,"Date"))try{return u.getTime.call(t),!0}catch(t){}return!1},isTypedArray:function(t){return A(t,"Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array")},isStringObject:_,isNumberObject:j,isBooleanObject:E,isBigIntObject:k,isSymbolObject:I}},755:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=r(798).ArrayIsArray,a=r(799),i=a.hideStackFrames,c=a.codes.ERR_INVALID_ARG_TYPE,u=i(function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===r){if(null===t||o(t))throw new c(e,"Object",t);if("object"!==n(t))throw new c(e,"Object",t)}else{if(!(1&r)&&null===t)throw new c(e,"Object",t);if(!(2&r)&&o(t))throw new c(e,"Object",t);var a=!(4&r),i=n(t);if("object"!==i&&(a||"function"!==i))throw new c(e,"Object",t)}});t.exports={kValidateObjectNone:0,kValidateObjectAllowNullable:1,kValidateObjectAllowArray:2,kValidateObjectAllowFunction:4,validateObject:u,validateString:function(t,e){if("string"!=typeof t)throw new c(e,"string",t)}}},758:(t,e,r)=>{var n;function o(){return n=null!=n?n:r(799).codes.ERR_INTERNAL_ASSERTION}function a(t,e){if(!t)throw new(o())(e)}a.fail=function(t){throw new(o())(t)},t.exports=a},798:t=>{function e(){var t,n,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.toStringTag||"@@toStringTag";function c(e,o,a,i){var c=o&&o.prototype instanceof l?o:l,f=Object.create(c.prototype);return r(f,"_invoke",function(e,r,o){var a,i,c,l=0,f=o||[],s=!1,y={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,r){return a=e,i=0,c=t,y.n=r,u}};function p(e,r){for(i=e,c=r,n=0;!s&&l&&!o&&n<f.length;n++){var o,a=f[n],p=y.p,g=a[2];e>3?(o=g===r)&&(c=a[(i=a[4])?5:(i=3,3)],a[4]=a[5]=t):a[0]<=p&&((o=e<2&&p<a[1])?(i=0,y.v=r,y.n=a[1]):p<g&&(o=e<3||a[0]>r||r>g)&&(a[4]=e,a[5]=r,y.n=g,i=0))}if(o||e>1)return u;throw s=!0,r}return function(o,f,g){if(l>1)throw TypeError("Generator is already running");for(s&&1===f&&p(f,g),i=f,c=g;(n=i<2?t:c)||!s;){a||(i?i<3?(i>1&&(y.n=-1),p(i,c)):y.n=c:y.v=c);try{if(l=2,a){if(i||(o="next"),n=a[o]){if(!(n=n.call(a,c)))throw TypeError("iterator result is not an object");if(!n.done)return n;c=n.value,i<2&&(i=0)}else 1===i&&(n=a.return)&&n.call(a),i<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),i=1);a=t}else if((n=(s=y.n<0)?c:e.call(r,y))!==u)break}catch(e){a=t,i=1,c=e}finally{l=1}}return{value:n,done:s}}}(e,a,i),!0),f}var u={};function l(){}function f(){}function s(){}n=Object.getPrototypeOf;var y=[][a]?n(n([][a]())):(r(n={},a,function(){return this}),n),p=s.prototype=l.prototype=Object.create(y);function g(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,r(t,i,"GeneratorFunction")),t.prototype=Object.create(p),t}return f.prototype=s,r(p,"constructor",s),r(s,"constructor",f),f.displayName="GeneratorFunction",r(s,i,"GeneratorFunction"),r(p),r(p,i,"Generator"),r(p,a,function(){return this}),r(p,"toString",function(){return"[object Generator]"}),(e=function(){return{w:c,m:g}})()}function r(t,e,n,o){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}r=function(t,e,n,o){function i(e,n){r(t,e,function(t){return this._invoke(e,n,t)})}e?a?a(t,e,{value:n,enumerable:!o,configurable:!o,writable:!o}):t[e]=n:(i("next",0),i("throw",1),i("return",2))},r(t,e,n,o)}function n(t,e,r){return e=a(e),function(t,e){if(e&&("object"==d(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,o()?Reflect.construct(e,r||[],a(t).constructor):e.apply(t,r))}function o(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(o=function(){return!!t})()}function a(t){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},a(t)}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,g(n.key),n)}}function f(t,e,r){return e&&l(t.prototype,e),r&&l(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function s(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function y(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?s(Object(r),!0).forEach(function(e){p(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):s(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function p(t,e,r){return(e=g(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function g(t){var e=function(t){if("object"!=d(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==d(e)?e:e+""}function v(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return h(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return i=t.done,t},e:function(t){c=!0,a=t},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}function b(t){return function(){return new m(t.apply(this,arguments))}}function m(t){var e,r;function n(e,r){try{var a=t[e](r),i=a.value,c=i instanceof S;Promise.resolve(c?i.v:i).then(function(r){if(c){var u="return"===e?"return":"next";if(!i.k||r.done)return n(u,r);r=t[u](r).value}o(a.done?"return":"normal",r)},function(t){n("throw",t)})}catch(t){o("throw",t)}}function o(t,o){switch(t){case"return":e.resolve({value:o,done:!0});break;case"throw":e.reject(o);break;default:e.resolve({value:o,done:!1})}(e=e.next)?n(e.key,e.arg):r=null}this._invoke=function(t,o){return new Promise(function(a,i){var c={key:t,arg:o,resolve:a,reject:i,next:null};r?r=r.next=c:(e=r=c,n(t,o))})},"function"!=typeof t.return&&(this.return=void 0)}function S(t,e){this.v=t,this.k=e}m.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},m.prototype.next=function(t){return this._invoke("next",t)},m.prototype.throw=function(t){return this._invoke("throw",t)},m.prototype.return=function(t){return this._invoke("return",t)};var P={__proto__:null},x=Reflect.defineProperty,w=Reflect.getOwnPropertyDescriptor,A=Reflect.ownKeys,O=Function.prototype,_=O.apply,j=O.bind,E=O.call,k=j.bind(E);P.uncurryThis=k;var I=j.bind(_);P.applyBind=I;var R=["ArrayOf","ArrayPrototypePush","ArrayPrototypeUnshift","MathHypot","MathMax","MathMin","StringFromCharCode","StringFromCodePoint","StringPrototypeConcat","TypedArrayOf"];function L(t){return"symbol"===d(t)?"Symbol".concat(t.description[7].toUpperCase()).concat(t.description.slice(8)):"".concat(t[0].toUpperCase()).concat(t.slice(1))}function T(t,e,r,n){var o=n.enumerable,a=n.get,i=n.set;x(t,"".concat(e,"Get").concat(r),{__proto__:null,value:k(a),enumerable:o}),void 0!==i&&x(t,"".concat(e,"Set").concat(r),{__proto__:null,value:k(i),enumerable:o})}function B(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=w(t,a);if("get"in c)T(e,r,i,c);else{var u="".concat(r).concat(i);x(e,u,y({__proto__:null},c)),R.includes(u)&&x(e,"".concat(u,"Apply"),{__proto__:null,value:I(c.value,t)})}}}catch(t){o.e(t)}finally{o.f()}}function z(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=w(t,a);if("get"in c)T(e,r,i,c);else{var u=c.value;"function"==typeof u&&(c.value=k(u));var l="".concat(r).concat(i);x(e,l,y({__proto__:null},c)),R.includes(l)&&x(e,"".concat(l,"Apply"),{__proto__:null,value:I(u)})}}}catch(t){o.e(t)}finally{o.f()}}["Proxy","globalThis"].forEach(function(t){P[t]=globalThis[t]}),[decodeURI,decodeURIComponent,encodeURI,encodeURIComponent].forEach(function(t){P[t.name]=t}),[escape,eval,unescape].forEach(function(t){P[t.name]=t}),["Atomics","JSON","Math","Proxy","Reflect"].forEach(function(t){B(globalThis[t],P,t)}),["AggregateError","Array","ArrayBuffer","BigInt","BigInt64Array","BigUint64Array","Boolean","DataView","Date","Error","EvalError","FinalizationRegistry","Float32Array","Float64Array","Function","Int16Array","Int32Array","Int8Array","Map","Number","Object","RangeError","ReferenceError","RegExp","Set","String","Symbol","SyntaxError","TypeError","URIError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakRef","WeakSet"].forEach(function(t){var e=globalThis[t];e&&(P[t]=e,B(e,P,t),z(e.prototype,P,"".concat(t,"Prototype")))}),["Promise"].forEach(function(t){var e=globalThis[t];P[t]=e,function(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=w(t,a);if("get"in c)T(e,r,i,c);else{var u=c.value;"function"==typeof u&&(c.value=u.bind(t));var l="".concat(r).concat(i);x(e,l,y({__proto__:null},c))}}}catch(t){o.e(t)}finally{o.f()}}(e,P,t),z(e.prototype,P,"".concat(t,"Prototype"))}),[{name:"TypedArray",original:Reflect.getPrototypeOf(Uint8Array)},{name:"ArrayIterator",original:{prototype:Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]())}},{name:"StringIterator",original:{prototype:Reflect.getPrototypeOf(String.prototype[Symbol.iterator]())}}].forEach(function(t){var e=t.name,r=t.original;P[e]=r,z(r,P,e),z(r.prototype,P,"".concat(e,"Prototype"))}),P.IteratorPrototype=Reflect.getPrototypeOf(P.ArrayIteratorPrototype);var M=P.ArrayPrototypeForEach,C=P.FinalizationRegistry,D=P.FunctionPrototypeCall,N=P.Map,F=P.ObjectFreeze,W=P.ObjectSetPrototypeOf,H=P.RegExp,U=P.Set,G=P.SymbolIterator,V=P.WeakMap,Z=P.WeakRef,$=P.WeakSet,Y=function(t,e){var r=function(){return f(function e(r){u(this,e),this._iterator=t(r)},[{key:"next",value:function(){return e(this._iterator)}},{key:G,value:function(){return this}}])}();return W(r.prototype,null),F(r.prototype),F(r),r};P.SafeArrayIterator=Y(P.ArrayPrototypeSymbolIterator,P.ArrayIteratorPrototypeNext),P.SafeStringIterator=Y(P.StringPrototypeSymbolIterator,P.StringIteratorPrototypeNext);var q=function(t,e){M(A(t),function(r){w(e,r)||x(e,r,y({__proto__:null},w(t,r)))})},J=function(t,e){if(G in t.prototype){var r,n=new t;M(A(t.prototype),function(o){if(!w(e.prototype,o)){var a,i=w(t.prototype,o);if("function"==typeof i.value&&0===i.value.length&&G in(null!==(a=D(i.value,n))&&void 0!==a?a:{})){var c=k(i.value);r=r||k(c(n).next);var u=Y(c,r);i.value=function(){return new u(this)}}x(e.prototype,o,y({__proto__:null},i))}})}else q(t.prototype,e.prototype);return q(t,e),W(e.prototype,null),F(e.prototype),F(e),e};P.makeSafe=J,P.SafeMap=J(N,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(N)),P.SafeWeakMap=J(V,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(V)),P.SafeSet=J(U,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(U)),P.SafeWeakSet=J($,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}($)),P.SafeFinalizationRegistry=J(C,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(C)),P.SafeWeakRef=J(Z,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(Z)),P.AsyncIteratorPrototype=P.ReflectGetPrototypeOf(b(e().m(function t(){return e().w(function(t){for(;;)if(0===t.n)return t.a(2)},t)}))).prototype,P.internalBinding=function(t){if("config"===t)return{hasIntl:!1};throw new Error('unknown module: "'.concat(t,'"'))},P._stringPrototypeReplaceAll=function(t,e,r){return"[object regexp]"===Object.prototype.toString.call(e).toLowerCase()?t.replace(e,r):t.replace(new H(e,"g"),r)},P.StringPrototypeReplaceAll=P.StringPrototypeReplaceAll||P._stringPrototypeReplaceAll,W(P,null),F(P),t.exports=P},799:(t,e,r)=>{function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(c=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function l(t,e){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},l(t,e)}var f,s,y=r(798),p=y.ArrayIsArray,g=y.ArrayPrototypeIncludes,v=y.ArrayPrototypeIndexOf,h=y.ArrayPrototypeJoin,d=y.ArrayPrototypePush,b=y.ArrayPrototypeSlice,m=y.ArrayPrototypeSplice,S=y.Error,P=y.ErrorCaptureStackTrace,x=y.JSONStringify,w=y.ObjectDefineProperty,A=y.ReflectApply,O=y.RegExpPrototypeExec,_=y.SafeMap,j=y.SafeWeakMap,E=y.String,k=y.StringPrototypeEndsWith,I=y.StringPrototypeIncludes,R=y.StringPrototypeIndexOf,L=y.StringPrototypeSlice,T=y.StringPrototypeToLowerCase,B=y.Symbol,z=y.TypeError,M=B("kIsNodeError"),C=new _,D={},N=/^[A-Z][a-zA-Z0-9]*$/,F=["string","function","number","object","Function","Object","boolean","bigint","symbol"],W=new j,H=r(758),U=null;function G(t,e){var r=function(t){function r(){var t,n,a,l;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,r),t=function(t,e,r){return e=u(e),function(t,e){if(e&&("object"==o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,c()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}(this,r),n=t,l=e,(a=i(a="code"))in n?Object.defineProperty(n,a,{value:l,enumerable:!0,configurable:!0,writable:!0}):n[a]=l;for(var f=arguments.length,s=new Array(f),y=0;y<f;y++)s[y]=arguments[y];return w(t,"message",{__proto__:null,value:Z(e,s,t),enumerable:!1,writable:!0,configurable:!0}),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&l(t,e)}(r,t),n=r,(f=[{key:"toString",value:function(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}])&&a(n.prototype,f),s&&a(n,s),Object.defineProperty(n,"prototype",{writable:!1}),n;// removed by dead control flow
16904
- var n, f, s; }(t);return r}function V(t,e,r){C.set(t,e);var n=G(r,t);D[t]=n}function Z(t,e,r){var n=C.get(t);if("function"==typeof n)return H(n.length<=e.length,"Code: ".concat(t,"; The provided arguments length (").concat(e.length,") does not ")+"match the required ones (".concat(n.length,").")),A(n,r,e)}var $=B("kEnhanceStackBeforeInspector");function Y(t){if(null===t)return"null";if(void 0===t)return"undefined";switch(o(t)){case"bigint":return"type bigint (".concat(t,"n)");case"number":return 0===t?1/t==-1/0?"type number (-0)":"type number (0)":t!=t?"type number (NaN)":t===1/0?"type number (Infinity)":t===-1/0?"type number (-Infinity)":"type number (".concat(t,")");case"boolean":return t?"type boolean (true)":"type boolean (false)";case"symbol":return"type symbol (".concat(E(t),")");case"function":return"function ".concat(t.name);case"object":return t.constructor&&"name"in t.constructor?"an instance of ".concat(t.constructor.name):"".concat((U=U||r(338)).inspect(t,{depth:-1}));case"string":return t.length>28&&(t="".concat(L(t,0,25),"...")),-1===R(t,"'")?"type string ('".concat(t,"')"):"type string (".concat(x(t),")")}}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";switch(t.length){case 0:return"";case 1:return"".concat(t[0]);case 2:return"".concat(t[0]," ").concat(e," ").concat(t[1]);case 3:return"".concat(t[0],", ").concat(t[1],", ").concat(e," ").concat(t[2]);default:return"".concat(h(b(t,0,-1),", "),", ").concat(e," ").concat(t[t.length-1])}}t.exports={codes:D,determineSpecificType:Y,E:V,formatList:q,getMessage:Z,hideStackFrames:function(t){function e(){try{for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return A(t,this,n)}catch(t){throw S.stackTraceLimit&&P(t,e),t}}return e.withoutStackTrace=t,e},isStackOverflowError:function(t){if(void 0===s)try{var e=function(){e()};e()}catch(t){s=t.message,f=t.name}return t&&t.name===f&&t.message===s},kEnhanceStackBeforeInspector:$,kIsNodeError:M,overrideStackTrace:W},V("ERR_INTERNAL_ASSERTION",function(t){var e="This is caused by either a bug in Node.js or incorrect usage of Node.js internals.\nPlease open an issue with this stack trace at https://github.com/nodejs/node/issues\n";return void 0===t?e:"".concat(t,"\n").concat(e)},S),V("ERR_INVALID_ARG_TYPE",function(t,e,r){H("string"==typeof t,"'name' must be a string"),p(e)||(e=[e]);var o="The ";if(k(t," argument"))o+="".concat(t," ");else{var a=I(t,".")?"property":"argument";o+='"'.concat(t,'" ').concat(a," ")}o+="must be ";var i,c=[],u=[],l=[],f=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,i=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw i}}}}(e);try{for(f.s();!(i=f.n()).done;){var s=i.value;H("string"==typeof s,"All expected entries have to be of type string"),g(F,s)?d(c,T(s)):null!==O(N,s)?d(u,s):(H("object"!==s,'The value "object" should be written as "Object"'),d(l,s))}}catch(t){f.e(t)}finally{f.f()}if(u.length>0){var y=v(c,"object");-1!==y&&(m(c,y,1),d(u,"Object"))}return c.length>0&&(o+="".concat(c.length>1?"one of type":"of type"," ").concat(q(c,"or")),(u.length>0||l.length>0)&&(o+=" or ")),u.length>0&&(o+="an instance of ".concat(q(u,"or")),l.length>0&&(o+=" or ")),l.length>0&&(l.length>1?o+="one of ".concat(q(l,"or")):(T(l[0])!==l[0]&&(o+="an "),o+="".concat(l[0]))),o+". Received ".concat(Y(r))},z)},948:(t,e,r)=>{var n=r(798),o=n.ArrayPrototypeJoin,a=n.Error,i=n.StringPrototypeReplace,c=n.SymbolFor,u=/\u001b\[\d\d?m/g;t.exports={customInspectSymbol:c("nodejs.util.inspect.custom"),isError:function(t){return t instanceof a},join:o,removeColors:function(t){return i(t,u,"")}}},999:t=>{t.exports=URL}},e={};return function r(n){var o=e[n];if(void 0!==o)return o.exports;var a=e[n]={exports:{}};return t[n](a,a.exports,r),a.exports}(338)})());
17325
+ !function(t,e){ true?module.exports=e():0}(this,()=>(()=>{"use strict";var t={119:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}var i=r(541).ArrayPrototypeMap,c=function(){return t=function t(){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t)},e=[{key:"hexSlice",value:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,e=arguments.length>1?arguments[1]:void 0;return i(this.slice(t,e),function(t){return("00"+t.toString(16)).slice(-2)}).join("")}}],e&&o(t.prototype,e),Object.defineProperty(t,"prototype",{writable:!1}),t;// removed by dead control flow
17326
+ var t, e; }();e.h=c},144:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=r(541).ArrayIsArray,a=r(784),i=a.hideStackFrames,c=a.codes.ERR_INVALID_ARG_TYPE,u=i(function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(0===r){if(null===t||o(t))throw new c(e,"Object",t);if("object"!==n(t))throw new c(e,"Object",t)}else{if(!(1&r)&&null===t)throw new c(e,"Object",t);if(!(2&r)&&o(t))throw new c(e,"Object",t);var a=!(4&r),i=n(t);if("object"!==i&&(a||"function"!==i))throw new c(e,"Object",t)}});t.exports={kValidateObjectNone:0,kValidateObjectAllowNullable:1,kValidateObjectAllowArray:2,kValidateObjectAllowFunction:4,validateObject:u,validateString:function(t,e){if("string"!=typeof t)throw new c(e,"string",t)}}},189:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){var r=null==t?null:"undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(null!=r){var n,o,a,i,c=[],u=!0,l=!1;try{if(a=(r=r.call(t)).next,0===e){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==e);u=!0);}catch(t){l=!0,o=t}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(l)throw o}}return c}}(t,e)||i(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function a(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=i(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,a=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){if(t){if("string"==typeof t)return c(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}var u=r(541),l=u.BigInt,f=u.Error,s=u.NumberParseInt,y=u.ObjectEntries,p=u.ObjectGetOwnPropertyDescriptor,g=u.ObjectGetOwnPropertyDescriptors,v=u.ObjectGetOwnPropertySymbols,h=u.ObjectPrototypeToString,d=u.Symbol,b=r(437),m=d("kPending"),S=d("kRejected");t.exports={constants:{kPending:m,kRejected:S,ALL_PROPERTIES:0,ONLY_ENUMERABLE:2},getOwnNonIndexProperties:function(t){var e,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2,n=g(t),i=[],c=a(y(n));try{for(c.s();!(e=c.n()).done;){var u=o(e.value,2),l=u[0],f=u[1];if(!/^(0|[1-9][0-9]*)$/.test(l)||s(l,10)>=Math.pow(2,32)-1){if(2===r&&!f.enumerable)continue;i.push(l)}}}catch(t){c.e(t)}finally{c.f()}var h,d=a(v(t));try{for(d.s();!(h=d.n()).done;){var b=h.value,m=p(t,b);(2!==r||m.enumerable)&&i.push(b)}}catch(t){d.e(t)}finally{d.f()}return i},getPromiseDetails:function(){return[m,void 0]},getProxyDetails:b.getProxyDetails,Proxy:b.Proxy,previewEntries:function(t){return[[],!1]},getConstructorName:function(t){var e;if(!t||"object"!==n(t))throw new f("Invalid object");if(null!==(e=t.constructor)&&void 0!==e&&e.name)return t.constructor.name;var r=h(t).match(/^\[object ([^\]]+)\]/);return r?r[1]:"Object"},getExternalValue:function(){return l(0)}}},285:(t,e,r)=>{function n(t){return function(t){if(Array.isArray(t))return c(t)}(t)||function(t){if("undefined"!=typeof Symbol&&null!=t[Symbol.iterator]||null!=t["@@iterator"])return Array.from(t)}(t)||i(t)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=i(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,a=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw a}}}}function i(t,e){if(t){if("string"==typeof t)return c(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(t,e):void 0}}function c(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function u(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function l(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?u(Object(r),!0).forEach(function(e){f(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):u(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function f(t,e,r){return(e=function(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}var s,y,p,g=r(541),v=g.AggregateError,h=g.AggregateErrorPrototype,d=g.Array,b=g.ArrayBuffer,m=g.ArrayBufferPrototype,S=g.ArrayIsArray,P=g.ArrayPrototype,w=g.ArrayPrototypeFilter,x=g.ArrayPrototypeForEach,A=g.ArrayPrototypeIncludes,O=g.ArrayPrototypeIndexOf,j=g.ArrayPrototypeJoin,_=g.ArrayPrototypeMap,E=g.ArrayPrototypePop,k=g.ArrayPrototypePush,I=g.ArrayPrototypePushApply,R=g.ArrayPrototypeSlice,L=g.ArrayPrototypeSort,T=g.ArrayPrototypeSplice,B=g.ArrayPrototypeUnshift,z=g.BigIntPrototypeValueOf,M=g.Boolean,C=g.BooleanPrototype,D=g.BooleanPrototypeValueOf,N=g.DataView,F=g.DataViewPrototype,W=g.Date,H=g.DatePrototype,U=g.DatePrototypeGetTime,G=g.DatePrototypeToISOString,V=g.DatePrototypeToString,Z=g.Error,$=g.ErrorPrototype,Y=g.ErrorPrototypeToString,q=g.Function,J=g.FunctionPrototype,K=g.FunctionPrototypeBind,Q=g.FunctionPrototypeCall,X=g.FunctionPrototypeSymbolHasInstance,tt=g.FunctionPrototypeToString,et=g.JSONStringify,rt=g.Map,nt=g.MapPrototype,ot=g.MapPrototypeEntries,at=g.MapPrototypeGetSize,it=g.MathFloor,ct=g.MathMax,ut=g.MathMin,lt=g.MathRound,ft=g.MathSqrt,st=g.MathTrunc,yt=g.Number,pt=g.NumberIsFinite,gt=g.NumberIsNaN,vt=g.NumberParseFloat,ht=g.NumberParseInt,dt=g.NumberPrototype,bt=g.NumberPrototypeToString,mt=g.NumberPrototypeValueOf,St=g.Object,Pt=g.ObjectAssign,wt=g.ObjectDefineProperty,xt=g.ObjectGetOwnPropertyDescriptor,At=g.ObjectGetOwnPropertyNames,Ot=g.ObjectGetOwnPropertySymbols,jt=g.ObjectGetPrototypeOf,_t=g.ObjectIs,Et=g.ObjectKeys,kt=g.ObjectPrototype,It=g.ObjectPrototypeHasOwnProperty,Rt=g.ObjectPrototypePropertyIsEnumerable,Lt=g.ObjectPrototypeToString,Tt=g.ObjectSeal,Bt=g.ObjectSetPrototypeOf,zt=g.Promise,Mt=g.PromisePrototype,Ct=g.RangeError,Dt=g.RangeErrorPrototype,Nt=g.ReflectApply,Ft=g.ReflectOwnKeys,Wt=g.RegExp,Ht=g.RegExpPrototype,Ut=g.RegExpPrototypeExec,Gt=g.RegExpPrototypeSymbolReplace,Vt=g.RegExpPrototypeSymbolSplit,Zt=g.RegExpPrototypeToString,$t=g.SafeMap,Yt=g.SafeSet,qt=g.SafeStringIterator,Jt=g.Set,Kt=g.SetPrototype,Qt=g.SetPrototypeGetSize,Xt=g.SetPrototypeValues,te=g.String,ee=g.StringPrototype,re=g.StringPrototypeCharCodeAt,ne=g.StringPrototypeCodePointAt,oe=g.StringPrototypeEndsWith,ae=g.StringPrototypeIncludes,ie=g.StringPrototypeIndexOf,ce=g.StringPrototypeLastIndexOf,ue=g.StringPrototypeNormalize,le=g.StringPrototypePadEnd,fe=g.StringPrototypePadStart,se=g.StringPrototypeRepeat,ye=g.StringPrototypeReplace,pe=g.StringPrototypeReplaceAll,ge=g.StringPrototypeSlice,ve=g.StringPrototypeSplit,he=g.StringPrototypeStartsWith,de=g.StringPrototypeToLowerCase,be=g.StringPrototypeValueOf,me=g.SymbolIterator,Se=g.SymbolPrototypeToString,Pe=g.SymbolPrototypeValueOf,we=g.SymbolToPrimitive,xe=g.SymbolToStringTag,Ae=g.TypeError,Oe=g.TypeErrorPrototype,je=g.TypedArray,_e=g.TypedArrayPrototype,Ee=g.TypedArrayPrototypeGetLength,ke=g.TypedArrayPrototypeGetSymbolToStringTag,Ie=g.Uint8Array,Re=g.WeakMap,Le=g.WeakMapPrototype,Te=g.WeakSet,Be=g.WeakSetPrototype,ze=g.globalThis,Me=g.internalBinding,Ce=g.uncurryThis,De=r(189),Ne=De.constants,Fe=Ne.ALL_PROPERTIES,We=Ne.ONLY_ENUMERABLE,He=Ne.kPending,Ue=Ne.kRejected,Ge=De.getOwnNonIndexProperties,Ve=De.getPromiseDetails,Ze=De.getProxyDetails,$e=De.previewEntries,Ye=De.getConstructorName,qe=De.getExternalValue,Je=De.Proxy,Ke=r(767),Qe=Ke.customInspectSymbol,Xe=Ke.isError,tr=Ke.join,er=Ke.removeColors,rr=r(784).isStackOverflowError,nr=r(629),or=nr.isAsyncFunction,ar=nr.isGeneratorFunction,ir=nr.isAnyArrayBuffer,cr=nr.isArrayBuffer,ur=nr.isArgumentsObject,lr=nr.isBoxedPrimitive,fr=nr.isDataView,sr=nr.isExternal,yr=nr.isMap,pr=nr.isMapIterator,gr=nr.isModuleNamespaceObject,vr=nr.isNativeError,hr=nr.isPromise,dr=nr.isSet,br=nr.isSetIterator,mr=nr.isWeakMap,Sr=nr.isWeakSet,Pr=nr.isRegExp,wr=nr.isDate,xr=nr.isTypedArray,Ar=nr.isStringObject,Or=nr.isNumberObject,jr=nr.isBooleanObject,_r=nr.isBigIntObject,Er=r(961),kr=r(333).BuiltinModule,Ir=r(144),Rr=Ir.validateObject,Lr=Ir.validateString,Tr=Ir.kValidateObjectAllowArray;function Br(t){return(y=y||r(622)).pathToFileURL(t).href}var zr,Mr=new Yt(w(At(ze),function(t){return null!==Ut(/^[A-Z][a-zA-Z0-9]+$/,t)})),Cr=function(t){return void 0===t&&void 0!==t},Dr=Tt({showHidden:!1,depth:2,colors:!1,customInspect:!0,showProxy:!1,maxArrayLength:100,maxStringLength:1e4,breakLength:80,compact:3,sorted:!1,getters:!1,numericSeparator:!1}),Nr=/[\x00-\x1f\x27\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/,Fr=/[\x00-\x1f\x27\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g,Wr=/[\x00-\x1f\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/,Hr=/[\x00-\x1f\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g,Ur=/^[a-zA-Z_][a-zA-Z_0-9]*$/,Gr=/^(0|[1-9][0-9]*)$/,Vr=/^ {4}at (?:[^/\\(]+ \(|)node:(.+):\d+:\d+\)?$/,Zr=/^(\s+[^(]*?)\s*{/,$r=/(\/\/.*?\n)|(\/\*(.|\n)*?\*\/)/g,Yr=["\\x00","\\x01","\\x02","\\x03","\\x04","\\x05","\\x06","\\x07","\\b","\\t","\\n","\\x0B","\\f","\\r","\\x0E","\\x0F","\\x10","\\x11","\\x12","\\x13","\\x14","\\x15","\\x16","\\x17","\\x18","\\x19","\\x1A","\\x1B","\\x1C","\\x1D","\\x1E","\\x1F","","","","","","","","\\'","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\\\","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","\\x7F","\\x80","\\x81","\\x82","\\x83","\\x84","\\x85","\\x86","\\x87","\\x88","\\x89","\\x8A","\\x8B","\\x8C","\\x8D","\\x8E","\\x8F","\\x90","\\x91","\\x92","\\x93","\\x94","\\x95","\\x96","\\x97","\\x98","\\x99","\\x9A","\\x9B","\\x9C","\\x9D","\\x9E","\\x9F"],qr=new Wt("[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/\\#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/\\#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))|(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))","g");function Jr(t,e){var r={budget:{},indentationLvl:0,seen:[],currentDepth:0,stylize:an,showHidden:Dr.showHidden,depth:Dr.depth,colors:Dr.colors,customInspect:Dr.customInspect,showProxy:Dr.showProxy,maxArrayLength:Dr.maxArrayLength,maxStringLength:Dr.maxStringLength,breakLength:Dr.breakLength,compact:Dr.compact,sorted:Dr.sorted,getters:Dr.getters,numericSeparator:Dr.numericSeparator};if(arguments.length>1)if(arguments.length>2&&(void 0!==arguments[2]&&(r.depth=arguments[2]),arguments.length>3&&void 0!==arguments[3]&&(r.colors=arguments[3])),"boolean"==typeof e)r.showHidden=e;else if(e)for(var n=Et(e),o=0;o<n.length;++o){var a=n[o];It(Dr,a)||"stylize"===a?r[a]=e[a]:void 0===r.userOptions&&(r.userOptions=e)}return r.colors&&(r.stylize=on),null===r.maxArrayLength&&(r.maxArrayLength=1/0),null===r.maxStringLength&&(r.maxStringLength=1/0),vn(r,t,0)}Jr.custom=Qe,wt(Jr,"defaultOptions",{__proto__:null,get:function(){return Dr},set:function(t){return Rr(t,"options"),Pt(Dr,t)}});var Kr=39,Qr=49;function Xr(t,e){wt(Jr.colors,e,{__proto__:null,get:function(){return this[t]},set:function(e){this[t]=e},configurable:!0,enumerable:!1})}Jr.colors={__proto__:null,reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],blink:[5,25],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],doubleunderline:[21,24],black:[30,Kr],red:[31,Kr],green:[32,Kr],yellow:[33,Kr],blue:[34,Kr],magenta:[35,Kr],cyan:[36,Kr],white:[37,Kr],bgBlack:[40,Qr],bgRed:[41,Qr],bgGreen:[42,Qr],bgYellow:[43,Qr],bgBlue:[44,Qr],bgMagenta:[45,Qr],bgCyan:[46,Qr],bgWhite:[47,Qr],framed:[51,54],overlined:[53,55],gray:[90,Kr],redBright:[91,Kr],greenBright:[92,Kr],yellowBright:[93,Kr],blueBright:[94,Kr],magentaBright:[95,Kr],cyanBright:[96,Kr],whiteBright:[97,Kr],bgGray:[100,Qr],bgRedBright:[101,Qr],bgGreenBright:[102,Qr],bgYellowBright:[103,Qr],bgBlueBright:[104,Qr],bgMagentaBright:[105,Qr],bgCyanBright:[106,Qr],bgWhiteBright:[107,Qr]},Xr("gray","grey"),Xr("gray","blackBright"),Xr("bgGray","bgGrey"),Xr("bgGray","bgBlackBright"),Xr("dim","faint"),Xr("strikethrough","crossedout"),Xr("strikethrough","strikeThrough"),Xr("strikethrough","crossedOut"),Xr("hidden","conceal"),Xr("inverse","swapColors"),Xr("inverse","swapcolors"),Xr("doubleunderline","doubleUnderline"),Jr.styles=Pt({__proto__:null},{special:"cyan",number:"yellow",bigint:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",symbol:"green",date:"magenta",regexp:function t(e){var r,n="",o=0,a=0,i=!1,c=((null===(r=t.colors)||void 0===r?void 0:r.length)>0?t.colors:tn).reduce(function(t,e){var r=Jr.colors[e];return r&&t.push(["[".concat(r[0],"m"),"[".concat(r[1],"m")]),t},[]);function u(t,r){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1,i="";for(o++;o<e.length&&e[o]!==r;)i+=e[o++];o<e.length?(a-=n,l(t),f(i,1,1),l(r),a+=n):f(t,1,-i.length)}var l=function(t){var e,r=a%c.length,o=null!==(e=c[r])&&void 0!==e?e:c[0];return n+=o[0]+t+o[1],r};function f(t,e,r){a+=e,l(t),a-=e,o+=r}for(l("/"),a++,o=1;o<e.length;){var s=e[o];if(i)if("\\"===s){var y="\\";if(++o<e.length){var p=(y+=e[o++])[1];if("u"===p&&"{"===e[o]){u("".concat(y,"{"),"}",0);continue}if(("p"===p||"P"===p)&&"{"===e[o]){u("".concat(y,"{"),"}",0);continue}"x"===y[1]&&(y+=e.slice(o,o+2),o+=2)}l(y)}else"]"===s?(a--,l("]"),o++,i=!1):"-"===s&&"["!==e[o-1]&&o+1<e.length&&"]"!==e[o+1]?f("-",1,1):(l(s),o++);else if("["===s)l("["),a++,o++,i=!0;else if("("===s){if(l("("),a++,++o<e.length&&"?"===e[o]){var g=++o<e.length?e[o]:"";if(":"===g||"="===g||"!"===g)f("?".concat(g),-1,1);else{var v=o+1<e.length?e[o+1]:"";if("<"!==g||"="!==v&&"!"!==v)if("<"===g){for(var h=++o;o<e.length&&">"!==e[o];)o++;var d=e.slice(h,o);o<e.length&&">"===e[o]?(a--,l("?<"),f(d,1,0),l(">"),a++,o++):(f("?<",-1,0),l(d))}else l("?");else f("?<".concat(v),-1,2)}}}else if(")"===s)a--,l(")"),o++;else if("\\"===s){var b="\\";if(++o<e.length){var m=(b+=e[o++])[1];if(o<e.length){if("u"===m&&"{"===e[o]){u("".concat(b,"{"),"}",0);continue}if("x"===m)b+=e.slice(o,o+2),o+=2;else if(m>="0"&&m<="9")for(;o<e.length&&e[o]>="0"&&e[o]<="9";)b+=e[o++];else{if("k"===m&&"<"===e[o]){u("".concat(b,"<"),">");continue}if(("p"===m||"P"===m)&&"{"===e[o]){u("".concat(b,"{"),"}",0);continue}}}}f(b,1,0)}else if("|"===s||"+"===s||"*"===s||"?"===s||","===s||"^"===s||"$"===s)f(s,3,1);else if("{"===s){o++;for(var S="";o<e.length&&e[o]>="0"&&e[o]<="9";)S+=e[o++];if(S&&(l("{"),a++,f(S,1,0)),o<e.length)if(","===e[o])S||(l("{"),a++),l(","),o++;else if(!S){a+=1,l("{"),a-=1;continue}for(var P="";o<e.length&&e[o]>="0"&&e[o]<="9";)P+=e[o++];P&&f(P,1,0),o<e.length&&"}"===e[o]&&(a--,l("}"),o++),o<e.length&&"?"===e[o]&&f("?",3,1)}else if("."===s)f(s,2,1);else{if("/"===s)break;f(s,1,1)}}return f("/",-1,1),o<e.length&&l(e.slice(o)),n},module:"underline"}),Jr.styles.regexp.colors=["green","red","yellow","cyan","magenta"];var tn=Jr.styles.regexp.colors.slice();function en(t,e){return-1===e?'"'.concat(t,'"'):-2===e?"`".concat(t,"`"):"'".concat(t,"'")}function rn(t){var e=re(t);return Yr.length>e?Yr[e]:"\\u".concat(bt(e,16))}function nn(t){var e=Nr,r=Fr,n=39;if(ae(t,"'")&&(ae(t,'"')?ae(t,"`")||ae(t,"${")||(n=-2):n=-1,39!==n&&(e=Wr,r=Hr)),t.length<5e3&&null===Ut(e,t))return en(t,n);if(t.length>100)return en(t=Gt(r,t,rn),n);for(var o="",a=0,i=0;i<t.length;i++){var c=re(t,i);if(c===n||92===c||c<32||c>126&&c<160)o+=a===i?Yr[c]:"".concat(ge(t,a,i)).concat(Yr[c]),a=i+1;else if(c>=55296&&c<=57343){if(c<=56319&&i+1<t.length){var u=re(t,i+1);if(u>=56320&&u<=57343){i++;continue}}o+="".concat(ge(t,a,i),"\\u").concat(bt(c,16)),a=i+1}}return a!==t.length&&(o+=ge(t,a)),en(o,n)}function on(t,e){var r=Jr.styles[e];if(void 0!==r){var n=Jr.colors[r];if(void 0!==n)return"[".concat(n[0],"m").concat(t,"[").concat(n[1],"m");if("function"==typeof r)return r(t)}return t}function an(t){return t}function cn(){return[]}function un(t,e){try{return t instanceof e}catch(t){return!1}}var ln=(new $t).set(P,{name:"Array",constructor:d}).set(m,{name:"ArrayBuffer",constructor:b}).set(J,{name:"Function",constructor:q}).set(nt,{name:"Map",constructor:rt}).set(Kt,{name:"Set",constructor:Jt}).set(kt,{name:"Object",constructor:St}).set(_e,{name:"TypedArray",constructor:je}).set(Ht,{name:"RegExp",constructor:Wt}).set(H,{name:"Date",constructor:W}).set(F,{name:"DataView",constructor:N}).set($,{name:"Error",constructor:Z}).set(h,{name:"AggregateError",constructor:v}).set(Dt,{name:"RangeError",constructor:Ct}).set(Oe,{name:"TypeError",constructor:Ae}).set(C,{name:"Boolean",constructor:M}).set(dt,{name:"Number",constructor:yt}).set(ee,{name:"String",constructor:te}).set(Mt,{name:"Promise",constructor:zt}).set(Le,{name:"WeakMap",constructor:Re}).set(Be,{name:"WeakSet",constructor:Te});function fn(t,e,r,n){for(var o,a=t;t||Cr(t);){var i=ln.get(t);if(void 0!==i){var c=i.name,u=i.constructor;if(X(u,a))return void 0!==n&&o!==t&&sn(e,a,o||a,r,n),c}var f=xt(t,"constructor");if(void 0!==f&&"function"==typeof f.value&&""!==f.value.name&&un(a,f.value))return void 0===n||o===t&&Mr.has(f.value.name)||sn(e,a,o||a,r,n),te(f.value.name);t=jt(t),void 0===o&&(o=t)}if(null===o)return null;var s=Ye(a);if(r>e.depth&&null!==e.depth)return"".concat(s," <Complex prototype>");var y=fn(o,e,r+1,n);return null===y?"".concat(s," <").concat(Jr(o,l(l({},e),{},{customInspect:!1,depth:-1})),">"):"".concat(s," <").concat(y,">")}function sn(t,e,r,n,o){var i,c,u=0;do{if(0!==u||e===r){if(null===(r=jt(r)))return;var l=xt(r,"constructor");if(void 0!==l&&"function"==typeof l.value&&Mr.has(l.value.name))return}0===u?c=new Yt:x(i,function(t){return c.add(t)}),i=Ft(r),k(t.seen,e);var f,s=a(i);try{for(s.s();!(f=s.n()).done;){var y=f.value;if(!("constructor"===y||It(e,y)||0!==u&&c.has(y))){var p=xt(r,y);if("function"!=typeof p.value){var g=Wn(t,r,n,y,0,p,e);t.colors?k(o,"".concat(g,"")):k(o,g)}}}}catch(t){s.e(t)}finally{s.f()}E(t.seen)}while(3!==++u)}function yn(t,e,r){var n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(null===t)return""!==e&&r!==e?"[".concat(r).concat(n,": null prototype] [").concat(e,"] "):"[".concat(r).concat(n,": null prototype] ");var o="".concat(t).concat(n," ");if(""!==e){var a=t.indexOf(e);if(-1===a)o+="[".concat(e,"] ");else{var i=a+e.length;i!==t.length&&t[i]===t[i].toLowerCase()&&(o+="[".concat(e,"] "))}}return o}function pn(t,e){var r,n=Ot(t);if(e)r=At(t),0!==n.length&&I(r,n);else{try{r=Et(t)}catch(e){Er(vr(e)&&"ReferenceError"===e.name&&gr(t)),r=At(t)}0!==n.length&&I(r,w(n,function(e){return Rt(t,e)}))}return r}function gn(t,e,r){var n="";return null===e&&(n=Ye(t))===r&&(n="Object"),yn(e,r,n)}function vn(t,e,i,c){if("object"!==o(e)&&"function"!=typeof e&&!Cr(e))return On(t.stylize,e,t);if(null===e)return t.stylize("null","null");var u=e,s=Ze(e,!!t.showProxy);if(void 0!==s){if(null===s||null===s[0])return t.stylize("<Revoked Proxy>","special");if(t.showProxy)return function(t,e,r){if(r>t.depth&&null!==t.depth)return t.stylize("Proxy [Array]","special");r+=1,t.indentationLvl+=2;var n=[vn(t,e[0],r),vn(t,e[1],r)];return t.indentationLvl-=2,Un(t,n,"",["Proxy [","]"],2,r)}(t,s,i);e=s}if(t.customInspect){var v,h=e[Qe];if("function"==typeof h&&h!==Jr&&(null===(v=xt(e,"constructor"))||void 0===v||null===(v=v.value)||void 0===v?void 0:v.prototype)!==e){var d=null===t.depth?null:t.depth-i,b=void 0!==s||!X(St,u),m=Q(h,u,d,function(t,e){var r=l({stylize:t.stylize,showHidden:t.showHidden,depth:t.depth,colors:t.colors,customInspect:t.customInspect,showProxy:t.showProxy,maxArrayLength:t.maxArrayLength,maxStringLength:t.maxStringLength,breakLength:t.breakLength,compact:t.compact,sorted:t.sorted,getters:t.getters,numericSeparator:t.numericSeparator},t.userOptions);if(e){Bt(r,null);var n,i=a(Et(r));try{for(i.s();!(n=i.n()).done;){var c=n.value;"object"!==o(r[c])&&"function"!=typeof r[c]||null===r[c]||delete r[c]}}catch(t){i.e(t)}finally{i.f()}r.stylize=Bt(function(e,r){var n;try{n="".concat(t.stylize(e,r))}catch(t){}return"string"!=typeof n?e:n},null)}return r}(t,b),Jr);if(m!==u)return"string"!=typeof m?vn(t,m,i):pe(m,"\n","\n".concat(se(" ",t.indentationLvl)))}}if(t.seen.includes(e)){var P=1;return void 0===t.circular?(t.circular=new $t,t.circular.set(e,P)):void 0===(P=t.circular.get(e))&&(P=t.circular.size+1,t.circular.set(e,P)),t.stylize("[Circular *".concat(P,"]"),"special")}return function(t,e,o,i){var c,u;t.showHidden&&(o<=t.depth||null===t.depth)&&(u=[]);var l=fn(e,t,o,u);void 0!==u&&0===u.length&&(u=void 0);var s="";try{s=e[xe]}catch(t){}("string"!=typeof s||""!==s&&(t.showHidden?It:Rt)(e,xe))&&(s="");var v,h,d,b="",m=cn,P=!0,w=0,x=t.showHidden?Fe:We,_=0;if(me in e||null===l)if(P=!1,S(e)){var E="Array"!==l||""!==s?yn(l,s,"Array","(".concat(e.length,")")):"";if(c=Ge(e,x),v=["".concat(E,"["),"]"],0===e.length&&0===c.length&&void 0===u)return"".concat(v[0],"]");_=2,m=kn}else if(dr(e)){var M=Qt(e),C=yn(l,s,"Set","(".concat(M,")"));if(c=pn(e,t.showHidden),m=K(Rn,null,null!==l?e:Xt(e)),0===M&&0===c.length&&void 0===u)return"".concat(C,"{}");v=["".concat(C,"{"),"}"]}else if(yr(e)){var N=at(e),F=yn(l,s,"Map","(".concat(N,")"));if(c=pn(e,t.showHidden),m=K(Ln,null,null!==l?e:ot(e)),0===N&&0===c.length&&void 0===u)return"".concat(F,"{}");v=["".concat(F,"{"),"}"]}else if(xr(e)){c=Ge(e,x);var W=e,H="";null===l&&(H=ke(e),W=new g[H](e));var Z=Ee(e),$=yn(l,s,H,"(".concat(Z,")"));if(v=["".concat($,"["),"]"],0===e.length&&0===c.length&&!t.showHidden)return"".concat(v[0],"]");m=K(In,null,W,Z),_=2,t.showHidden&&(h=["BYTES_PER_ELEMENT","length","byteLength","byteOffset","buffer"],i=!0)}else pr(e)?(c=pn(e,t.showHidden),v=hn("Map",s),m=K(Dn,null,v)):br(e)?(c=pn(e,t.showHidden),v=hn("Set",s),m=K(Dn,null,v)):P=!0;if(P)if(c=pn(e,t.showHidden),v=["{","}"],"function"==typeof e){if(b=function(t,e,r,n){var o=tt(e);if(he(o,"class")&&"}"===o[o.length-1]){var a=ge(o,5,-1),i=ie(a,"{");if(-1!==i&&(!ae(ge(a,0,i),"(")||null!==Ut(Zr,Gt($r,a))))return function(t,e,r){var n=It(t,"name")&&t.name||"(anonymous)",o="class ".concat(n);if("Function"!==e&&null!==e&&(o+=" [".concat(e,"]")),""!==r&&e!==r&&(o+=" [".concat(r,"]")),null!==e){var a=jt(t).name;a&&(o+=" extends ".concat(a))}else o+=" extends [null prototype]";return"[".concat(o,"]")}(e,r,n)}var c="Function";ar(e)&&(c="Generator".concat(c)),or(e)&&(c="Async".concat(c));var u="[".concat(c);return null===r&&(u+=" (null prototype)"),""===e.name?u+=" (anonymous)":u+=": ".concat("string"==typeof e.name?e.name:vn(t,e.name)),u+="]",r!==c&&null!==r&&(u+=" ".concat(r)),""!==n&&r!==n&&(u+=" [".concat(n,"]")),u}(t,e,l,s),0===c.length&&void 0===u)return t.stylize(b,"special")}else if("Object"===l){if(ur(e)?v[0]="[Arguments] {":""!==s&&(v[0]="".concat(yn(l,s,"Object"),"{")),0===c.length&&void 0===u)return"".concat(v[0],"}")}else if(Pr(e)){b=Zt(null!==l?e:new Wt(e));var Y=yn(l,s,"RegExp");if("RegExp "!==Y&&(b="".concat(Y).concat(b)),b=t.stylize(b,"regexp"),0===c.length&&void 0===u||o>t.depth&&null!==t.depth)return b}else if(wr(e)){b=gt(U(e))?V(e):G(e);var q=yn(l,s,"Date");if("Date "!==q&&(b="".concat(q).concat(b)),0===c.length&&void 0===u)return t.stylize(b,"date")}else if(Xe(e)){if(b=function(t,e,r,o,i){var c,u,l;try{l=bn(o,t)}catch(e){return Lt(t)}var f=!1;try{c=t.message}catch(t){f=!0}var s=!1;try{u=t.name}catch(t){s=!0}if(!o.showHidden&&0!==i.length){var y=O(i,"stack");if(-1!==y&&T(i,y,1),!f){var p=O(i,"message");-1===p||"string"==typeof c&&!ae(l,c)||T(i,p,1)}if(!s){var g=O(i,"name");-1===g||"string"==typeof u&&!ae(l,u)||T(i,g,1)}}u=null==u?"Error":u,!("cause"in t)||0!==i.length&&A(i,"cause")||k(i,"cause");try{var v=t.errors;!S(v)||0!==i.length&&A(i,"errors")||k(i,"errors")}catch(t){}l=function(t,e,r,n){var o=r.length;if("string"!=typeof r&&(t=ye(t,"".concat(r),"".concat(r," [").concat(ge(yn(e,n,"Error"),0,-1),"]"))),null===e||oe(r,"Error")&&he(t,r)&&(t.length===o||":"===t[o]||"\n"===t[o])){var a="Error";if(null===e){var i=Ut(/^([A-Z][a-z_ A-Z0-9[\]()-]+)(?::|\n {4}at)/,t)||Ut(/^([a-z_A-Z0-9-]*Error)$/,t);o=(a=(null==i?void 0:i[1])||"").length,a=a||"Error"}var c=ge(yn(e,n,a),0,-1);r!==c&&(t=ae(c,r)?0===o?"".concat(c,": ").concat(t):"".concat(c).concat(ge(t,o)):"".concat(c," [").concat(r,"]").concat(ge(t,o)))}return t}(l,e,u,r);var h=c&&ie(l,c)||-1;-1!==h&&(h+=c.length);var d=ie(l,"\n at",h);if(-1===d)l="[".concat(l,"]");else{var b=ge(l,0,d),m=function(t,e,r){var o,a=ve(r,"\n");try{o=e.cause}catch(t){}if(null!=o&&Xe(o)){var i=bn(t,o),c=ie(i,"\n at");if(-1!==c){var u=dn(a,ve(ge(i,c+1),"\n")),l=u[0],f=u[1];if(l>0){var s=l-2,y=" ... ".concat(s," lines matching cause stack trace ...");a.splice(f+1,s,t.stylize(y,"undefined"))}}}if(a.length>10)for(var p=function(t){for(var e=[],r=new $t,o=0;o<t.length;o++){var a=r.get(t[o]);void 0===a?r.set(t[o],[o]):a[a.length]=o}if(t.length-r.size<=3)return e;for(var i=0;i<t.length-3;i++){var c=r.get(t[i]);if(1!==c.length&&c[c.length-1]!==i){var u=c.indexOf(i)+1;if(u!==c.length){var l=c[c.length-1]-i;if(!(l<3)){var f=void 0;if(u+1<c.length){for(var s=0,y=u;y<c.length;y++){for(var p=c[y]-i;0!==p;){var g=s%p;0!==s&&(f=f||new Yt).add(s),s=p,p=g}if(1===s)break}l=s,f&&(f.delete(l),f=n(f))}for(var v=l,h=0,d=0,b=i+l;;b+=l){for(var m=0,S=0;S<l&&t[i+S]===t[b+S];S++)m++;if(m===l)d++;else{var P;if(null===(P=f)||void 0===P||!P.length)break;0!==d&&v*h<l*d&&(v=l,h=d),l=f.pop(),b=i,d=0}}0!==h&&v*h>=l*d&&(l=v,d=h),d*l>=3&&(e.push(i+l,l,d),i+=l*(d+1)-1)}}}}return e}(a),g=p.length-3;g>=0;g-=3){var v=p[g],h=p[g+1],d=p[g+2],b=" ... collapsed ".concat(h*d," duplicate lines ")+"matching above "+(d>1?"".concat(h," lines ").concat(d," times..."):"lines ...");a.splice(v,h*d,t.stylize(b,"undefined"))}return a}(o,t,ge(l,d+1));if(o.colors){var P,w,x=function(){var t;try{t=process.cwd()}catch(t){return}return t}(),_=a(m);try{for(_.s();!(w=_.n()).done;){var E=w.value,I=Ut(Vr,E);if(null!==I&&kr.exists(I[1]))b+="\n".concat(o.stylize(E,"undefined"));else{if(b+="\n",E=mn(o,E),void 0!==x){var R=Sn(o,E,x);R===E&&(R=Sn(o,E,P=P||Br(x))),E=R}b+=E}}}catch(t){_.e(t)}finally{_.f()}}else b+="\n".concat(j(m,"\n"));l=b}if(0!==o.indentationLvl){var L=se(" ",o.indentationLvl);l=pe(l,"\n","\n".concat(L))}return l}(e,l,s,t,c),0===c.length&&void 0===u)return b}else if(ir(e)){var J=yn(l,s,cr(e)?"ArrayBuffer":"SharedArrayBuffer");if(void 0===i)m=En;else if(0===c.length&&void 0===u)return J+"{ [byteLength]: ".concat(xn(t.stylize,e.byteLength,!1)," }");v[0]="".concat(J,"{"),h=["byteLength"]}else if(fr(e))v[0]="".concat(yn(l,s,"DataView"),"{"),h=["byteLength","byteOffset","buffer"];else if(hr(e))v[0]="".concat(yn(l,s,"Promise"),"{"),m=Nn;else if(Sr(e))v[0]="".concat(yn(l,s,"WeakSet"),"{"),m=t.showHidden?Mn:zn;else if(mr(e))v[0]="".concat(yn(l,s,"WeakMap"),"{"),m=t.showHidden?Cn:zn;else if(gr(e))v[0]="".concat(yn(l,s,"Module"),"{"),m=jn.bind(null,c);else if(lr(e)){if(b=function(t,e,r,n,o){var a,i;Or(t)?(a=mt,i="Number"):Ar(t)?(a=be,i="String",r.splice(0,t.length)):jr(t)?(a=D,i="Boolean"):_r(t)?(a=z,i="BigInt"):(a=Pe,i="Symbol");var c="[".concat(i);return i!==n&&(c+=null===n?" (null prototype)":" (".concat(n,")")),c+=": ".concat(On(an,a(t),e),"]"),""!==o&&o!==n&&(c+=" [".concat(o,"]")),0!==r.length||e.stylize===an?c:e.stylize(c,de(i))}(e,t,c,l,s),0===c.length&&void 0===u)return b}else if(!function(t){return y=y||r(622),"string"==typeof t.href&&t instanceof y.URL}(e)||o>t.depth&&null!==t.depth){if(0===c.length&&void 0===u){if(sr(e)){var Q=qe(e).toString(16);return t.stylize("[External: ".concat(Q,"]"),"special")}return"".concat(gn(e,l,s),"{}")}v[0]="".concat(gn(e,l,s),"{")}else if(c=function(t){return p=p||Ot(new y.URL("http://user:pass@localhost:8080/?foo=bar#baz")),t.filter(function(t){return-1===p[t]})}(c),b=e.href,0===c.length&&void 0===u)return b;if(o>t.depth&&null!==t.depth){var X=ge(gn(e,l,s),0,-1);return null!==l&&(X="[".concat(X,"]")),t.stylize(X,"special")}o+=1,t.seen.push(e),t.currentDepth=o;var et=t.indentationLvl;try{if(d=m(t,e,o),void 0!==h)for(w=0;w<h.length;w++){var rt=void 0;try{rt=Fn(t,e,o,h[w],i)}catch(r){rt=Fn(t,f({},h[w],e.buffer[h[w]]),o,h[w],i)}k(d,rt)}for(w=0;w<c.length;w++)k(d,Wn(t,e,o,c[w],_));void 0!==u&&I(d,u)}catch(r){if(!rr(r))throw r;return function(t,e,r,n){return t.seen.pop(),t.indentationLvl=n,t.stylize("[".concat(r,": Inspection interrupted ")+"prematurely. Maximum call stack size exceeded.]","special")}(t,0,ge(gn(e,l,s),0,-1),et)}if(void 0!==t.circular){var nt=t.circular.get(e);if(void 0!==nt){var it=t.stylize("<ref *".concat(nt,">"),"special");!0!==t.compact?b=""===b?it:"".concat(it," ").concat(b):v[0]="".concat(it," ").concat(v[0])}}if(t.seen.pop(),t.sorted){var ct=!0===t.sorted?void 0:t.sorted;if(0===_)L(d,ct);else if(c.length>1){var ut=L(R(d,d.length-c.length),ct);B(ut,d,d.length-c.length,c.length),Nt(T,null,ut)}}var lt=Un(t,d,b,v,_,o,e),ft=(t.budget[t.indentationLvl]||0)+lt.length;return t.budget[t.indentationLvl]=ft,ft>Math.pow(2,27)&&(t.depth=-1),lt}(t,e,i,c)}function hn(t,e){return e!=="".concat(t," Iterator")&&(""!==e&&(e+="] ["),e+="".concat(t," Iterator")),["[".concat(e,"] {"),"}"]}function dn(t,e){for(var r=0;r<t.length-3;r++){var n=O(e,t[r]);if(-1!==n){var o=e.length-n;if(o>3){for(var a=1,i=ut(t.length-r,o);i>a&&t[r+a]===e[n+a];)a++;if(a>3)return[a,r]}}}return[0,0]}function bn(t,e){var r;try{r=e.stack}catch(t){}if(r){if("string"==typeof r)return r;t.seen.push(e),t.indentationLvl+=4;var n=vn(t,r);return t.indentationLvl-=4,t.seen.pop(),"".concat(Y(e),"\n ").concat(n)}return Y(e)}function mn(t,e){for(var r="",n=0,o=0;;){var a=ie(e,"node_modules",o);if(-1===a)break;var i=e[a-1],c=e[a+12];if("/"!==c&&"\\"!==c||"/"!==i&&"\\"!==i)o=a+1;else{var u=a+13;r+=ge(e,n,u);var l=ie(e,i,u);"@"===e[u]&&(l=ie(e,i,l+1));var f=ge(e,u,l);r+=t.stylize(f,"module"),n=l,o=l}}return 0!==n&&(e=r+ge(e,n)),e}function Sn(t,e,r){var n=ie(e,r),o="",a=r.length;if(-1!==n){"file://"===ge(e,n-7,n)&&(a+=7,n-=7);var i="("===e[n-1]?n-1:n,c=i!==n&&oe(e,")")?-1:e.length,u=n+a+1,l=ge(e,i,u);o+=ge(e,0,i),o+=t.stylize(l,"undefined"),o+=ge(e,u,c),-1===c&&(o+=t.stylize(")","undefined"))}else o+=e;return o}function Pn(t){var e="",r=t.length;Er(0!==r);for(var n="-"===t[0]?1:0;r>=n+4;r-=3)e="_".concat(ge(t,r-3,r)).concat(e);return r===t.length?t:"".concat(ge(t,0,r)).concat(e)}var wn=function(t){return"... ".concat(t," more item").concat(t>1?"s":"")};function xn(t,e,r){if(!r)return _t(e,-0)?t("-0","number"):t("".concat(e),"number");var n=te(e);if(st(e)===e)return!pt(e)||ae(n,"e")?t(n,"number"):t(Pn(n),"number");if(gt(e))return t(n,"number");var o=ie(n,"."),a=ge(n,0,o),i=ge(n,o+1);return t("".concat(Pn(a),".").concat(function(t){for(var e="",r=0;r<t.length-3;r+=3)e+="".concat(ge(t,r,r+3),"_");return 0===r?t:"".concat(e).concat(ge(t,r))}(i)),"number")}function An(t,e,r){var n=te(e);return t("".concat(r?Pn(n):n,"n"),"bigint")}function On(t,e,r){if("string"==typeof e){var n="";if(e.length>r.maxStringLength){var o=e.length-r.maxStringLength;e=ge(e,0,r.maxStringLength),n="... ".concat(o," more character").concat(o>1?"s":"")}return!0!==r.compact&&e.length>16&&e.length>r.breakLength-r.indentationLvl-4?j(_(Vt(/(?<=\n)/,e),function(e){return t(nn(e),"string")})," +\n".concat(se(" ",r.indentationLvl+2)))+n:t(nn(e),"string")+n}return"number"==typeof e?xn(t,e,r.numericSeparator):"bigint"==typeof e?An(t,e,r.numericSeparator):"boolean"==typeof e?t("".concat(e),"boolean"):void 0===e?t("undefined","undefined"):t(Se(e),"symbol")}function jn(t,e,r,n){for(var o=new d(t.length),a=0;a<t.length;a++)try{o[a]=Wn(e,r,n,t[a],0)}catch(r){Er(vr(r)&&"ReferenceError"===r.name);var i=f({},t[a],"");o[a]=Wn(e,i,n,t[a],0);var c=ce(o[a]," ");o[a]=ge(o[a],0,c+1)+e.stylize("<uninitialized>","special")}return t.length=0,o}function _n(t,e,r,n,o,a){for(var i=Et(e),c=a;a<i.length&&o.length<n;a++){var u=i[a],l=+u;if(l>Math.pow(2,32)-2)break;if("".concat(c)!==u){if(null===Ut(Gr,u))break;var f=l-c,s=f>1?"s":"",y="<".concat(f," empty item").concat(s,">");if(k(o,t.stylize(y,"undefined")),c=l,o.length===n)break}k(o,Wn(t,e,r,u,1)),c++}var p=e.length-c;if(o.length!==n){if(p>0){var g=p>1?"s":"",v="<".concat(p," empty item").concat(g,">");k(o,t.stylize(v,"undefined"))}}else p>0&&k(o,wn(p));return o}function En(t,e){var n;try{n=new Ie(e)}catch(e){return[t.stylize("(detached)","special")]}void 0===s&&(s=Ce(r(119).h.prototype.hexSlice));for(var o=s(n,0,ut(t.maxArrayLength,n.length)),a="",i=0;i<o.length-2;i+=2)a+="".concat(o[i]).concat(o[i+1]," ");o.length>0&&(a+="".concat(o[i]).concat(o[i+1]));var c=n.length-t.maxArrayLength;return c>0&&(a+=" ... ".concat(c," more byte").concat(c>1?"s":"")),["".concat(t.stylize("[Uint8Contents]","special"),": <").concat(a,">")]}function kn(t,e,r){for(var n=e.length,o=ut(ct(0,t.maxArrayLength),n),a=n-o,i=[],c=0;c<o;c++){var u=xt(e,c);if(void 0===u)return _n(t,e,r,o,i,c);k(i,Wn(t,e,r,c,1,u))}return a>0&&k(i,wn(a)),i}function In(t,e,r){for(var n=ut(ct(0,r.maxArrayLength),e),o=t.length-n,a=new d(n),i=t.length>0&&"number"==typeof t[0]?xn:An,c=0;c<n;++c)a[c]=i(r.stylize,t[c],r.numericSeparator);return o>0&&(a[n]=wn(o)),a}function Rn(t,e,r,n){var o=t.size,i=ut(ct(0,e.maxArrayLength),o),c=o-i,u=[];e.indentationLvl+=2;var l,f=0,s=a(t);try{for(s.s();!(l=s.n()).done;){var y=l.value;if(f>=i)break;k(u,vn(e,y,n)),f++}}catch(t){s.e(t)}finally{s.f()}return c>0&&k(u,wn(c)),e.indentationLvl-=2,u}function Ln(t,e,r,n){var o=t.size,i=ut(ct(0,e.maxArrayLength),o),c=o-i,u=[];e.indentationLvl+=2;var l,f=0,s=a(t);try{for(s.s();!(l=s.n()).done;){var y=l.value,p=y[0],g=y[1];if(f>=i)break;k(u,"".concat(vn(e,p,n)," => ").concat(vn(e,g,n))),f++}}catch(t){s.e(t)}finally{s.f()}return c>0&&k(u,wn(c)),e.indentationLvl-=2,u}function Tn(t,e,r,n){var o=ct(t.maxArrayLength,0),a=ut(o,r.length),i=new d(a);t.indentationLvl+=2;for(var c=0;c<a;c++)i[c]=vn(t,r[c],e);t.indentationLvl-=2,0!==n||t.sorted||L(i);var u=r.length-a;return u>0&&k(i,wn(u)),i}function Bn(t,e,r,n){var o=ct(t.maxArrayLength,0),a=r.length/2,i=a-o,c=ut(o,a),u=new d(c),l=0;if(t.indentationLvl+=2,0===n){for(;l<c;l++){var f=2*l;u[l]="".concat(vn(t,r[f],e)," => ").concat(vn(t,r[f+1],e))}t.sorted||L(u)}else for(;l<c;l++){var s=2*l,y=[vn(t,r[s],e),vn(t,r[s+1],e)];u[l]=Un(t,y,"",["[","]"],2,e)}return t.indentationLvl-=2,i>0&&k(u,wn(i)),u}function zn(t){return[t.stylize("<items unknown>","special")]}function Mn(t,e,r){return Tn(t,r,$e(e),0)}function Cn(t,e,r){return Bn(t,r,$e(e),0)}function Dn(t,e,r,n){var o=$e(r,!0),a=o[0];return o[1]?(t[0]=Gt(/ Iterator] {$/,t[0]," Entries] {"),Bn(e,n,a,2)):Tn(e,n,a,1)}function Nn(t,e,r){var n,o=Ve(e),a=o[0],i=o[1];if(a===He)n=[t.stylize("<pending>","special")];else{t.indentationLvl+=2;var c=vn(t,i,r);t.indentationLvl-=2,n=[a===Ue?"".concat(t.stylize("<rejected>","special")," ").concat(c):c]}return n}function Fn(t,e,r,n,o){t.indentationLvl+=2;var a=vn(t,e[n],r,o);t.indentationLvl-=2;var i=t.stylize("[".concat(n,"]"),"string");return"".concat(i,": ").concat(a)}function Wn(t,e,r,n,a,i){var c,u,l=arguments.length>6&&void 0!==arguments[6]?arguments[6]:e,f=" ";if(void 0!==(i=i||xt(e,n)).value){var s=!0!==t.compact||0!==a?2:3;t.indentationLvl+=s,u=vn(t,i.value,r),3===s&&t.breakLength<zr(u,t.colors)&&(f="\n".concat(se(" ",t.indentationLvl))),t.indentationLvl-=s}else if(void 0!==i.get){var y=void 0!==i.set?"Getter/Setter":"Getter",p=t.stylize,g="special";if(t.getters&&(!0===t.getters||"get"===t.getters&&void 0===i.set||"set"===t.getters&&void 0!==i.set))try{var v=Q(i.get,l);if(t.indentationLvl+=2,null===v)u="".concat(p("[".concat(y,":"),g)," ").concat(p("null","null")).concat(p("]",g));else if("object"===o(v))u="".concat(p("[".concat(y,"]"),g)," ").concat(vn(t,v,r));else{var h=On(p,v,t);u="".concat(p("[".concat(y,":"),g)," ").concat(h).concat(p("]",g))}t.indentationLvl-=2}catch(t){var d="<Inspection threw (".concat(t.message,")>");u="".concat(p("[".concat(y,":"),g)," ").concat(d).concat(p("]",g))}else u=t.stylize("[".concat(y,"]"),g)}else u=void 0!==i.set?t.stylize("[Setter]","special"):t.stylize("undefined","undefined");if(1===a)return u;if("symbol"===o(n)){var b=Gt(Fr,Se(n),rn);c=t.stylize(b,"symbol")}else c=null!==Ut(Ur,n)?"__proto__"===n?"['__proto__']":t.stylize(n,"name"):t.stylize(nn(n),"string");return!1===i.enumerable&&(c="[".concat(c,"]")),"".concat(c,":").concat(f).concat(u)}function Hn(t,e,r,n){var o=e.length+r;if(o+e.length>t.breakLength)return!1;for(var a=0;a<e.length;a++)if(t.colors?o+=er(e[a]).length:o+=e[a].length,o>t.breakLength)return!1;return""===n||!ae(n,"\n")}function Un(t,e,r,n,o,a,i){if(!0!==t.compact){if("number"==typeof t.compact&&t.compact>=1){var c=e.length;if(2===o&&c>6&&(e=function(t,e,r){var n=0,o=0,a=0,i=e.length;t.maxArrayLength<e.length&&i--;for(var c=new d(i);a<i;a++){var u=zr(e[a],t.colors);c[a]=u,n+=u+2,o<u&&(o=u)}var l=o+2;if(3*l+t.indentationLvl<t.breakLength&&(n/l>5||o<=6)){var f=ft(l-n/e.length),s=ct(l-3-f,1),y=ut(lt(ft(2.5*s*i)/s),it((t.breakLength-t.indentationLvl)/l),4*t.compact,15);if(y<=1)return e;for(var p=[],g=[],v=0;v<y;v++){for(var h=0,b=v;b<e.length;b+=y)c[b]>h&&(h=c[b]);h+=2,g[v]=h}var m=fe;if(void 0!==r)for(var S=0;S<e.length;S++)if("number"!=typeof r[S]&&"bigint"!=typeof r[S]){m=le;break}for(var P=0;P<i;P+=y){for(var w=ut(P+y,i),x="",A=P;A<w-1;A++){var O=g[A-P]+e[A].length-c[A];x+=m("".concat(e[A],", "),O," ")}if(m===fe){var j=g[A-P]+e[A].length-c[A]-2;x+=fe(e[A],j," ")}else x+=e[A];k(p,x)}t.maxArrayLength<e.length&&k(p,e[i]),e=p}return e}(t,e,i)),t.currentDepth-a<t.compact&&c===e.length&&Hn(t,e,e.length+t.indentationLvl+n[0].length+r.length+10,r)){var u=tr(e,", ");if(!ae(u,"\n"))return"".concat(r?"".concat(r," "):"").concat(n[0]," ").concat(u)+" ".concat(n[1])}}var l="\n".concat(se(" ",t.indentationLvl));return"".concat(r?"".concat(r," "):"").concat(n[0]).concat(l," ")+"".concat(tr(e,",".concat(l," "))).concat(l).concat(n[1])}if(Hn(t,e,0,r))return"".concat(n[0]).concat(r?" ".concat(r):""," ").concat(tr(e,", ")," ")+n[1];var f=se(" ",t.indentationLvl),s=""===r&&1===n[0].length?" ":"".concat(r?" ".concat(r):"","\n").concat(f," ");return"".concat(n[0]).concat(s).concat(tr(e,",\n".concat(f," "))," ").concat(n[1])}function Gn(t){var e=Ze(t,!1);if(void 0!==e){if(null===e)return!0;t=e}var r=It,n=It;if("function"!=typeof t.toString){if("function"!=typeof t[we])return!0;if(It(t,we))return!1;r=Vn}else{if(It(t,"toString"))return!1;if("function"!=typeof t[we])n=Vn;else if(It(t,we))return!1}var o=t;do{o=jt(o)}while(!r(o,"toString")&&!n(o,we));var a=xt(o,"constructor");return void 0!==a&&"function"==typeof a.value&&Mr.has(a.value.name)}function Vn(){return!1}var Zn,$n=function(t){return ve(t.message,"\n",1)[0]};function Yn(t){try{return et(t)}catch(t){if(!Zn)try{var e={};e.a=e,et(e)}catch(t){Zn=$n(t)}if("TypeError"===t.name&&$n(t)===Zn)return"[Circular]";throw t}}function qn(t,e){var r;return xn(an,t,null!==(r=null==e?void 0:e.numericSeparator)&&void 0!==r?r:Dr.numericSeparator)}function Jn(t,e){var r;return An(an,t,null!==(r=null==e?void 0:e.numericSeparator)&&void 0!==r?r:Dr.numericSeparator)}function Kn(t,e){var r=e[0],n=0,a="",i="";if("string"==typeof r){if(1===e.length)return r;for(var c,u=0,f=0;f<r.length-1;f++)if(37===re(r,f)){var s=re(r,++f);if(n+1!==e.length){switch(s){case 115:var y=e[++n];c="number"==typeof y?qn(y,t):"bigint"==typeof y?Jn(y,t):"object"===o(y)&&null!==y&&Gn(y)?Jr(y,l(l({},t),{},{compact:3,colors:!1,depth:0})):te(y);break;case 106:c=Yn(e[++n]);break;case 100:var p=e[++n];c="bigint"==typeof p?Jn(p,t):"symbol"===o(p)?"NaN":qn(yt(p),t);break;case 79:c=Jr(e[++n],t);break;case 111:c=Jr(e[++n],l(l({},t),{},{showHidden:!0,showProxy:!0,depth:4}));break;case 105:var g=e[++n];c="bigint"==typeof g?Jn(g,t):"symbol"===o(g)?"NaN":qn(ht(g),t);break;case 102:var v=e[++n];c="symbol"===o(v)?"NaN":qn(vt(v),t);break;case 99:n+=1,c="";break;case 37:a+=ge(r,u,f),u=f+1;continue;default:continue}u!==f-1&&(a+=ge(r,u,f-1)),a+=c,u=f+1}else 37===s&&(a+=ge(r,u,f),u=f+1)}0!==u&&(n++,i=" ",u<r.length&&(a+=ge(r,u)))}for(;n<e.length;){var h=e[n];a+=i,a+="string"!=typeof h?Jr(h,t):h,i=" ",n++}return a}function Qn(t){return t<=31||t>=127&&t<=159||t>=768&&t<=879||t>=8203&&t<=8207||t>=8400&&t<=8447||t>=65024&&t<=65039||t>=65056&&t<=65071||t>=917760&&t<=917999}if(Me("config").hasIntl)Er(!1);else{zr=function(t){var e=0;(!(arguments.length>1&&void 0!==arguments[1])||arguments[1])&&(t=to(t)),t=ue(t,"NFC");var r,n=a(new qt(t));try{for(n.s();!(r=n.n()).done;){var o=r.value,i=ne(o,0);Xn(i)?e+=2:Qn(i)||e++}}catch(t){n.e(t)}finally{n.f()}return e};var Xn=function(t){return t>=4352&&(t<=4447||9001===t||9002===t||t>=11904&&t<=12871&&12351!==t||t>=12880&&t<=19903||t>=19968&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65131||t>=65281&&t<=65376||t>=65504&&t<=65510||t>=110592&&t<=110593||t>=127488&&t<=127569||t>=127744&&t<=128591||t>=131072&&t<=262141)}}function to(t){return Lr(t,"str"),Gt(qr,t,"")}var eo={34:"&quot;",38:"&amp;",39:"&apos;",60:"&lt;",62:"&gt;",160:"&nbsp;"};function ro(t){return t.replace(/[\u0000-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u00FF]/g,function(t){var e=te(t.charCodeAt(0));return eo[e]||"&#"+e+";"})}t.exports={identicalSequenceRange:dn,inspect:Jr,inspectDefaultOptions:Dr,format:function(){for(var t=arguments.length,e=new Array(t),r=0;r<t;r++)e[r]=arguments[r];return Kn(void 0,e)},formatWithOptions:function(t){Rr(t,"inspectOptions",Tr);for(var e=arguments.length,r=new Array(e>1?e-1:0),n=1;n<e;n++)r[n-1]=arguments[n];return Kn(t,r)},getStringWidth:zr,stripVTControlCharacters:to,isZeroWidthCodePoint:Qn,stylizeWithColor:on,stylizeWithHTML:function(t,e){var r=Jr.styles[e];return void 0!==r?'<span style="color:'.concat(r,';">').concat(ro(t),"</span>"):ro(t)},Proxy:Je}},333:t=>{var e=["_http_agent","_http_client","_http_common","_http_incoming","_http_outgoing","_http_server","_stream_duplex","_stream_passthrough","_stream_readable","_stream_transform","_stream_wrap","_stream_writable","_tls_common","_tls_wrap","assert","assert/strict","async_hooks","buffer","child_process","cluster","console","constants","crypto","dgram","diagnostics_channel","dns","dns/promises","domain","events","fs","fs/promises","http","http2","https","inspector","module","Module","net","os","path","path/posix","path/win32","perf_hooks","process","punycode","querystring","readline","readline/promises","repl","stream","stream/consumers","stream/promises","stream/web","string_decoder","sys","timers","timers/promises","tls","trace_events","tty","url","util","util/types","v8","vm","wasi","worker_threads","zlib"];t.exports.BuiltinModule={exists:function(t){return"internal/modules/cjs/foo"!==t&&(t.startsWith("internal/")||-1!==e.indexOf(t))}}},394:t=>{t.exports={CHAR_DOT:46,CHAR_FORWARD_SLASH:47,CHAR_BACKWARD_SLASH:92}},437:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}function o(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,a(n.key),n)}}function a(t){var e=function(t){if("object"!=n(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=n(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==n(e)?e:e+""}var i=r(541),c=i.Proxy,u=i.ProxyRevocable,l=new(0,i.SafeWeakMap),f=function(){return t=function t(e,r){!function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}(this,t);var n=new c(e,r);return l.set(n,[e,r]),n},e=[{key:"getProxyDetails",value:function(t){var e=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=l.get(t);if(r)return e?r:r[0]}},{key:"revocable",value:function(t,e){var r=u(t,e);l.set(r.proxy,[t,e]);var n=r.revoke;return r.revoke=function(){l.set(r.proxy,[null,null]),n()},r}}],null&&0,e&&o(t,e),Object.defineProperty(t,"prototype",{writable:!1}),t;// removed by dead control flow
17327
+ var t, e; }();t.exports={getProxyDetails:f.getProxyDetails.bind(f),Proxy:f}},541:t=>{function e(){var t,n,o="function"==typeof Symbol?Symbol:{},a=o.iterator||"@@iterator",i=o.toStringTag||"@@toStringTag";function c(e,o,a,i){var c=o&&o.prototype instanceof l?o:l,f=Object.create(c.prototype);return r(f,"_invoke",function(e,r,o){var a,i,c,l=0,f=o||[],s=!1,y={p:0,n:0,v:t,a:p,f:p.bind(t,4),d:function(e,r){return a=e,i=0,c=t,y.n=r,u}};function p(e,r){for(i=e,c=r,n=0;!s&&l&&!o&&n<f.length;n++){var o,a=f[n],p=y.p,g=a[2];e>3?(o=g===r)&&(c=a[(i=a[4])?5:(i=3,3)],a[4]=a[5]=t):a[0]<=p&&((o=e<2&&p<a[1])?(i=0,y.v=r,y.n=a[1]):p<g&&(o=e<3||a[0]>r||r>g)&&(a[4]=e,a[5]=r,y.n=g,i=0))}if(o||e>1)return u;throw s=!0,r}return function(o,f,g){if(l>1)throw TypeError("Generator is already running");for(s&&1===f&&p(f,g),i=f,c=g;(n=i<2?t:c)||!s;){a||(i?i<3?(i>1&&(y.n=-1),p(i,c)):y.n=c:y.v=c);try{if(l=2,a){if(i||(o="next"),n=a[o]){if(!(n=n.call(a,c)))throw TypeError("iterator result is not an object");if(!n.done)return n;c=n.value,i<2&&(i=0)}else 1===i&&(n=a.return)&&n.call(a),i<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),i=1);a=t}else if((n=(s=y.n<0)?c:e.call(r,y))!==u)break}catch(e){a=t,i=1,c=e}finally{l=1}}return{value:n,done:s}}}(e,a,i),!0),f}var u={};function l(){}function f(){}function s(){}n=Object.getPrototypeOf;var y=[][a]?n(n([][a]())):(r(n={},a,function(){return this}),n),p=s.prototype=l.prototype=Object.create(y);function g(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,s):(t.__proto__=s,r(t,i,"GeneratorFunction")),t.prototype=Object.create(p),t}return f.prototype=s,r(p,"constructor",s),r(s,"constructor",f),f.displayName="GeneratorFunction",r(s,i,"GeneratorFunction"),r(p),r(p,i,"Generator"),r(p,a,function(){return this}),r(p,"toString",function(){return"[object Generator]"}),(e=function(){return{w:c,m:g}})()}function r(t,e,n,o){var a=Object.defineProperty;try{a({},"",{})}catch(t){a=0}r=function(t,e,n,o){function i(e,n){r(t,e,function(t){return this._invoke(e,n,t)})}e?a?a(t,e,{value:n,enumerable:!o,configurable:!o,writable:!o}):t[e]=n:(i("next",0),i("throw",1),i("return",2))},r(t,e,n,o)}function n(t,e,r){return e=a(e),function(t,e){if(e&&("object"==d(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,o()?Reflect.construct(e,r||[],a(t).constructor):e.apply(t,r))}function o(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(o=function(){return!!t})()}function a(t){return a=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},a(t)}function i(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&c(t,e)}function c(t,e){return c=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},c(t,e)}function u(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function l(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,g(n.key),n)}}function f(t,e,r){return e&&l(t.prototype,e),r&&l(t,r),Object.defineProperty(t,"prototype",{writable:!1}),t}function s(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable})),r.push.apply(r,n)}return r}function y(t){for(var e=1;e<arguments.length;e++){var r=null!=arguments[e]?arguments[e]:{};e%2?s(Object(r),!0).forEach(function(e){p(t,e,r[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):s(Object(r)).forEach(function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))})}return t}function p(t,e,r){return(e=g(e))in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function g(t){var e=function(t){if("object"!=d(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==d(e)?e:e+""}function v(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return h(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?h(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var n=0,o=function(){};return{s:o,n:function(){return n>=t.length?{done:!0}:{done:!1,value:t[n++]}},e:function(t){throw t},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return i=t.done,t},e:function(t){c=!0,a=t},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}function h(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function d(t){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},d(t)}function b(t){return function(){return new m(t.apply(this,arguments))}}function m(t){var e,r;function n(e,r){try{var a=t[e](r),i=a.value,c=i instanceof S;Promise.resolve(c?i.v:i).then(function(r){if(c){var u="return"===e?"return":"next";if(!i.k||r.done)return n(u,r);r=t[u](r).value}o(a.done?"return":"normal",r)},function(t){n("throw",t)})}catch(t){o("throw",t)}}function o(t,o){switch(t){case"return":e.resolve({value:o,done:!0});break;case"throw":e.reject(o);break;default:e.resolve({value:o,done:!1})}(e=e.next)?n(e.key,e.arg):r=null}this._invoke=function(t,o){return new Promise(function(a,i){var c={key:t,arg:o,resolve:a,reject:i,next:null};r?r=r.next=c:(e=r=c,n(t,o))})},"function"!=typeof t.return&&(this.return=void 0)}function S(t,e){this.v=t,this.k=e}m.prototype["function"==typeof Symbol&&Symbol.asyncIterator||"@@asyncIterator"]=function(){return this},m.prototype.next=function(t){return this._invoke("next",t)},m.prototype.throw=function(t){return this._invoke("throw",t)},m.prototype.return=function(t){return this._invoke("return",t)};var P={__proto__:null},w=Reflect.defineProperty,x=Reflect.getOwnPropertyDescriptor,A=Reflect.ownKeys,O=Function.prototype,j=O.apply,_=O.bind,E=O.call,k=_.bind(E);P.uncurryThis=k;var I=_.bind(j);P.applyBind=I;var R=["ArrayOf","ArrayPrototypePush","ArrayPrototypeUnshift","MathHypot","MathMax","MathMin","StringFromCharCode","StringFromCodePoint","StringPrototypeConcat","TypedArrayOf"];function L(t){return"symbol"===d(t)?"Symbol".concat(t.description[7].toUpperCase()).concat(t.description.slice(8)):"".concat(t[0].toUpperCase()).concat(t.slice(1))}function T(t,e,r,n){var o=n.enumerable,a=n.get,i=n.set;w(t,"".concat(e,"Get").concat(r),{__proto__:null,value:k(a),enumerable:o}),void 0!==i&&w(t,"".concat(e,"Set").concat(r),{__proto__:null,value:k(i),enumerable:o})}function B(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=x(t,a);if("get"in c)T(e,r,i,c);else{var u="".concat(r).concat(i);w(e,u,y({__proto__:null},c)),R.includes(u)&&w(e,"".concat(u,"Apply"),{__proto__:null,value:I(c.value,t)})}}}catch(t){o.e(t)}finally{o.f()}}function z(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=x(t,a);if("get"in c)T(e,r,i,c);else{var u=c.value;"function"==typeof u&&(c.value=k(u));var l="".concat(r).concat(i);w(e,l,y({__proto__:null},c)),R.includes(l)&&w(e,"".concat(l,"Apply"),{__proto__:null,value:I(u)})}}}catch(t){o.e(t)}finally{o.f()}}["Proxy","globalThis"].forEach(function(t){P[t]=globalThis[t]}),[decodeURI,decodeURIComponent,encodeURI,encodeURIComponent].forEach(function(t){P[t.name]=t}),[escape,eval,unescape].forEach(function(t){P[t.name]=t}),["Atomics","JSON","Math","Proxy","Reflect"].forEach(function(t){B(globalThis[t],P,t)}),["AggregateError","Array","ArrayBuffer","BigInt","BigInt64Array","BigUint64Array","Boolean","DataView","Date","Error","EvalError","FinalizationRegistry","Float32Array","Float64Array","Function","Int16Array","Int32Array","Int8Array","Map","Number","Object","RangeError","ReferenceError","RegExp","Set","String","Symbol","SyntaxError","TypeError","URIError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","WeakMap","WeakRef","WeakSet"].forEach(function(t){var e=globalThis[t];e&&(P[t]=e,B(e,P,t),z(e.prototype,P,"".concat(t,"Prototype")))}),["Promise"].forEach(function(t){var e=globalThis[t];P[t]=e,function(t,e,r){var n,o=v(A(t));try{for(o.s();!(n=o.n()).done;){var a=n.value,i=L(a),c=x(t,a);if("get"in c)T(e,r,i,c);else{var u=c.value;"function"==typeof u&&(c.value=u.bind(t));var l="".concat(r).concat(i);w(e,l,y({__proto__:null},c))}}}catch(t){o.e(t)}finally{o.f()}}(e,P,t),z(e.prototype,P,"".concat(t,"Prototype"))}),[{name:"TypedArray",original:Reflect.getPrototypeOf(Uint8Array)},{name:"ArrayIterator",original:{prototype:Reflect.getPrototypeOf(Array.prototype[Symbol.iterator]())}},{name:"StringIterator",original:{prototype:Reflect.getPrototypeOf(String.prototype[Symbol.iterator]())}}].forEach(function(t){var e=t.name,r=t.original;P[e]=r,z(r,P,e),z(r.prototype,P,"".concat(e,"Prototype"))}),P.IteratorPrototype=Reflect.getPrototypeOf(P.ArrayIteratorPrototype);var M=P.ArrayPrototypeForEach,C=P.ArrayPrototypePushApply,D=P.ArrayPrototypeSlice,N=P.FinalizationRegistry,F=P.FunctionPrototypeCall,W=P.Map,H=P.ObjectFreeze,U=P.ObjectSetPrototypeOf,G=P.RegExp,V=P.Set,Z=P.SymbolIterator,$=P.WeakMap,Y=P.WeakRef,q=P.WeakSet,J=function(t,e){var r=function(){return f(function e(r){u(this,e),this._iterator=t(r)},[{key:"next",value:function(){return e(this._iterator)}},{key:Z,value:function(){return this}}])}();return U(r.prototype,null),H(r.prototype),H(r),r};P.SafeArrayIterator=J(P.ArrayPrototypeSymbolIterator,P.ArrayIteratorPrototypeNext),P.SafeStringIterator=J(P.StringPrototypeSymbolIterator,P.StringIteratorPrototypeNext);var K=function(t,e){M(A(t),function(r){x(e,r)||w(e,r,y({__proto__:null},x(t,r)))})},Q=function(t,e){if(Z in t.prototype){var r,n=new t;M(A(t.prototype),function(o){if(!x(e.prototype,o)){var a,i=x(t.prototype,o);if("function"==typeof i.value&&0===i.value.length&&Z in(null!==(a=F(i.value,n))&&void 0!==a?a:{})){var c=k(i.value);r=r||k(c(n).next);var u=J(c,r);i.value=function(){return new u(this)}}w(e.prototype,o,y({__proto__:null},i))}})}else K(t.prototype,e.prototype);return K(t,e),U(e.prototype,null),H(e.prototype),H(e),e};P.makeSafe=Q,P.SafeMap=Q(W,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(W)),P.SafeWeakMap=Q($,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}($)),P.SafeSet=Q(V,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(V)),P.SafeWeakSet=Q(q,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(q)),P.SafeFinalizationRegistry=Q(N,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(N)),P.SafeWeakRef=Q(Y,function(t){function e(){return u(this,e),n(this,e,arguments)}return i(e,t),f(e)}(Y)),P.AsyncIteratorPrototype=P.ReflectGetPrototypeOf(b(e().m(function t(){return e().w(function(t){for(;;)if(0===t.n)return t.a(2)},t)}))).prototype,P.internalBinding=function(t){if("config"===t)return{hasIntl:!1};throw new Error('unknown module: "'.concat(t,'"'))},P._stringPrototypeReplaceAll=function(t,e,r){return"[object regexp]"===Object.prototype.toString.call(e).toLowerCase()?t.replace(e,r):t.replace(new G(e,"g"),r)},P.SafeArrayPrototypePushApply=function(t,e){var r=65536;if(r<e.length){var n=0;do{C(t,D(e,n,n=r)),r+=65536}while(r<e.length);e=D(e,n)}return C(t,e)},P.StringPrototypeReplaceAll=P.StringPrototypeReplaceAll||P._stringPrototypeReplaceAll,U(P,null),H(P),t.exports=P},590:(t,e,r)=>{var n=r(541),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeLastIndexOf,i=n.StringPrototypeSlice,c=r(394),u=c.CHAR_DOT,l=c.CHAR_FORWARD_SLASH,f=r(144).validateString;function s(t){return t===l}function y(t,e,r,n){for(var c="",f=0,s=-1,y=0,p=0,g=0;g<=t.length;++g){if(g<t.length)p=o(t,g);else{if(n(p))break;p=l}if(n(p)){if(s===g-1||1===y);else if(2===y){if(c.length<2||2!==f||o(c,c.length-1)!==u||o(c,c.length-2)!==u){if(c.length>2){var v=a(c,r);-1===v?(c="",f=0):f=(c=i(c,0,v)).length-1-a(c,r),s=g,y=0;continue}if(0!==c.length){c="",f=0,s=g,y=0;continue}}e&&(c+=c.length>0?"".concat(r,".."):"..",f=2)}else c.length>0?c+="".concat(r).concat(i(t,s+1,g)):c=i(t,s+1,g),f=g-s-1;s=g,y=0}else p===u&&-1!==y?++y:y=-1}return c}t.exports={isPosixPathSeparator:s,normalizeString:y,resolve:function(){if((0===arguments.length||1===arguments.length&&(""===(arguments.length<=0?void 0:arguments[0])||"."===(arguments.length<=0?void 0:arguments[0])))&&o("/",0)===l)return"/";for(var t="",e=!1,r=arguments.length-1;r>=0&&!e;r--){var n=r<0||arguments.length<=r?void 0:arguments[r];f(n,"paths[".concat(r,"]")),0!==n.length&&(t="".concat(n,"/").concat(t),e=o(n,0)===l)}return e||(t="".concat("/","/").concat(t),e=o("/",0)===l),t=y(t,!e,"/",s),e?"/".concat(t):t.length>0?t:"."}}},622:(t,e,r)=>{var n=r(541),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeIncludes,i=n.StringPrototypeReplace,c=r(836),u=r(394).CHAR_FORWARD_SLASH,l=r(590),f=/%/g,s=/\\/g,y=/\n/g,p=/\r/g,g=/\t/g;t.exports={pathToFileURL:function(t){var e=new c("file://"),r=l.resolve(t);return o(t,t.length-1)===u&&r[r.length-1]!==l.sep&&(r+="/"),e.pathname=function(t){return a(t,"%")&&(t=i(t,f,"%25")),a(t,"\\")&&(t=i(t,s,"%5C")),a(t,"\n")&&(t=i(t,y,"%0A")),a(t,"\r")&&(t=i(t,p,"%0D")),a(t,"\t")&&(t=i(t,g,"%09")),t}(r),e},URL:c}},629:(t,e,r)=>{function n(t){return n="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},n(t)}var o=r(541),a=o.ArrayIsArray,i=o.BigInt,c=o.Boolean,u=o.DatePrototype,l=o.Error,f=o.FunctionPrototype,s=o.MapPrototypeHas,y=o.Number,p=o.ObjectDefineProperty,g=o.ObjectGetOwnPropertyDescriptor,v=o.ObjectGetPrototypeOf,h=o.ObjectIsFrozen,d=o.ObjectPrototype,b=o.SetPrototypeHas,m=o.String,S=o.Symbol,P=o.SymbolToStringTag,w=o.globalThis,x=r(189).getConstructorName;function A(t){for(var e=arguments.length,r=new Array(e>1?e-1:0),o=1;o<e;o++)r[o-1]=arguments[o];for(var a=0,i=r;a<i.length;a++){var c=i[a],u=w[c];if(u&&t instanceof u)return!0}for(;t;){if("object"!==n(t))return!1;if(r.indexOf(x(t))>=0)return!0;t=v(t)}return!1}function O(t){return function(e){if(!A(e,t.name))return!1;try{t.prototype.valueOf.call(e)}catch(t){return!1}return!0}}"object"!==n(w)&&(p(d,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete d.__magic__);var j=O(m),_=O(y),E=O(c),k=O(i),I=O(S);t.exports={isAsyncFunction:function(t){return"function"==typeof t&&f.toString.call(t).startsWith("async")},isGeneratorFunction:function(t){return"function"==typeof t&&f.toString.call(t).match(/^(async\s+)?function *\*/)},isAnyArrayBuffer:function(t){return A(t,"ArrayBuffer","SharedArrayBuffer")},isArrayBuffer:function(t){return A(t,"ArrayBuffer")},isArgumentsObject:function(t){if(null!==t&&"object"===n(t)&&!a(t)&&"number"==typeof t.length&&t.length===(0|t.length)&&t.length>=0){var e=g(t,"callee");return e&&!e.enumerable}return!1},isBoxedPrimitive:function(t){return _(t)||j(t)||E(t)||k(t)||I(t)},isDataView:function(t){return A(t,"DataView")},isExternal:function(t){return"object"===n(t)&&h(t)&&null==v(t)},isMap:function(t){if(!A(t,"Map"))return!1;try{s(t)}catch(t){return!1}return!0},isMapIterator:function(t){return"[object Map Iterator]"===d.toString.call(v(t))},isModuleNamespaceObject:function(t){try{return t&&"object"===n(t)&&"Module"===t[P]}catch(t){return!1}},isNativeError:function(t){return t instanceof l&&A(t,"Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","AggregateError")},isPromise:function(t){return A(t,"Promise")},isSet:function(t){if(!A(t,"Set"))return!1;try{b(t)}catch(t){return!1}return!0},isSetIterator:function(t){return"[object Set Iterator]"===d.toString.call(v(t))},isWeakMap:function(t){return A(t,"WeakMap")},isWeakSet:function(t){return A(t,"WeakSet")},isRegExp:function(t){return A(t,"RegExp")},isDate:function(t){if(A(t,"Date"))try{return u.getTime.call(t),!0}catch(t){}return!1},isTypedArray:function(t){return A(t,"Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array")},isStringObject:j,isNumberObject:_,isBooleanObject:E,isBigIntObject:k,isSymbolObject:I}},767:(t,e,r)=>{var n=r(541),o=n.ArrayPrototypeJoin,a=n.Error,i=n.ErrorIsError,c=n.FunctionPrototypeSymbolHasInstance,u=n.StringPrototypeReplace,l=n.SymbolFor,f=/\u001b\[\d\d?m/g;t.exports={customInspectSymbol:l("nodejs.util.inspect.custom"),isError:function(t){return(null==i?void 0:i(t))||c(a,t)},join:o,removeColors:function(t){return u(t,f,"")}}},784:(t,e,r)=>{function n(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=Array(e);r<e;r++)n[r]=t[r];return n}function o(t){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},o(t)}function a(t,e){for(var r=0;r<e.length;r++){var n=e[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(t,i(n.key),n)}}function i(t){var e=function(t){if("object"!=o(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var r=e.call(t,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(t)}(t);return"symbol"==o(e)?e:e+""}function c(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(c=function(){return!!t})()}function u(t){return u=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},u(t)}function l(t,e){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},l(t,e)}var f,s,y=r(541),p=y.ArrayIsArray,g=y.ArrayPrototypeIncludes,v=y.ArrayPrototypeIndexOf,h=y.ArrayPrototypeJoin,d=y.ArrayPrototypePush,b=y.ArrayPrototypeSlice,m=y.ArrayPrototypeSplice,S=y.Error,P=y.ErrorCaptureStackTrace,w=y.JSONStringify,x=y.ObjectDefineProperty,A=y.ReflectApply,O=y.RegExpPrototypeExec,j=y.SafeMap,_=y.SafeWeakMap,E=y.String,k=y.StringPrototypeEndsWith,I=y.StringPrototypeIncludes,R=y.StringPrototypeIndexOf,L=y.StringPrototypeSlice,T=y.StringPrototypeToLowerCase,B=y.Symbol,z=y.TypeError,M=B("kIsNodeError"),C=new j,D={},N=/^[A-Z][a-zA-Z0-9]*$/,F=["string","function","number","object","Function","Object","boolean","bigint","symbol"],W=new _,H=r(961),U=null;function G(t,e){var r=function(t){function r(){var t,n,a,l;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,r),t=function(t,e,r){return e=u(e),function(t,e){if(e&&("object"==o(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return function(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}(t)}(t,c()?Reflect.construct(e,r||[],u(t).constructor):e.apply(t,r))}(this,r),n=t,l=e,(a=i(a="code"))in n?Object.defineProperty(n,a,{value:l,enumerable:!0,configurable:!0,writable:!0}):n[a]=l;for(var f=arguments.length,s=new Array(f),y=0;y<f;y++)s[y]=arguments[y];return x(t,"message",{__proto__:null,value:Z(e,s,t),enumerable:!1,writable:!0,configurable:!0}),t}return function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&l(t,e)}(r,t),n=r,(f=[{key:"toString",value:function(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}])&&a(n.prototype,f),s&&a(n,s),Object.defineProperty(n,"prototype",{writable:!1}),n;// removed by dead control flow
17328
+ var n, f, s; }(t);return r}function V(t,e,r){C.set(t,e);var n=G(r,t);D[t]=n}function Z(t,e,r){var n=C.get(t);if("function"==typeof n)return H(n.length<=e.length,"Code: ".concat(t,"; The provided arguments length (").concat(e.length,") does not ")+"match the required ones (".concat(n.length,").")),A(n,r,e)}var $=B("kEnhanceStackBeforeInspector");function Y(t){if(null===t)return"null";if(void 0===t)return"undefined";switch(o(t)){case"bigint":return"type bigint (".concat(t,"n)");case"number":return 0===t?1/t==-1/0?"type number (-0)":"type number (0)":t!=t?"type number (NaN)":t===1/0?"type number (Infinity)":t===-1/0?"type number (-Infinity)":"type number (".concat(t,")");case"boolean":return t?"type boolean (true)":"type boolean (false)";case"symbol":return"type symbol (".concat(E(t),")");case"function":return"function ".concat(t.name);case"object":return t.constructor&&"name"in t.constructor?"an instance of ".concat(t.constructor.name):"".concat((U=U||r(285)).inspect(t,{depth:-1}));case"string":return t.length>28&&(t="".concat(L(t,0,25),"...")),-1===R(t,"'")?"type string ('".concat(t,"')"):"type string (".concat(w(t),")")}}function q(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";switch(t.length){case 0:return"";case 1:return"".concat(t[0]);case 2:return"".concat(t[0]," ").concat(e," ").concat(t[1]);case 3:return"".concat(t[0],", ").concat(t[1],", ").concat(e," ").concat(t[2]);default:return"".concat(h(b(t,0,-1),", "),", ").concat(e," ").concat(t[t.length-1])}}t.exports={codes:D,determineSpecificType:Y,E:V,formatList:q,getMessage:Z,hideStackFrames:function(t){function e(){try{for(var r=arguments.length,n=new Array(r),o=0;o<r;o++)n[o]=arguments[o];return A(t,this,n)}catch(t){throw S.stackTraceLimit&&P(t,e),t}}return e.withoutStackTrace=t,e},isStackOverflowError:function(t){if(void 0===s)try{var e=function(){e()};e()}catch(t){s=t.message,f=t.name}return t&&t.name===f&&t.message===s},kEnhanceStackBeforeInspector:$,kIsNodeError:M,overrideStackTrace:W},V("ERR_INTERNAL_ASSERTION",function(t){var e="This is caused by either a bug in Node.js or incorrect usage of Node.js internals.\nPlease open an issue with this stack trace at https://github.com/nodejs/node/issues\n";return void 0===t?e:"".concat(t,"\n").concat(e)},S),V("ERR_INVALID_ARG_TYPE",function(t,e,r){H("string"==typeof t,"'name' must be a string"),p(e)||(e=[e]);var o="The ";if(k(t," argument"))o+="".concat(t," ");else{var a=I(t,".")?"property":"argument";o+='"'.concat(t,'" ').concat(a," ")}o+="must be ";var i,c=[],u=[],l=[],f=function(t,e){var r="undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"];if(!r){if(Array.isArray(t)||(r=function(t,e){if(t){if("string"==typeof t)return n(t,e);var r={}.toString.call(t).slice(8,-1);return"Object"===r&&t.constructor&&(r=t.constructor.name),"Map"===r||"Set"===r?Array.from(t):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?n(t,e):void 0}}(t))||e&&t&&"number"==typeof t.length){r&&(t=r);var o=0,a=function(){};return{s:a,n:function(){return o>=t.length?{done:!0}:{done:!1,value:t[o++]}},e:function(t){throw t},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,c=!0,u=!1;return{s:function(){r=r.call(t)},n:function(){var t=r.next();return c=t.done,t},e:function(t){u=!0,i=t},f:function(){try{c||null==r.return||r.return()}finally{if(u)throw i}}}}(e);try{for(f.s();!(i=f.n()).done;){var s=i.value;H("string"==typeof s,"All expected entries have to be of type string"),g(F,s)?d(c,T(s)):null!==O(N,s)?d(u,s):(H("object"!==s,'The value "object" should be written as "Object"'),d(l,s))}}catch(t){f.e(t)}finally{f.f()}if(u.length>0){var y=v(c,"object");-1!==y&&(m(c,y,1),d(u,"Object"))}return c.length>0&&(o+="".concat(c.length>1?"one of type":"of type"," ").concat(q(c,"or")),(u.length>0||l.length>0)&&(o+=" or ")),u.length>0&&(o+="an instance of ".concat(q(u,"or")),l.length>0&&(o+=" or ")),l.length>0&&(l.length>1?o+="one of ".concat(q(l,"or")):(T(l[0])!==l[0]&&(o+="an "),o+="".concat(l[0]))),o+". Received ".concat(Y(r))},z)},836:t=>{t.exports=URL},961:(t,e,r)=>{var n;function o(){return n=null!=n?n:r(784).codes.ERR_INTERNAL_ASSERTION}function a(t,e){if(!t)throw new(o())(e)}a.fail=function(t){throw new(o())(t)},t.exports=a}},e={};return function r(n){var o=e[n];if(void 0!==o)return o.exports;var a=e[n]={exports:{}};return t[n](a,a.exports,r),a.exports}(285)})());
16905
17329
 
16906
- /***/ }),
17330
+ /***/ },
16907
17331
 
16908
- /***/ "./node_modules/vanillatoasts/vanillatoasts.js":
17332
+ /***/ "./node_modules/vanillatoasts/vanillatoasts.js"
16909
17333
  /*!*****************************************************!*\
16910
17334
  !*** ./node_modules/vanillatoasts/vanillatoasts.js ***!
16911
17335
  \*****************************************************/
16912
- /***/ (function(module) {
17336
+ (module) {
16913
17337
 
16914
17338
  (function (root, factory) {
16915
17339
  try {
@@ -17087,18 +17511,18 @@ module.exports = function stringToParts(str) {
17087
17511
  });
17088
17512
 
17089
17513
 
17090
- /***/ }),
17514
+ /***/ },
17091
17515
 
17092
- /***/ "./package.json":
17516
+ /***/ "./package.json"
17093
17517
  /*!**********************!*\
17094
17518
  !*** ./package.json ***!
17095
17519
  \**********************/
17096
- /***/ ((module) => {
17520
+ (module) {
17097
17521
 
17098
17522
  "use strict";
17099
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@mongoosejs/studio","version":"0.1.16","description":"A sleek, powerful MongoDB UI with built-in dashboarding and auth, seamlessly integrated with your Express, Vercel, or Netlify app.","homepage":"https://studio.mongoosejs.io/","repository":{"type":"git","url":"https://github.com/mongoosejs/studio"},"license":"Apache-2.0","dependencies":{"@ai-sdk/google":"2.x","@ai-sdk/openai":"2.x","@ai-sdk/anthropic":"2.x","ai":"5.x","archetype":"0.13.1","csv-stringify":"6.3.0","ejson":"^2.2.3","extrovert":"^0.2.0","marked":"15.0.12","node-inspect-extracted":"3.x","tailwindcss":"3.4.0","vanillatoasts":"^1.6.0","vue":"3.x","webpack":"5.x"},"peerDependencies":{"mongoose":"7.x || 8.x || ^9.0.0"},"devDependencies":{"@masteringjs/eslint-config":"0.1.1","axios":"1.2.2","dedent":"^1.6.0","eslint":"9.30.0","express":"4.x","mocha":"10.2.0","mongoose":"9.x"},"scripts":{"lint":"eslint .","tailwind":"tailwindcss -o ./frontend/public/tw.css","tailwind:watch":"tailwindcss -o ./frontend/public/tw.css --watch","test":"mocha test/*.test.js"}}');
17523
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@mongoosejs/studio","version":"0.1.18","description":"A sleek, powerful MongoDB UI with built-in dashboarding and auth, seamlessly integrated with your Express, Vercel, or Netlify app.","homepage":"https://studio.mongoosejs.io/","repository":{"type":"git","url":"https://github.com/mongoosejs/studio"},"license":"Apache-2.0","dependencies":{"@ai-sdk/google":"2.x","@ai-sdk/openai":"2.x","@ai-sdk/anthropic":"2.x","ai":"5.x","archetype":"0.13.1","csv-stringify":"6.3.0","ejson":"^2.2.3","extrovert":"^0.2.0","marked":"15.0.12","node-inspect-extracted":"3.x","tailwindcss":"3.4.0","vanillatoasts":"^1.6.0","vue":"3.x","webpack":"5.x"},"peerDependencies":{"mongoose":"7.x || 8.x || ^9.0.0"},"devDependencies":{"@masteringjs/eslint-config":"0.1.1","axios":"1.2.2","dedent":"^1.6.0","eslint":"9.30.0","express":"4.x","mocha":"10.2.0","mongoose":"9.x"},"scripts":{"lint":"eslint .","tailwind":"tailwindcss -o ./frontend/public/tw.css","tailwind:watch":"tailwindcss -o ./frontend/public/tw.css --watch","test":"mocha test/*.test.js"}}');
17100
17524
 
17101
- /***/ })
17525
+ /***/ }
17102
17526
 
17103
17527
  /******/ });
17104
17528
  /************************************************************************/
@@ -17112,6 +17536,12 @@ module.exports = /*#__PURE__*/JSON.parse('{"name":"@mongoosejs/studio","version"
17112
17536
  /******/ if (cachedModule !== undefined) {
17113
17537
  /******/ return cachedModule.exports;
17114
17538
  /******/ }
17539
+ /******/ // Check if module exists (development only)
17540
+ /******/ if (__webpack_modules__[moduleId] === undefined) {
17541
+ /******/ var e = new Error("Cannot find module '" + moduleId + "'");
17542
+ /******/ e.code = 'MODULE_NOT_FOUND';
17543
+ /******/ throw e;
17544
+ /******/ }
17115
17545
  /******/ // Create a new module (and put it into the cache)
17116
17546
  /******/ var module = __webpack_module_cache__[moduleId] = {
17117
17547
  /******/ // no module.id needed