@mongoosejs/studio 0.3.2 → 0.3.4

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.
@@ -750,9 +750,12 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
750
750
  getDocuments: function getDocuments(params) {
751
751
  return client.post('', { action: 'Model.getDocuments', ...params }).then(res => res.data);
752
752
  },
753
+ getSuggestedProjection: function getSuggestedProjection(params) {
754
+ return client.post('', { action: 'Model.getSuggestedProjection', ...params }).then(res => res.data);
755
+ },
753
756
  getDocumentsStream: async function* getDocumentsStream(params) {
754
757
  const data = await client.post('', { action: 'Model.getDocuments', ...params }).then(res => res.data);
755
- yield { schemaPaths: data.schemaPaths };
758
+ yield { schemaPaths: data.schemaPaths, suggestedFields: data.suggestedFields };
756
759
  yield { numDocs: data.numDocs };
757
760
  for (const doc of data.docs) {
758
761
  yield { document: doc };
@@ -965,6 +968,9 @@ if (window.MONGOOSE_STUDIO_CONFIG.isLambda) {
965
968
  getDocuments: function getDocuments(params) {
966
969
  return client.post('/Model/getDocuments', params).then(res => res.data);
967
970
  },
971
+ getSuggestedProjection: function getSuggestedProjection(params) {
972
+ return client.post('/Model/getSuggestedProjection', params).then(res => res.data);
973
+ },
968
974
  getDocumentsStream: async function* getDocumentsStream(params) {
969
975
  const accessToken = window.localStorage.getItem('_mongooseStudioAccessToken') || null;
970
976
  const url = window.MONGOOSE_STUDIO_CONFIG.baseURL + '/Model/getDocumentsStream?' + new URLSearchParams(params).toString();
@@ -2732,7 +2738,7 @@ module.exports = {
2732
2738
  return this.dashboardResults.length > 0 ? this.dashboardResults[0] : null;
2733
2739
  }
2734
2740
  },
2735
- mounted: async function () {
2741
+ mounted: async function() {
2736
2742
  window.pageState = this;
2737
2743
 
2738
2744
  document.addEventListener('click', this.handleDocumentClick);
@@ -7056,11 +7062,66 @@ const appendCSS = __webpack_require__(/*! ../appendCSS */ "./frontend/src/append
7056
7062
  appendCSS(__webpack_require__(/*! ./models.css */ "./frontend/src/models/models.css"));
7057
7063
 
7058
7064
  const limit = 20;
7065
+ const DEFAULT_FIRST_N_FIELDS = 6;
7059
7066
  const OUTPUT_TYPE_STORAGE_KEY = 'studio:model-output-type';
7060
7067
  const SELECTED_GEO_FIELD_STORAGE_KEY = 'studio:model-selected-geo-field';
7068
+ const PROJECTION_STORAGE_KEY_PREFIX = 'studio:model-projection:';
7069
+ const SHOW_ROW_NUMBERS_STORAGE_KEY = 'studio:model-show-row-numbers';
7070
+ const PROJECTION_MODE_QUERY_KEY = 'projectionMode';
7061
7071
  const RECENTLY_VIEWED_MODELS_KEY = 'studio:recently-viewed-models';
7062
7072
  const MAX_RECENT_MODELS = 4;
7063
7073
 
7074
+ /** Parse `fields` from the route (JSON array or inclusion projection object only). */
7075
+ function parseFieldsQueryParam(fields) {
7076
+ if (fields == null || fields === '') {
7077
+ return [];
7078
+ }
7079
+ const s = typeof fields === 'string' ? fields : String(fields);
7080
+ const trimmed = s.trim();
7081
+ if (!trimmed) {
7082
+ return [];
7083
+ }
7084
+ let parsed;
7085
+ try {
7086
+ parsed = JSON.parse(trimmed);
7087
+ } catch (e) {
7088
+ return [];
7089
+ }
7090
+ if (Array.isArray(parsed)) {
7091
+ return parsed.map(x => String(x).trim()).filter(Boolean);
7092
+ }
7093
+ if (parsed != null && typeof parsed === 'object') {
7094
+ return Object.keys(parsed).filter(k =>
7095
+ Object.prototype.hasOwnProperty.call(parsed, k) && parsed[k]
7096
+ );
7097
+ }
7098
+ return [];
7099
+ }
7100
+
7101
+ /** Pass through a valid JSON `fields` string for Model.getDocuments / getDocumentsStream. */
7102
+ function normalizeFieldsParamForApi(fieldsStr) {
7103
+ if (fieldsStr == null || fieldsStr === '') {
7104
+ return null;
7105
+ }
7106
+ const s = typeof fieldsStr === 'string' ? fieldsStr : String(fieldsStr);
7107
+ const trimmed = s.trim();
7108
+ if (!trimmed) {
7109
+ return null;
7110
+ }
7111
+ try {
7112
+ const parsed = JSON.parse(trimmed);
7113
+ if (Array.isArray(parsed)) {
7114
+ return trimmed;
7115
+ }
7116
+ if (parsed != null && typeof parsed === 'object' && !Array.isArray(parsed)) {
7117
+ return trimmed;
7118
+ }
7119
+ } catch (e) {
7120
+ return null;
7121
+ }
7122
+ return null;
7123
+ }
7124
+
7064
7125
  module.exports = app => app.component('models', {
7065
7126
  template: template,
7066
7127
  props: ['model', 'user', 'roles'],
@@ -7076,6 +7137,7 @@ module.exports = app => app.component('models', {
7076
7137
  mongoDBIndexes: [],
7077
7138
  schemaIndexes: [],
7078
7139
  status: 'loading',
7140
+ loadingMore: false,
7079
7141
  loadedAllDocs: false,
7080
7142
  edittingDoc: null,
7081
7143
  docEdits: null,
@@ -7084,7 +7146,10 @@ module.exports = app => app.component('models', {
7084
7146
  searchText: '',
7085
7147
  shouldShowExportModal: false,
7086
7148
  shouldShowCreateModal: false,
7087
- shouldShowFieldModal: false,
7149
+ projectionText: '',
7150
+ isProjectionMenuSelected: false,
7151
+ addFieldFilterText: '',
7152
+ showAddFieldDropdown: false,
7088
7153
  shouldShowIndexModal: false,
7089
7154
  shouldShowCollectionInfoModal: false,
7090
7155
  shouldShowUpdateMultipleModal: false,
@@ -7106,27 +7171,44 @@ module.exports = app => app.component('models', {
7106
7171
  collectionInfo: null,
7107
7172
  modelSearch: '',
7108
7173
  recentlyViewedModels: [],
7109
- showModelSwitcher: false
7174
+ showModelSwitcher: false,
7175
+ showRowNumbers: true,
7176
+ suppressScrollCheck: false,
7177
+ scrollTopToRestore: null
7110
7178
  }),
7111
7179
  created() {
7112
7180
  this.currentModel = this.model;
7113
7181
  this.setSearchTextFromRoute();
7114
7182
  this.loadOutputPreference();
7115
7183
  this.loadSelectedGeoField();
7184
+ this.loadShowRowNumbersPreference();
7116
7185
  this.loadRecentlyViewedModels();
7186
+ this.isProjectionMenuSelected = this.$route?.query?.[PROJECTION_MODE_QUERY_KEY] === '1';
7117
7187
  },
7118
7188
  beforeDestroy() {
7119
- document.removeEventListener('scroll', this.onScroll, true);
7120
7189
  window.removeEventListener('popstate', this.onPopState, true);
7121
7190
  document.removeEventListener('click', this.onOutsideActionsMenuClick, true);
7191
+ document.removeEventListener('click', this.onOutsideAddFieldDropdownClick, true);
7122
7192
  document.documentElement.removeEventListener('studio-theme-changed', this.onStudioThemeChanged);
7123
7193
  document.removeEventListener('keydown', this.onCtrlP, true);
7124
7194
  this.destroyMap();
7125
7195
  },
7126
7196
  async mounted() {
7197
+ // Persist scroll restoration across remounts.
7198
+ // This component is keyed by `$route.fullPath`, so query changes (e.g. projection updates)
7199
+ // recreate the component and reset scroll position.
7200
+ if (typeof window !== 'undefined') {
7201
+ if (typeof window.__studioModelsScrollTopToRestore === 'number') {
7202
+ this.scrollTopToRestore = window.__studioModelsScrollTopToRestore;
7203
+ }
7204
+ if (window.__studioModelsSuppressScrollCheck === true) {
7205
+ this.suppressScrollCheck = true;
7206
+ }
7207
+ delete window.__studioModelsScrollTopToRestore;
7208
+ delete window.__studioModelsSuppressScrollCheck;
7209
+ }
7210
+
7127
7211
  window.pageState = this;
7128
- this.onScroll = () => this.checkIfScrolledToBottom();
7129
- document.addEventListener('scroll', this.onScroll, true);
7130
7212
  this.onPopState = () => this.initSearchFromUrl();
7131
7213
  window.addEventListener('popstate', this.onPopState, true);
7132
7214
  this.onOutsideActionsMenuClick = event => {
@@ -7138,7 +7220,18 @@ module.exports = app => app.component('models', {
7138
7220
  this.closeActionsMenu();
7139
7221
  }
7140
7222
  };
7223
+ this.onOutsideAddFieldDropdownClick = event => {
7224
+ if (!this.showAddFieldDropdown) {
7225
+ return;
7226
+ }
7227
+ const container = this.$refs.addFieldContainer;
7228
+ if (container && !container.contains(event.target)) {
7229
+ this.showAddFieldDropdown = false;
7230
+ this.addFieldFilterText = '';
7231
+ }
7232
+ };
7141
7233
  document.addEventListener('click', this.onOutsideActionsMenuClick, true);
7234
+ document.addEventListener('click', this.onOutsideAddFieldDropdownClick, true);
7142
7235
  this.onStudioThemeChanged = () => this.updateMapTileLayer();
7143
7236
  document.documentElement.addEventListener('studio-theme-changed', this.onStudioThemeChanged);
7144
7237
  this.onCtrlP = (event) => {
@@ -7149,6 +7242,8 @@ module.exports = app => app.component('models', {
7149
7242
  };
7150
7243
  document.addEventListener('keydown', this.onCtrlP, true);
7151
7244
  this.query = Object.assign({}, this.$route.query);
7245
+ // Keep UI mode in sync with the URL on remounts.
7246
+ this.isProjectionMenuSelected = this.$route?.query?.[PROJECTION_MODE_QUERY_KEY] === '1';
7152
7247
  const { models, readyState } = await api.Model.listModels();
7153
7248
  this.models = models;
7154
7249
  await this.loadModelCounts();
@@ -7164,8 +7259,27 @@ module.exports = app => app.component('models', {
7164
7259
  }
7165
7260
 
7166
7261
  await this.initSearchFromUrl();
7262
+ if (this.isProjectionMenuSelected && this.outputType === 'map') {
7263
+ // Projection input is not rendered in map view.
7264
+ this.setOutputType('json');
7265
+ }
7266
+ this.$nextTick(() => {
7267
+ if (!this.isProjectionMenuSelected) return;
7268
+ const input = this.$refs.projectionInput;
7269
+ if (input && typeof input.focus === 'function') {
7270
+ input.focus();
7271
+ }
7272
+ });
7167
7273
  },
7168
7274
  watch: {
7275
+ model(newModel) {
7276
+ if (newModel !== this.currentModel) {
7277
+ this.currentModel = newModel;
7278
+ if (this.currentModel != null) {
7279
+ this.initSearchFromUrl();
7280
+ }
7281
+ }
7282
+ },
7169
7283
  documents: {
7170
7284
  handler() {
7171
7285
  if (this.outputType === 'map' && this.mapInstance) {
@@ -7270,6 +7384,19 @@ module.exports = app => app.component('models', {
7270
7384
  }
7271
7385
 
7272
7386
  return geoFields;
7387
+ },
7388
+ availablePathsToAdd() {
7389
+ const currentPaths = new Set(this.filteredPaths.map(p => p.path));
7390
+ return this.schemaPaths.filter(p => !currentPaths.has(p.path));
7391
+ },
7392
+ filteredPathsToAdd() {
7393
+ const available = this.availablePathsToAdd;
7394
+ const query = (this.addFieldFilterText || '').trim().toLowerCase();
7395
+ if (!query) return available;
7396
+ return available.filter(p => p.path.toLowerCase().includes(query));
7397
+ },
7398
+ tableDisplayPaths() {
7399
+ return this.filteredPaths.length > 0 ? this.filteredPaths : this.schemaPaths;
7273
7400
  }
7274
7401
  },
7275
7402
  methods: {
@@ -7334,6 +7461,24 @@ module.exports = app => app.component('models', {
7334
7461
  this.selectedGeoField = storedField;
7335
7462
  }
7336
7463
  },
7464
+ loadShowRowNumbersPreference() {
7465
+ if (typeof window === 'undefined' || !window.localStorage) {
7466
+ return;
7467
+ }
7468
+ const stored = window.localStorage.getItem(SHOW_ROW_NUMBERS_STORAGE_KEY);
7469
+ if (stored === '0') {
7470
+ this.showRowNumbers = false;
7471
+ } else if (stored === '1') {
7472
+ this.showRowNumbers = true;
7473
+ }
7474
+ },
7475
+ toggleRowNumbers() {
7476
+ this.showRowNumbers = !this.showRowNumbers;
7477
+ if (typeof window !== 'undefined' && window.localStorage) {
7478
+ window.localStorage.setItem(SHOW_ROW_NUMBERS_STORAGE_KEY, this.showRowNumbers ? '1' : '0');
7479
+ }
7480
+ this.showActionsMenu = false;
7481
+ },
7337
7482
  setOutputType(type) {
7338
7483
  if (type !== 'json' && type !== 'table' && type !== 'map') {
7339
7484
  return;
@@ -7529,6 +7674,22 @@ module.exports = app => app.component('models', {
7529
7674
  params.searchText = this.searchText;
7530
7675
  }
7531
7676
 
7677
+ // Prefer explicit URL projection (`query.fields`) so the first fetch after
7678
+ // mount/remount respects deep-linked projections before `filteredPaths`
7679
+ // is rehydrated from schema paths.
7680
+ let fieldsParam = normalizeFieldsParamForApi(this.query?.fields);
7681
+ if (!fieldsParam) {
7682
+ const fieldPaths = this.filteredPaths && this.filteredPaths.length > 0
7683
+ ? this.filteredPaths.map(p => p.path).filter(Boolean)
7684
+ : null;
7685
+ if (fieldPaths && fieldPaths.length > 0) {
7686
+ fieldsParam = JSON.stringify(fieldPaths);
7687
+ }
7688
+ }
7689
+ if (fieldsParam) {
7690
+ params.fields = fieldsParam;
7691
+ }
7692
+
7532
7693
  return params;
7533
7694
  },
7534
7695
  setSearchTextFromRoute() {
@@ -7542,20 +7703,35 @@ module.exports = app => app.component('models', {
7542
7703
  this.status = 'loading';
7543
7704
  this.query = Object.assign({}, this.$route.query); // important that this is here before the if statements
7544
7705
  this.setSearchTextFromRoute();
7545
- if (this.$route.query?.sort) {
7546
- const sort = eval(`(${this.$route.query.sort})`);
7547
- const path = Object.keys(sort)[0];
7548
- const num = Object.values(sort)[0];
7549
- this.sortDocs(num, path);
7706
+ // Avoid eval() on user-controlled query params.
7707
+ // Use explicit sortKey + sortDirection query params.
7708
+ const sortKey = this.$route.query?.sortKey;
7709
+ const sortDirectionRaw = this.$route.query?.sortDirection;
7710
+ const sortDirection = typeof sortDirectionRaw === 'string' ? Number(sortDirectionRaw) : sortDirectionRaw;
7711
+
7712
+ if (typeof sortKey === 'string' && sortKey.trim().length > 0 &&
7713
+ (sortDirection === 1 || sortDirection === -1)) {
7714
+ for (const key in this.sortBy) {
7715
+ delete this.sortBy[key];
7716
+ }
7717
+ this.sortBy[sortKey] = sortDirection;
7718
+ // Normalize to new params and remove legacy key if present.
7719
+ this.query.sortKey = sortKey;
7720
+ this.query.sortDirection = sortDirection;
7721
+ delete this.query.sort;
7550
7722
  }
7551
-
7552
-
7553
7723
  if (this.currentModel != null) {
7554
7724
  await this.getDocuments();
7555
7725
  }
7556
7726
  if (this.$route.query?.fields) {
7557
- const filter = this.$route.query.fields.split(',');
7558
- this.filteredPaths = this.filteredPaths.filter(x => filter.includes(x.path));
7727
+ const urlPaths = parseFieldsQueryParam(this.$route.query.fields);
7728
+ if (urlPaths.length > 0) {
7729
+ this.filteredPaths = urlPaths.map(path => this.schemaPaths.find(p => p.path === path)).filter(Boolean);
7730
+ if (this.filteredPaths.length > 0) {
7731
+ this.syncProjectionFromPaths();
7732
+ this.saveProjectionPreference();
7733
+ }
7734
+ }
7559
7735
  }
7560
7736
  this.status = 'loaded';
7561
7737
 
@@ -7575,15 +7751,22 @@ module.exports = app => app.component('models', {
7575
7751
  this.shouldShowCreateModal = false;
7576
7752
  await this.getDocuments();
7577
7753
  },
7578
- initializeDocumentData() {
7579
- this.shouldShowCreateModal = true;
7580
- },
7581
7754
  filterDocument(doc) {
7755
+ if (this.filteredPaths.length === 0) return doc;
7582
7756
  const filteredDoc = {};
7583
7757
  for (let i = 0; i < this.filteredPaths.length; i++) {
7584
7758
  const path = this.filteredPaths[i].path;
7585
7759
  const value = mpath.get(path, doc);
7586
- mpath.set(path, value, filteredDoc);
7760
+ mpath.set(path, value, filteredDoc, function(cur, path, val) {
7761
+ if (arguments.length === 2) {
7762
+ if (cur[path] == null) {
7763
+ cur[path] = {};
7764
+ }
7765
+ return cur[path];
7766
+ }
7767
+ cur[path] = val;
7768
+ return val;
7769
+ });
7587
7770
  }
7588
7771
  return filteredDoc;
7589
7772
  },
@@ -7591,23 +7774,47 @@ module.exports = app => app.component('models', {
7591
7774
  if (this.status === 'loading' || this.loadedAllDocs) {
7592
7775
  return;
7593
7776
  }
7594
- const container = this.$refs.documentsList;
7595
- if (container.scrollHeight - container.clientHeight - 100 < container.scrollTop) {
7596
- this.status = 'loading';
7597
- const params = this.buildDocumentFetchParams({ skip: this.documents.length });
7777
+ // Infinite scroll only applies to table/json views.
7778
+ if (this.outputType !== 'table' && this.outputType !== 'json') {
7779
+ return;
7780
+ }
7781
+ if (this.documents.length === 0) {
7782
+ return;
7783
+ }
7784
+ const container = this.outputType === 'table'
7785
+ ? this.$refs.documentsScrollContainer
7786
+ : this.$refs.documentsContainerScroll;
7787
+ if (!container || container.scrollHeight <= 0) {
7788
+ return;
7789
+ }
7790
+ const threshold = 150;
7791
+ const nearBottom = container.scrollTop + container.clientHeight >= container.scrollHeight - threshold;
7792
+ if (!nearBottom) {
7793
+ return;
7794
+ }
7795
+ this.loadingMore = true;
7796
+ this.status = 'loading';
7797
+ try {
7798
+ const skip = this.documents.length;
7799
+ const params = this.buildDocumentFetchParams({ skip });
7598
7800
  const { docs } = await api.Model.getDocuments(params);
7599
7801
  if (docs.length < limit) {
7600
7802
  this.loadedAllDocs = true;
7601
7803
  }
7602
7804
  this.documents.push(...docs);
7805
+ } finally {
7806
+ this.loadingMore = false;
7603
7807
  this.status = 'loaded';
7604
7808
  }
7809
+ this.$nextTick(() => this.checkIfScrolledToBottom());
7605
7810
  },
7606
7811
  async sortDocs(num, path) {
7607
7812
  let sorted = false;
7608
7813
  if (this.sortBy[path] == num) {
7609
7814
  sorted = true;
7610
7815
  delete this.query.sort;
7816
+ delete this.query.sortKey;
7817
+ delete this.query.sortDirection;
7611
7818
  this.$router.push({ query: this.query });
7612
7819
  }
7613
7820
  for (const key in this.sortBy) {
@@ -7615,9 +7822,13 @@ module.exports = app => app.component('models', {
7615
7822
  }
7616
7823
  if (!sorted) {
7617
7824
  this.sortBy[path] = num;
7618
- this.query.sort = `{${path}:${num}}`;
7825
+ this.query.sortKey = path;
7826
+ this.query.sortDirection = num;
7827
+ delete this.query.sort;
7619
7828
  this.$router.push({ query: this.query });
7620
7829
  }
7830
+ this.documents = [];
7831
+ this.loadedAllDocs = false;
7621
7832
  await this.loadMoreDocuments();
7622
7833
  },
7623
7834
  async search(searchText) {
@@ -7654,6 +7865,23 @@ module.exports = app => app.component('models', {
7654
7865
  closeActionsMenu() {
7655
7866
  this.showActionsMenu = false;
7656
7867
  },
7868
+ toggleProjectionMenu() {
7869
+ const next = !this.isProjectionMenuSelected;
7870
+ this.isProjectionMenuSelected = next;
7871
+
7872
+ // Because the route-view is keyed on `$route.fullPath`, query changes remount this component.
7873
+ // Persist projection UI state in the URL so Reset/Suggest don't turn the mode off.
7874
+ if (next) {
7875
+ this.query[PROJECTION_MODE_QUERY_KEY] = '1';
7876
+ if (this.outputType === 'map') {
7877
+ this.setOutputType('json');
7878
+ }
7879
+ } else {
7880
+ delete this.query[PROJECTION_MODE_QUERY_KEY];
7881
+ }
7882
+
7883
+ this.$router.push({ query: this.query });
7884
+ },
7657
7885
  async openCollectionInfo() {
7658
7886
  this.closeActionsMenu();
7659
7887
  this.shouldShowCollectionInfoModal = true;
@@ -7754,160 +7982,401 @@ module.exports = app => app.component('models', {
7754
7982
  }
7755
7983
  return formatValue(value / 1000000000, 'B');
7756
7984
  },
7757
- checkIndexLocation(indexName) {
7758
- if (this.schemaIndexes.find(x => x.name == indexName) && this.mongoDBIndexes.find(x => x.name == indexName)) {
7759
- return 'text-gray-500';
7760
- } else if (this.schemaIndexes.find(x => x.name == indexName)) {
7761
- return 'text-forest-green-500';
7762
- } else {
7763
- return 'text-valencia-500';
7764
- }
7765
- },
7766
7985
  async getDocuments() {
7767
- // Track recently viewed model
7768
- this.trackRecentModel(this.currentModel);
7769
-
7770
- // Clear previous data
7771
- this.documents = [];
7772
- this.schemaPaths = [];
7773
- this.numDocuments = null;
7774
- this.loadedAllDocs = false;
7775
- this.lastSelectedIndex = null;
7986
+ this.loadingMore = false;
7987
+ this.status = 'loading';
7988
+ try {
7989
+ // Track recently viewed model
7990
+ this.trackRecentModel(this.currentModel);
7991
+
7992
+ // Clear previous data
7993
+ this.documents = [];
7994
+ this.schemaPaths = [];
7995
+ this.numDocuments = null;
7996
+ this.loadedAllDocs = false;
7997
+ this.lastSelectedIndex = null;
7776
7998
 
7777
- let docsCount = 0;
7778
- let schemaPathsReceived = false;
7999
+ let docsCount = 0;
8000
+ let schemaPathsReceived = false;
7779
8001
 
7780
- // Use async generator to stream SSEs
7781
- const params = this.buildDocumentFetchParams();
7782
- for await (const event of api.Model.getDocumentsStream(params)) {
7783
- if (event.schemaPaths && !schemaPathsReceived) {
8002
+ // Use async generator to stream SSEs
8003
+ const params = this.buildDocumentFetchParams();
8004
+ for await (const event of api.Model.getDocumentsStream(params)) {
8005
+ if (event.schemaPaths && !schemaPathsReceived) {
7784
8006
  // Sort schemaPaths with _id first
7785
- this.schemaPaths = Object.keys(event.schemaPaths).sort((k1, k2) => {
7786
- if (k1 === '_id' && k2 !== '_id') {
7787
- return -1;
7788
- }
7789
- if (k1 !== '_id' && k2 === '_id') {
7790
- return 1;
8007
+ this.schemaPaths = Object.keys(event.schemaPaths).sort((k1, k2) => {
8008
+ if (k1 === '_id' && k2 !== '_id') {
8009
+ return -1;
8010
+ }
8011
+ if (k1 !== '_id' && k2 === '_id') {
8012
+ return 1;
8013
+ }
8014
+ return 0;
8015
+ }).map(key => event.schemaPaths[key]);
8016
+ this.shouldExport = {};
8017
+ for (const { path } of this.schemaPaths) {
8018
+ this.shouldExport[path] = true;
8019
+ }
8020
+ const shouldUseSavedProjection = this.isProjectionMenuSelected === true;
8021
+ const savedPaths = shouldUseSavedProjection ? this.loadProjectionPreference() : null;
8022
+ if (savedPaths === null) {
8023
+ this.applyDefaultProjection(event.suggestedFields);
8024
+ if (shouldUseSavedProjection) {
8025
+ this.saveProjectionPreference();
8026
+ }
8027
+ } else if (Array.isArray(savedPaths) && savedPaths.length === 0) {
8028
+ this.filteredPaths = [];
8029
+ this.projectionText = '';
8030
+ if (shouldUseSavedProjection) {
8031
+ this.saveProjectionPreference();
8032
+ }
8033
+ } else if (savedPaths && savedPaths.length > 0) {
8034
+ this.filteredPaths = savedPaths
8035
+ .map(path => this.schemaPaths.find(p => p.path === path))
8036
+ .filter(Boolean);
8037
+ if (this.filteredPaths.length === 0) {
8038
+ this.applyDefaultProjection(event.suggestedFields);
8039
+ if (shouldUseSavedProjection) {
8040
+ this.saveProjectionPreference();
8041
+ }
8042
+ }
8043
+ } else {
8044
+ this.applyDefaultProjection(event.suggestedFields);
8045
+ if (shouldUseSavedProjection) {
8046
+ this.saveProjectionPreference();
8047
+ }
7791
8048
  }
7792
- return 0;
7793
- }).map(key => event.schemaPaths[key]);
7794
- this.shouldExport = {};
7795
- for (const { path } of this.schemaPaths) {
7796
- this.shouldExport[path] = true;
8049
+ this.selectedPaths = [...this.filteredPaths];
8050
+ this.syncProjectionFromPaths();
8051
+ schemaPathsReceived = true;
8052
+ }
8053
+ if (event.numDocs !== undefined) {
8054
+ this.numDocuments = event.numDocs;
8055
+ }
8056
+ if (event.document) {
8057
+ this.documents.push(event.document);
8058
+ docsCount++;
8059
+ }
8060
+ if (event.message) {
8061
+ throw new Error(event.message);
7797
8062
  }
7798
- this.filteredPaths = [...this.schemaPaths];
7799
- this.selectedPaths = [...this.schemaPaths];
7800
- schemaPathsReceived = true;
7801
- }
7802
- if (event.numDocs !== undefined) {
7803
- this.numDocuments = event.numDocs;
7804
- }
7805
- if (event.document) {
7806
- this.documents.push(event.document);
7807
- docsCount++;
7808
- }
7809
- if (event.message) {
7810
- this.status = 'loaded';
7811
- throw new Error(event.message);
7812
8063
  }
7813
- }
7814
8064
 
7815
- if (docsCount < limit) {
7816
- this.loadedAllDocs = true;
8065
+ if (docsCount < limit) {
8066
+ this.loadedAllDocs = true;
8067
+ }
8068
+ } finally {
8069
+ this.status = 'loaded';
7817
8070
  }
8071
+ this.$nextTick(() => {
8072
+ this.restoreScrollPosition();
8073
+ if (!this.suppressScrollCheck) {
8074
+ this.checkIfScrolledToBottom();
8075
+ }
8076
+ this.suppressScrollCheck = false;
8077
+ });
7818
8078
  },
7819
8079
  async loadMoreDocuments() {
7820
- let docsCount = 0;
7821
- let numDocsReceived = false;
8080
+ const isLoadingMore = this.documents.length > 0;
8081
+ if (isLoadingMore) {
8082
+ this.loadingMore = true;
8083
+ }
8084
+ this.status = 'loading';
8085
+ try {
8086
+ let docsCount = 0;
8087
+ let numDocsReceived = false;
7822
8088
 
7823
- // Use async generator to stream SSEs
7824
- const params = this.buildDocumentFetchParams({ skip: this.documents.length });
7825
- for await (const event of api.Model.getDocumentsStream(params)) {
7826
- if (event.numDocs !== undefined && !numDocsReceived) {
7827
- this.numDocuments = event.numDocs;
7828
- numDocsReceived = true;
8089
+ // Use async generator to stream SSEs
8090
+ const params = this.buildDocumentFetchParams({ skip: this.documents.length });
8091
+ for await (const event of api.Model.getDocumentsStream(params)) {
8092
+ if (event.numDocs !== undefined && !numDocsReceived) {
8093
+ this.numDocuments = event.numDocs;
8094
+ numDocsReceived = true;
8095
+ }
8096
+ if (event.document) {
8097
+ this.documents.push(event.document);
8098
+ docsCount++;
8099
+ }
8100
+ if (event.message) {
8101
+ throw new Error(event.message);
8102
+ }
7829
8103
  }
7830
- if (event.document) {
7831
- this.documents.push(event.document);
7832
- docsCount++;
8104
+
8105
+ if (docsCount < limit) {
8106
+ this.loadedAllDocs = true;
7833
8107
  }
7834
- if (event.message) {
7835
- this.status = 'loaded';
7836
- throw new Error(event.message);
8108
+ } finally {
8109
+ this.loadingMore = false;
8110
+ this.status = 'loaded';
8111
+ }
8112
+ this.$nextTick(() => this.checkIfScrolledToBottom());
8113
+ },
8114
+ applyDefaultProjection(suggestedFields) {
8115
+ if (Array.isArray(suggestedFields) && suggestedFields.length > 0) {
8116
+ this.filteredPaths = suggestedFields
8117
+ .map(path => this.schemaPaths.find(p => p.path === path))
8118
+ .filter(Boolean);
8119
+ }
8120
+ if (!this.filteredPaths || this.filteredPaths.length === 0) {
8121
+ this.filteredPaths = this.schemaPaths.slice(0, DEFAULT_FIRST_N_FIELDS);
8122
+ }
8123
+ if (this.filteredPaths.length === 0) {
8124
+ this.filteredPaths = this.schemaPaths.filter(p => p.path === '_id');
8125
+ }
8126
+ },
8127
+ loadProjectionPreference() {
8128
+ if (typeof window === 'undefined' || !window.localStorage || !this.currentModel) {
8129
+ return null;
8130
+ }
8131
+ const key = PROJECTION_STORAGE_KEY_PREFIX + this.currentModel;
8132
+ const stored = window.localStorage.getItem(key);
8133
+ if (stored === null || stored === undefined) {
8134
+ return null;
8135
+ }
8136
+ if (stored === '') {
8137
+ return [];
8138
+ }
8139
+ try {
8140
+ const parsed = JSON.parse(stored);
8141
+ if (Array.isArray(parsed)) {
8142
+ return parsed.map(x => String(x).trim()).filter(Boolean);
7837
8143
  }
8144
+ } catch (e) {
8145
+ return null;
7838
8146
  }
7839
-
7840
- if (docsCount < limit) {
7841
- this.loadedAllDocs = true;
8147
+ return null;
8148
+ },
8149
+ saveProjectionPreference() {
8150
+ if (typeof window === 'undefined' || !window.localStorage || !this.currentModel) {
8151
+ return;
7842
8152
  }
8153
+ const key = PROJECTION_STORAGE_KEY_PREFIX + this.currentModel;
8154
+ const paths = this.filteredPaths.map(p => p.path);
8155
+ window.localStorage.setItem(key, JSON.stringify(paths));
7843
8156
  },
7844
- addOrRemove(path) {
7845
- const exists = this.selectedPaths.findIndex(x => x.path == path.path);
7846
- if (exists > 0) { // remove
7847
- this.selectedPaths.splice(exists, 1);
7848
- } else { // add
7849
- this.selectedPaths.push(path);
7850
- this.selectedPaths = Object.keys(this.selectedPaths).sort((k1, k2) => {
7851
- if (k1 === '_id' && k2 !== '_id') {
7852
- return -1;
7853
- }
7854
- if (k1 !== '_id' && k2 === '_id') {
7855
- return 1;
8157
+ clearProjection() {
8158
+ // Keep current filter input in sync with the URL so projection reset
8159
+ // does not unintentionally wipe the filter on remount.
8160
+ this.syncFilterToQuery();
8161
+ this.filteredPaths = [];
8162
+ this.selectedPaths = [];
8163
+ this.projectionText = '';
8164
+ this.updateProjectionQuery();
8165
+ this.saveProjectionPreference();
8166
+ },
8167
+ resetFilter() {
8168
+ // Reuse the existing "apply filter + update URL" flow.
8169
+ this.search('');
8170
+ },
8171
+ syncFilterToQuery() {
8172
+ if (typeof this.searchText === 'string' && this.searchText.trim().length > 0) {
8173
+ this.query.search = this.searchText;
8174
+ } else {
8175
+ delete this.query.search;
8176
+ }
8177
+ },
8178
+ applyDefaultProjectionColumns() {
8179
+ if (!this.schemaPaths || this.schemaPaths.length === 0) return;
8180
+ const pathNames = this.schemaPaths.map(p => p.path);
8181
+ this.applyDefaultProjection(pathNames.slice(0, DEFAULT_FIRST_N_FIELDS));
8182
+ this.selectedPaths = [...this.filteredPaths];
8183
+ this.syncProjectionFromPaths();
8184
+ this.updateProjectionQuery();
8185
+ this.saveProjectionPreference();
8186
+ },
8187
+ initProjection(ev) {
8188
+ if (!this.projectionText || !this.projectionText.trim()) {
8189
+ this.projectionText = '';
8190
+ this.$nextTick(() => {
8191
+ if (ev && ev.target) {
8192
+ ev.target.setSelectionRange(0, 0);
7856
8193
  }
7857
- return 0;
7858
- }).map(key => this.selectedPaths[key]);
8194
+ });
7859
8195
  }
7860
8196
  },
7861
- openFieldSelection() {
7862
- if (this.$route.query?.fields) {
7863
- this.selectedPaths.length = 0;
7864
- console.log('there are fields in play', this.$route.query.fields);
7865
- const fields = this.$route.query.fields.split(',');
7866
- for (let i = 0; i < fields.length; i++) {
7867
- this.selectedPaths.push({ path: fields[i] });
8197
+ syncProjectionFromPaths() {
8198
+ if (this.filteredPaths.length === 0) {
8199
+ this.projectionText = '';
8200
+ return;
8201
+ }
8202
+ // String-only projection syntax: `field1 field2` and `-field` for exclusions.
8203
+ // Since `filteredPaths` represents the final include set, we serialize as space-separated fields.
8204
+ this.projectionText = this.filteredPaths.map(p => p.path).join(' ');
8205
+ },
8206
+ parseProjectionInput(text) {
8207
+ if (!text || typeof text !== 'string') {
8208
+ return [];
8209
+ }
8210
+ const trimmed = text.trim();
8211
+ if (!trimmed) {
8212
+ return [];
8213
+ }
8214
+ const normalizeKey = (key) => String(key).trim();
8215
+
8216
+ // String-only projection syntax:
8217
+ // name email
8218
+ // -password (exclusion-only)
8219
+ // +email (inclusion-only)
8220
+ //
8221
+ // Brace/object syntax is intentionally NOT supported.
8222
+ if (trimmed.startsWith('{') || trimmed.endsWith('}')) {
8223
+ return null;
8224
+ }
8225
+
8226
+ const tokens = trimmed.split(/[,\s]+/).filter(Boolean);
8227
+ if (tokens.length === 0) return [];
8228
+
8229
+ const includeKeys = [];
8230
+ const excludeKeys = [];
8231
+
8232
+ for (const rawToken of tokens) {
8233
+ const token = rawToken.trim();
8234
+ if (!token) continue;
8235
+
8236
+ const prefix = token[0];
8237
+ if (prefix === '-') {
8238
+ const path = token.slice(1).trim();
8239
+ if (!path) return null;
8240
+ excludeKeys.push(path);
8241
+ } else if (prefix === '+') {
8242
+ const path = token.slice(1).trim();
8243
+ if (!path) return null;
8244
+ includeKeys.push(path);
8245
+ } else {
8246
+ includeKeys.push(token);
7868
8247
  }
7869
- } else {
7870
- this.selectedPaths = [{ path: '_id' }];
7871
8248
  }
7872
- this.shouldShowFieldModal = true;
8249
+
8250
+ if (includeKeys.length > 0 && excludeKeys.length > 0) {
8251
+ // Support subtractive edits on an existing projection string, e.g.
8252
+ // `name email createdAt -email` -> `name createdAt`.
8253
+ const includeSet = new Set(includeKeys.map(normalizeKey));
8254
+ for (const path of excludeKeys) {
8255
+ includeSet.delete(normalizeKey(path));
8256
+ }
8257
+ return Array.from(includeSet);
8258
+ }
8259
+
8260
+ if (excludeKeys.length > 0) {
8261
+ const excludeSet = new Set(excludeKeys.map(normalizeKey));
8262
+ return this.schemaPaths.map(p => p.path).filter(p => !excludeSet.has(p));
8263
+ }
8264
+
8265
+ return includeKeys.map(normalizeKey);
7873
8266
  },
7874
- filterDocuments() {
7875
- if (this.selectedPaths.length > 0) {
7876
- this.filteredPaths = [...this.selectedPaths];
8267
+ applyProjectionFromInput() {
8268
+ const paths = this.parseProjectionInput(this.projectionText);
8269
+ if (paths === null) {
8270
+ this.syncProjectionFromPaths();
8271
+ return;
8272
+ }
8273
+ if (paths.length === 0) {
8274
+ this.filteredPaths = this.schemaPaths.filter(p => p.path === '_id');
8275
+ if (this.filteredPaths.length === 0 && this.schemaPaths.length > 0) {
8276
+ const idPath = this.schemaPaths.find(p => p.path === '_id');
8277
+ this.filteredPaths = idPath ? [idPath] : [this.schemaPaths[0]];
8278
+ }
7877
8279
  } else {
7878
- this.filteredPaths.length = 0;
8280
+ this.filteredPaths = paths.map(path => this.schemaPaths.find(p => p.path === path)).filter(Boolean);
8281
+ const validPaths = new Set(this.schemaPaths.map(p => p.path));
8282
+ for (const path of paths) {
8283
+ if (validPaths.has(path) && !this.filteredPaths.find(p => p.path === path)) {
8284
+ this.filteredPaths.push(this.schemaPaths.find(p => p.path === path));
8285
+ }
8286
+ }
8287
+ if (this.filteredPaths.length === 0) {
8288
+ this.filteredPaths = this.schemaPaths.filter(p => p.path === '_id');
8289
+ }
7879
8290
  }
7880
- this.shouldShowFieldModal = false;
7881
- const selectedParams = this.filteredPaths.map(x => x.path).join(',');
7882
- this.query.fields = selectedParams;
7883
- this.$router.push({ query: this.query });
7884
- },
7885
- resetDocuments() {
7886
8291
  this.selectedPaths = [...this.filteredPaths];
7887
- this.query.fields = {};
8292
+ this.syncProjectionFromPaths();
8293
+ this.updateProjectionQuery();
8294
+ this.saveProjectionPreference();
8295
+ },
8296
+ updateProjectionQuery() {
8297
+ const paths = this.filteredPaths.map(x => x.path).filter(Boolean);
8298
+ if (paths.length > 0) {
8299
+ this.query.fields = JSON.stringify(paths);
8300
+ } else {
8301
+ delete this.query.fields;
8302
+ }
7888
8303
  this.$router.push({ query: this.query });
7889
- this.shouldShowFieldModal = false;
7890
8304
  },
7891
- deselectAll() {
7892
- this.selectedPaths = [];
8305
+ removeField(schemaPath) {
8306
+ if (this.outputType === 'table' && this.$refs.documentsScrollContainer) {
8307
+ this.scrollTopToRestore = this.$refs.documentsScrollContainer.scrollTop;
8308
+ this.suppressScrollCheck = true;
8309
+ // Persist for remount caused by query changes.
8310
+ if (typeof window !== 'undefined') {
8311
+ window.__studioModelsScrollTopToRestore = this.scrollTopToRestore;
8312
+ window.__studioModelsSuppressScrollCheck = true;
8313
+ }
8314
+ }
8315
+ const index = this.filteredPaths.findIndex(p => p.path === schemaPath.path);
8316
+ if (index !== -1) {
8317
+ this.filteredPaths.splice(index, 1);
8318
+ if (this.filteredPaths.length === 0) {
8319
+ const idPath = this.schemaPaths.find(p => p.path === '_id');
8320
+ this.filteredPaths = idPath ? [idPath] : [];
8321
+ }
8322
+ this.syncProjectionFromPaths();
8323
+ this.updateProjectionQuery();
8324
+ this.saveProjectionPreference();
8325
+ }
8326
+ },
8327
+ addField(schemaPath) {
8328
+ if (!this.filteredPaths.find(p => p.path === schemaPath.path)) {
8329
+ if (this.outputType === 'table' && this.$refs.documentsScrollContainer) {
8330
+ this.scrollTopToRestore = this.$refs.documentsScrollContainer.scrollTop;
8331
+ this.suppressScrollCheck = true;
8332
+ // Persist for remount caused by query changes.
8333
+ if (typeof window !== 'undefined') {
8334
+ window.__studioModelsScrollTopToRestore = this.scrollTopToRestore;
8335
+ window.__studioModelsSuppressScrollCheck = true;
8336
+ }
8337
+ }
8338
+ this.filteredPaths.push(schemaPath);
8339
+ this.filteredPaths.sort((a, b) => {
8340
+ if (a.path === '_id') return -1;
8341
+ if (b.path === '_id') return 1;
8342
+ return 0;
8343
+ });
8344
+ this.syncProjectionFromPaths();
8345
+ this.updateProjectionQuery();
8346
+ this.saveProjectionPreference();
8347
+ this.showAddFieldDropdown = false;
8348
+ this.addFieldFilterText = '';
8349
+ }
7893
8350
  },
7894
- selectAll() {
7895
- this.selectedPaths = [...this.schemaPaths];
8351
+ restoreScrollPosition() {
8352
+ if (this.outputType !== 'table') return;
8353
+ if (this.scrollTopToRestore == null) return;
8354
+ const container = this.$refs.documentsScrollContainer;
8355
+ if (!container) return;
8356
+ container.scrollTop = this.scrollTopToRestore;
8357
+ this.scrollTopToRestore = null;
7896
8358
  },
7897
- isSelected(path) {
7898
- return this.selectedPaths.find(x => x.path == path);
8359
+ toggleAddFieldDropdown() {
8360
+ this.showAddFieldDropdown = !this.showAddFieldDropdown;
8361
+ if (this.showAddFieldDropdown) {
8362
+ this.addFieldFilterText = '';
8363
+ this.$nextTick(() => this.$refs.addFieldFilterInput?.focus());
8364
+ }
7899
8365
  },
7900
8366
  getComponentForPath(schemaPath) {
8367
+ if (!schemaPath || typeof schemaPath !== 'object') {
8368
+ return 'list-mixed';
8369
+ }
7901
8370
  if (schemaPath.instance === 'Array') {
7902
8371
  return 'list-array';
7903
8372
  }
7904
8373
  if (schemaPath.instance === 'String') {
7905
8374
  return 'list-string';
7906
8375
  }
7907
- if (schemaPath.instance == 'Embedded') {
8376
+ if (schemaPath.instance === 'Embedded') {
7908
8377
  return 'list-subdocument';
7909
8378
  }
7910
- if (schemaPath.instance == 'Mixed') {
8379
+ if (schemaPath.instance === 'Mixed') {
7911
8380
  return 'list-mixed';
7912
8381
  }
7913
8382
  return 'list-default';
@@ -7932,6 +8401,31 @@ module.exports = app => app.component('models', {
7932
8401
  this.edittingDoc = null;
7933
8402
  this.$toast.success('Document updated!');
7934
8403
  },
8404
+ copyCellValue(value) {
8405
+ const text = value == null ? '' : (typeof value === 'object' ? JSON.stringify(value) : String(value));
8406
+ if (typeof navigator !== 'undefined' && navigator.clipboard && navigator.clipboard.writeText) {
8407
+ navigator.clipboard.writeText(text).then(() => {
8408
+ this.$toast.success('Copied to clipboard');
8409
+ }).catch(() => {
8410
+ this.fallbackCopyText(text);
8411
+ });
8412
+ } else {
8413
+ this.fallbackCopyText(text);
8414
+ }
8415
+ },
8416
+ fallbackCopyText(text) {
8417
+ try {
8418
+ const el = document.createElement('textarea');
8419
+ el.value = text;
8420
+ document.body.appendChild(el);
8421
+ el.select();
8422
+ document.execCommand('copy');
8423
+ document.body.removeChild(el);
8424
+ this.$toast.success('Copied to clipboard');
8425
+ } catch (err) {
8426
+ this.$toast.error('Copy failed');
8427
+ }
8428
+ },
7935
8429
  handleDocumentClick(document, event) {
7936
8430
  if (this.selectMultiple) {
7937
8431
  this.handleDocumentSelection(document, event);
@@ -8299,7 +8793,7 @@ module.exports = app => app.component('navbar', {
8299
8793
  showFlyout: false,
8300
8794
  darkMode: typeof localStorage !== 'undefined' && localStorage.getItem('studio-theme') === 'dark'
8301
8795
  }),
8302
- mounted: function () {
8796
+ mounted: function() {
8303
8797
  window.navbar = this;
8304
8798
  const mobileMenuMask = document.querySelector('#mobile-menu-mask');
8305
8799
  const mobileMenu = document.querySelector('#mobile-menu');
@@ -9976,7 +10470,7 @@ __webpack_require__.r(__webpack_exports__);
9976
10470
  /* harmony export */ });
9977
10471
  /* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/shared */ "./node_modules/@vue/shared/dist/shared.esm-bundler.js");
9978
10472
  /**
9979
- * @vue/reactivity v3.5.30
10473
+ * @vue/reactivity v3.5.31
9980
10474
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
9981
10475
  * @license MIT
9982
10476
  **/
@@ -11569,16 +12063,16 @@ function toRefs(object) {
11569
12063
  return ret;
11570
12064
  }
11571
12065
  class ObjectRefImpl {
11572
- constructor(_object, _key, _defaultValue) {
12066
+ constructor(_object, key, _defaultValue) {
11573
12067
  this._object = _object;
11574
- this._key = _key;
11575
12068
  this._defaultValue = _defaultValue;
11576
12069
  this["__v_isRef"] = true;
11577
12070
  this._value = void 0;
12071
+ this._key = (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(key) ? key : String(key);
11578
12072
  this._raw = toRaw(_object);
11579
12073
  let shallow = true;
11580
12074
  let obj = _object;
11581
- if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(_object) || !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(String(_key))) {
12075
+ if (!(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isArray)(_object) || (0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isSymbol)(this._key) || !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_0__.isIntegerKey)(this._key)) {
11582
12076
  do {
11583
12077
  shallow = !isProxy(obj) || isShallow(obj);
11584
12078
  } while (shallow && (obj = obj["__v_raw"]));
@@ -12123,7 +12617,7 @@ __webpack_require__.r(__webpack_exports__);
12123
12617
  /* harmony import */ var _vue_reactivity__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/reactivity */ "./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js");
12124
12618
  /* harmony import */ var _vue_shared__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/shared */ "./node_modules/@vue/shared/dist/shared.esm-bundler.js");
12125
12619
  /**
12126
- * @vue/runtime-core v3.5.30
12620
+ * @vue/runtime-core v3.5.31
12127
12621
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
12128
12622
  * @license MIT
12129
12623
  **/
@@ -12570,6 +13064,13 @@ function checkRecursiveUpdates(seen, fn) {
12570
13064
  }
12571
13065
 
12572
13066
  let isHmrUpdating = false;
13067
+ const setHmrUpdating = (v) => {
13068
+ try {
13069
+ return isHmrUpdating;
13070
+ } finally {
13071
+ isHmrUpdating = v;
13072
+ }
13073
+ };
12573
13074
  const hmrDirtyComponents = /* @__PURE__ */ new Map();
12574
13075
  if (true) {
12575
13076
  (0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.getGlobalThis)().__VUE_HMR_RUNTIME__ = {
@@ -13156,9 +13657,10 @@ const TeleportImpl = {
13156
13657
  mount(container, mainAnchor);
13157
13658
  updateCssVars(n2, true);
13158
13659
  }
13159
- if (isTeleportDeferred(n2.props)) {
13660
+ if (isTeleportDeferred(n2.props) || parentSuspense && parentSuspense.pendingBranch) {
13160
13661
  n2.el.__isMounted = false;
13161
13662
  queuePostRenderEffect(() => {
13663
+ if (n2.el.__isMounted !== false) return;
13162
13664
  mountToTarget();
13163
13665
  delete n2.el.__isMounted;
13164
13666
  }, parentSuspense);
@@ -13166,7 +13668,12 @@ const TeleportImpl = {
13166
13668
  mountToTarget();
13167
13669
  }
13168
13670
  } else {
13169
- if (isTeleportDeferred(n2.props) && n1.el.__isMounted === false) {
13671
+ n2.el = n1.el;
13672
+ n2.targetStart = n1.targetStart;
13673
+ const mainAnchor = n2.anchor = n1.anchor;
13674
+ const target = n2.target = n1.target;
13675
+ const targetAnchor = n2.targetAnchor = n1.targetAnchor;
13676
+ if (n1.el.__isMounted === false) {
13170
13677
  queuePostRenderEffect(() => {
13171
13678
  TeleportImpl.process(
13172
13679
  n1,
@@ -13183,11 +13690,6 @@ const TeleportImpl = {
13183
13690
  }, parentSuspense);
13184
13691
  return;
13185
13692
  }
13186
- n2.el = n1.el;
13187
- n2.targetStart = n1.targetStart;
13188
- const mainAnchor = n2.anchor = n1.anchor;
13189
- const target = n2.target = n1.target;
13190
- const targetAnchor = n2.targetAnchor = n1.targetAnchor;
13191
13693
  const wasDisabled = isTeleportDisabled(n1.props);
13192
13694
  const currentContainer = wasDisabled ? container : target;
13193
13695
  const currentAnchor = wasDisabled ? mainAnchor : targetAnchor;
@@ -13652,7 +14154,7 @@ function resolveTransitionHooks(vnode, props, state, instance, postClone) {
13652
14154
  callHook(hook, [el]);
13653
14155
  },
13654
14156
  enter(el) {
13655
- if (leavingVNodesCache[key] === vnode) return;
14157
+ if (!isHmrUpdating && leavingVNodesCache[key] === vnode) return;
13656
14158
  let hook = onEnter;
13657
14159
  let afterHook = onAfterEnter;
13658
14160
  let cancelHook = onEnterCancelled;
@@ -16900,11 +17402,12 @@ function hasPropValueChanged(nextProps, prevProps, key) {
16900
17402
  }
16901
17403
  return nextProp !== prevProp;
16902
17404
  }
16903
- function updateHOCHostEl({ vnode, parent }, el) {
17405
+ function updateHOCHostEl({ vnode, parent, suspense }, el) {
16904
17406
  while (parent) {
16905
17407
  const root = parent.subTree;
16906
17408
  if (root.suspense && root.suspense.activeBranch === vnode) {
16907
- root.el = vnode.el;
17409
+ root.suspense.vnode.el = root.el = el;
17410
+ vnode = root;
16908
17411
  }
16909
17412
  if (root === vnode) {
16910
17413
  (vnode = parent.vnode).el = el;
@@ -16913,6 +17416,9 @@ function updateHOCHostEl({ vnode, parent }, el) {
16913
17416
  break;
16914
17417
  }
16915
17418
  }
17419
+ if (suspense && suspense.activeBranch === vnode) {
17420
+ suspense.vnode.el = el;
17421
+ }
16916
17422
  }
16917
17423
 
16918
17424
  const internalObjectProto = {};
@@ -17781,10 +18287,17 @@ function baseCreateRenderer(options, createHydrationFns) {
17781
18287
  }
17782
18288
  hostInsert(el, container, anchor);
17783
18289
  if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {
18290
+ const isHmr = true && isHmrUpdating;
17784
18291
  queuePostRenderEffect(() => {
17785
- vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
17786
- needCallTransitionHooks && transition.enter(el);
17787
- dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted");
18292
+ let prev;
18293
+ if (true) prev = setHmrUpdating(isHmr);
18294
+ try {
18295
+ vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
18296
+ needCallTransitionHooks && transition.enter(el);
18297
+ dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted");
18298
+ } finally {
18299
+ if (true) setHmrUpdating(prev);
18300
+ }
17788
18301
  }, parentSuspense);
17789
18302
  }
17790
18303
  };
@@ -18704,7 +19217,8 @@ function baseCreateRenderer(options, createHydrationFns) {
18704
19217
  shapeFlag,
18705
19218
  patchFlag,
18706
19219
  dirs,
18707
- cacheIndex
19220
+ cacheIndex,
19221
+ memo
18708
19222
  } = vnode;
18709
19223
  if (patchFlag === -2) {
18710
19224
  optimized = false;
@@ -18766,10 +19280,14 @@ function baseCreateRenderer(options, createHydrationFns) {
18766
19280
  remove(vnode);
18767
19281
  }
18768
19282
  }
18769
- if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {
19283
+ const shouldInvalidateMemo = memo != null && cacheIndex == null;
19284
+ if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs || shouldInvalidateMemo) {
18770
19285
  queuePostRenderEffect(() => {
18771
19286
  vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
18772
19287
  shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted");
19288
+ if (shouldInvalidateMemo) {
19289
+ vnode.el = null;
19290
+ }
18773
19291
  }, parentSuspense);
18774
19292
  }
18775
19293
  };
@@ -19323,6 +19841,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
19323
19841
  pendingId: suspenseId++,
19324
19842
  timeout: typeof timeout === "number" ? timeout : -1,
19325
19843
  activeBranch: null,
19844
+ isFallbackMountPending: false,
19326
19845
  pendingBranch: null,
19327
19846
  isInFallback: !isHydrating,
19328
19847
  isHydrating,
@@ -19372,7 +19891,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
19372
19891
  }
19373
19892
  };
19374
19893
  }
19375
- if (activeBranch) {
19894
+ if (activeBranch && !suspense.isFallbackMountPending) {
19376
19895
  if (parentNode(activeBranch.el) === container2) {
19377
19896
  anchor = next(activeBranch);
19378
19897
  }
@@ -19385,6 +19904,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
19385
19904
  move(pendingBranch, container2, anchor, 0);
19386
19905
  }
19387
19906
  }
19907
+ suspense.isFallbackMountPending = false;
19388
19908
  setActiveBranch(suspense, pendingBranch);
19389
19909
  suspense.pendingBranch = null;
19390
19910
  suspense.isInFallback = false;
@@ -19420,6 +19940,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
19420
19940
  triggerEvent(vnode2, "onFallback");
19421
19941
  const anchor2 = next(activeBranch);
19422
19942
  const mountFallback = () => {
19943
+ suspense.isFallbackMountPending = false;
19423
19944
  if (!suspense.isInFallback) {
19424
19945
  return;
19425
19946
  }
@@ -19439,6 +19960,7 @@ function createSuspenseBoundary(vnode, parentSuspense, parentComponent, containe
19439
19960
  };
19440
19961
  const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === "out-in";
19441
19962
  if (delayEnter) {
19963
+ suspense.isFallbackMountPending = true;
19442
19964
  activeBranch.transition.afterLeave = mountFallback;
19443
19965
  }
19444
19966
  suspense.isInFallback = true;
@@ -19989,6 +20511,10 @@ function mergeProps(...args) {
19989
20511
  const incoming = toMerge[key];
19990
20512
  if (incoming && existing !== incoming && !((0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isArray)(existing) && existing.includes(incoming))) {
19991
20513
  ret[key] = existing ? [].concat(existing, incoming) : incoming;
20514
+ } else if (incoming == null && existing == null && // mergeProps({ 'onUpdate:modelValue': undefined }) should not retain
20515
+ // the model listener.
20516
+ !(0,_vue_shared__WEBPACK_IMPORTED_MODULE_1__.isModelListener)(key)) {
20517
+ ret[key] = incoming;
19992
20518
  }
19993
20519
  } else if (key !== "") {
19994
20520
  ret[key] = toMerge[key];
@@ -20675,7 +21201,7 @@ function isMemoSame(cached, memo) {
20675
21201
  return true;
20676
21202
  }
20677
21203
 
20678
- const version = "3.5.30";
21204
+ const version = "3.5.31";
20679
21205
  const warn = true ? warn$1 : 0;
20680
21206
  const ErrorTypeStrings = ErrorTypeStrings$1 ;
20681
21207
  const devtools = true ? devtools$1 : 0;
@@ -20886,7 +21412,7 @@ __webpack_require__.r(__webpack_exports__);
20886
21412
  /* harmony import */ var _vue_runtime_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/runtime-core */ "./node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js");
20887
21413
  /* harmony import */ var _vue_runtime_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @vue/shared */ "./node_modules/@vue/shared/dist/shared.esm-bundler.js");
20888
21414
  /**
20889
- * @vue/runtime-dom v3.5.30
21415
+ * @vue/runtime-dom v3.5.31
20890
21416
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
20891
21417
  * @license MIT
20892
21418
  **/
@@ -22463,7 +22989,8 @@ const vModelText = {
22463
22989
  if (elValue === newValue) {
22464
22990
  return;
22465
22991
  }
22466
- if (document.activeElement === el && el.type !== "range") {
22992
+ const rootNode = el.getRootNode();
22993
+ if ((rootNode instanceof Document || rootNode instanceof ShadowRoot) && rootNode.activeElement === el && el.type !== "range") {
22467
22994
  if (lazy && value === oldValue) {
22468
22995
  return;
22469
22996
  }
@@ -22957,7 +23484,7 @@ __webpack_require__.r(__webpack_exports__);
22957
23484
  /* harmony export */ toTypeString: () => (/* binding */ toTypeString)
22958
23485
  /* harmony export */ });
22959
23486
  /**
22960
- * @vue/shared v3.5.30
23487
+ * @vue/shared v3.5.31
22961
23488
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
22962
23489
  * @license MIT
22963
23490
  **/
@@ -48292,11 +48819,7 @@ module.exports = function stringToParts(str) {
48292
48819
  \*************************************************************/
48293
48820
  (module) {
48294
48821
 
48295
- /*! For license information please see inspect.js.LICENSE.txt */
48296
- !function(t,e){ true?module.exports=e():0}(this,()=>(()=>{"use strict";var t={562(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(746).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
48297
- var t, e; }();e.h=c},622(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(746),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(916),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(48),Qe=Ke.customInspectSymbol,Xe=Ke.isError,tr=Ke.join,er=Ke.removeColors,rr=r(27).isStackOverflowError,nr=r(326),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(266),kr=r(588).BuiltinModule,Ir=r(903),Rr=Ir.validateObject,Lr=Ir.validateString,Tr=Ir.kValidateObjectAllowArray;function Br(t){return(y=y||r(287)).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="",P=cn,w=!0,x=t.showHidden?Fe:We,_=0;if(me in e||null===l)if(w=!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,P=kn}else if(dr(e)){var M=Qt(e),C=yn(l,s,"Set","(".concat(M,")"));if(c=pn(e,t.showHidden),P=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),P=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],"]");P=K(In,null,W,Z),_=2,t.showHidden&&(d=["BYTES_PER_ELEMENT","length","byteLength","byteOffset","buffer"],i=!0)}else pr(e)?(c=pn(e,t.showHidden),v=hn("Map",s),P=K(Dn,null,v)):br(e)?(c=pn(e,t.showHidden),v=hn("Set",s),P=K(Dn,null,v)):w=!0;if(w)if(c=pn(e,t.showHidden),v=["{","}"],"function"==typeof e){if(m=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(m,"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)){m=Zt(null!==l?e:new Wt(e));var Y=yn(l,s,"RegExp");if("RegExp "!==Y&&(m="".concat(Y).concat(m)),m=t.stylize(m,"regexp"),0===c.length&&void 0===u||o>t.depth&&null!==t.depth)return m}else if(wr(e)){m=gt(U(e))?V(e):G(e);var q=yn(l,s,"Date");if("Date "!==q&&(m="".concat(q).concat(m)),0===c.length&&void 0===u)return t.stylize(m,"date")}else if(Xe(e)){if(m=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,!It(t,"cause")||0!==i.length&&A(i,"cause")||k(i,"cause");try{var v=t.errors;!S(v)||!It(t,"errors")||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 m}else if(ir(e)){var J=yn(l,s,cr(e)?"ArrayBuffer":"SharedArrayBuffer");if(void 0===i)P=En;else if(0===c.length&&void 0===u)return J+"{ [byteLength]: ".concat(xn(t.stylize,e.byteLength,!1)," }");v[0]="".concat(J,"{"),d=["byteLength"]}else if(fr(e))v[0]="".concat(yn(l,s,"DataView"),"{"),d=["byteLength","byteOffset","buffer"];else if(hr(e))v[0]="".concat(yn(l,s,"Promise"),"{"),P=Nn;else if(Sr(e))v[0]="".concat(yn(l,s,"WeakSet"),"{"),P=t.showHidden?Mn:zn;else if(mr(e))v[0]="".concat(yn(l,s,"WeakMap"),"{"),P=t.showHidden?Cn:zn;else if(gr(e))v[0]="".concat(yn(l,s,"Module"),"{"),P=jn.bind(null,c);else if(lr(e)){if(m=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 m}else if(!function(t){return y=y||r(287),"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),m=e.href,0===c.length&&void 0===u)return m;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(b=P(t,e,o),void 0!==d)for(h=0;h<d.length;h++){var rt=void 0;try{rt=Fn(t,e,o,d[h],i)}catch(r){rt=Fn(t,f({},d[h],e.buffer[d[h]]),o,d[h],i)}k(b,rt)}for(h=0;h<c.length;h++)k(b,Wn(t,e,o,c[h],_));void 0!==u&&I(b,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?m=""===m?it:"".concat(it," ").concat(m):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(b,ct);else if(c.length>1){var ut=L(R(b,b.length-c.length),ct);B(ut,b,b.length-c.length,c.length),Nt(T,null,ut)}}var lt=Un(t,b,m,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(562).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)){t.indentationLvl+=2;try{var v=Q(i.get,l);if(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))}}catch(e){var d="<Inspection threw (".concat(vn(t,e,r),")>");u="".concat(p("[".concat(y,":"),g)," ").concat(d).concat(p("]",g))}t.indentationLvl-=2}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}},266(t,e,r){var n;function o(){return n=null!=n?n:r(27).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},588(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))}}},823(t){t.exports={CHAR_DOT:46,CHAR_FORWARD_SLASH:47,CHAR_BACKWARD_SLASH:92}},27(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(t,e,r){return e=l(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,u()?Reflect.construct(e,r||[],l(t).constructor):e.apply(t,r))}function u(){try{var t=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(t){}return(u=function(){return!!t})()}function l(t){return l=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)},l(t)}function f(t,e){return f=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__=e,t},f(t,e)}var s,y,p=r(746),g=p.ArrayIsArray,v=p.ArrayPrototypeIncludes,h=p.ArrayPrototypeIndexOf,d=p.ArrayPrototypeJoin,b=p.ArrayPrototypePush,m=p.ArrayPrototypeSlice,S=p.ArrayPrototypeSplice,P=p.Error,w=p.ErrorCaptureStackTrace,x=p.JSONStringify,A=p.ObjectDefineProperty,O=p.ReflectApply,j=p.RegExpPrototypeExec,_=p.SafeMap,E=p.SafeWeakMap,k=p.String,I=p.StringPrototypeEndsWith,R=p.StringPrototypeIncludes,L=p.StringPrototypeIndexOf,T=p.StringPrototypeSlice,B=p.StringPrototypeToLowerCase,z=p.Symbol,M=p.TypeError,C=z("kIsNodeError"),D=new _,N={},F=/^[A-Z][a-zA-Z0-9]*$/,W=["string","function","number","object","Function","Object","boolean","bigint","symbol"],H=new E,U=r(266),G=null;function V(t,e){var r=function(t){function r(){var t,n,o,a;(function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")})(this,r),n=t=c(this,r),a=e,(o=i(o="code"))in n?Object.defineProperty(n,o,{value:a,enumerable:!0,configurable:!0,writable:!0}):n[o]=a;for(var u=arguments.length,l=new Array(u),f=0;f<u;f++)l[f]=arguments[f];return A(t,"message",{__proto__:null,value:$(e,l,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&&f(t,e)}(r,t),n=r,(o=[{key:"toString",value:function(){return"".concat(this.name," [").concat(e,"]: ").concat(this.message)}}])&&a(n.prototype,o),u&&a(n,u),Object.defineProperty(n,"prototype",{writable:!1}),n;// removed by dead control flow
48298
- var n, o, u; }(t);return r}function Z(t,e,r){D.set(t,e);var n=V(r,t);N[t]=n}function $(t,e,r){var n=D.get(t);if("function"==typeof n)return U(n.length<=e.length,"Code: ".concat(t,"; The provided arguments length (").concat(e.length,") does not ")+"match the required ones (".concat(n.length,").")),O(n,r,e)}var Y=z("kEnhanceStackBeforeInspector");function q(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(k(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((G=G||r(622)).inspect(t,{depth:-1}));case"string":return t.length>28&&(t="".concat(T(t,0,25),"...")),-1===L(t,"'")?"type string ('".concat(t,"')"):"type string (".concat(x(t),")")}}function J(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(d(m(t,0,-1),", "),", ").concat(e," ").concat(t[t.length-1])}}t.exports={codes:N,determineSpecificType:q,E:Z,formatList:J,getMessage:$,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 O(t,this,n)}catch(t){throw P.stackTraceLimit&&w(t,e),t}}return e.withoutStackTrace=t,e},isStackOverflowError:function(t){if(void 0===y)try{var e=function(){e()};e()}catch(t){y=t.message,s=t.name}return t&&t.name===s&&t.message===y},kEnhanceStackBeforeInspector:Y,kIsNodeError:C,overrideStackTrace:H},Z("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)},P),Z("ERR_INVALID_ARG_TYPE",function(t,e,r){U("string"==typeof t,"'name' must be a string"),g(e)||(e=[e]);var o="The ";if(I(t," argument"))o+="".concat(t," ");else{var a=R(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;U("string"==typeof s,"All expected entries have to be of type string"),v(W,s)?b(c,B(s)):null!==j(F,s)?b(u,s):(U("object"!==s,'The value "object" should be written as "Object"'),b(l,s))}}catch(t){f.e(t)}finally{f.f()}if(u.length>0){var y=h(c,"object");-1!==y&&(S(c,y,1),b(u,"Object"))}return c.length>0&&(o+="".concat(c.length>1?"one of type":"of type"," ").concat(J(c,"or")),(u.length>0||l.length>0)&&(o+=" or ")),u.length>0&&(o+="an instance of ".concat(J(u,"or")),l.length>0&&(o+=" or ")),l.length>0&&(l.length>1?o+="one of ".concat(J(l,"or")):(B(l[0])!==l[0]&&(o+="an "),o+="".concat(l[0]))),o+". Received ".concat(q(r))},M)},287(t,e,r){var n=r(746),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeIncludes,i=n.StringPrototypeReplace,c=r(251),u=r(823).CHAR_FORWARD_SLASH,l=r(211),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}},48(t,e,r){var n=r(746),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,"")}}},326(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(746),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(916).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}},903(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(746).ArrayIsArray,a=r(27),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)}}},211(t,e,r){var n=r(746),o=n.StringPrototypeCharCodeAt,a=n.StringPrototypeLastIndexOf,i=n.StringPrototypeSlice,c=r(823),u=c.CHAR_DOT,l=c.CHAR_FORWARD_SLASH,f=r(903).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:"."}}},746(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},241(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(746),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
48299
- var t, e; }();t.exports={getProxyDetails:f.getProxyDetails.bind(f),Proxy:f}},251(t){t.exports=URL},916(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(746),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(241),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)}}}},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}(622)})());
48822
+ !function(t,e){ true?module.exports=e():0}(this,()=>(()=>{"use strict";var t={242(t,e,n){const r=n(714),{ArrayPrototypeMap:o}=r;e.h=class{hexSlice(t=0,e){return o(this.slice(t,e),t=>("00"+t.toString(16)).slice(-2)).join("")}}},702(t,e,n){const r=n(714),{AggregateError:o,AggregateErrorPrototype:i,Array:s,ArrayBuffer:l,ArrayBufferPrototype:c,ArrayIsArray:a,ArrayPrototype:u,ArrayPrototypeFilter:f,ArrayPrototypeForEach:p,ArrayPrototypeIncludes:y,ArrayPrototypeIndexOf:g,ArrayPrototypeJoin:h,ArrayPrototypeMap:d,ArrayPrototypePop:m,ArrayPrototypePush:b,ArrayPrototypePushApply:$,ArrayPrototypeSlice:S,ArrayPrototypeSort:x,ArrayPrototypeSplice:P,ArrayPrototypeUnshift:A,BigIntPrototypeValueOf:v,Boolean:_,BooleanPrototype:w,BooleanPrototypeValueOf:E,DataView:O,DataViewPrototype:L,Date:R,DatePrototype:k,DatePrototypeGetTime:I,DatePrototypeToISOString:j,DatePrototypeToString:B,Error:T,ErrorPrototype:z,ErrorPrototypeToString:M,Function:N,FunctionPrototype:C,FunctionPrototypeBind:F,FunctionPrototypeCall:D,FunctionPrototypeSymbolHasInstance:W,FunctionPrototypeToString:H,JSONStringify:U,Map:G,MapPrototype:V,MapPrototypeEntries:Z,MapPrototypeGetSize:Y,MathFloor:q,MathMax:J,MathMin:K,MathRound:Q,MathSqrt:X,MathTrunc:tt,Number:et,NumberIsFinite:nt,NumberIsNaN:rt,NumberParseFloat:ot,NumberParseInt:it,NumberPrototype:st,NumberPrototypeToString:lt,NumberPrototypeValueOf:ct,Object:at,ObjectAssign:ut,ObjectDefineProperty:ft,ObjectGetOwnPropertyDescriptor:pt,ObjectGetOwnPropertyNames:yt,ObjectGetOwnPropertySymbols:gt,ObjectGetPrototypeOf:ht,ObjectIs:dt,ObjectKeys:mt,ObjectPrototype:bt,ObjectPrototypeHasOwnProperty:$t,ObjectPrototypePropertyIsEnumerable:St,ObjectPrototypeToString:xt,ObjectSeal:Pt,ObjectSetPrototypeOf:At,Promise:vt,PromisePrototype:_t,RangeError:wt,RangeErrorPrototype:Et,ReflectApply:Ot,ReflectOwnKeys:Lt,RegExp:Rt,RegExpPrototype:kt,RegExpPrototypeExec:It,RegExpPrototypeSymbolReplace:jt,RegExpPrototypeSymbolSplit:Bt,RegExpPrototypeToString:Tt,SafeMap:zt,SafeSet:Mt,SafeStringIterator:Nt,Set:Ct,SetPrototype:Ft,SetPrototypeGetSize:Dt,SetPrototypeValues:Wt,String:Ht,StringPrototype:Ut,StringPrototypeCharCodeAt:Gt,StringPrototypeCodePointAt:Vt,StringPrototypeEndsWith:Zt,StringPrototypeIncludes:Yt,StringPrototypeIndexOf:qt,StringPrototypeLastIndexOf:Jt,StringPrototypeNormalize:Kt,StringPrototypePadEnd:Qt,StringPrototypePadStart:Xt,StringPrototypeRepeat:te,StringPrototypeReplace:ee,StringPrototypeReplaceAll:ne,StringPrototypeSlice:re,StringPrototypeSplit:oe,StringPrototypeStartsWith:ie,StringPrototypeToLowerCase:se,StringPrototypeValueOf:le,SymbolIterator:ce,SymbolPrototypeToString:ae,SymbolPrototypeValueOf:ue,SymbolToPrimitive:fe,SymbolToStringTag:pe,TypeError:ye,TypeErrorPrototype:ge,TypedArray:he,TypedArrayPrototype:de,TypedArrayPrototypeGetLength:me,TypedArrayPrototypeGetSymbolToStringTag:be,Uint8Array:$e,WeakMap:Se,WeakMapPrototype:xe,WeakSet:Pe,WeakSetPrototype:Ae,globalThis:ve,internalBinding:_e,uncurryThis:we}=r,{constants:{ALL_PROPERTIES:Ee,ONLY_ENUMERABLE:Oe,kPending:Le,kRejected:Re},getOwnNonIndexProperties:ke,getPromiseDetails:Ie,getProxyDetails:je,previewEntries:Be,getConstructorName:Te,getExternalValue:ze,Proxy:Me}=n(596),{customInspectSymbol:Ne,isError:Ce,join:Fe,removeColors:De}=n(992),{isStackOverflowError:We}=n(923),{isAsyncFunction:He,isGeneratorFunction:Ue,isAnyArrayBuffer:Ge,isArrayBuffer:Ve,isArgumentsObject:Ze,isBoxedPrimitive:Ye,isDataView:qe,isExternal:Je,isMap:Ke,isMapIterator:Qe,isModuleNamespaceObject:Xe,isNativeError:tn,isPromise:en,isSet:nn,isSetIterator:rn,isWeakMap:on,isWeakSet:sn,isRegExp:ln,isDate:cn,isTypedArray:an,isStringObject:un,isNumberObject:fn,isBooleanObject:pn,isBigIntObject:yn}=n(134),gn=n(146),{BuiltinModule:hn}=n(996),{validateObject:dn,validateString:mn,kValidateObjectAllowArray:bn}=n(63);let $n,Sn,xn;function Pn(t){return Sn=Sn||n(511),Sn.pathToFileURL(t).href}const An=new Mt(f(yt(ve),t=>null!==It(/^[A-Z][a-zA-Z0-9]+$/,t))),vn=t=>void 0===t&&void 0!==t,_n=Pt({showHidden:!1,depth:2,colors:!1,customInspect:!0,showProxy:!1,maxArrayLength:100,maxStringLength:1e4,breakLength:80,compact:3,sorted:!1,getters:!1,numericSeparator:!1}),wn=/[\x00-\x1f\x27\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/,En=/[\x00-\x1f\x27\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g,On=/[\x00-\x1f\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/,Ln=/[\x00-\x1f\x5c\x7f-\x9f]|[\ud800-\udbff](?![\udc00-\udfff])|(?<![\ud800-\udbff])[\udc00-\udfff]/g,Rn=/^[a-zA-Z_][a-zA-Z_0-9]*$/,kn=/^(0|[1-9][0-9]*)$/,In=/^ {4}at (?:[^/\\(]+ \(|)node:(.+):\d+:\d+\)?$/,jn=/^(\s+[^(]*?)\s*{/,Bn=/(\/\/.*?\n)|(\/\*(.|\n)*?\*\/)/g,Tn=["\\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"],zn=new Rt("[\\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");let Mn;function Nn(t,e){const n={budget:{},indentationLvl:0,seen:[],currentDepth:0,stylize:Zn,showHidden:_n.showHidden,depth:_n.depth,colors:_n.colors,customInspect:_n.customInspect,showProxy:_n.showProxy,maxArrayLength:_n.maxArrayLength,maxStringLength:_n.maxStringLength,breakLength:_n.breakLength,compact:_n.compact,sorted:_n.sorted,getters:_n.getters,numericSeparator:_n.numericSeparator};if(arguments.length>1)if(arguments.length>2&&(void 0!==arguments[2]&&(n.depth=arguments[2]),arguments.length>3&&void 0!==arguments[3]&&(n.colors=arguments[3])),"boolean"==typeof e)n.showHidden=e;else if(e){const t=mt(e);for(let r=0;r<t.length;++r){const o=t[r];$t(_n,o)||"stylize"===o?n[o]=e[o]:void 0===n.userOptions&&(n.userOptions=e)}}return n.colors&&(n.stylize=Vn),null===n.maxArrayLength&&(n.maxArrayLength=1/0),null===n.maxStringLength&&(n.maxStringLength=1/0),nr(n,t,0)}Nn.custom=Ne,ft(Nn,"defaultOptions",{__proto__:null,get:()=>_n,set:t=>(dn(t,"options"),ut(_n,t))});const Cn=39,Fn=49;function Dn(t,e){ft(Nn.colors,e,{__proto__:null,get(){return this[t]},set(e){this[t]=e},configurable:!0,enumerable:!1})}Nn.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,Cn],red:[31,Cn],green:[32,Cn],yellow:[33,Cn],blue:[34,Cn],magenta:[35,Cn],cyan:[36,Cn],white:[37,Cn],bgBlack:[40,Fn],bgRed:[41,Fn],bgGreen:[42,Fn],bgYellow:[43,Fn],bgBlue:[44,Fn],bgMagenta:[45,Fn],bgCyan:[46,Fn],bgWhite:[47,Fn],framed:[51,54],overlined:[53,55],gray:[90,Cn],redBright:[91,Cn],greenBright:[92,Cn],yellowBright:[93,Cn],blueBright:[94,Cn],magentaBright:[95,Cn],cyanBright:[96,Cn],whiteBright:[97,Cn],bgGray:[100,Fn],bgRedBright:[101,Fn],bgGreenBright:[102,Fn],bgYellowBright:[103,Fn],bgBlueBright:[104,Fn],bgMagentaBright:[105,Fn],bgCyanBright:[106,Fn],bgWhiteBright:[107,Fn]},Dn("gray","grey"),Dn("gray","blackBright"),Dn("bgGray","bgGrey"),Dn("bgGray","bgBlackBright"),Dn("dim","faint"),Dn("strikethrough","crossedout"),Dn("strikethrough","strikeThrough"),Dn("strikethrough","crossedOut"),Dn("hidden","conceal"),Dn("inverse","swapColors"),Dn("inverse","swapcolors"),Dn("doubleunderline","doubleUnderline"),Nn.styles=ut({__proto__:null},{special:"cyan",number:"yellow",bigint:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",symbol:"green",date:"magenta",regexp:function t(e){let n="",r=0,o=0,i=!1;const s=(t.colors?.length>0?t.colors:Wn).reduce((t,e)=>{const n=Nn.colors[e];return n&&t.push([`[${n[0]}m`,`[${n[1]}m`]),t},[]);function l(t,n,i=1){let s="";for(r++;r<e.length&&e[r]!==n;)s+=e[r++];r<e.length?(o-=i,c(t),a(s,1,1),c(n),o+=i):a(t,1,-s.length)}const c=t=>{const e=o%s.length,r=s[e]??s[0];return n+=r[0]+t+r[1],e};function a(t,e,n){o+=e,c(t),o-=e,r+=n}for(c("/"),o++,r=1;r<e.length;){const t=e[r];if(i)if("\\"===t){let t="\\";if(r++,r<e.length){t+=e[r++];const n=t[1];if("u"===n&&"{"===e[r]){l(`${t}{`,"}",0);continue}if(("p"===n||"P"===n)&&"{"===e[r]){l(`${t}{`,"}",0);continue}"x"===t[1]&&(t+=e.slice(r,r+2),r+=2)}c(t)}else"]"===t?(o--,c("]"),r++,i=!1):"-"===t&&"["!==e[r-1]&&r+1<e.length&&"]"!==e[r+1]?a("-",1,1):(c(t),r++);else if("["===t)c("["),o++,r++,i=!0;else if("("===t){if(c("("),o++,r++,r<e.length&&"?"===e[r]){r++;const t=r<e.length?e[r]:"";if(":"===t||"="===t||"!"===t)a(`?${t}`,-1,1);else{const n=r+1<e.length?e[r+1]:"";if("<"!==t||"="!==n&&"!"!==n)if("<"===t){r++;const t=r;for(;r<e.length&&">"!==e[r];)r++;const n=e.slice(t,r);r<e.length&&">"===e[r]?(o--,c("?<"),a(n,1,0),c(">"),o++,r++):(a("?<",-1,0),c(n))}else c("?");else a(`?<${n}`,-1,2)}}}else if(")"===t)o--,c(")"),r++;else if("\\"===t){let t="\\";if(r++,r<e.length){t+=e[r++];const n=t[1];if(r<e.length){if("u"===n&&"{"===e[r]){l(`${t}{`,"}",0);continue}if("x"===n)t+=e.slice(r,r+2),r+=2;else if(n>="0"&&n<="9")for(;r<e.length&&e[r]>="0"&&e[r]<="9";)t+=e[r++];else{if("k"===n&&"<"===e[r]){l(`${t}<`,">");continue}if(("p"===n||"P"===n)&&"{"===e[r]){l(`${t}{`,"}",0);continue}}}}a(t,1,0)}else if("|"===t||"+"===t||"*"===t||"?"===t||","===t||"^"===t||"$"===t)a(t,3,1);else if("{"===t){r++;let t="";for(;r<e.length&&e[r]>="0"&&e[r]<="9";)t+=e[r++];if(t&&(c("{"),o++,a(t,1,0)),r<e.length)if(","===e[r])t||(c("{"),o++),c(","),r++;else if(!t){o+=1,c("{"),o-=1;continue}let n="";for(;r<e.length&&e[r]>="0"&&e[r]<="9";)n+=e[r++];n&&a(n,1,0),r<e.length&&"}"===e[r]&&(o--,c("}"),r++),r<e.length&&"?"===e[r]&&a("?",3,1)}else if("."===t)a(t,2,1);else{if("/"===t)break;a(t,1,1)}}return a("/",-1,1),r<e.length&&c(e.slice(r)),n},module:"underline"}),Nn.styles.regexp.colors=["green","red","yellow","cyan","magenta"];const Wn=Nn.styles.regexp.colors.slice();function Hn(t,e){return-1===e?`"${t}"`:-2===e?`\`${t}\``:`'${t}'`}function Un(t){const e=Gt(t);return Tn.length>e?Tn[e]:`\\u${lt(e,16)}`}function Gn(t){let e=wn,n=En,r=39;if(Yt(t,"'")&&(Yt(t,'"')?Yt(t,"`")||Yt(t,"${")||(r=-2):r=-1,39!==r&&(e=On,n=Ln)),t.length<5e3&&null===It(e,t))return Hn(t,r);if(t.length>100)return Hn(t=jt(n,t,Un),r);let o="",i=0;for(let e=0;e<t.length;e++){const n=Gt(t,e);if(n===r||92===n||n<32||n>126&&n<160)o+=i===e?Tn[n]:`${re(t,i,e)}${Tn[n]}`,i=e+1;else if(n>=55296&&n<=57343){if(n<=56319&&e+1<t.length){const n=Gt(t,e+1);if(n>=56320&&n<=57343){e++;continue}}o+=`${re(t,i,e)}\\u${lt(n,16)}`,i=e+1}}return i!==t.length&&(o+=re(t,i)),Hn(o,r)}function Vn(t,e){const n=Nn.styles[e];if(void 0!==n){const e=Nn.colors[n];if(void 0!==e)return`[${e[0]}m${t}[${e[1]}m`;if("function"==typeof n)return n(t)}return t}function Zn(t){return t}function Yn(){return[]}function qn(t,e){try{return t instanceof e}catch{return!1}}const Jn=(new zt).set(u,{name:"Array",constructor:s}).set(c,{name:"ArrayBuffer",constructor:l}).set(C,{name:"Function",constructor:N}).set(V,{name:"Map",constructor:G}).set(Ft,{name:"Set",constructor:Ct}).set(bt,{name:"Object",constructor:at}).set(de,{name:"TypedArray",constructor:he}).set(kt,{name:"RegExp",constructor:Rt}).set(k,{name:"Date",constructor:R}).set(L,{name:"DataView",constructor:O}).set(z,{name:"Error",constructor:T}).set(i,{name:"AggregateError",constructor:o}).set(Et,{name:"RangeError",constructor:wt}).set(ge,{name:"TypeError",constructor:ye}).set(w,{name:"Boolean",constructor:_}).set(st,{name:"Number",constructor:et}).set(Ut,{name:"String",constructor:Ht}).set(_t,{name:"Promise",constructor:vt}).set(xe,{name:"WeakMap",constructor:Se}).set(Ae,{name:"WeakSet",constructor:Pe});function Kn(t,e,n,r){let o;const i=t;for(;t||vn(t);){const s=Jn.get(t);if(void 0!==s){const{name:l,constructor:c}=s;if(W(c,i))return void 0!==r&&o!==t&&Qn(e,i,o||i,n,r),l}const l=pt(t,"constructor");if(void 0!==l&&"function"==typeof l.value&&""!==l.value.name&&qn(i,l.value))return void 0===r||o===t&&An.has(l.value.name)||Qn(e,i,o||i,n,r),Ht(l.value.name);t=ht(t),void 0===o&&(o=t)}if(null===o)return null;const s=Te(i);if(n>e.depth&&null!==e.depth)return`${s} <Complex prototype>`;const l=Kn(o,e,n+1,r);return null===l?`${s} <${Nn(o,{...e,customInspect:!1,depth:-1})}>`:`${s} <${l}>`}function Qn(t,e,n,r,o){let i,s,l=0;do{if(0!==l||e===n){if(null===(n=ht(n)))return;const t=pt(n,"constructor");if(void 0!==t&&"function"==typeof t.value&&An.has(t.value.name))return}0===l?s=new Mt:p(i,t=>s.add(t)),i=Lt(n),b(t.seen,e);for(const c of i){if("constructor"===c||$t(e,c)||0!==l&&s.has(c))continue;const i=pt(n,c);if("function"==typeof i.value)continue;const a=Or(t,n,r,c,0,i,e);t.colors?b(o,`${a}`):b(o,a)}m(t.seen)}while(3!==++l)}function Xn(t,e,n,r=""){if(null===t)return""!==e&&n!==e?`[${n}${r}: null prototype] [${e}] `:`[${n}${r}: null prototype] `;let o=`${t}${r} `;if(""!==e){const n=t.indexOf(e);if(-1===n)o+=`[${e}] `;else{const r=n+e.length;r!==t.length&&t[r]===t[r].toLowerCase()&&(o+=`[${e}] `)}}return o}function tr(t,e){let n;const r=gt(t);if(e)n=yt(t),0!==r.length&&$(n,r);else{try{n=mt(t)}catch(e){gn(tn(e)&&"ReferenceError"===e.name&&Xe(t)),n=yt(t)}0!==r.length&&$(n,f(r,e=>St(t,e)))}return n}function er(t,e,n){let r="";return null===e&&(r=Te(t),r===n&&(r="Object")),Xn(e,n,r)}function nr(t,e,o,i){if("object"!=typeof e&&"function"!=typeof e&&!vn(e))return pr(t.stylize,e,t);if(null===e)return t.stylize("null","null");const s=e,l=je(e,!!t.showProxy);if(void 0!==l){if(null===l||null===l[0])return t.stylize("<Revoked Proxy>","special");if(t.showProxy)return function(t,e,n){if(n>t.depth&&null!==t.depth)return t.stylize("Proxy [Array]","special");n+=1,t.indentationLvl+=2;const r=[nr(t,e[0],n),nr(t,e[1],n)];return t.indentationLvl-=2,Rr(t,r,"",["Proxy [","]"],2,n)}(t,l,o);e=l}if(t.customInspect){const n=e[Ne];if("function"==typeof n&&n!==Nn&&pt(e,"constructor")?.value?.prototype!==e){const e=null===t.depth?null:t.depth-o,r=void 0!==l||!W(at,s),i=D(n,s,e,function(t,e){const n={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){At(n,null);for(const t of mt(n))"object"!=typeof n[t]&&"function"!=typeof n[t]||null===n[t]||delete n[t];n.stylize=At((e,n)=>{let r;try{r=`${t.stylize(e,n)}`}catch{}return"string"!=typeof r?e:r},null)}return n}(t,r),Nn);if(i!==s)return"string"!=typeof i?nr(t,i,o):ne(i,"\n",`\n${te(" ",t.indentationLvl)}`)}}if(t.seen.includes(e)){let n=1;return void 0===t.circular?(t.circular=new zt,t.circular.set(e,n)):(n=t.circular.get(e),void 0===n&&(n=t.circular.size+1,t.circular.set(e,n))),t.stylize(`[Circular *${n}]`,"special")}return function(t,e,o,i){let s,l;t.showHidden&&(o<=t.depth||null===t.depth)&&(l=[]);const c=Kn(e,t,o,l);void 0!==l&&0===l.length&&(l=void 0);let u="";try{u=e[pe]}catch{}("string"!=typeof u||""!==u&&(t.showHidden?$t:St)(e,pe))&&(u="");let f,p,d="",m=Yn,_=!0;const w=t.showHidden?Ee:Oe;let O,L,R=0;if(ce in e||null===c)if(_=!1,a(e)){const t="Array"!==c||""!==u?Xn(c,u,"Array",`(${e.length})`):"";if(s=ke(e,w),f=[`${t}[`,"]"],0===e.length&&0===s.length&&void 0===l)return`${f[0]}]`;R=2,m=dr}else if(nn(e)){const n=Dt(e),r=Xn(c,u,"Set",`(${n})`);if(s=tr(e,t.showHidden),m=F(br,null,null!==c?e:Wt(e)),0===n&&0===s.length&&void 0===l)return`${r}{}`;f=[`${r}{`,"}"]}else if(Ke(e)){const n=Y(e),r=Xn(c,u,"Map",`(${n})`);if(s=tr(e,t.showHidden),m=F($r,null,null!==c?e:Z(e)),0===n&&0===s.length&&void 0===l)return`${r}{}`;f=[`${r}{`,"}"]}else if(an(e)){s=ke(e,w);let n=e,o="";null===c&&(o=be(e),n=new r[o](e));const l=me(e);if(f=[`${Xn(c,u,o,`(${l})`)}[`,"]"],0===e.length&&0===s.length&&!t.showHidden)return`${f[0]}]`;m=F(mr,null,n,l),R=2,t.showHidden&&(O=["BYTES_PER_ELEMENT","length","byteLength","byteOffset","buffer"],i=!0)}else Qe(e)?(s=tr(e,t.showHidden),f=rr("Map",u),m=F(_r,null,f)):rn(e)?(s=tr(e,t.showHidden),f=rr("Set",u),m=F(_r,null,f)):_=!0;if(_)if(s=tr(e,t.showHidden),f=["{","}"],"function"==typeof e){if(d=function(t,e,n,r){const o=H(e);if(ie(o,"class")&&"}"===o[o.length-1]){const t=re(o,5,-1),i=qt(t,"{");if(-1!==i&&(!Yt(re(t,0,i),"(")||null!==It(jn,jt(Bn,t))))return function(t,e,n){let r=`class ${$t(t,"name")&&t.name||"(anonymous)"}`;if("Function"!==e&&null!==e&&(r+=` [${e}]`),""!==n&&e!==n&&(r+=` [${n}]`),null!==e){const e=ht(t).name;e&&(r+=` extends ${e}`)}else r+=" extends [null prototype]";return`[${r}]`}(e,n,r)}let i="Function";Ue(e)&&(i=`Generator${i}`),He(e)&&(i=`Async${i}`);let s=`[${i}`;return null===n&&(s+=" (null prototype)"),""===e.name?s+=" (anonymous)":s+=`: ${"string"==typeof e.name?e.name:nr(t,e.name)}`,s+="]",n!==i&&null!==n&&(s+=` ${n}`),""!==r&&n!==r&&(s+=` [${r}]`),s}(t,e,c,u),0===s.length&&void 0===l)return t.stylize(d,"special")}else if("Object"===c){if(Ze(e)?f[0]="[Arguments] {":""!==u&&(f[0]=`${Xn(c,u,"Object")}{`),0===s.length&&void 0===l)return`${f[0]}}`}else if(ln(e)){d=Tt(null!==c?e:new Rt(e));const n=Xn(c,u,"RegExp");if("RegExp "!==n&&(d=`${n}${d}`),d=t.stylize(d,"regexp"),0===s.length&&void 0===l||o>t.depth&&null!==t.depth)return d}else if(cn(e)){d=rt(I(e))?B(e):j(e);const n=Xn(c,u,"Date");if("Date "!==n&&(d=`${n}${d}`),0===s.length&&void 0===l)return t.stylize(d,"date")}else if(Ce(e)){if(d=function(t,e,n,r,o){let i,s,l;try{l=ir(r,t)}catch{return xt(t)}let c=!1;try{i=t.message}catch{c=!0}let u=!1;try{s=t.name}catch{u=!0}if(!r.showHidden&&0!==o.length){const t=g(o,"stack");if(-1!==t&&P(o,t,1),!c){const t=g(o,"message");-1===t||"string"==typeof i&&!Yt(l,i)||P(o,t,1)}if(!u){const t=g(o,"name");-1===t||"string"==typeof s&&!Yt(l,s)||P(o,t,1)}}s=null==s?"Error":s,!$t(t,"cause")||0!==o.length&&y(o,"cause")||b(o,"cause");try{const e=t.errors;!a(e)||!$t(t,"errors")||0!==o.length&&y(o,"errors")||b(o,"errors")}catch{}l=function(t,e,n,r){let o=n.length;if("string"!=typeof n&&(t=ee(t,`${n}`,`${n} [${re(Xn(e,r,"Error"),0,-1)}]`)),null===e||Zt(n,"Error")&&ie(t,n)&&(t.length===o||":"===t[o]||"\n"===t[o])){let i="Error";if(null===e){const e=It(/^([A-Z][a-z_ A-Z0-9[\]()-]+)(?::|\n {4}at)/,t)||It(/^([a-z_A-Z0-9-]*Error)$/,t);i=e?.[1]||"",o=i.length,i=i||"Error"}const s=re(Xn(e,r,i),0,-1);n!==s&&(t=Yt(s,n)?0===o?`${s}: ${t}`:`${s}${re(t,o)}`:`${s} [${n}]${re(t,o)}`)}return t}(l,e,s,n);let f=i&&qt(l,i)||-1;-1!==f&&(f+=i.length);const p=qt(l,"\n at",f);if(-1===p)l=`[${l}]`;else{let e=re(l,0,p);const n=function(t,e,n){const r=oe(n,"\n");let o;try{({cause:o}=e)}catch{}if(null!=o&&Ce(o)){const e=ir(t,o),n=qt(e,"\n at");if(-1!==n){const o=oe(re(e,n+1),"\n"),{0:i,1:s}=or(r,o);if(i>0){const e=i-2,n=` ... ${e} lines matching cause stack trace ...`;r.splice(s+1,e,t.stylize(n,"undefined"))}}}if(r.length>10){const e=function(t){const e=[],n=new zt;for(let e=0;e<t.length;e++){const r=n.get(t[e]);void 0===r?n.set(t[e],[e]):r[r.length]=e}if(t.length-n.size<=3)return e;for(let r=0;r<t.length-3;r++){const o=n.get(t[r]);if(1===o.length||o[o.length-1]===r)continue;const i=o.indexOf(r)+1;if(i===o.length)continue;let s,l=o[o.length-1]-r;if(l<3)continue;if(i+1<o.length){let t=0;for(let e=i;e<o.length;e++){let n=o[e]-r;for(;0!==n;){const e=t%n;0!==t&&(s=s||new Mt,s.add(t)),t=n,n=e}if(1===t)break}l=t,s&&(s.delete(l),s=[...s])}let c=l,a=0,u=0;for(let e=r+l;;e+=l){let n=0;for(let o=0;o<l&&t[r+o]===t[e+o];o++)n++;if(n===l)u++;else{if(!s?.length)break;0!==u&&c*a<l*u&&(c=l,a=u),l=s.pop(),e=r,u=0}}0!==a&&c*a>=l*u&&(l=c,u=a),u*l>=3&&(e.push(r+l,l,u),r+=l*(u+1)-1)}return e}(r);for(let n=e.length-3;n>=0;n-=3){const o=e[n],i=e[n+1],s=e[n+2],l=` ... collapsed ${i*s} duplicate lines matching above `+(s>1?`${i} lines ${s} times...`:"lines ...");r.splice(o,i*s,t.stylize(l,"undefined"))}}return r}(r,t,re(l,p+1));if(r.colors){const t=function(){let t;try{t=process.cwd()}catch{return}return t}();let o;for(let i of n){const n=It(In,i);if(null!==n&&hn.exists(n[1]))e+=`\n${r.stylize(i,"undefined")}`;else{if(e+="\n",i=sr(r,i),void 0!==t){let e=lr(r,i,t);e===i&&(o=o||Pn(t),e=lr(r,i,o)),i=e}e+=i}}}else e+=`\n${h(n,"\n")}`;l=e}if(0!==r.indentationLvl){const t=te(" ",r.indentationLvl);l=ne(l,"\n",`\n${t}`)}return l}(e,c,u,t,s),0===s.length&&void 0===l)return d}else if(Ge(e)){const n=Xn(c,u,Ve(e)?"ArrayBuffer":"SharedArrayBuffer");if(void 0===i)m=hr;else if(0===s.length&&void 0===l)return n+`{ [byteLength]: ${ur(t.stylize,e.byteLength,!1)} }`;f[0]=`${n}{`,O=["byteLength"]}else if(qe(e))f[0]=`${Xn(c,u,"DataView")}{`,O=["byteLength","byteOffset","buffer"];else if(en(e))f[0]=`${Xn(c,u,"Promise")}{`,m=wr;else if(sn(e))f[0]=`${Xn(c,u,"WeakSet")}{`,m=t.showHidden?Ar:Pr;else if(on(e))f[0]=`${Xn(c,u,"WeakMap")}{`,m=t.showHidden?vr:Pr;else if(Xe(e))f[0]=`${Xn(c,u,"Module")}{`,m=yr.bind(null,s);else if(Ye(e)){if(d=function(t,e,n,r,o){let i,s;fn(t)?(i=ct,s="Number"):un(t)?(i=le,s="String",n.splice(0,t.length)):pn(t)?(i=E,s="Boolean"):yn(t)?(i=v,s="BigInt"):(i=ue,s="Symbol");let l=`[${s}`;return s!==r&&(l+=null===r?" (null prototype)":` (${r})`),l+=`: ${pr(Zn,i(t),e)}]`,""!==o&&o!==r&&(l+=` [${o}]`),0!==n.length||e.stylize===Zn?l:e.stylize(l,se(s))}(e,t,s,c,u),0===s.length&&void 0===l)return d}else if(!function(t){return Sn=Sn||n(511),"string"==typeof t.href&&t instanceof Sn.URL}(e)||o>t.depth&&null!==t.depth){if(0===s.length&&void 0===l){if(Je(e)){const n=ze(e).toString(16);return t.stylize(`[External: ${n}]`,"special")}return`${er(e,c,u)}{}`}f[0]=`${er(e,c,u)}{`}else if(s=function(t){return xn=xn||gt(new Sn.URL("http://user:pass@localhost:8080/?foo=bar#baz")),t.filter(t=>-1===xn[t])}(s),d=e.href,0===s.length&&void 0===l)return d;if(o>t.depth&&null!==t.depth){let n=re(er(e,c,u),0,-1);return null!==c&&(n=`[${n}]`),t.stylize(n,"special")}o+=1,t.seen.push(e),t.currentDepth=o;const k=t.indentationLvl;try{if(L=m(t,e,o),void 0!==O)for(p=0;p<O.length;p++){let n;try{n=Er(t,e,o,O[p],i)}catch{n=Er(t,{[O[p]]:e.buffer[O[p]]},o,O[p],i)}b(L,n)}for(p=0;p<s.length;p++)b(L,Or(t,e,o,s[p],R));void 0!==l&&$(L,l)}catch(n){if(!We(n))throw n;return function(t,e,n,r){return t.seen.pop(),t.indentationLvl=r,t.stylize(`[${n}: Inspection interrupted prematurely. Maximum call stack size exceeded.]`,"special")}(t,0,re(er(e,c,u),0,-1),k)}if(void 0!==t.circular){const n=t.circular.get(e);if(void 0!==n){const e=t.stylize(`<ref *${n}>`,"special");!0!==t.compact?d=""===d?e:`${e} ${d}`:f[0]=`${e} ${f[0]}`}}if(t.seen.pop(),t.sorted){const e=!0===t.sorted?void 0:t.sorted;if(0===R)x(L,e);else if(s.length>1){const t=x(S(L,L.length-s.length),e);A(t,L,L.length-s.length,s.length),Ot(P,null,t)}}const T=Rr(t,L,d,f,R,o,e),z=(t.budget[t.indentationLvl]||0)+T.length;return t.budget[t.indentationLvl]=z,z>2**27&&(t.depth=-1),T}(t,e,o,i)}function rr(t,e){return e!==`${t} Iterator`&&(""!==e&&(e+="] ["),e+=`${t} Iterator`),[`[${e}] {`,"}"]}function or(t,e){for(let n=0;n<t.length-3;n++){const r=g(e,t[n]);if(-1!==r){const o=e.length-r;if(o>3){let i=1;const s=K(t.length-n,o);for(;s>i&&t[n+i]===e[r+i];)i++;if(i>3)return[i,n]}}}return[0,0]}function ir(t,e){let n;try{n=e.stack}catch{}if(n){if("string"==typeof n)return n;t.seen.push(e),t.indentationLvl+=4;const r=nr(t,n);return t.indentationLvl-=4,t.seen.pop(),`${M(e)}\n ${r}`}return M(e)}function sr(t,e){let n="",r=0,o=0;for(;;){const i=qt(e,"node_modules",o);if(-1===i)break;const s=e[i-1],l=e[i+12];if("/"!==l&&"\\"!==l||"/"!==s&&"\\"!==s){o=i+1;continue}const c=i+13;n+=re(e,r,c);let a=qt(e,s,c);"@"===e[c]&&(a=qt(e,s,a+1));const u=re(e,c,a);n+=t.stylize(u,"module"),r=a,o=a}return 0!==r&&(e=n+re(e,r)),e}function lr(t,e,n){let r=qt(e,n),o="",i=n.length;if(-1!==r){"file://"===re(e,r-7,r)&&(i+=7,r-=7);const n="("===e[r-1]?r-1:r,s=n!==r&&Zt(e,")")?-1:e.length,l=r+i+1,c=re(e,n,l);o+=re(e,0,n),o+=t.stylize(c,"undefined"),o+=re(e,l,s),-1===s&&(o+=t.stylize(")","undefined"))}else o+=e;return o}function cr(t){let e="",n=t.length;gn(0!==n);const r="-"===t[0]?1:0;for(;n>=r+4;n-=3)e=`_${re(t,n-3,n)}${e}`;return n===t.length?t:`${re(t,0,n)}${e}`}const ar=t=>`... ${t} more item${t>1?"s":""}`;function ur(t,e,n){if(!n)return dt(e,-0)?t("-0","number"):t(`${e}`,"number");const r=Ht(e);if(tt(e)===e)return!nt(e)||Yt(r,"e")?t(r,"number"):t(cr(r),"number");if(rt(e))return t(r,"number");const o=qt(r,"."),i=re(r,0,o),s=re(r,o+1);return t(`${cr(i)}.${function(t){let e="",n=0;for(;n<t.length-3;n+=3)e+=`${re(t,n,n+3)}_`;return 0===n?t:`${e}${re(t,n)}`}(s)}`,"number")}function fr(t,e,n){const r=Ht(e);return t(n?`${cr(r)}n`:`${r}n`,"bigint")}function pr(t,e,n){if("string"==typeof e){let r="";if(e.length>n.maxStringLength){const t=e.length-n.maxStringLength;e=re(e,0,n.maxStringLength),r=`... ${t} more character${t>1?"s":""}`}return!0!==n.compact&&e.length>16&&e.length>n.breakLength-n.indentationLvl-4?h(d(Bt(/(?<=\n)/,e),e=>t(Gn(e),"string")),` +\n${te(" ",n.indentationLvl+2)}`)+r:t(Gn(e),"string")+r}return"number"==typeof e?ur(t,e,n.numericSeparator):"bigint"==typeof e?fr(t,e,n.numericSeparator):"boolean"==typeof e?t(`${e}`,"boolean"):void 0===e?t("undefined","undefined"):t(ae(e),"symbol")}function yr(t,e,n,r){const o=new s(t.length);for(let i=0;i<t.length;i++)try{o[i]=Or(e,n,r,t[i],0)}catch(n){gn(tn(n)&&"ReferenceError"===n.name);const s={[t[i]]:""};o[i]=Or(e,s,r,t[i],0);const l=Jt(o[i]," ");o[i]=re(o[i],0,l+1)+e.stylize("<uninitialized>","special")}return t.length=0,o}function gr(t,e,n,r,o,i){const s=mt(e);let l=i;for(;i<s.length&&o.length<r;i++){const c=s[i],a=+c;if(a>2**32-2)break;if(`${l}`!==c){if(null===It(kn,c))break;const e=a-l,n=`<${e} empty item${e>1?"s":""}>`;if(b(o,t.stylize(n,"undefined")),l=a,o.length===r)break}b(o,Or(t,e,n,c,1)),l++}const c=e.length-l;if(o.length!==r){if(c>0){const e=`<${c} empty item${c>1?"s":""}>`;b(o,t.stylize(e,"undefined"))}}else c>0&&b(o,ar(c));return o}function hr(t,e){let r;try{r=new $e(e)}catch{return[t.stylize("(detached)","special")]}void 0===$n&&($n=we(n(242).h.prototype.hexSlice));const o=$n(r,0,K(t.maxArrayLength,r.length));let i="",s=0;for(;s<o.length-2;s+=2)i+=`${o[s]}${o[s+1]} `;o.length>0&&(i+=`${o[s]}${o[s+1]}`);const l=r.length-t.maxArrayLength;return l>0&&(i+=` ... ${l} more byte${l>1?"s":""}`),[`${t.stylize("[Uint8Contents]","special")}: <${i}>`]}function dr(t,e,n){const r=e.length,o=K(J(0,t.maxArrayLength),r),i=r-o,s=[];for(let r=0;r<o;r++){const i=pt(e,r);if(void 0===i)return gr(t,e,n,o,s,r);b(s,Or(t,e,n,r,1,i))}return i>0&&b(s,ar(i)),s}function mr(t,e,n){const r=K(J(0,n.maxArrayLength),e),o=t.length-r,i=new s(r),l=t.length>0&&"number"==typeof t[0]?ur:fr;for(let e=0;e<r;++e)i[e]=l(n.stylize,t[e],n.numericSeparator);return o>0&&(i[r]=ar(o)),i}function br(t,e,n,r){const o=t.size,i=K(J(0,e.maxArrayLength),o),s=o-i,l=[];e.indentationLvl+=2;let c=0;for(const n of t){if(c>=i)break;b(l,nr(e,n,r)),c++}return s>0&&b(l,ar(s)),e.indentationLvl-=2,l}function $r(t,e,n,r){const o=t.size,i=K(J(0,e.maxArrayLength),o),s=o-i,l=[];e.indentationLvl+=2;let c=0;for(const{0:n,1:o}of t){if(c>=i)break;b(l,`${nr(e,n,r)} => ${nr(e,o,r)}`),c++}return s>0&&b(l,ar(s)),e.indentationLvl-=2,l}function Sr(t,e,n,r){const o=J(t.maxArrayLength,0),i=K(o,n.length),l=new s(i);t.indentationLvl+=2;for(let r=0;r<i;r++)l[r]=nr(t,n[r],e);t.indentationLvl-=2,0!==r||t.sorted||x(l);const c=n.length-i;return c>0&&b(l,ar(c)),l}function xr(t,e,n,r){const o=J(t.maxArrayLength,0),i=n.length/2,l=i-o,c=K(o,i),a=new s(c);let u=0;if(t.indentationLvl+=2,0===r){for(;u<c;u++){const r=2*u;a[u]=`${nr(t,n[r],e)} => ${nr(t,n[r+1],e)}`}t.sorted||x(a)}else for(;u<c;u++){const r=2*u,o=[nr(t,n[r],e),nr(t,n[r+1],e)];a[u]=Rr(t,o,"",["[","]"],2,e)}return t.indentationLvl-=2,l>0&&b(a,ar(l)),a}function Pr(t){return[t.stylize("<items unknown>","special")]}function Ar(t,e,n){return Sr(t,n,Be(e),0)}function vr(t,e,n){return xr(t,n,Be(e),0)}function _r(t,e,n,r){const{0:o,1:i}=Be(n,!0);return i?(t[0]=jt(/ Iterator] {$/,t[0]," Entries] {"),xr(e,r,o,2)):Sr(e,r,o,1)}function wr(t,e,n){let r;const{0:o,1:i}=Ie(e);if(o===Le)r=[t.stylize("<pending>","special")];else{t.indentationLvl+=2;const e=nr(t,i,n);t.indentationLvl-=2,r=[o===Re?`${t.stylize("<rejected>","special")} ${e}`:e]}return r}function Er(t,e,n,r,o){t.indentationLvl+=2;const i=nr(t,e[r],n,o);return t.indentationLvl-=2,`${t.stylize(`[${r}]`,"string")}: ${i}`}function Or(t,e,n,r,o,i,s=e){let l,c,a=" ";if(void 0!==(i=i||pt(e,r)).value){const e=!0!==t.compact||0!==o?2:3;t.indentationLvl+=e,c=nr(t,i.value,n),3===e&&t.breakLength<Mn(c,t.colors)&&(a=`\n${te(" ",t.indentationLvl)}`),t.indentationLvl-=e}else if(void 0!==i.get){const e=void 0!==i.set?"Getter/Setter":"Getter",r=t.stylize,o="special";if(t.getters&&(!0===t.getters||"get"===t.getters&&void 0===i.set||"set"===t.getters&&void 0!==i.set)){t.indentationLvl+=2;try{const l=D(i.get,s);if(null===l)c=`${r(`[${e}:`,o)} ${r("null","null")}${r("]",o)}`;else if("object"==typeof l)c=`${r(`[${e}]`,o)} ${nr(t,l,n)}`;else{const n=pr(r,l,t);c=`${r(`[${e}:`,o)} ${n}${r("]",o)}`}}catch(i){const s=`<Inspection threw (${nr(t,i,n)})>`;c=`${r(`[${e}:`,o)} ${s}${r("]",o)}`}t.indentationLvl-=2}else c=t.stylize(`[${e}]`,o)}else c=void 0!==i.set?t.stylize("[Setter]","special"):t.stylize("undefined","undefined");if(1===o)return c;if("symbol"==typeof r){const e=jt(En,ae(r),Un);l=t.stylize(e,"symbol")}else l=null!==It(Rn,r)?"__proto__"===r?"['__proto__']":t.stylize(r,"name"):t.stylize(Gn(r),"string");return!1===i.enumerable&&(l=`[${l}]`),`${l}:${a}${c}`}function Lr(t,e,n,r){let o=e.length+n;if(o+e.length>t.breakLength)return!1;for(let n=0;n<e.length;n++)if(t.colors?o+=De(e[n]).length:o+=e[n].length,o>t.breakLength)return!1;return""===r||!Yt(r,"\n")}function Rr(t,e,n,r,o,i,l){if(!0!==t.compact){if("number"==typeof t.compact&&t.compact>=1){const c=e.length;if(2===o&&c>6&&(e=function(t,e,n){let r=0,o=0,i=0,l=e.length;t.maxArrayLength<e.length&&l--;const c=new s(l);for(;i<l;i++){const n=Mn(e[i],t.colors);c[i]=n,r+=n+2,o<n&&(o=n)}const a=o+2;if(3*a+t.indentationLvl<t.breakLength&&(r/a>5||o<=6)){const o=2.5,i=X(a-r/e.length),s=J(a-3-i,1),u=K(Q(X(o*s*l)/s),q((t.breakLength-t.indentationLvl)/a),4*t.compact,15);if(u<=1)return e;const f=[],p=[];for(let t=0;t<u;t++){let n=0;for(let r=t;r<e.length;r+=u)c[r]>n&&(n=c[r]);n+=2,p[t]=n}let y=Xt;if(void 0!==n)for(let t=0;t<e.length;t++)if("number"!=typeof n[t]&&"bigint"!=typeof n[t]){y=Qt;break}for(let t=0;t<l;t+=u){const n=K(t+u,l);let r="",o=t;for(;o<n-1;o++){const n=p[o-t]+e[o].length-c[o];r+=y(`${e[o]}, `,n," ")}if(y===Xt){const n=p[o-t]+e[o].length-c[o]-2;r+=Xt(e[o],n," ")}else r+=e[o];b(f,r)}t.maxArrayLength<e.length&&b(f,e[l]),e=f}return e}(t,e,l)),t.currentDepth-i<t.compact&&c===e.length&&Lr(t,e,e.length+t.indentationLvl+r[0].length+n.length+10,n)){const t=Fe(e,", ");if(!Yt(t,"\n"))return`${n?`${n} `:""}${r[0]} ${t} ${r[1]}`}}const c=`\n${te(" ",t.indentationLvl)}`;return`${n?`${n} `:""}${r[0]}${c} ${Fe(e,`,${c} `)}${c}${r[1]}`}if(Lr(t,e,0,n))return`${r[0]}${n?` ${n}`:""} ${Fe(e,", ")} `+r[1];const c=te(" ",t.indentationLvl),a=""===n&&1===r[0].length?" ":`${n?` ${n}`:""}\n${c} `;return`${r[0]}${a}${Fe(e,`,\n${c} `)} ${r[1]}`}function kr(t){const e=je(t,!1);if(void 0!==e){if(null===e)return!0;t=e}let n=$t,r=$t;if("function"!=typeof t.toString){if("function"!=typeof t[fe])return!0;if($t(t,fe))return!1;n=Ir}else{if($t(t,"toString"))return!1;if("function"!=typeof t[fe])r=Ir;else if($t(t,fe))return!1}let o=t;do{o=ht(o)}while(!n(o,"toString")&&!r(o,fe));const i=pt(o,"constructor");return void 0!==i&&"function"==typeof i.value&&An.has(i.value.name)}function Ir(){return!1}const jr=t=>oe(t.message,"\n",1)[0];let Br;function Tr(t){try{return U(t)}catch(t){if(!Br)try{const t={};t.a=t,U(t)}catch(t){Br=jr(t)}if("TypeError"===t.name&&jr(t)===Br)return"[Circular]";throw t}}function zr(t,e){return ur(Zn,t,e?.numericSeparator??_n.numericSeparator)}function Mr(t,e){return fr(Zn,t,e?.numericSeparator??_n.numericSeparator)}function Nr(t,e){const n=e[0];let r=0,o="",i="";if("string"==typeof n){if(1===e.length)return n;let s,l=0;for(let i=0;i<n.length-1;i++)if(37===Gt(n,i)){const c=Gt(n,++i);if(r+1!==e.length){switch(c){case 115:{const n=e[++r];s="number"==typeof n?zr(n,t):"bigint"==typeof n?Mr(n,t):"object"==typeof n&&null!==n&&kr(n)?Nn(n,{...t,compact:3,colors:!1,depth:0}):Ht(n);break}case 106:s=Tr(e[++r]);break;case 100:{const n=e[++r];s="bigint"==typeof n?Mr(n,t):"symbol"==typeof n?"NaN":zr(et(n),t);break}case 79:s=Nn(e[++r],t);break;case 111:s=Nn(e[++r],{...t,showHidden:!0,showProxy:!0,depth:4});break;case 105:{const n=e[++r];s="bigint"==typeof n?Mr(n,t):"symbol"==typeof n?"NaN":zr(it(n),t);break}case 102:{const n=e[++r];s="symbol"==typeof n?"NaN":zr(ot(n),t);break}case 99:r+=1,s="";break;case 37:o+=re(n,l,i),l=i+1;continue;default:continue}l!==i-1&&(o+=re(n,l,i-1)),o+=s,l=i+1}else 37===c&&(o+=re(n,l,i),l=i+1)}0!==l&&(r++,i=" ",l<n.length&&(o+=re(n,l)))}for(;r<e.length;){const n=e[r];o+=i,o+="string"!=typeof n?Nn(n,t):n,i=" ",r++}return o}function Cr(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(_e("config").hasIntl)gn(!1);else{Mn=function(e,n=!0){let r=0;n&&(e=Fr(e)),e=Kt(e,"NFC");for(const n of new Nt(e)){const e=Vt(n,0);t(e)?r+=2:Cr(e)||r++}return r};const t=t=>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 Fr(t){return mn(t,"str"),-1===qt(t,"")&&-1===qt(t,"›")?t:jt(zn,t,"")}const Dr={34:"&quot;",38:"&amp;",39:"&apos;",60:"&lt;",62:"&gt;",160:"&nbsp;"};function Wr(t){return t.replace(/[\u0000-\u002F\u003A-\u0040\u005B-\u0060\u007B-\u00FF]/g,t=>{const e=Ht(t.charCodeAt(0));return Dr[e]||"&#"+e+";"})}t.exports={identicalSequenceRange:or,inspect:Nn,inspectDefaultOptions:_n,format:function(...t){return Nr(void 0,t)},formatWithOptions:function(t,...e){return dn(t,"inspectOptions",bn),Nr(t,e)},getStringWidth:Mn,stripVTControlCharacters:Fr,isZeroWidthCodePoint:Cr,stylizeWithColor:Vn,stylizeWithHTML(t,e){const n=Nn.styles[e];return void 0!==n?`<span style="color:${n};">${Wr(t)}</span>`:Wr(t)},Proxy:Me}},146(t,e,n){let r;function o(){return r=null!=r?r:n(923).codes.ERR_INTERNAL_ASSERTION}function i(t,e){if(!t)throw new(o())(e)}i.fail=function(t){throw new(o())(t)},t.exports=i},996(t){const 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:t=>"internal/modules/cjs/foo"!==t&&(t.startsWith("internal/")||-1!==e.indexOf(t))}},575(t){t.exports={CHAR_DOT:46,CHAR_FORWARD_SLASH:47,CHAR_BACKWARD_SLASH:92}},923(t,e,n){const r=n(714),{ArrayIsArray:o,ArrayPrototypeIncludes:i,ArrayPrototypeIndexOf:s,ArrayPrototypeJoin:l,ArrayPrototypePush:c,ArrayPrototypeSlice:a,ArrayPrototypeSplice:u,Error:f,ErrorCaptureStackTrace:p,JSONStringify:y,ObjectDefineProperty:g,ReflectApply:h,RegExpPrototypeExec:d,SafeMap:m,SafeWeakMap:b,String:$,StringPrototypeEndsWith:S,StringPrototypeIncludes:x,StringPrototypeIndexOf:P,StringPrototypeSlice:A,StringPrototypeToLowerCase:v,Symbol:_,TypeError:w}=r,E=_("kIsNodeError"),O=new m,L={},R=/^[A-Z][a-zA-Z0-9]*$/,k=["string","function","number","object","Function","Object","boolean","bigint","symbol"],I=new b,j=n(146);let B,T,z=null;function M(t,e,n){O.set(t,e);const r=(o=n,i=t,class extends o{code=i;constructor(...t){super(),g(this,"message",{__proto__:null,value:N(i,t,this),enumerable:!1,writable:!0,configurable:!0})}toString(){return`${this.name} [${i}]: ${this.message}`}});var o,i;L[t]=r}function N(t,e,n){const r=O.get(t);if("function"==typeof r)return j(r.length<=e.length,`Code: ${t}; The provided arguments length (${e.length}) does not match the required ones (${r.length}).`),h(r,n,e)}const C=_("kEnhanceStackBeforeInspector");function F(t){if(null===t)return"null";if(void 0===t)return"undefined";switch(typeof t){case"bigint":return`type bigint (${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 (${t})`;case"boolean":return t?"type boolean (true)":"type boolean (false)";case"symbol":return`type symbol (${$(t)})`;case"function":return`function ${t.name}`;case"object":return t.constructor&&"name"in t.constructor?`an instance of ${t.constructor.name}`:`${(z=z||n(702),z).inspect(t,{depth:-1})}`;case"string":return t.length>28&&(t=`${A(t,0,25)}...`),-1===P(t,"'")?`type string ('${t}')`:`type string (${y(t)})`}}function D(t,e="and"){switch(t.length){case 0:return"";case 1:return`${t[0]}`;case 2:return`${t[0]} ${e} ${t[1]}`;case 3:return`${t[0]}, ${t[1]}, ${e} ${t[2]}`;default:return`${l(a(t,0,-1),", ")}, ${e} ${t[t.length-1]}`}}t.exports={codes:L,determineSpecificType:F,E:M,formatList:D,getMessage:N,hideStackFrames:function(t){function e(...n){try{return h(t,this,n)}catch(t){throw f.stackTraceLimit&&p(t,e),t}}return e.withoutStackTrace=t,e},isStackOverflowError:function(t){if(void 0===T)try{function e(){e()}e()}catch(t){T=t.message,B=t.name}return t&&t.name===B&&t.message===T},kEnhanceStackBeforeInspector:C,kIsNodeError:E,overrideStackTrace:I},M("ERR_INTERNAL_ASSERTION",t=>{const 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:`${t}\n${e}`},f),M("ERR_INVALID_ARG_TYPE",(t,e,n)=>{j("string"==typeof t,"'name' must be a string"),o(e)||(e=[e]);let r="The ";S(t," argument")?r+=`${t} `:r+=`"${t}" ${x(t,".")?"property":"argument"} `,r+="must be ";const l=[],a=[],f=[];for(const t of e)j("string"==typeof t,"All expected entries have to be of type string"),i(k,t)?c(l,v(t)):null!==d(R,t)?c(a,t):(j("object"!==t,'The value "object" should be written as "Object"'),c(f,t));if(a.length>0){const t=s(l,"object");-1!==t&&(u(l,t,1),c(a,"Object"))}return l.length>0&&(r+=`${l.length>1?"one of type":"of type"} ${D(l,"or")}`,(a.length>0||f.length>0)&&(r+=" or ")),a.length>0&&(r+=`an instance of ${D(a,"or")}`,f.length>0&&(r+=" or ")),f.length>0&&(f.length>1?r+=`one of ${D(f,"or")}`:(v(f[0])!==f[0]&&(r+="an "),r+=`${f[0]}`)),r+=`. Received ${F(n)}`,r},w)},511(t,e,n){const{StringPrototypeCharCodeAt:r,StringPrototypeIncludes:o,StringPrototypeReplace:i}=n(714),s=n(851),{CHAR_FORWARD_SLASH:l}=n(575),c=n(811),a=/%/g,u=/\\/g,f=/\n/g,p=/\r/g,y=/\t/g;t.exports={pathToFileURL:function(t){const e=new s("file://");let n=c.resolve(t);return r(t,t.length-1)===l&&n[n.length-1]!==c.sep&&(n+="/"),e.pathname=function(t){return o(t,"%")&&(t=i(t,a,"%25")),o(t,"\\")&&(t=i(t,u,"%5C")),o(t,"\n")&&(t=i(t,f,"%0A")),o(t,"\r")&&(t=i(t,p,"%0D")),o(t,"\t")&&(t=i(t,y,"%09")),t}(n),e},URL:s}},992(t,e,n){const r=n(714),{ArrayPrototypeJoin:o,Error:i,ErrorIsError:s,FunctionPrototypeSymbolHasInstance:l,StringPrototypeReplace:c,SymbolFor:a}=r,u=/\u001b\[\d\d?m/g;t.exports={customInspectSymbol:a("nodejs.util.inspect.custom"),isError:t=>s?.(t)||l(i,t),join:o,removeColors:t=>c(t,u,"")}},134(t,e,n){const r=n(714),{ArrayIsArray:o,BigInt:i,Boolean:s,DatePrototype:l,Error:c,FunctionPrototype:a,MapPrototypeHas:u,Number:f,ObjectDefineProperty:p,ObjectGetOwnPropertyDescriptor:y,ObjectGetPrototypeOf:g,ObjectIsFrozen:h,ObjectPrototype:d,SetPrototypeHas:m,String:b,Symbol:$,SymbolToStringTag:S,globalThis:x}=r,{getConstructorName:P}=n(596);function A(t,...e){for(const n of e){const e=x[n];if(e&&t instanceof e)return!0}for(;t;){if("object"!=typeof t)return!1;if(e.indexOf(P(t))>=0)return!0;t=g(t)}return!1}function v(t){return e=>{if(!A(e,t.name))return!1;try{t.prototype.valueOf.call(e)}catch{return!1}return!0}}"object"!=typeof x&&(p(d,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete d.__magic__);const _=v(b),w=v(f),E=v(s),O=v(i),L=v($);t.exports={isAsyncFunction:t=>"function"==typeof t&&a.toString.call(t).startsWith("async"),isGeneratorFunction:t=>"function"==typeof t&&a.toString.call(t).match(/^(async\s+)?function *\*/),isAnyArrayBuffer:t=>A(t,"ArrayBuffer","SharedArrayBuffer"),isArrayBuffer:t=>A(t,"ArrayBuffer"),isArgumentsObject(t){if(null!==t&&"object"==typeof t&&!o(t)&&"number"==typeof t.length&&t.length===(0|t.length)&&t.length>=0){const e=y(t,"callee");return e&&!e.enumerable}return!1},isBoxedPrimitive:t=>w(t)||_(t)||E(t)||O(t)||L(t),isDataView:t=>A(t,"DataView"),isExternal:t=>"object"==typeof t&&h(t)&&null==g(t),isMap(t){if(!A(t,"Map"))return!1;try{u(t)}catch{return!1}return!0},isMapIterator:t=>"[object Map Iterator]"===d.toString.call(g(t)),isModuleNamespaceObject(t){try{return t&&"object"==typeof t&&"Module"===t[S]}catch{return!1}},isNativeError:t=>t instanceof c&&A(t,"Error","EvalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError","AggregateError"),isPromise:t=>A(t,"Promise"),isSet(t){if(!A(t,"Set"))return!1;try{m(t)}catch{return!1}return!0},isSetIterator:t=>"[object Set Iterator]"===d.toString.call(g(t)),isWeakMap:t=>A(t,"WeakMap"),isWeakSet:t=>A(t,"WeakSet"),isRegExp:t=>A(t,"RegExp"),isDate(t){if(A(t,"Date"))try{return l.getTime.call(t),!0}catch{}return!1},isTypedArray:t=>A(t,"Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Uint16Array","Int32Array","Uint32Array","Float32Array","Float64Array","BigInt64Array","BigUint64Array"),isStringObject:_,isNumberObject:w,isBooleanObject:E,isBigIntObject:O,isSymbolObject:L}},63(t,e,n){const{ArrayIsArray:r}=n(714),{hideStackFrames:o,codes:{ERR_INVALID_ARG_TYPE:i}}=n(923),s=o((t,e,n=0)=>{if(0===n){if(null===t||r(t))throw new i(e,"Object",t);if("object"!=typeof t)throw new i(e,"Object",t)}else{if(!(1&n)&&null===t)throw new i(e,"Object",t);if(!(2&n)&&r(t))throw new i(e,"Object",t);const o=typeof t;if(!("object"===o||4&n&&"function"===o))throw new i(e,"Object",t)}});t.exports={kValidateObjectNone:0,kValidateObjectAllowNullable:1,kValidateObjectAllowArray:2,kValidateObjectAllowFunction:4,validateObject:s,validateString:function(t,e){if("string"!=typeof t)throw new i(e,"string",t)}}},811(t,e,n){const{StringPrototypeCharCodeAt:r,StringPrototypeLastIndexOf:o,StringPrototypeSlice:i}=n(714),{CHAR_DOT:s,CHAR_FORWARD_SLASH:l}=n(575),{validateString:c}=n(63);function a(t){return t===l}function u(t,e,n,c){let a="",u=0,f=-1,p=0,y=0;for(let g=0;g<=t.length;++g){if(g<t.length)y=r(t,g);else{if(c(y))break;y=l}if(c(y)){if(f===g-1||1===p);else if(2===p){if(a.length<2||2!==u||r(a,a.length-1)!==s||r(a,a.length-2)!==s){if(a.length>2){const t=o(a,n);-1===t?(a="",u=0):(a=i(a,0,t),u=a.length-1-o(a,n)),f=g,p=0;continue}if(0!==a.length){a="",u=0,f=g,p=0;continue}}e&&(a+=a.length>0?`${n}..`:"..",u=2)}else a.length>0?a+=`${n}${i(t,f+1,g)}`:a=i(t,f+1,g),u=g-f-1;f=g,p=0}else y===s&&-1!==p?++p:p=-1}return a}t.exports={isPosixPathSeparator:a,normalizeString:u,resolve:function(...t){if(0===t.length||1===t.length&&(""===t[0]||"."===t[0])){const t="/";if(r(t,0)===l)return t}let e="",n=!1;for(let o=t.length-1;o>=0&&!n;o--){const i=t[o];c(i,`paths[${o}]`),0!==i.length&&(e=`${i}/${e}`,n=r(i,0)===l)}if(!n){const t="/";e=`${t}/${e}`,n=r(t,0)===l}return e=u(e,!n,"/",a),n?`/${e}`:e.length>0?e:"."}}},714(t){const e={__proto__:null},{defineProperty:n,getOwnPropertyDescriptor:r,ownKeys:o}=Reflect,{apply:i,bind:s,call:l}=Function.prototype,c=s.bind(l);e.uncurryThis=c;const a=s.bind(i);e.applyBind=a;const u=["ArrayOf","ArrayPrototypePush","ArrayPrototypeUnshift","MathHypot","MathMax","MathMin","StringFromCharCode","StringFromCodePoint","StringPrototypeConcat","TypedArrayOf"];function f(t){return"symbol"==typeof t?`Symbol${t.description[7].toUpperCase()}${t.description.slice(8)}`:`${t[0].toUpperCase()}${t.slice(1)}`}function p(t,e,r,{enumerable:o,get:i,set:s}){n(t,`${e}Get${r}`,{__proto__:null,value:c(i),enumerable:o}),void 0!==s&&n(t,`${e}Set${r}`,{__proto__:null,value:c(s),enumerable:o})}function y(t,e,i){for(const s of o(t)){const o=f(s),l=r(t,s);if("get"in l)p(e,i,o,l);else{const r=`${i}${o}`;n(e,r,{__proto__:null,...l}),u.includes(r)&&n(e,`${r}Apply`,{__proto__:null,value:a(l.value,t)})}}}function g(t,e,i){for(const s of o(t)){const o=f(s),l=r(t,s);if("get"in l)p(e,i,o,l);else{const{value:t}=l;"function"==typeof t&&(l.value=c(t));const r=`${i}${o}`;n(e,r,{__proto__:null,...l}),u.includes(r)&&n(e,`${r}Apply`,{__proto__:null,value:a(t)})}}}["Proxy","globalThis"].forEach(t=>{e[t]=globalThis[t]}),[decodeURI,decodeURIComponent,encodeURI,encodeURIComponent].forEach(t=>{e[t.name]=t}),[escape,eval,unescape].forEach(t=>{e[t.name]=t}),["Atomics","JSON","Math","Proxy","Reflect"].forEach(t=>{y(globalThis[t],e,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(t=>{const n=globalThis[t];n&&(e[t]=n,y(n,e,t),g(n.prototype,e,`${t}Prototype`))}),["Promise"].forEach(t=>{const i=globalThis[t];e[t]=i,function(t,e,i){for(const s of o(t)){const o=f(s),l=r(t,s);if("get"in l)p(e,i,o,l);else{const{value:r}=l;"function"==typeof r&&(l.value=r.bind(t)),n(e,`${i}${o}`,{__proto__:null,...l})}}}(i,e,t),g(i.prototype,e,`${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(({name:t,original:n})=>{e[t]=n,g(n,e,t),g(n.prototype,e,`${t}Prototype`)}),e.IteratorPrototype=Reflect.getPrototypeOf(e.ArrayIteratorPrototype);const{ArrayPrototypeForEach:h,ArrayPrototypePushApply:d,ArrayPrototypeSlice:m,FinalizationRegistry:b,FunctionPrototypeCall:$,Map:S,ObjectFreeze:x,ObjectSetPrototypeOf:P,RegExp:A,Set:v,SymbolIterator:_,WeakMap:w,WeakRef:E,WeakSet:O}=e,L=(t,e)=>{class n{constructor(e){this._iterator=t(e)}next(){return e(this._iterator)}[_](){return this}}return P(n.prototype,null),x(n.prototype),x(n),n};e.SafeArrayIterator=L(e.ArrayPrototypeSymbolIterator,e.ArrayIteratorPrototypeNext),e.SafeStringIterator=L(e.StringPrototypeSymbolIterator,e.StringIteratorPrototypeNext);const R=(t,e)=>{h(o(t),o=>{r(e,o)||n(e,o,{__proto__:null,...r(t,o)})})},k=(t,e)=>{if(_ in t.prototype){const i=new t;let s;h(o(t.prototype),o=>{if(!r(e.prototype,o)){const l=r(t.prototype,o);if("function"==typeof l.value&&0===l.value.length&&_ in($(l.value,i)??{})){const t=c(l.value);s=s||c(t(i).next);const e=L(t,s);l.value=function(){return new e(this)}}n(e.prototype,o,{__proto__:null,...l})}})}else R(t.prototype,e.prototype);return R(t,e),P(e.prototype,null),x(e.prototype),x(e),e};e.makeSafe=k,e.SafeMap=k(S,class extends S{}),e.SafeWeakMap=k(w,class extends w{}),e.SafeSet=k(v,class extends v{}),e.SafeWeakSet=k(O,class extends O{}),e.SafeFinalizationRegistry=k(b,class extends b{}),e.SafeWeakRef=k(E,class extends E{}),e.AsyncIteratorPrototype=e.ReflectGetPrototypeOf(async function*(){}).prototype,e.internalBinding=t=>{if("config"===t)return{hasIntl:!1};throw new Error(`unknown module: "${t}"`)},e._stringPrototypeReplaceAll=(t,e,n)=>"[object regexp]"===Object.prototype.toString.call(e).toLowerCase()?t.replace(e,n):t.replace(new A(e,"g"),n),e.SafeArrayPrototypePushApply=(t,e)=>{let n=65536;if(n<e.length){let r=0;do{d(t,m(e,r,r=n)),n+=65536}while(n<e.length);e=m(e,r)}return d(t,e)},e.StringPrototypeReplaceAll=e.StringPrototypeReplaceAll||e._stringPrototypeReplaceAll,P(e,null),x(e),t.exports=e},326(t,e,n){const r=n(714),{Proxy:o,ProxyRevocable:i,SafeWeakMap:s}=r,l=new s;class c{constructor(t,e){const n=new o(t,e);return l.set(n,[t,e]),n}static getProxyDetails(t,e=!0){const n=l.get(t);if(n)return e?n:n[0]}static revocable(t,e){const n=i(t,e);l.set(n.proxy,[t,e]);const r=n.revoke;return n.revoke=()=>{l.set(n.proxy,[null,null]),r()},n}}t.exports={getProxyDetails:c.getProxyDetails.bind(c),Proxy:c}},851(t){t.exports=URL},596(t,e,n){const r=n(714),{BigInt:o,Error:i,NumberParseInt:s,ObjectEntries:l,ObjectGetOwnPropertyDescriptor:c,ObjectGetOwnPropertyDescriptors:a,ObjectGetOwnPropertySymbols:u,ObjectPrototypeToString:f,Symbol:p}=r,y=n(326),g=p("kPending"),h=p("kRejected");t.exports={constants:{kPending:g,kRejected:h,ALL_PROPERTIES:0,ONLY_ENUMERABLE:2},getOwnNonIndexProperties:function(t,e=2){const n=a(t),r=[];for(const[t,o]of l(n))if(!/^(0|[1-9][0-9]*)$/.test(t)||s(t,10)>=2**32-1){if(2===e&&!o.enumerable)continue;r.push(t)}for(const n of u(t)){const o=c(t,n);(2!==e||o.enumerable)&&r.push(n)}return r},getPromiseDetails:()=>[g,void 0],getProxyDetails:y.getProxyDetails,Proxy:y.Proxy,previewEntries:t=>[[],!1],getConstructorName(t){if(!t||"object"!=typeof t)throw new i("Invalid object");if(t.constructor?.name)return t.constructor.name;const e=f(t).match(/^\[object ([^\]]+)\]/);return e?e[1]:"Object"},getExternalValue:()=>o(0)}}},e={};return function n(r){var o=e[r];if(void 0!==o)return o.exports;var i=e[r]={exports:{}};return t[r](i,i.exports,n),i.exports}(702)})());
48300
48823
 
48301
48824
  /***/ },
48302
48825
 
@@ -48484,7 +49007,7 @@ __webpack_require__.r(__webpack_exports__);
48484
49007
  /* harmony import */ var _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @vue/runtime-dom */ "./node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js");
48485
49008
  /* harmony import */ var _vue_runtime_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @vue/runtime-dom */ "./node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js");
48486
49009
  /**
48487
- * vue v3.5.30
49010
+ * vue v3.5.31
48488
49011
  * (c) 2018-present Yuxi (Evan) You and Vue contributors
48489
49012
  * @license MIT
48490
49013
  **/
@@ -50155,7 +50678,7 @@ module.exports = ".list-mixed pre {\n max-height: 6.5em;\n max-width: 30em;\n}
50155
50678
  (module) {
50156
50679
 
50157
50680
  "use strict";
50158
- 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 ";
50681
+ module.exports = "<div class=\"list-mixed tooltip\">\n <pre>\n <code ref=\"MixedCode\" class=\"language-javascript\">{{shortenValue}}</code>\n </pre>\n</div>\n ";
50159
50682
 
50160
50683
  /***/ },
50161
50684
 
@@ -50177,7 +50700,7 @@ module.exports = ".list-string {\n display: inline;\n max-width: 300px;\n}";
50177
50700
  (module) {
50178
50701
 
50179
50702
  "use strict";
50180
- module.exports = "<div class=\"list-string tooltip\" ref=\"itemData\">\n {{displayValue}}\n <span class=\"tooltiptext\" @click.stop=\"copyText(value)\">copy &#x1F4CB;</span>\n</div>";
50703
+ module.exports = "<div class=\"list-string tooltip\" ref=\"itemData\">\n {{displayValue}}\n</div>";
50181
50704
 
50182
50705
  /***/ },
50183
50706
 
@@ -50254,7 +50777,7 @@ module.exports = "<div v-if=\"show\" class=\"fixed inset-0 z-[9999]\">\n <div c
50254
50777
  (module) {
50255
50778
 
50256
50779
  "use strict";
50257
- 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 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 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}\n\n.models .documents table th {\n border-bottom: thin solid rgba(0, 0, 0, 0.12);\n text-align: left;\n height: 48px;\n}\n\n.models .documents table td {\n border-bottom: thin solid rgba(0, 0, 0, 0.12);\n text-align: left;\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: sticky;\n top: 0;\n z-index: 2;\n padding: 4px;\n display: flex;\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";
50780
+ module.exports = ".models {\n position: relative;\n display: flex;\n flex-direction: row;\n min-height: calc(100% - 56px);\n}\n\n.models .documents {\n flex-grow: 1;\n overflow: visible;\n max-height: calc(100vh - 56px);\n display: flex;\n flex-direction: column;\n}\n\n.models .documents-container {\n flex: 1;\n min-height: 0;\n display: flex;\n flex-direction: column;\n overflow-y: auto;\n}\n\n.models .documents-menu {\n position: sticky;\n top: 0;\n z-index: 30;\n padding: 4px;\n display: flex;\n flex-direction: column;\n flex-shrink: 0;\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 .loader-overlay {\n position: absolute;\n inset: 0;\n z-index: 20;\n display: flex;\n align-items: center;\n justify-content: center;\n background: var(--color-page);\n opacity: 0.9;\n}\n\n/* Table cell: copy icon only copies; rest of cell opens document */\n.models .table-cell-copy {\n cursor: pointer;\n}\n";
50258
50781
 
50259
50782
  /***/ },
50260
50783
 
@@ -50265,7 +50788,7 @@ module.exports = ".models {\n position: relative;\n display: flex;\n flex-dir
50265
50788
  (module) {
50266
50789
 
50267
50790
  "use strict";
50268
- module.exports = "<div class=\"models flex\" style=\"height: calc(100vh - 55px); height: calc(100dvh - 55px)\">\n <aside class=\"bg-page border-r overflow-hidden transition-all duration-300 ease-in-out z-20 w-0 lg:w-64 fixed lg:relative shrink-0 flex flex-col top-[55px] bottom-0 lg:top-auto lg:bottom-auto lg:h-full\" :class=\"hideSidebar === true ? '!w-0' : hideSidebar === false ? '!w-64' : ''\">\n <!-- Search -->\n <div class=\"p-3 shrink-0\">\n <div class=\"relative\">\n <svg class=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n <input\n v-model=\"modelSearch\"\n type=\"text\"\n placeholder=\"Find model...\"\n @keydown.esc=\"modelSearch = ''\"\n class=\"w-full rounded-md border border-edge bg-surface py-1.5 pl-8 pr-3 text-sm text-content placeholder:text-gray-400 focus:border-edge-strong focus:outline-none focus:ring-1 focus:ring-gray-300\"\n />\n </div>\n </div>\n <!-- Model list (scrollable) -->\n <nav class=\"flex-1 overflow-y-auto px-2 pb-2\">\n <!-- Recently Viewed -->\n <div v-if=\"filteredRecentModels.length > 0 && !modelSearch.trim()\">\n <div class=\"px-2 py-1 text-xs font-semibold text-gray-400 uppercase tracking-wider\">Recently Viewed</div>\n <ul role=\"list\">\n <li v-for=\"model in filteredRecentModels\" :key=\"'recent-' + model\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"flex items-center rounded-md py-1.5 px-2 text-sm text-content-secondary\"\n :class=\"model === currentModel ? 'bg-gray-200 font-semibold text-content' : 'hover:bg-muted'\">\n <span class=\"truncate\" v-html=\"highlightMatch(model)\"></span>\n <span\n v-if=\"modelDocumentCounts && modelDocumentCounts[model] !== undefined && model !== currentModel\"\n class=\"ml-auto text-xs text-gray-400 bg-muted rounded px-1.5 py-[1px]\"\n >\n {{formatCompactCount(modelDocumentCounts[model])}}\n </span>\n </router-link>\n </li>\n </ul>\n <div class=\"border-b border-edge my-2\"></div>\n </div>\n <!-- All Models / Search Results -->\n <div class=\"px-2 py-1 text-xs font-semibold text-gray-400 uppercase tracking-wider\">{{ modelSearch.trim() ? 'Search Results' : 'All Models' }}</div>\n <ul role=\"list\">\n <li v-for=\"model in filteredModels\" :key=\"'all-' + model\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"flex items-center rounded-md py-1.5 px-2 text-sm text-content-secondary\"\n :class=\"model === currentModel ? 'bg-gray-200 font-semibold text-content' : 'hover:bg-muted'\">\n <span class=\"truncate\" v-html=\"highlightMatch(model)\"></span>\n <span\n v-if=\"modelDocumentCounts && modelDocumentCounts[model] !== undefined && model !== currentModel\"\n class=\"ml-auto text-xs text-gray-400 bg-muted rounded px-1.5 py-[1px]\"\n >\n {{formatCompactCount(modelDocumentCounts[model])}}\n </span>\n </router-link>\n </li>\n </ul>\n <div v-if=\"filteredModels.length === 0 && modelSearch.trim()\" class=\"px-2 py-2 text-sm text-content-tertiary\">\n No models match \"{{modelSearch}}\"\n </div>\n <div v-if=\"models.length === 0 && status === 'loaded'\" class=\"p-2 bg-red-100 rounded-md\">\n No models found\n </div>\n </nav>\n <!-- Bottom toolbar -->\n <div class=\"shrink-0 border-t border-edge bg-page px-2 py-1.5 flex items-center gap-1\">\n <button\n type=\"button\"\n @click=\"hideSidebar = true\"\n class=\"rounded p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n title=\"Hide sidebar\"\n >\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\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5\" />\n </svg>\n </button>\n <button\n type=\"button\"\n @click=\"openModelSwitcher\"\n class=\"rounded p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n title=\"Quick switch (Ctrl+P)\"\n >\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\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n </button>\n </div>\n </aside>\n <div class=\"documents bg-slate-50 min-w-0\" ref=\"documentsList\">\n <div class=\"documents-menu bg-slate-50\">\n <div class=\"flex flex-row items-center w-full gap-2\">\n <button\n v-if=\"hideSidebar === true || hideSidebar === null\"\n type=\"button\"\n @click=\"hideSidebar = false\"\n class=\"shrink-0 rounded-md p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n :class=\"hideSidebar === null ? 'lg:hidden' : ''\"\n title=\"Show sidebar\"\n >\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=\"m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\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'\">{{documents.length}}/{{numDocuments === 1 ? numDocuments + ' document' : numDocuments + ' documents'}}</span>\n </div>\n <button\n @click=\"stagingSelect\"\n type=\"button\"\n :class=\"{ 'bg-page0 ring-inset ring-2 ring-gray-300 hover:bg-gray-600': selectMultiple, 'bg-primary hover:bg-primary-hover' : !selectMultiple }\"\n class=\"rounded px-2 py-2 text-sm font-semibold text-primary-text shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\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 <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-surface px-2 py-2 text-sm font-semibold text-content-secondary shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-page focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\">\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-surface shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none z-20\"\n >\n <div class=\"py-1\">\n <button\n @click=\"shouldShowExportModal = true; showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Export\n </button>\n <button\n @click=\"shouldShowCreateModal = true; showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Create\n </button>\n <button\n @click=\"openFieldSelection(); showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Projection\n </button>\n <button\n @click=\"openIndexModal\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\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-content-secondary hover:bg-muted\"\n >\n Collection Info\n </button>\n <button\n @click=\"findOldestDocument\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Find oldest document\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-page focus:z-10\"\n :class=\"outputType === 'table' ? 'bg-gray-200' : 'bg-surface'\">\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 px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-page focus:z-10\"\n :class=\"outputType === 'json' ? 'bg-gray-200' : 'bg-surface'\">\n <img class=\"h-5 w-5\" src=\"images/json.svg\">\n </button>\n <button\n @click=\"setOutputType('map')\"\n :disabled=\"geoJsonFields.length === 0\"\n type=\"button\"\n :title=\"geoJsonFields.length > 0 ? 'Map view' : 'No GeoJSON fields detected'\"\n class=\"relative -ml-px inline-flex items-center rounded-none rounded-r-md px-2 py-2 ring-1 ring-inset ring-gray-300 focus:z-10\"\n :class=\"[\n geoJsonFields.length === 0 ? 'text-gray-300 cursor-not-allowed bg-muted' : 'text-gray-400 hover:bg-page',\n outputType === 'map' ? 'bg-gray-200' : (geoJsonFields.length > 0 ? 'bg-surface' : '')\n ]\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 6.75V15m6-6v8.25m.503 3.498 4.875-2.437c.381-.19.622-.58.622-1.006V4.82c0-.836-.88-1.38-1.628-1.006l-3.869 1.934c-.317.159-.69.159-1.006 0L9.503 3.252a1.125 1.125 0 0 0-1.006 0L3.622 5.689C3.24 5.88 3 6.27 3 6.695V19.18c0 .836.88 1.38 1.628 1.006l3.869-1.934c.317-.159.69-.159 1.006 0l4.994 2.497c.317.158.69.158 1.006 0Z\" />\n </svg>\n </button>\n </span>\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 class=\"bg-slate-50\">\n <th v-for=\"path in filteredPaths\" @click=\"addPathFilter(path.path)\" class=\"bg-slate-50 cursor-pointer p-3\">\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\" class=\"bg-surface hover:bg-slate-50\">\n <td v-for=\"schemaPath in filteredPaths\" class=\"p-3 cursor-pointer\" :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-2 p-1 mt-1\">\n <div\n v-for=\"document in documents\"\n :key=\"document._id\"\n @click=\"handleDocumentContainerClick(document, $event)\"\n :class=\"[\n 'group relative transition-colors rounded-md border border-slate-100',\n selectedDocuments.some(x => x._id.toString() === document._id.toString()) ? 'bg-blue-200' : 'hover:shadow-sm hover:border-slate-300 bg-surface'\n ]\"\n >\n <button\n type=\"button\"\n class=\"absolute top-2 right-2 z-10 inline-flex items-center rounded bg-primary px-2 py-1 text-xs font-semibold text-primary-text shadow-sm transition-opacity duration-150 opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-primary-hover focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\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-else-if=\"outputType === 'map'\" class=\"flex flex-col h-full\">\n <div class=\"p-2 bg-surface border-b flex items-center gap-2\">\n <label class=\"text-sm font-medium text-content-secondary\">GeoJSON Field:</label>\n <select\n :value=\"selectedGeoField\"\n @change=\"setSelectedGeoField($event.target.value)\"\n class=\"rounded-md border border-edge-strong py-1 px-2 text-sm focus:border-primary focus:ring-primary\"\n >\n <option v-for=\"field in geoJsonFields\" :key=\"field.path\" :value=\"field.path\">\n {{ field.label }}\n </option>\n </select>\n <async-button\n @click=\"loadMoreDocuments\"\n :disabled=\"loadedAllDocs\"\n type=\"button\"\n class=\"rounded px-2 py-1 text-xs font-semibold text-primary-text shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n :class=\"loadedAllDocs ? 'bg-gray-400 cursor-not-allowed' : 'bg-primary hover:bg-primary-hover'\"\n >\n Load more\n </async-button>\n </div>\n <div class=\"flex-1 min-h-[400px]\" ref=\"modelsMap\"></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-primary-subtle px-2 py-0.5 text-xs font-semibold text-primary\">\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-content-secondary\">Documents</div>\n <div class=\"text-content\">{{ formatNumber(collectionInfo.documentCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Indexes</div>\n <div class=\"text-content\">{{ formatNumber(collectionInfo.indexCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Total Index Size</div>\n <div class=\"text-content\">{{ formatCollectionSize(collectionInfo.totalIndexSize) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Total Storage Size</div>\n <div class=\"text-content\">{{ 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-content-secondary\">Collation</div>\n <div class=\"text-content\">{{ collectionInfo.hasCollation ? 'Yes' : 'No' }}</div>\n </div>\n <div v-if=\"collectionInfo.hasCollation\" class=\"rounded bg-muted 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-content-secondary\">Capped</div>\n <div class=\"text-content\">{{ 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-edge-strong 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-content-secondary 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-primary px-2.5 py-1.5 text-sm font-semibold text-primary-text shadow-sm hover:bg-primary-hover 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-page0 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-page0 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 <model-switcher\n :show=\"showModelSwitcher\"\n :models=\"models\"\n :recently-viewed-models=\"recentlyViewedModels\"\n :model-document-counts=\"modelDocumentCounts\"\n @close=\"showModelSwitcher = false\"\n @select=\"selectSwitcherModel\"\n ></model-switcher>\n</div>\n";
50791
+ module.exports = "<div class=\"models flex\" style=\"height: calc(100vh - 55px); height: calc(100dvh - 55px)\">\n <aside class=\"bg-page border-r overflow-hidden transition-all duration-300 ease-in-out z-20 w-0 lg:w-64 fixed lg:relative shrink-0 flex flex-col top-[55px] bottom-0 lg:top-auto lg:bottom-auto lg:h-full\" :class=\"hideSidebar === true ? '!w-0' : hideSidebar === false ? '!w-64' : ''\">\n <!-- Search -->\n <div class=\"p-3 shrink-0\">\n <div class=\"relative\">\n <svg class=\"absolute left-2.5 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n <input\n v-model=\"modelSearch\"\n type=\"text\"\n placeholder=\"Find model...\"\n @keydown.esc=\"modelSearch = ''\"\n class=\"w-full rounded-md border border-edge bg-surface py-1.5 pl-8 pr-3 text-sm text-content placeholder:text-gray-400 focus:border-edge-strong focus:outline-none focus:ring-1 focus:ring-gray-300\"\n />\n </div>\n </div>\n <!-- Model list (scrollable) -->\n <nav class=\"flex-1 overflow-y-auto px-2 pb-2\">\n <!-- Recently Viewed -->\n <div v-if=\"filteredRecentModels.length > 0 && !modelSearch.trim()\">\n <div class=\"px-2 py-1 text-xs font-semibold text-gray-400 uppercase tracking-wider\">Recently Viewed</div>\n <ul role=\"list\">\n <li v-for=\"model in filteredRecentModels\" :key=\"'recent-' + model\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"flex items-center rounded-md py-1.5 px-2 text-sm text-content-secondary\"\n :class=\"model === currentModel ? 'bg-gray-200 font-semibold text-content' : 'hover:bg-muted'\">\n <span class=\"truncate\" v-html=\"highlightMatch(model)\"></span>\n <span\n v-if=\"modelDocumentCounts && modelDocumentCounts[model] !== undefined && model !== currentModel\"\n class=\"ml-auto text-xs text-gray-400 bg-muted rounded px-1.5 py-[1px]\"\n >\n {{formatCompactCount(modelDocumentCounts[model])}}\n </span>\n </router-link>\n </li>\n </ul>\n <div class=\"border-b border-edge my-2\"></div>\n </div>\n <!-- All Models / Search Results -->\n <div class=\"px-2 py-1 text-xs font-semibold text-gray-400 uppercase tracking-wider\">{{ modelSearch.trim() ? 'Search Results' : 'All Models' }}</div>\n <ul role=\"list\">\n <li v-for=\"model in filteredModels\" :key=\"'all-' + model\">\n <router-link\n :to=\"'/model/' + model\"\n class=\"flex items-center rounded-md py-1.5 px-2 text-sm text-content-secondary\"\n :class=\"model === currentModel ? 'bg-gray-200 font-semibold text-content' : 'hover:bg-muted'\">\n <span class=\"truncate\" v-html=\"highlightMatch(model)\"></span>\n <span\n v-if=\"modelDocumentCounts && modelDocumentCounts[model] !== undefined && model !== currentModel\"\n class=\"ml-auto text-xs text-gray-400 bg-muted rounded px-1.5 py-[1px]\"\n >\n {{formatCompactCount(modelDocumentCounts[model])}}\n </span>\n </router-link>\n </li>\n </ul>\n <div v-if=\"filteredModels.length === 0 && modelSearch.trim()\" class=\"px-2 py-2 text-sm text-content-tertiary\">\n No models match \"{{modelSearch}}\"\n </div>\n <div v-if=\"models.length === 0 && status === 'loaded'\" class=\"p-2 bg-red-100 rounded-md\">\n No models found\n </div>\n </nav>\n <!-- Bottom toolbar -->\n <div class=\"shrink-0 border-t border-edge bg-page px-2 py-1.5 flex items-center gap-1\">\n <button\n type=\"button\"\n @click=\"hideSidebar = true\"\n class=\"rounded p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n title=\"Hide sidebar\"\n >\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\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m18.75 4.5-7.5 7.5 7.5 7.5m-6-15L5.25 12l7.5 7.5\" />\n </svg>\n </button>\n <button\n type=\"button\"\n @click=\"openModelSwitcher\"\n class=\"rounded p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n title=\"Quick switch (Ctrl+P)\"\n >\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\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z\" />\n </svg>\n </button>\n </div>\n </aside>\n <div class=\"documents bg-slate-50 min-w-0\" ref=\"documentsList\">\n <div class=\"documents-menu bg-slate-50\">\n <div class=\"flex flex-row items-center w-full gap-2\">\n <button\n v-if=\"hideSidebar === true || hideSidebar === null\"\n type=\"button\"\n @click=\"hideSidebar = false\"\n class=\"shrink-0 rounded-md p-1.5 text-gray-400 hover:text-gray-600 hover:bg-muted\"\n :class=\"hideSidebar === null ? 'lg:hidden' : ''\"\n title=\"Show sidebar\"\n >\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=\"m5.25 4.5 7.5 7.5-7.5 7.5m6-15 7.5 7.5-7.5 7.5\" />\n </svg>\n </button>\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'\">{{documents.length}}/{{numDocuments === 1 ? numDocuments + ' document' : numDocuments + ' documents'}}</span>\n </div>\n <button\n @click=\"stagingSelect\"\n type=\"button\"\n :class=\"{\n 'bg-page0 ring-inset ring-2 ring-gray-300 hover:bg-gray-200 text-content-secondary': selectMultiple,\n 'bg-primary hover:bg-primary-hover text-primary-text': !selectMultiple\n }\"\n class=\"rounded px-2 py-2 text-sm font-semibold shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\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 <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-surface px-2 py-2 text-sm font-semibold text-content-secondary shadow-sm ring-1 ring-inset ring-gray-300 hover:bg-page focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\">\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-surface shadow-lg ring-1 ring-black ring-opacity-5 focus:outline-none z-50\"\n >\n <div class=\"py-1\">\n <button\n @click=\"shouldShowExportModal = true; showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Export\n </button>\n <button\n @click=\"shouldShowCreateModal = true; showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Create\n </button>\n <button\n @click=\"openIndexModal\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\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-content-secondary hover:bg-muted\"\n >\n Collection Info\n </button>\n <button\n @click=\"findOldestDocument\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Find oldest document\n </button>\n <button\n @click=\"toggleRowNumbers()\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n {{ showRowNumbers ? 'Hide row numbers' : 'Show row numbers' }}\n </button>\n <button\n @click=\"resetFilter()\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Reset Filter\n </button>\n <button\n @click=\"toggleProjectionMenu(); showActionsMenu = false\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm hover:bg-muted\"\n :class=\"isProjectionMenuSelected ? 'text-primary font-semibold' : 'text-content-secondary'\"\n >\n {{ isProjectionMenuSelected ? 'Projection (On)' : 'Projection' }}\n </button>\n <button\n v-if=\"isProjectionMenuSelected\"\n @click=\"clearProjection()\"\n type=\"button\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Reset Projection\n </button>\n <async-button\n v-if=\"isProjectionMenuSelected\"\n type=\"button\"\n @click=\"applyDefaultProjectionColumns()\"\n class=\"block w-full px-4 py-2 text-left text-sm text-content-secondary hover:bg-muted\"\n >\n Default\n </async-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-page focus:z-10\"\n :class=\"outputType === 'table' ? 'bg-gray-200' : 'bg-surface'\">\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 px-2 py-2 text-gray-400 ring-1 ring-inset ring-gray-300 hover:bg-page focus:z-10\"\n :class=\"outputType === 'json' ? 'bg-gray-200' : 'bg-surface'\">\n <img class=\"h-5 w-5\" src=\"images/json.svg\">\n </button>\n <button\n @click=\"setOutputType('map')\"\n :disabled=\"geoJsonFields.length === 0\"\n type=\"button\"\n :title=\"geoJsonFields.length > 0 ? 'Map view' : 'No GeoJSON fields detected'\"\n class=\"relative -ml-px inline-flex items-center rounded-none rounded-r-md px-2 py-2 ring-1 ring-inset ring-gray-300 focus:z-10\"\n :class=\"[\n geoJsonFields.length === 0 ? 'text-gray-300 cursor-not-allowed bg-muted' : 'text-gray-400 hover:bg-page',\n outputType === 'map' ? 'bg-gray-200' : (geoJsonFields.length > 0 ? 'bg-surface' : '')\n ]\">\n <svg class=\"h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"1.5\" stroke=\"currentColor\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 6.75V15m6-6v8.25m.503 3.498 4.875-2.437c.381-.19.622-.58.622-1.006V4.82c0-.836-.88-1.38-1.628-1.006l-3.869 1.934c-.317.159-.69.159-1.006 0L9.503 3.252a1.125 1.125 0 0 0-1.006 0L3.622 5.689C3.24 5.88 3 6.27 3 6.695V19.18c0 .836.88 1.38 1.628 1.006l3.869-1.934c.317-.159.69-.159 1.006 0l4.994 2.497c.317.158.69.158 1.006 0Z\" />\n </svg>\n </button>\n </span>\n </div>\n <div v-if=\"isProjectionMenuSelected && (outputType === 'table' || outputType === 'json')\" class=\"flex items-center gap-2 w-full mt-2 flex-shrink-0\">\n <input\n ref=\"projectionInput\"\n v-model=\"projectionText\"\n type=\"text\"\n placeholder=\"Projection: name email, or -password\"\n class=\"flex-1 min-w-0 rounded border border-edge bg-surface px-2 py-1.5 text-sm font-mono placeholder:text-content-tertiary focus:border-primary focus:outline-none focus:ring-1 focus:ring-primary\"\n @focus=\"initProjection($event)\"\n @keydown.enter=\"applyProjectionFromInput()\"\n />\n </div>\n </div>\n <!-- In JSON view, this container is the scrollable element used for infinite scroll. -->\n <div class=\"documents-container relative\" ref=\"documentsContainerScroll\" @scroll=\"checkIfScrolledToBottom\">\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 <div v-else-if=\"outputType === 'table'\" class=\"flex-1 min-h-0 flex flex-col overflow-hidden\">\n <div\n ref=\"documentsScrollContainer\"\n class=\"overflow-x-auto overflow-y-auto flex-1 min-h-0 border border-edge rounded-lg bg-surface\"\n @scroll=\"checkIfScrolledToBottom\"\n >\n <table class=\"min-w-full border-collapse text-sm\">\n <thead class=\"sticky top-0 z-10 bg-slate-100 dark:bg-shark-800 border-b border-edge\">\n <tr>\n <th v-if=\"showRowNumbers\" class=\"px-3 py-2.5 text-left font-medium text-content border-r border-edge whitespace-nowrap align-middle w-0\">\n #\n </th>\n <th\n v-for=\"path in tableDisplayPaths\"\n :key=\"path.path\"\n class=\"px-3 py-2.5 text-left font-medium text-content border-r border-edge last:border-r-0 whitespace-nowrap align-middle\"\n >\n <div class=\"flex items-center gap-2\">\n <span\n @click=\"addPathFilter(path.path)\"\n class=\"cursor-pointer hover:text-primary truncate min-w-0\"\n :title=\"path.path\"\n >\n {{ path.path }}\n </span>\n <span class=\"text-xs text-content-tertiary shrink-0\">({{ path.instance || 'unknown' }})</span>\n <span class=\"inline-flex shrink-0 gap-0.5 items-center\">\n <button\n type=\"button\"\n @click.stop=\"sortDocs(1, path.path)\"\n class=\"p-0.5 rounded text-content-tertiary hover:text-content hover:bg-muted\"\n :class=\"{ 'text-primary font-semibold': sortBy[path.path] === 1 }\"\n :title=\"sortBy[path.path] === 1 ? 'Clear sort' : 'Sort ascending'\"\n >\n ↑\n </button>\n <button\n type=\"button\"\n @click.stop=\"sortDocs(-1, path.path)\"\n class=\"p-0.5 rounded text-content-tertiary hover:text-content hover:bg-muted\"\n :class=\"{ 'text-primary font-semibold': sortBy[path.path] === -1 }\"\n :title=\"sortBy[path.path] === -1 ? 'Clear sort' : 'Sort descending'\"\n >\n ↓\n </button>\n <button\n v-if=\"filteredPaths.length > 0\"\n type=\"button\"\n @click.stop=\"removeField(path)\"\n class=\"p-1.5 rounded-md border border-transparent text-content-tertiary hover:text-valencia-600 hover:bg-valencia-50 hover:border-valencia-200 focus:outline-none focus:ring-2 focus:ring-valencia-500/30\"\n title=\"Remove column\"\n aria-label=\"Remove column\"\n >\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\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M6 18 18 6M6 6l12 12\" />\n </svg>\n </button>\n </span>\n </div>\n </th>\n <th v-if=\"filteredPaths.length > 0\" class=\"px-2 py-2.5 border-r border-edge last:border-r-0 align-middle w-0 bg-slate-50 dark:bg-shark-800/80\">\n <div class=\"relative\" ref=\"addFieldContainer\">\n <button\n type=\"button\"\n @click=\"toggleAddFieldDropdown()\"\n class=\"flex items-center justify-center w-8 h-8 rounded border border-dashed border-edge text-content-tertiary hover:border-primary hover:text-primary hover:bg-primary-subtle/30\"\n title=\"Add column\"\n aria-label=\"Add column\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" stroke-width=\"2\" stroke=\"currentColor\" class=\"w-5 h-5\"> <path stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 4.5v15m7.5-7.5h-15\" /> </svg>\n </button>\n <div\n v-if=\"showAddFieldDropdown\"\n class=\"absolute right-0 top-full mt-1 z-[100] min-w-[180px] max-w-[280px] rounded-md border border-edge bg-surface shadow-lg py-1 max-h-48 overflow-y-auto\"\n >\n <input\n v-if=\"availablePathsToAdd.length > 5\"\n ref=\"addFieldFilterInput\"\n v-model=\"addFieldFilterText\"\n type=\"text\"\n placeholder=\"Filter fields...\"\n class=\"mx-2 mb-1 w-[calc(100%-1rem)] rounded border border-edge px-2 py-1 text-sm\"\n @click.stop\n />\n <button\n v-for=\"p in filteredPathsToAdd\"\n :key=\"p.path\"\n type=\"button\"\n class=\"w-full px-3 py-1.5 text-left text-sm hover:bg-muted\"\n @click.stop=\"addField(p)\"\n >\n {{ p.path }}\n </button>\n <p v-if=\"filteredPathsToAdd.length === 0\" class=\"px-3 py-2 text-sm text-content-tertiary\">\n {{ addFieldFilterText.trim() ? 'No matching fields' : 'All fields added' }}\n </p>\n </div>\n </div>\n </th>\n </tr>\n </thead>\n <tbody class=\"bg-surface\">\n <tr\n v-for=\"(document, docIndex) in documents\"\n :key=\"document._id\"\n @click=\"handleDocumentClick(document, $event)\"\n class=\"border-b border-edge cursor-pointer transition-colors hover:bg-muted/60\"\n :class=\"{ 'bg-primary-subtle/50 hover:bg-primary-subtle/70': selectedDocuments.some(x => x._id.toString() === document._id.toString()) }\"\n >\n <td v-if=\"showRowNumbers\" class=\"px-3 py-2 border-r border-edge align-top text-content-tertiary whitespace-nowrap\">\n {{ docIndex + 1 }}\n </td>\n <td\n v-for=\"schemaPath in tableDisplayPaths\"\n :key=\"schemaPath.path\"\n class=\"px-3 py-2 border-r border-edge last:border-r-0 align-top max-w-[280px]\"\n >\n <div class=\"table-cell-content flex items-center gap-1.5 min-w-0 group\">\n <span class=\"min-w-0 overflow-hidden text-ellipsis flex-1\">\n <component\n :is=\"getComponentForPath(schemaPath)\"\n :value=\"getValueForPath(document, schemaPath.path)\"\n :allude=\"getReferenceModel(schemaPath)\"\n />\n </span>\n <button\n type=\"button\"\n class=\"table-cell-copy shrink-0 p-1 rounded text-content-tertiary hover:text-content hover:bg-muted focus:outline-none focus:ring-1 focus:ring-edge\"\n aria-label=\"Copy cell value\"\n @click.stop=\"copyCellValue(getValueForPath(document, schemaPath.path))\"\n >\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=\"M8 5H6a2 2 0 0 0-2 2v12a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-1M8 5a2 2 0 0 0 2 2h2a2 2 0 0 0 2-2M8 5a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2m0 0h2a2 2 0 0 1 2 2v3m2 4H10m0 0l3-3m-3 3l3 3\" />\n </svg>\n </button>\n </div>\n </td>\n <td v-if=\"filteredPaths.length > 0\" class=\"w-0 px-0 py-0 border-r border-edge last:border-r-0 bg-slate-50/50 dark:bg-shark-800/30\"></td>\n </tr>\n </tbody>\n </table>\n </div>\n <div v-if=\"outputType === 'table' && (loadingMore || (status === 'loading' && documents.length > 0))\" class=\"flex items-center justify-center gap-2 py-3 text-sm text-content-tertiary border-t border-edge bg-surface\">\n <img src=\"images/loader.gif\" alt=\"\" class=\"h-5 w-5\">\n <span>Loading documents…</span>\n </div>\n <p v-if=\"outputType === 'table' && documents.length === 0 && status === 'loaded'\" class=\"mt-2 text-sm text-content-tertiary px-1\">\n No documents to show. Use Projection in the menu to choose columns.\n </p>\n </div>\n <div v-else-if=\"outputType === 'json'\" class=\"flex flex-col space-y-2 p-1 mt-1\">\n <div\n v-for=\"document in documents\"\n :key=\"document._id\"\n @click=\"handleDocumentContainerClick(document, $event)\"\n :class=\"[\n 'group relative transition-colors rounded-md border border-slate-100',\n selectedDocuments.some(x => x._id.toString() === document._id.toString()) ? 'bg-blue-200' : 'hover:shadow-sm hover:border-slate-300 bg-surface'\n ]\"\n >\n <button\n type=\"button\"\n class=\"absolute top-2 right-2 z-10 inline-flex items-center rounded bg-primary px-2 py-1 text-xs font-semibold text-primary-text shadow-sm transition-opacity duration-150 opacity-0 group-hover:opacity-100 focus-visible:opacity-100 hover:bg-primary-hover focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\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 v-if=\"outputType === 'json' && (loadingMore || (status === 'loading' && documents.length > 0))\" class=\"flex items-center justify-center gap-2 py-3 text-sm text-content-tertiary\">\n <img src=\"images/loader.gif\" alt=\"\" class=\"h-5 w-5\">\n <span>Loading documents…</span>\n </div>\n </div>\n <div v-else-if=\"outputType === 'map'\" class=\"flex flex-col h-full\">\n <div class=\"p-2 bg-surface border-b flex items-center gap-2\">\n <label class=\"text-sm font-medium text-content-secondary\">GeoJSON Field:</label>\n <select\n :value=\"selectedGeoField\"\n @change=\"setSelectedGeoField($event.target.value)\"\n class=\"rounded-md border border-edge-strong py-1 px-2 text-sm focus:border-primary focus:ring-primary\"\n >\n <option v-for=\"field in geoJsonFields\" :key=\"field.path\" :value=\"field.path\">\n {{ field.label }}\n </option>\n </select>\n <async-button\n @click=\"loadMoreDocuments\"\n :disabled=\"loadedAllDocs\"\n type=\"button\"\n class=\"rounded px-2 py-1 text-xs font-semibold text-primary-text shadow-sm focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary\"\n :class=\"loadedAllDocs ? 'bg-gray-400 cursor-not-allowed' : 'bg-primary hover:bg-primary-hover'\"\n >\n Load more\n </async-button>\n </div>\n <div class=\"flex-1 min-h-[400px]\" ref=\"modelsMap\"></div>\n </div>\n <div v-if=\"status === 'loading' && !loadingMore && documents.length === 0\" class=\"loader loader-overlay\" aria-busy=\"true\">\n <img src=\"images/loader.gif\" alt=\"Loading\">\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-primary-subtle px-2 py-0.5 text-xs font-semibold text-primary\">\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-content-secondary\">Documents</div>\n <div class=\"text-content\">{{ formatNumber(collectionInfo.documentCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Indexes</div>\n <div class=\"text-content\">{{ formatNumber(collectionInfo.indexCount) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Total Index Size</div>\n <div class=\"text-content\">{{ formatCollectionSize(collectionInfo.totalIndexSize) }}</div>\n </div>\n <div class=\"flex justify-between gap-4\">\n <div class=\"font-semibold text-content-secondary\">Total Storage Size</div>\n <div class=\"text-content\">{{ 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-content-secondary\">Collation</div>\n <div class=\"text-content\">{{ collectionInfo.hasCollation ? 'Yes' : 'No' }}</div>\n </div>\n <div v-if=\"collectionInfo.hasCollation\" class=\"rounded bg-muted 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-content-secondary\">Capped</div>\n <div class=\"text-content\">{{ collectionInfo.capped ? 'Yes' : 'No' }}</div>\n </div>\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-page0 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 <model-switcher\n :show=\"showModelSwitcher\"\n :models=\"models\"\n :recently-viewed-models=\"recentlyViewedModels\"\n :model-document-counts=\"modelDocumentCounts\"\n @close=\"showModelSwitcher = false\"\n @select=\"selectSwitcherModel\"\n ></model-switcher>\n</div>\n";
50269
50792
 
50270
50793
  /***/ },
50271
50794
 
@@ -50309,7 +50832,7 @@ module.exports = "<div class=\"w-full h-full flex items-center justify-center\">
50309
50832
  (module) {
50310
50833
 
50311
50834
  "use strict";
50312
- module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'\">\n <img src=\"images/loader.gif\" alt=\"Loading\" />\n </div>\n <div v-else-if=\"status === 'error'\" class=\"text-red-600\">\n {{ errorMessage }}\n </div>\n <template v-else-if=\"taskGroup\">\n <div class=\"pb-24\">\n <router-link :to=\"{ name: 'tasks' }\" class=\"inline-flex items-center gap-1 text-gray-500 hover:text-gray-700 mb-4\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Back to Task Groups\n </router-link>\n <div class=\"mb-4\">\n <label class=\"block text-sm font-medium text-gray-700 mb-1\">Filter by Date:</label>\n <select v-model=\"selectedRange\" @change=\"updateDateRange\" class=\"border-gray-300 rounded-md shadow-sm w-full p-2 max-w-xs\">\n <option v-for=\"option in dateFilters\" :key=\"option.value\" :value=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div>\n <task-details\n :task-group=\"taskGroup\"\n :back-to=\"{ name: 'tasks' }\"\n :show-back-button=\"false\"\n @task-created=\"onTaskCreated\"\n @task-cancelled=\"onTaskCancelled\"\n ></task-details>\n </div>\n <div\n v-if=\"numDocs > 0\"\n class=\"fixed bottom-0 left-0 right-0 z-10 px-4 py-4 bg-white border-t border-gray-200 shadow-[0_-4px_6px_-1px_rgba(0,0,0,0.1)]\"\n >\n <div class=\"flex flex-wrap items-center justify-between gap-4 max-w-6xl mx-auto\">\n <div class=\"flex items-center gap-6\">\n <p class=\"text-sm text-gray-600\">\n <span class=\"font-medium text-gray-900\">{{ Math.min((page - 1) * pageSize + 1, numDocs) }}–{{ Math.min(page * pageSize, numDocs) }}</span>\n <span class=\"mx-1\">of</span>\n <span class=\"font-medium text-gray-900\">{{ numDocs }}</span>\n <span class=\"ml-1 text-gray-500\">tasks</span>\n </p>\n <div class=\"flex items-center gap-2\">\n <label class=\"text-sm font-medium text-gray-700\">Per page</label>\n <select\n v-model.number=\"pageSize\"\n @change=\"onPageSizeChange\"\n class=\"border border-gray-300 rounded-md shadow-sm px-3 py-2 text-sm text-gray-700 bg-white hover:border-gray-400 focus:outline-none focus:ring-2 focus:ring-ultramarine-500 focus:border-ultramarine-500\"\n >\n <option v-for=\"n in pageSizeOptions\" :key=\"n\" :value=\"n\">{{ n }}</option>\n </select>\n </div>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n type=\"button\"\n :disabled=\"page <= 1\"\n @click=\"goToPage(page - 1)\"\n class=\"inline-flex items-center gap-1.5 px-4 py-2 text-sm font-medium rounded-md border transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white bg-white text-gray-700 border-gray-300 hover:bg-gray-50 hover:border-gray-400\"\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=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Previous\n </button>\n <span class=\"px-4 py-2 text-sm text-gray-600 min-w-[7rem] text-center\">\n Page <span class=\"font-semibold text-gray-900\">{{ page }}</span> of <span class=\"font-semibold text-gray-900\">{{ Math.max(1, Math.ceil(numDocs / pageSize)) }}</span>\n </span>\n <button\n type=\"button\"\n :disabled=\"page >= Math.ceil(numDocs / pageSize)\"\n @click=\"goToPage(page + 1)\"\n class=\"inline-flex items-center gap-1.5 px-4 py-2 text-sm font-medium rounded-md border transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-white bg-white text-gray-700 border-gray-300 hover:bg-gray-50 hover:border-gray-400\"\n >\n Next\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=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n </div>\n </div>\n </template>\n</div>\n";
50835
+ module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'\">\n <img src=\"images/loader.gif\" alt=\"Loading\" />\n </div>\n <div v-else-if=\"status === 'error'\" class=\"text-red-600\">\n {{ errorMessage }}\n </div>\n <template v-else-if=\"taskGroup\">\n <div class=\"pb-24\">\n <router-link :to=\"{ name: 'tasks' }\" class=\"inline-flex items-center gap-1 text-gray-500 hover:text-gray-700 mb-4\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Back to Task Groups\n </router-link>\n <div class=\"mb-4\">\n <label class=\"block text-sm font-medium text-gray-700 mb-1\">Filter by Date:</label>\n <select v-model=\"selectedRange\" @change=\"updateDateRange\" class=\"border-gray-300 rounded-md shadow-sm w-full p-2 max-w-xs\">\n <option v-for=\"option in dateFilters\" :key=\"option.value\" :value=\"option.value\">\n {{ option.label }}\n </option>\n </select>\n </div>\n <task-details\n :task-group=\"taskGroup\"\n :back-to=\"{ name: 'tasks' }\"\n :show-back-button=\"false\"\n @task-created=\"onTaskCreated\"\n @task-cancelled=\"onTaskCancelled\"\n ></task-details>\n </div>\n <div\n v-if=\"numDocs > 0\"\n class=\"fixed bottom-0 left-0 right-0 z-10 px-4 py-4 bg-surface border-t border-edge shadow-[0_-4px_6px_-1px_rgba(0,0,0,0.1)]\"\n >\n <div class=\"flex flex-wrap items-center justify-between gap-4 max-w-6xl mx-auto\">\n <div class=\"flex items-center gap-6\">\n <p class=\"text-sm text-content-tertiary\">\n <span class=\"font-medium text-content\">{{ Math.min((page - 1) * pageSize + 1, numDocs) }}–{{ Math.min(page * pageSize, numDocs) }}</span>\n <span class=\"mx-1\">of</span>\n <span class=\"font-medium text-content\">{{ numDocs }}</span>\n <span class=\"ml-1 text-content-tertiary\">tasks</span>\n </p>\n <div class=\"flex items-center gap-2\">\n <label class=\"text-sm font-medium text-content-secondary\">Per page</label>\n <select\n v-model.number=\"pageSize\"\n @change=\"onPageSizeChange\"\n class=\"border border-edge rounded-md shadow-sm px-3 py-2 text-sm text-content-secondary bg-surface hover:border-edge-strong focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary\"\n >\n <option v-for=\"n in pageSizeOptions\" :key=\"n\" :value=\"n\">{{ n }}</option>\n </select>\n </div>\n </div>\n <div class=\"flex items-center gap-1\">\n <button\n type=\"button\"\n :disabled=\"page <= 1\"\n @click=\"goToPage(page - 1)\"\n class=\"inline-flex items-center gap-1.5 px-4 py-2 text-sm font-medium rounded-md border transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-surface bg-surface text-content-secondary border-edge hover:bg-page hover:border-edge-strong\"\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=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Previous\n </button>\n <span class=\"px-4 py-2 text-sm text-content-tertiary min-w-[7rem] text-center\">\n Page <span class=\"font-semibold text-content\">{{ page }}</span> of <span class=\"font-semibold text-content\">{{ Math.max(1, Math.ceil(numDocs / pageSize)) }}</span>\n </span>\n <button\n type=\"button\"\n :disabled=\"page >= Math.ceil(numDocs / pageSize)\"\n @click=\"goToPage(page + 1)\"\n class=\"inline-flex items-center gap-1.5 px-4 py-2 text-sm font-medium rounded-md border transition-colors disabled:opacity-50 disabled:cursor-not-allowed disabled:hover:bg-surface bg-surface text-content-secondary border-edge hover:bg-page hover:border-edge-strong\"\n >\n Next\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=\"M9 5l7 7-7 7\"></path>\n </svg>\n </button>\n </div>\n </div>\n </div>\n </template>\n</div>\n";
50313
50836
 
50314
50837
  /***/ },
50315
50838
 
@@ -50320,7 +50843,7 @@ module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'
50320
50843
  (module) {
50321
50844
 
50322
50845
  "use strict";
50323
- module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'\">\n <img src=\"images/loader.gif\" alt=\"Loading\" />\n </div>\n <div v-else-if=\"status === 'error'\" class=\"text-red-600\">\n {{ errorMessage }}\n </div>\n <div v-else-if=\"status === 'notfound'\" class=\"text-gray-600\">\n Task not found.\n </div>\n <div v-else-if=\"task\" class=\"max-w-4xl\">\n <button @click=\"goBack\" class=\"text-content-tertiary hover:text-content-secondary mb-4 flex items-center gap-1\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Back to {{ task.name }}\n </button>\n <h1 class=\"text-2xl font-bold text-content-secondary mb-1\">{{ task.name }}</h1>\n <p class=\"text-content-tertiary mb-6\">Task details</p>\n\n <div class=\"bg-surface rounded-lg shadow p-6 md:p-8\">\n <div class=\"flex items-center gap-3 mb-6\">\n <span class=\"text-sm font-medium text-content\">ID: {{ task.id }}</span>\n <span\n class=\"text-xs px-2 py-1 rounded-full font-medium\"\n :class=\"getStatusColor(task.status)\"\n >\n {{ task?.status }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6\">\n <div>\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Scheduled At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.scheduledAt) }}</div>\n </div>\n <div v-if=\"task?.startedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Started At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.startedAt) }}</div>\n </div>\n <div v-if=\"task?.completedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Completed At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.completedAt) }}</div>\n </div>\n </div>\n\n <div v-if=\"task?.params\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Params</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.params\"></list-json>\n </div>\n </div>\n\n <div v-if=\"task?.result\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Result</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.result\"></list-json>\n </div>\n </div>\n\n <div v-if=\"task?.error\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Error</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.error\"></list-json>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-3 pt-4 border-t border-edge\">\n <button\n @click=\"showRescheduleConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-blue-600 hover:to-blue-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n :disabled=\"task.status === 'in_progress'\"\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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n Reschedule\n </button>\n <button\n @click=\"showRunConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-green-600 hover:to-green-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n :disabled=\"task.status === 'in_progress'\"\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=\"M5 3l14 9-14 9V3z\"></path>\n </svg>\n Run Now\n </button>\n <button\n v-if=\"task.status === 'pending'\"\n @click=\"showCancelConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-red-600 hover:to-red-700\"\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=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n Cancel Task\n </button>\n </div>\n </div>\n </div>\n\n <!-- Reschedule Modal -->\n <modal v-if=\"showRescheduleModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRescheduleModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Reschedule Task</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Reschedule task <strong>{{ selectedTask?.id }}</strong>?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will reset the task's status and schedule it to run again.</p>\n <label for=\"newScheduledTime\" class=\"block text-sm font-medium text-content-secondary mb-2\">New Scheduled Time</label>\n <input\n id=\"newScheduledTime\"\n v-model=\"newScheduledTime\"\n type=\"datetime-local\"\n class=\"w-full px-3 py-2 border border-edge-strong rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 mb-4\"\n />\n <div class=\"flex gap-3\">\n <button @click=\"confirmRescheduleTask\" class=\"flex-1 bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 font-medium\">Reschedule</button>\n <button @click=\"showRescheduleModal = false\" class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\">Cancel</button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Run Modal -->\n <modal v-if=\"showRunModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRunModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Run Task Now</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Run task <strong>{{ selectedTask?.id }}</strong> immediately?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will execute the task right away, bypassing its scheduled time.</p>\n <div class=\"flex gap-3\">\n <button @click=\"confirmRunTask\" class=\"flex-1 bg-green-600 text-white px-4 py-2 rounded-md hover:bg-green-700 font-medium\">Run Now</button>\n <button @click=\"showRunModal = false\" class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\">Cancel</button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Cancel Task Modal -->\n <modal v-if=\"showCancelModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showCancelModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Cancel Task</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Cancel task <strong>{{ selectedTask?.id }}</strong>?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will permanently cancel the task and it cannot be undone.</p>\n <div class=\"flex gap-3\">\n <button @click=\"confirmCancelTask\" class=\"flex-1 bg-red-600 text-white px-4 py-2 rounded-md hover:bg-red-700 font-medium\">Cancel Task</button>\n <button @click=\"showCancelModal = false\" class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\">Keep Task</button>\n </div>\n </div>\n </template>\n </modal>\n</div>\n";
50846
+ module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'\">\n <img src=\"images/loader.gif\" alt=\"Loading\" />\n </div>\n <div v-else-if=\"status === 'error'\" class=\"text-red-600\">\n {{ errorMessage }}\n </div>\n <div v-else-if=\"status === 'notfound'\" class=\"text-gray-600\">\n Task not found.\n </div>\n <div v-else-if=\"task\" class=\"max-w-4xl\">\n <button @click=\"goBack\" class=\"text-content-tertiary hover:text-content-secondary mb-4 flex items-center gap-1\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n Back to {{ task.name }}\n </button>\n <h1 class=\"text-2xl font-bold text-content-secondary mb-1\">{{ task.name }}</h1>\n <p class=\"text-content-tertiary mb-6\">Task details</p>\n\n <div class=\"bg-surface rounded-lg shadow p-6 md:p-8\">\n <div class=\"flex items-center gap-3 mb-6\">\n <span class=\"text-sm font-medium text-content\">ID: {{ task.id }}</span>\n <span\n class=\"text-xs px-2 py-1 rounded-full font-medium\"\n :class=\"getStatusColor(task.status)\"\n >\n {{ task?.status }}\n </span>\n </div>\n\n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-6 mb-6\">\n <div>\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Scheduled At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.scheduledAt) }}</div>\n </div>\n <div v-if=\"task?.startedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Started At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.startedAt) }}</div>\n </div>\n <div v-if=\"task?.completedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Completed At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.completedAt) }}</div>\n </div>\n </div>\n\n <div v-if=\"task?.params\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Params</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.params\"></list-json>\n </div>\n </div>\n\n <div v-if=\"task?.result\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Result</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.result\"></list-json>\n </div>\n </div>\n\n <div v-if=\"task?.error\" class=\"mb-6\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Error</label>\n <div class=\"bg-page rounded-md p-4\">\n <list-json :value=\"task.error\"></list-json>\n </div>\n </div>\n\n <div class=\"flex flex-wrap gap-3 pt-4 border-t border-edge\">\n <button\n @click=\"showRescheduleConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-blue-600 hover:to-blue-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n :disabled=\"task.status === 'in_progress'\"\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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n Reschedule\n </button>\n <button\n @click=\"showRunConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-green-600 hover:to-green-700 disabled:opacity-50 disabled:cursor-not-allowed\"\n :disabled=\"task.status === 'in_progress'\"\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=\"M5 3l14 9-14 9V3z\"></path>\n </svg>\n Run Now\n </button>\n <button\n v-if=\"task.status === 'pending'\"\n @click=\"showCancelConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-red-600 hover:to-red-700\"\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=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n Cancel Task\n </button>\n </div>\n </div>\n </div>\n\n <!-- Reschedule Modal -->\n <modal v-if=\"showRescheduleModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRescheduleModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Reschedule Task</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Reschedule task <strong>{{ selectedTask?.id }}</strong>?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will reset the task's status and schedule it to run again.</p>\n <label for=\"newScheduledTime\" class=\"block text-sm font-medium text-content-secondary mb-2\">New Scheduled Time</label>\n <input\n id=\"newScheduledTime\"\n v-model=\"newScheduledTime\"\n type=\"datetime-local\"\n class=\"w-full px-3 py-2 border border-edge-strong rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500 mb-4\"\n />\n <div class=\"flex gap-3\">\n <button @click=\"confirmRescheduleTask\" class=\"flex-1 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-md hover:from-blue-600 hover:to-blue-700 font-medium\">Reschedule</button>\n <button @click=\"showRescheduleModal = false\" class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\">Cancel</button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Run Modal -->\n <modal v-if=\"showRunModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRunModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Run Task Now</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Run task <strong>{{ selectedTask?.id }}</strong> immediately?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will execute the task right away, bypassing its scheduled time.</p>\n <div class=\"flex gap-3\">\n <button @click=\"confirmRunTask\" class=\"flex-1 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-md hover:from-green-600 hover:to-green-700 font-medium\">Run Now</button>\n <button @click=\"showRunModal = false\" class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\">Cancel</button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Cancel Task Modal -->\n <modal v-if=\"showCancelModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showCancelModal = false\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <h3 class=\"text-lg font-medium text-content mb-4\">Cancel Task</h3>\n <p class=\"text-sm text-gray-600 mb-2\">Cancel task <strong>{{ selectedTask?.id }}</strong>?</p>\n <p class=\"text-sm text-content-tertiary mb-4\">This will permanently cancel the task and it cannot be undone.</p>\n <div class=\"flex gap-3\">\n <button @click=\"confirmCancelTask\" class=\"flex-1 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-md hover:from-red-600 hover:to-red-700 font-medium\">Cancel Task</button>\n <button @click=\"showCancelModal = false\" class=\"flex-1 bg-muted hover:bg-page text-content-secondary px-4 py-2 rounded-md border border-edge-strong font-medium\">Keep Task</button>\n </div>\n </div>\n </template>\n </modal>\n</div>\n";
50324
50847
 
50325
50848
  /***/ },
50326
50849
 
@@ -50331,7 +50854,7 @@ module.exports = "<div class=\"p-4 space-y-6\">\n <div v-if=\"status === 'init'
50331
50854
  (module) {
50332
50855
 
50333
50856
  "use strict";
50334
- module.exports = "<div class=\"p-4 space-y-6\">\n <div class=\"flex items-center justify-between\">\n <div>\n <button v-if=\"showBackButton\" @click=\"goBack\" class=\"text-content-tertiary hover:text-content-secondary mb-2\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n {{ backLabel }}\n </button>\n <h1 class=\"text-2xl font-bold text-content-secondary\">{{ taskGroup.name }}</h1>\n <p class=\"text-content-tertiary\">Total: {{ taskGroup.totalCount }} tasks</p>\n </div>\n\n </div>\n\n <!-- Status Summary -->\n <div class=\"space-y-3\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-sm font-medium text-content-secondary\">Status</span>\n <div class=\"flex rounded-md shadow-sm\" role=\"group\">\n <button\n type=\"button\"\n @click=\"statusView = 'summary'\"\n class=\"px-3 py-1.5 text-sm font-medium rounded-l-md border transition-colors\"\n :class=\"statusView === 'summary' ? 'bg-primary text-primary-text border-primary' : 'bg-surface text-content-secondary border-edge-strong hover:bg-page'\"\n >\n Summary\n </button>\n <button\n type=\"button\"\n @click=\"statusView = 'chart'\"\n class=\"px-3 py-1.5 text-sm font-medium rounded-r-md border border-l-0 transition-colors\"\n :class=\"statusView === 'chart' ? 'bg-primary text-primary-text border-primary' : 'bg-surface text-content-secondary border-edge-strong hover:bg-page'\"\n >\n Chart\n </button>\n </div>\n </div>\n <!-- Summary view -->\n <div v-show=\"statusView === 'summary'\" class=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n <button \n @click=\"filterByStatus('pending')\"\n class=\"bg-yellow-50 border border-yellow-200 rounded-md p-3 text-center hover:bg-yellow-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-yellow-400': currentFilter === 'pending' }\"\n >\n <div class=\"text-xs text-yellow-600 font-medium\">Pending</div>\n <div class=\"text-lg font-bold text-yellow-700\">{{ taskGroup.statusCounts.pending || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('succeeded')\"\n class=\"bg-green-50 border border-green-200 rounded-md p-3 text-center hover:bg-green-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-green-400': currentFilter === 'succeeded' }\"\n >\n <div class=\"text-xs text-green-600 font-medium\">Succeeded</div>\n <div class=\"text-lg font-bold text-green-700\">{{ taskGroup.statusCounts.succeeded || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('failed')\"\n class=\"bg-red-50 border border-red-200 rounded-md p-3 text-center hover:bg-red-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-red-400': currentFilter === 'failed' }\"\n >\n <div class=\"text-xs text-red-600 font-medium\">Failed</div>\n <div class=\"text-lg font-bold text-red-700\">{{ taskGroup.statusCounts.failed || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('cancelled')\"\n class=\"bg-page border border-edge rounded-md p-3 text-center hover:bg-muted transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-gray-400': currentFilter === 'cancelled' }\"\n >\n <div class=\"text-xs text-gray-600 font-medium\">Cancelled</div>\n <div class=\"text-lg font-bold text-content-secondary\">{{ taskGroup.statusCounts.cancelled || 0 }}</div>\n </button>\n </div>\n <!-- Chart view -->\n <div v-show=\"statusView === 'chart'\" class=\"flex flex-col items-center justify-center bg-surface border border-edge rounded-lg p-4 gap-3\" style=\"min-height: 280px;\">\n <div v-if=\"taskGroup.totalCount > 0\" class=\"w-[240px] h-[240px] shrink-0\">\n <canvas ref=\"statusPieChart\" width=\"240\" height=\"240\" class=\"block\"></canvas>\n </div>\n <p v-else class=\"text-content-tertiary text-sm py-8\">No tasks to display</p>\n <!-- Selection labels: show which segment is selected (click to filter) -->\n <div v-if=\"taskGroup.totalCount > 0\" class=\"flex flex-wrap justify-center gap-2\">\n <button\n v-for=\"status in statusOrderForDisplay\"\n :key=\"status\"\n type=\"button\"\n class=\"text-xs px-2 py-1 rounded-full font-medium transition-all cursor-pointer\"\n :class=\"currentFilter === status ? getStatusPillClass(status) : 'bg-muted text-content-tertiary hover:bg-muted'\"\n @click=\"filterByStatus(status)\"\n >\n {{ statusLabel(status) }}\n </button>\n </div>\n </div>\n </div>\n\n <!-- Task List -->\n <div class=\"bg-surface rounded-lg shadow\">\n <div class=\"px-6 py-6 border-b border-edge flex items-center justify-between bg-page\">\n <h2 class=\"text-xl font-bold text-content\">\n Individual Tasks\n <span v-if=\"currentFilter\" class=\"ml-3 text-base font-semibold text-primary\">\n (Filtered by {{ currentFilter }})\n </span>\n </h2>\n <button \n v-if=\"currentFilter\"\n @click=\"clearFilter\"\n class=\"text-sm font-semibold text-primary hover:text-primary\"\n >\n Show All\n </button>\n </div>\n <div class=\"divide-y divide-gray-200\">\n <div v-for=\"task in sortedTasks\" :key=\"task.id\" class=\"p-6\">\n <div class=\"flex items-start justify-between\">\n <div class=\"flex-1\">\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-sm font-medium text-content\">Task ID: {{ task.id }}</span>\n <router-link\n v-if=\"backTo\"\n :to=\"taskDetailRoute(task)\"\n class=\"text-sm text-primary hover:text-primary font-medium\"\n >\n View details\n </router-link>\n <span\n class=\"text-xs px-2 py-1 rounded-full font-medium\"\n :class=\"getStatusColor(task.status)\"\n >\n {{ task.status }}\n </span>\n </div>\n \n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4\">\n <div>\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Scheduled At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.scheduledAt) }}</div>\n </div>\n <div v-if=\"task.startedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Started At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.startedAt) }}</div>\n </div>\n <div v-if=\"task.completedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Completed At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.completedAt) }}</div>\n </div>\n <div v-if=\"task.error\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Error</label>\n <div class=\"text-sm text-red-600\">{{ task.error }}</div>\n </div>\n </div>\n\n <!-- Task Parameters -->\n <div v-if=\"task.parameters && Object.keys(task.parameters).length > 0\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Parameters</label>\n <div class=\"bg-page rounded-md p-3\">\n <pre class=\"text-sm text-gray-800 whitespace-pre-wrap\">{{ JSON.stringify(task.parameters, null, 2) }}</pre>\n </div>\n </div>\n </div>\n \n <div class=\"flex flex-col gap-3 ml-6\">\n <button \n @click=\"showRescheduleConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-blue-600 hover:to-blue-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none\"\n :disabled=\"task.status === 'in_progress'\"\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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n Reschedule\n </button>\n <button \n @click=\"showRunConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-green-600 hover:to-green-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none\"\n :disabled=\"task.status === 'in_progress'\"\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=\"M5 3l14 9-14 9V3z\"></path>\n </svg>\n Run Now\n </button>\n <button \n v-if=\"task.status === 'pending'\"\n @click=\"showCancelConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-red-600 hover:to-red-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg\"\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=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n Cancel\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reschedule Confirmation Modal -->\n <modal v-if=\"showRescheduleModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRescheduleModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-blue-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Reschedule Task</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to reschedule task <strong>{{ selectedTask?.id }}</strong>?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will reset the task's status and schedule it to run again.\n </p>\n \n <div class=\"mt-4\">\n <label for=\"newScheduledTime\" class=\"block text-sm font-medium text-content-secondary mb-2\">\n New Scheduled Time\n </label>\n <input\n id=\"newScheduledTime\"\n v-model=\"newScheduledTime\"\n type=\"datetime-local\"\n class=\"w-full px-3 py-2 border border-edge-strong rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500\"\n required\n />\n </div>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmRescheduleTask\"\n class=\"flex-1 bg-blue-600 text-white px-4 py-2 rounded-md hover:bg-blue-700 font-medium\"\n >\n Reschedule\n </button>\n <button \n @click=\"showRescheduleModal = false\"\n class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\"\n >\n Cancel\n </button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Run Task Confirmation Modal -->\n <modal v-if=\"showRunModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRunModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.828 14.828a4 4 0 01-5.656 0M9 10h1m4 0h1m-6 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Run Task Now</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to run task <strong>{{ selectedTask?.id }}</strong> immediately?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will execute the task right away, bypassing its scheduled time.\n </p>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmRunTask\"\n class=\"flex-1 bg-green-600 text-white px-4 py-2 rounded-md hover:bg-green-700 font-medium\"\n >\n Run Now\n </button>\n <button \n @click=\"showRunModal = false\"\n class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\"\n >\n Cancel\n </button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Cancel Task Confirmation Modal -->\n <modal v-if=\"showCancelModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showCancelModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-red-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Cancel Task</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to cancel task <strong>{{ selectedTask?.id }}</strong>?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will permanently cancel the task and it cannot be undone.\n </p>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmCancelTask\"\n class=\"flex-1 bg-red-600 text-white px-4 py-2 rounded-md hover:bg-red-700 font-medium\"\n >\n Cancel Task\n </button>\n <button \n @click=\"showCancelModal = false\"\n class=\"flex-1 bg-gray-300 text-content-secondary px-4 py-2 rounded-md hover:bg-gray-400 font-medium\"\n >\n Keep Task\n </button>\n </div>\n </div>\n </template>\n </modal>\n</div>\n\n";
50857
+ module.exports = "<div class=\"p-4 space-y-6\">\n <div class=\"flex items-center justify-between\">\n <div>\n <button v-if=\"showBackButton\" @click=\"goBack\" class=\"text-content-tertiary hover:text-content-secondary mb-2\">\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\" d=\"M15 19l-7-7 7-7\"></path>\n </svg>\n {{ backLabel }}\n </button>\n <h1 class=\"text-2xl font-bold text-content-secondary\">{{ taskGroup.name }}</h1>\n <p class=\"text-content-tertiary\">Total: {{ taskGroup.totalCount }} tasks</p>\n </div>\n\n </div>\n\n <!-- Status Summary -->\n <div class=\"space-y-3\">\n <div class=\"flex items-center justify-between\">\n <span class=\"text-sm font-medium text-content-secondary\">Status</span>\n <div class=\"flex rounded-md shadow-sm\" role=\"group\">\n <button\n type=\"button\"\n @click=\"statusView = 'summary'\"\n class=\"px-3 py-1.5 text-sm font-medium rounded-l-md border transition-colors\"\n :class=\"statusView === 'summary' ? 'bg-primary text-primary-text border-primary' : 'bg-surface text-content-secondary border-edge-strong hover:bg-page'\"\n >\n Summary\n </button>\n <button\n type=\"button\"\n @click=\"statusView = 'chart'\"\n class=\"px-3 py-1.5 text-sm font-medium rounded-r-md border border-l-0 transition-colors\"\n :class=\"statusView === 'chart' ? 'bg-primary text-primary-text border-primary' : 'bg-surface text-content-secondary border-edge-strong hover:bg-page'\"\n >\n Chart\n </button>\n </div>\n </div>\n <!-- Summary view -->\n <div v-show=\"statusView === 'summary'\" class=\"grid grid-cols-2 sm:grid-cols-4 gap-4\">\n <button \n @click=\"filterByStatus('pending')\"\n class=\"bg-yellow-50 border border-yellow-200 rounded-md p-3 text-center hover:bg-yellow-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-yellow-400': currentFilter === 'pending' }\"\n >\n <div class=\"text-xs text-yellow-600 font-medium\">Pending</div>\n <div class=\"text-lg font-bold text-yellow-700\">{{ taskGroup.statusCounts.pending || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('succeeded')\"\n class=\"bg-green-50 border border-green-200 rounded-md p-3 text-center hover:bg-green-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-green-400': currentFilter === 'succeeded' }\"\n >\n <div class=\"text-xs text-green-600 font-medium\">Succeeded</div>\n <div class=\"text-lg font-bold text-green-700\">{{ taskGroup.statusCounts.succeeded || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('failed')\"\n class=\"bg-red-50 border border-red-200 rounded-md p-3 text-center hover:bg-red-100 transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-red-400': currentFilter === 'failed' }\"\n >\n <div class=\"text-xs text-red-600 font-medium\">Failed</div>\n <div class=\"text-lg font-bold text-red-700\">{{ taskGroup.statusCounts.failed || 0 }}</div>\n </button>\n <button \n @click=\"filterByStatus('cancelled')\"\n class=\"bg-page border border-edge rounded-md p-3 text-center hover:bg-muted transition-colors cursor-pointer\"\n :class=\"{ 'ring-2 ring-gray-400': currentFilter === 'cancelled' }\"\n >\n <div class=\"text-xs text-gray-600 font-medium\">Cancelled</div>\n <div class=\"text-lg font-bold text-content-secondary\">{{ taskGroup.statusCounts.cancelled || 0 }}</div>\n </button>\n </div>\n <!-- Chart view -->\n <div v-show=\"statusView === 'chart'\" class=\"flex flex-col items-center justify-center bg-surface border border-edge rounded-lg p-4 gap-3\" style=\"min-height: 280px;\">\n <div v-if=\"taskGroup.totalCount > 0\" class=\"w-[240px] h-[240px] shrink-0\">\n <canvas ref=\"statusPieChart\" width=\"240\" height=\"240\" class=\"block\"></canvas>\n </div>\n <p v-else class=\"text-content-tertiary text-sm py-8\">No tasks to display</p>\n <!-- Selection labels: show which segment is selected (click to filter) -->\n <div v-if=\"taskGroup.totalCount > 0\" class=\"flex flex-wrap justify-center gap-2\">\n <button\n v-for=\"status in statusOrderForDisplay\"\n :key=\"status\"\n type=\"button\"\n class=\"text-xs px-2 py-1 rounded-full font-medium transition-all cursor-pointer\"\n :class=\"currentFilter === status ? getStatusPillClass(status) : 'bg-muted text-content-tertiary hover:bg-muted'\"\n @click=\"filterByStatus(status)\"\n >\n {{ statusLabel(status) }}\n </button>\n </div>\n </div>\n </div>\n\n <!-- Task List -->\n <div class=\"bg-surface rounded-lg shadow\">\n <div class=\"px-6 py-6 border-b border-edge flex items-center justify-between bg-page\">\n <h2 class=\"text-xl font-bold text-content\">\n Individual Tasks\n <span v-if=\"currentFilter\" class=\"ml-3 text-base font-semibold text-primary\">\n (Filtered by {{ currentFilter }})\n </span>\n </h2>\n <button \n v-if=\"currentFilter\"\n @click=\"clearFilter\"\n class=\"text-sm font-semibold text-primary hover:text-primary\"\n >\n Show All\n </button>\n </div>\n <div class=\"divide-y divide-gray-200\">\n <div v-for=\"task in sortedTasks\" :key=\"task.id\" class=\"p-6\">\n <div class=\"flex items-start justify-between\">\n <div class=\"flex-1\">\n <div class=\"flex items-center gap-3 mb-2\">\n <span class=\"text-sm font-medium text-content\">Task ID: {{ task.id }}</span>\n <router-link\n v-if=\"backTo\"\n :to=\"taskDetailRoute(task)\"\n class=\"text-sm text-primary hover:text-primary font-medium\"\n >\n View details\n </router-link>\n <span\n class=\"text-xs px-2 py-1 rounded-full font-medium\"\n :class=\"getStatusColor(task.status)\"\n >\n {{ task.status }}\n </span>\n </div>\n \n <div class=\"grid grid-cols-1 md:grid-cols-2 gap-4 mb-4\">\n <div>\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Scheduled At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.scheduledAt) }}</div>\n </div>\n <div v-if=\"task.startedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Started At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.startedAt) }}</div>\n </div>\n <div v-if=\"task.completedAt\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Completed At</label>\n <div class=\"text-sm text-content\">{{ formatDate(task.completedAt) }}</div>\n </div>\n <div v-if=\"task.error\">\n <label class=\"block text-sm font-medium text-content-secondary mb-1\">Error</label>\n <div class=\"text-sm text-red-600\">{{ task.error }}</div>\n </div>\n </div>\n\n <!-- Task Parameters -->\n <div v-if=\"task.parameters && Object.keys(task.parameters).length > 0\">\n <label class=\"block text-sm font-medium text-content-secondary mb-2\">Parameters</label>\n <div class=\"bg-page rounded-md p-3\">\n <pre class=\"text-sm text-gray-800 whitespace-pre-wrap\">{{ JSON.stringify(task.parameters, null, 2) }}</pre>\n </div>\n </div>\n </div>\n \n <div class=\"flex flex-col gap-3 ml-6\">\n <button \n @click=\"showRescheduleConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-blue-600 hover:to-blue-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none\"\n :disabled=\"task.status === 'in_progress'\"\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 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n Reschedule\n </button>\n <button \n @click=\"showRunConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-green-600 hover:to-green-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed disabled:transform-none\"\n :disabled=\"task.status === 'in_progress'\"\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=\"M5 3l14 9-14 9V3z\"></path>\n </svg>\n Run Now\n </button>\n <button \n v-if=\"task.status === 'pending'\"\n @click=\"showCancelConfirmation(task)\"\n class=\"flex items-center justify-center gap-2 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-lg text-sm font-medium hover:from-red-600 hover:to-red-700 transform hover:scale-105 transition-all duration-200 shadow-md hover:shadow-lg\"\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=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n Cancel\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n\n <!-- Reschedule Confirmation Modal -->\n <modal v-if=\"showRescheduleModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRescheduleModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-blue-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Reschedule Task</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to reschedule task <strong>{{ selectedTask?.id }}</strong>?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will reset the task's status and schedule it to run again.\n </p>\n \n <div class=\"mt-4\">\n <label for=\"newScheduledTime\" class=\"block text-sm font-medium text-content-secondary mb-2\">\n New Scheduled Time\n </label>\n <input\n id=\"newScheduledTime\"\n v-model=\"newScheduledTime\"\n type=\"datetime-local\"\n class=\"w-full px-3 py-2 border border-edge-strong rounded-md shadow-sm focus:outline-none focus:ring-blue-500 focus:border-blue-500\"\n required\n />\n </div>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmRescheduleTask\"\n class=\"flex-1 bg-gradient-to-r from-blue-500 to-blue-600 text-white px-4 py-2 rounded-md hover:from-blue-600 hover:to-blue-700 font-medium\"\n >\n Reschedule\n </button>\n <button \n @click=\"showRescheduleModal = false\"\n class=\"flex-1 bg-muted hover:bg-page text-content-secondary px-4 py-2 rounded-md border border-edge-strong font-medium\"\n >\n Cancel\n </button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Run Task Confirmation Modal -->\n <modal v-if=\"showRunModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showRunModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-green-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M14.828 14.828a4 4 0 01-5.656 0M9 10h1m4 0h1m-6 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Run Task Now</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to run task <strong>{{ selectedTask?.id }}</strong> immediately?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will execute the task right away, bypassing its scheduled time.\n </p>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmRunTask\"\n class=\"flex-1 bg-gradient-to-r from-green-500 to-green-600 text-white px-4 py-2 rounded-md hover:from-green-600 hover:to-green-700 font-medium\"\n >\n Run Now\n </button>\n <button \n @click=\"showRunModal = false\"\n class=\"flex-1 bg-muted hover:bg-page text-content-secondary px-4 py-2 rounded-md border border-edge-strong font-medium\"\n >\n Cancel\n </button>\n </div>\n </div>\n </template>\n </modal>\n\n <!-- Cancel Task Confirmation Modal -->\n <modal v-if=\"showCancelModal\" containerClass=\"!max-w-md\">\n <template #body>\n <div class=\"absolute font-mono right-1 top-1 cursor-pointer text-xl\" @click=\"showCancelModal = false;\" role=\"button\" aria-label=\"Close modal\">&times;</div>\n <div class=\"p-6\">\n <div class=\"flex items-center mb-4\">\n <div class=\"flex-shrink-0\">\n <svg class=\"w-6 h-6 text-red-600\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\">\n <path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M6 18L18 6M6 6l12 12\"></path>\n </svg>\n </div>\n <div class=\"ml-3\">\n <h3 class=\"text-lg font-medium text-content\">Cancel Task</h3>\n </div>\n </div>\n <div class=\"mb-4\">\n <p class=\"text-sm text-gray-600\">\n Are you sure you want to cancel task <strong>{{ selectedTask?.id }}</strong>?\n </p>\n <p class=\"text-sm text-content-tertiary mt-2\">\n This will permanently cancel the task and it cannot be undone.\n </p>\n </div>\n <div class=\"flex gap-3\">\n <button \n @click=\"confirmCancelTask\"\n class=\"flex-1 bg-gradient-to-r from-red-500 to-red-600 text-white px-4 py-2 rounded-md hover:from-red-600 hover:to-red-700 font-medium\"\n >\n Cancel Task\n </button>\n <button \n @click=\"showCancelModal = false\"\n class=\"flex-1 bg-muted hover:bg-page text-content-secondary px-4 py-2 rounded-md border border-edge-strong font-medium\"\n >\n Keep Task\n </button>\n </div>\n </div>\n </template>\n </modal>\n</div>\n\n";
50335
50858
 
50336
50859
  /***/ },
50337
50860
 
@@ -61667,7 +62190,7 @@ var src_default = VueToastificationPlugin;
61667
62190
  (module) {
61668
62191
 
61669
62192
  "use strict";
61670
- module.exports = /*#__PURE__*/JSON.parse('{"name":"@mongoosejs/studio","version":"0.3.2","description":"A Mongoose-native MongoDB UI with schema-aware autocomplete, AI-assisted queries, and dashboards that understand your models - not just your data.","homepage":"https://mongoosestudio.app/","repository":{"type":"git","url":"https://github.com/mongoosejs/studio"},"license":"Apache-2.0","dependencies":{"@ai-sdk/anthropic":"2.x","@ai-sdk/google":"2.x","@ai-sdk/openai":"2.x","ace-builds":"^1.43.6","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","regexp.escape":"^2.0.1","tailwindcss":"3.4.0","vue":"3.x","vue-toastification":"^2.0.0-rc.5","webpack":"5.x","xss":"^1.0.15"},"peerDependencies":{"mongoose":"7.x || 8.x || ^9.0.0"},"optionalPeerDependencies":{"@mongoosejs/task":"0.5.x || 0.6.x"},"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","mongodb-memory-server":"^11.0.1","mongoose":"9.x","sinon":"^21.0.1"},"scripts":{"lint":"eslint .","seed":"node seed/index.js","start":"node ./local.js","tailwind":"tailwindcss -o ./frontend/public/tw.css","tailwind:watch":"tailwindcss -o ./frontend/public/tw.css --watch","test":"mocha test/*.test.js","test:frontend":"mocha test/frontend/*.test.js"}}');
62193
+ module.exports = /*#__PURE__*/JSON.parse('{"name":"@mongoosejs/studio","version":"0.3.4","description":"A Mongoose-native MongoDB UI with schema-aware autocomplete, AI-assisted queries, and dashboards that understand your models - not just your data.","homepage":"https://mongoosestudio.app/","repository":{"type":"git","url":"https://github.com/mongoosejs/studio"},"license":"Apache-2.0","dependencies":{"@ai-sdk/anthropic":"2.x","@ai-sdk/google":"2.x","@ai-sdk/openai":"2.x","ace-builds":"^1.43.6","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","regexp.escape":"^2.0.1","tailwindcss":"3.4.0","vue":"3.x","vue-toastification":"^2.0.0-rc.5","webpack":"5.x","xss":"^1.0.15"},"peerDependencies":{"mongoose":"7.x || 8.x || ^9.0.0"},"optionalPeerDependencies":{"@mongoosejs/task":"0.5.x || 0.6.x"},"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","mongodb-memory-server":"^11.0.1","mongoose":"9.x","sinon":"^21.0.1"},"scripts":{"lint":"eslint .","seed":"node seed/index.js","start":"node ./local.js","tailwind":"tailwindcss -o ./frontend/public/tw.css","tailwind:watch":"tailwindcss -o ./frontend/public/tw.css --watch","test":"mocha test/*.test.js","test:frontend":"mocha test/frontend/*.test.js"}}');
61671
62194
 
61672
62195
  /***/ }
61673
62196