lula2 0.5.1 → 0.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (28) hide show
  1. package/dist/_app/immutable/chunks/{R1gz3SOr.js → BXUi170M.js} +1 -1
  2. package/dist/_app/immutable/chunks/{BNbzyHlf.js → BaNghdtJ.js} +1 -1
  3. package/dist/_app/immutable/chunks/{CWggGNM7.js → C43miErR.js} +1 -1
  4. package/dist/_app/immutable/chunks/CIUsQQm2.js +65 -0
  5. package/dist/_app/immutable/chunks/{CPEw6sZY.js → CRa0j_Fx.js} +1 -1
  6. package/dist/_app/immutable/chunks/{CXdZVXJf.js → Cq7PwVfU.js} +1 -1
  7. package/dist/_app/immutable/chunks/DTWPdvjs.js +2 -0
  8. package/dist/_app/immutable/chunks/{zYrdvxnm.js → WlyXjfrM.js} +1 -1
  9. package/dist/_app/immutable/chunks/{GToHgjp8.js → e7OeeeKP.js} +1 -1
  10. package/dist/_app/immutable/entry/{app.DMBX4AyV.js → app.DW8m8_kr.js} +2 -2
  11. package/dist/_app/immutable/entry/start.BstRoW_s.js +1 -0
  12. package/dist/_app/immutable/nodes/{0.ePBNOec_.js → 0.DIHiDqse.js} +1 -1
  13. package/dist/_app/immutable/nodes/{1.BjVPQIpm.js → 1.DyuqnWpt.js} +1 -1
  14. package/dist/_app/immutable/nodes/{2.DAjmdkWJ.js → 2.DCVMr5cE.js} +1 -1
  15. package/dist/_app/immutable/nodes/{3.C42QL2CH.js → 3.CRa3NPUY.js} +1 -1
  16. package/dist/_app/immutable/nodes/{4.BKr3XX2Z.js → 4.BIaoIDIb.js} +1 -1
  17. package/dist/_app/version.json +1 -1
  18. package/dist/cli/commands/crawl.js +53 -1
  19. package/dist/index.html +10 -10
  20. package/dist/index.js +52 -1
  21. package/package.json +1 -1
  22. package/src/lib/components/controls/ControlsList.svelte +82 -9
  23. package/src/lib/components/ui/FilterBuilder.svelte +167 -27
  24. package/src/lib/types.ts +1 -0
  25. package/src/stores/compliance.ts +13 -0
  26. package/dist/_app/immutable/chunks/Bvop-7hR.js +0 -2
  27. package/dist/_app/immutable/chunks/y6toZMLe.js +0 -65
  28. package/dist/_app/immutable/entry/start.CXGxkyju.js +0 -1
@@ -119,15 +119,66 @@
119
119
  results = results.filter((control) => {
120
120
  // Control must match all filters
121
121
  return $activeFilters.every(filter => {
122
+ // Handle mapping-related fields specially
123
+ if (filter.fieldName === 'has_mappings') {
124
+ const hasMappings = control.mappings && control.mappings.length > 0;
125
+ const filterValue = getFilterValue(filter.value);
126
+ switch (filter.operator) {
127
+ case 'equals':
128
+ return hasMappings === (filterValue === 'true' || filterValue === true);
129
+ case 'not_equals':
130
+ return hasMappings !== (filterValue === 'true' || filterValue === true);
131
+ case 'exists':
132
+ return hasMappings;
133
+ case 'not_exists':
134
+ return !hasMappings;
135
+ default:
136
+ return true;
137
+ }
138
+ }
139
+
140
+ if (filter.fieldName === 'mapping_status') {
141
+ if (!control.mappings || control.mappings.length === 0) {
142
+ return filter.operator === 'not_exists';
143
+ }
144
+
145
+ const filterValue = getFilterValue(filter.value);
146
+ const hasStatus = control.mappings.some(mapping => {
147
+ switch (filter.operator) {
148
+ case 'equals':
149
+ return mapping.status === filterValue;
150
+ case 'not_equals':
151
+ return mapping.status !== filterValue;
152
+ case 'includes':
153
+ return (typeof mapping.status === 'string' ? mapping.status.toLowerCase() : '').includes(String(filterValue).toLowerCase());
154
+ case 'not_includes':
155
+ return !(typeof mapping.status === 'string' ? mapping.status.toLowerCase() : '').includes(String(filterValue).toLowerCase());
156
+ default:
157
+ return true;
158
+ }
159
+ });
160
+
161
+ switch (filter.operator) {
162
+ case 'exists':
163
+ return control.mappings.some(m => m.status !== undefined && m.status !== null);
164
+ case 'not_exists':
165
+ return !control.mappings.some(m => m.status !== undefined && m.status !== null);
166
+ default:
167
+ return hasStatus;
168
+ }
169
+ }
170
+
171
+ // Handle regular control fields
122
172
  const dynamicControl = control as Record<string, unknown>;
123
173
  const fieldValue = dynamicControl[filter.fieldName];
174
+ const filterValue = getFilterValue(filter.value);
124
175
 
125
176
  switch (filter.operator) {
126
177
  case 'equals':
127
- return fieldValue === filter.value;
178
+ return fieldValue === filterValue;
128
179
 
129
180
  case 'not_equals':
130
- return fieldValue !== filter.value;
181
+ return fieldValue !== filterValue;
131
182
 
132
183
  case 'exists':
133
184
  return fieldValue !== undefined && fieldValue !== null && fieldValue !== '';
@@ -137,20 +188,20 @@
137
188
 
138
189
  case 'includes':
139
190
  if (typeof fieldValue === 'string') {
140
- return fieldValue.toLowerCase().includes(String(filter.value).toLowerCase());
191
+ return fieldValue.toLowerCase().includes(String(filterValue).toLowerCase());
141
192
  } else if (Array.isArray(fieldValue)) {
142
193
  return fieldValue.some(item =>
143
- String(item).toLowerCase().includes(String(filter.value).toLowerCase())
194
+ String(item).toLowerCase().includes(String(filterValue).toLowerCase())
144
195
  );
145
196
  }
146
197
  return false;
147
198
 
148
199
  case 'not_includes':
149
200
  if (typeof fieldValue === 'string') {
150
- return !fieldValue.toLowerCase().includes(String(filter.value).toLowerCase());
201
+ return !fieldValue.toLowerCase().includes(String(filterValue).toLowerCase());
151
202
  } else if (Array.isArray(fieldValue)) {
152
203
  return !fieldValue.some(item =>
153
- String(item).toLowerCase().includes(String(filter.value).toLowerCase())
204
+ String(item).toLowerCase().includes(String(filterValue).toLowerCase())
154
205
  );
155
206
  }
156
207
  return true;
@@ -198,6 +249,28 @@
198
249
  return 'No description available';
199
250
  }
200
251
 
252
+ function formatFilterValue(value: any): string {
253
+ if (value === null || value === undefined) {
254
+ return '';
255
+ }
256
+ if (typeof value === 'object') {
257
+ if (Array.isArray(value)) {
258
+ return value.join(', ');
259
+ }
260
+ if ('value' in value) {
261
+ return String((value as any).value);
262
+ }
263
+ return JSON.stringify(value);
264
+ }
265
+ return String(value);
266
+ }
267
+ function getFilterValue(filterValue: any): any {
268
+ if (typeof filterValue === 'object' && filterValue !== null && 'value' in filterValue) {
269
+ return filterValue.value;
270
+ }
271
+ return filterValue;
272
+ }
273
+
201
274
  // Get truncation length based on field type
202
275
  function getTruncationLength(field: FieldSchema | undefined): number {
203
276
  if (field?.ui_type === 'textarea' || field?.ui_type === 'long_text') {
@@ -258,11 +331,11 @@
258
331
  {#if filter.operator === 'exists' || filter.operator === 'not_exists'}
259
332
  <span>{getOperatorLabel(filter.operator).toLowerCase()}</span>
260
333
  {:else if filter.operator === 'equals'}
261
- <span>= {filter.value}</span>
334
+ <span>= {formatFilterValue(filter.value)}</span>
262
335
  {:else if filter.operator === 'not_equals'}
263
- <span>≠ {filter.value}</span>
336
+ <span>≠ {formatFilterValue(filter.value)}</span>
264
337
  {:else}
265
- <span>{getOperatorLabel(filter.operator).toLowerCase()} "{filter.value}"</span>
338
+ <span>{getOperatorLabel(filter.operator).toLowerCase()} "{formatFilterValue(filter.value)}"</span>
266
339
  {/if}
267
340
  <button
268
341
  onclick={() => complianceStore.removeFilter(index)}
@@ -9,7 +9,8 @@
9
9
  type FilterValue,
10
10
  activeFilters,
11
11
  FILTER_OPERATORS,
12
- getOperatorLabel
12
+ getOperatorLabel,
13
+ MAPPING_STATUS_OPTIONS
13
14
  } from '$stores/compliance';
14
15
  import { appState } from '$lib/websocket';
15
16
  import { Filter, Add, TrashCan, ChevronDown, ChevronUp } from 'carbon-icons-svelte';
@@ -37,13 +38,18 @@
37
38
 
38
39
  // Get field type for the selected field
39
40
  $: selectedFieldSchema = $fieldSchema[newFilterField] || null;
40
- $: selectedFieldType = selectedFieldSchema?.type || 'string';
41
- $: selectedFieldUiType = selectedFieldSchema?.ui_type || 'short_text';
41
+ $: selectedFieldType =
42
+ getMappingFieldType(newFilterField) || selectedFieldSchema?.type || 'string';
43
+ $: selectedFieldUiType =
44
+ getMappingFieldUiType(newFilterField) || selectedFieldSchema?.ui_type || 'short_text';
42
45
  $: isSelectField = selectedFieldUiType === 'select';
43
- $: fieldOptions = isSelectField ? selectedFieldSchema?.options || [] : [];
46
+ $: fieldOptions =
47
+ getMappingFieldOptions(newFilterField) ||
48
+ (isSelectField ? selectedFieldSchema?.options || [] : []);
44
49
 
45
- // Force equals operator for select fields
46
- $: if (isSelectField) {
50
+ // Force equals operator for select fields (but allow operators for mapping fields)
51
+ // Also force equals operator for has_mappings field, but allow operators for mapping_status
52
+ $: if (isSelectField && newFilterField !== 'mapping_status') {
47
53
  newFilterOperator = 'equals';
48
54
  }
49
55
 
@@ -51,6 +57,7 @@
51
57
  $: fieldsByTab = {
52
58
  overview: [] as string[],
53
59
  implementation: [] as string[],
60
+ mappings: [] as string[],
54
61
  custom: [] as string[]
55
62
  };
56
63
 
@@ -58,19 +65,25 @@
58
65
  // Reset arrays before populating
59
66
  fieldsByTab.overview = [];
60
67
  fieldsByTab.implementation = [];
68
+ fieldsByTab.mappings = [];
61
69
  fieldsByTab.custom = [];
62
70
 
63
71
  // Group fields by tab
64
72
  availableFields.forEach((field) => {
65
- const schema = $fieldSchema[field];
66
- if (schema) {
67
- const tab = schema.tab || getDefaultTabForCategory(schema.category);
68
- if (tab === 'overview') fieldsByTab.overview.push(field);
69
- else if (tab === 'implementation') fieldsByTab.implementation.push(field);
70
- else fieldsByTab.custom.push(field);
73
+ // Handle mapping-related fields specially
74
+ if (field === 'has_mappings' || field === 'mapping_status') {
75
+ fieldsByTab.mappings.push(field);
71
76
  } else {
72
- // If no schema, default to custom
73
- fieldsByTab.custom.push(field);
77
+ const schema = $fieldSchema[field];
78
+ if (schema) {
79
+ const tab = schema.tab || getDefaultTabForCategory(schema.category);
80
+ if (tab === 'overview') fieldsByTab.overview.push(field);
81
+ else if (tab === 'implementation') fieldsByTab.implementation.push(field);
82
+ else fieldsByTab.custom.push(field);
83
+ } else {
84
+ // If no schema, default to custom
85
+ fieldsByTab.custom.push(field);
86
+ }
74
87
  }
75
88
  });
76
89
  }
@@ -81,12 +94,23 @@
81
94
  // Create a new array from the readonly constant to make it mutable for Svelte
82
95
  const operatorOptions = FILTER_OPERATORS.map((op) => ({ value: op.value, label: op.label }));
83
96
 
97
+ // Limited operators for mapping status field
98
+ const mappingStatusOperatorOptions = [
99
+ { value: 'equals' as const, label: 'Equals' },
100
+ { value: 'not_equals' as const, label: 'Not equals' }
101
+ ];
102
+
84
103
  // Add a new filter
85
104
  function addFilter() {
86
105
  if (!newFilterField) return;
87
106
 
88
107
  let value = newFilterValue;
89
108
 
109
+ // Extract value from dropdown objects if necessary
110
+ if (typeof value === 'object' && value !== null && 'value' in value) {
111
+ value = (value as any).value;
112
+ }
113
+
90
114
  // Convert value based on field type
91
115
  let processedValue: FilterValue = value;
92
116
  if (selectedFieldType === 'boolean' && typeof value === 'string') {
@@ -125,8 +149,54 @@
125
149
  }
126
150
  }
127
151
 
152
+ // Centralized mapping field metadata
153
+ const mappingFieldConfig: Record<
154
+ string,
155
+ {
156
+ type: string;
157
+ ui_type: string;
158
+ options?: Array<{ value: string; label: string }>;
159
+ }
160
+ > = {
161
+ has_mappings: {
162
+ type: 'boolean',
163
+ ui_type: 'select',
164
+ options: [
165
+ { value: 'true', label: 'Yes' },
166
+ { value: 'false', label: 'No' }
167
+ ]
168
+ },
169
+ mapping_status: {
170
+ type: 'string',
171
+ ui_type: 'select',
172
+ options: MAPPING_STATUS_OPTIONS
173
+ }
174
+ };
175
+
176
+ function getMappingFieldType(fieldName: string): string | null {
177
+ return mappingFieldConfig[fieldName]?.type ?? null;
178
+ }
179
+
180
+ function getMappingFieldUiType(fieldName: string): string | null {
181
+ return mappingFieldConfig[fieldName]?.ui_type ?? null;
182
+ }
183
+
184
+ function getMappingFieldOptions(
185
+ fieldName: string
186
+ ): Array<{ value: string; label: string }> | null {
187
+ return mappingFieldConfig[fieldName]?.options ?? null;
188
+ }
189
+
128
190
  // Get display name for a field
129
191
  function getFieldDisplayName(fieldName: string): string {
192
+ // Handle mapping fields specially
193
+ switch (fieldName) {
194
+ case 'has_mappings':
195
+ return 'Has Mappings';
196
+ case 'mapping_status':
197
+ return 'Mapping Status';
198
+ }
199
+
130
200
  const schema = $fieldSchema[fieldName];
131
201
 
132
202
  // Use schema names if available
@@ -145,9 +215,27 @@
145
215
  if (filter.operator === 'exists') return 'exists';
146
216
  if (filter.operator === 'not_exists') return 'does not exist';
147
217
 
218
+ // Convert value to string, handling objects and arrays properly
219
+ let displayValue = '';
220
+ if (filter.value === null || filter.value === undefined) {
221
+ displayValue = '';
222
+ } else if (typeof filter.value === 'object') {
223
+ // Handle objects by converting to JSON or getting a meaningful representation
224
+ if (Array.isArray(filter.value)) {
225
+ displayValue = filter.value.join(', ');
226
+ } else if ('value' in filter.value) {
227
+ // Handle dropdown option objects
228
+ displayValue = String((filter.value as any).value);
229
+ } else {
230
+ displayValue = JSON.stringify(filter.value);
231
+ }
232
+ } else {
233
+ displayValue = String(filter.value);
234
+ }
235
+
148
236
  // Use the shared getOperatorLabel function
149
237
  const operatorText = getOperatorLabel(filter.operator).toLowerCase();
150
- return `${operatorText} "${filter.value}"`;
238
+ return `${operatorText} "${displayValue}"`;
151
239
  }
152
240
 
153
241
  // Handle click outside to close the panel
@@ -306,6 +394,33 @@
306
394
  {/each}
307
395
  {/if}
308
396
 
397
+ <!-- Mapping fields -->
398
+ {#if fieldsByTab.mappings.length > 0}
399
+ <!-- Divider -->
400
+ <div class="border-t border-gray-200 dark:border-gray-700 my-1"></div>
401
+ <div
402
+ class="px-3 py-1 text-xs font-semibold text-gray-500 dark:text-gray-400 bg-gray-50 dark:bg-gray-800/80"
403
+ >
404
+ Mapping Fields
405
+ </div>
406
+ {#each fieldsByTab.mappings as field (field)}
407
+ <button
408
+ class={twMerge(
409
+ 'w-full text-left px-3 py-2 text-sm',
410
+ newFilterField === field
411
+ ? 'bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300'
412
+ : 'hover:bg-gray-100 dark:hover:bg-gray-700/50'
413
+ )}
414
+ onclick={() => {
415
+ newFilterField = field;
416
+ showFieldDropdown = false;
417
+ }}
418
+ >
419
+ {getFieldDisplayName(field)}
420
+ </button>
421
+ {/each}
422
+ {/if}
423
+
309
424
  <!-- Custom fields -->
310
425
  {#if fieldsByTab.custom.length > 0}
311
426
  <!-- Divider -->
@@ -343,8 +458,8 @@
343
458
  >Operator</label
344
459
  >
345
460
 
346
- {#if isSelectField}
347
- <!-- Disabled dropdown for select fields (always equals) -->
461
+ {#if (isSelectField && !['has_mappings', 'mapping_status'].includes(newFilterField)) || newFilterField === 'has_mappings'}
462
+ <!-- Disabled dropdown for select fields and has_mappings (always equals) -->
348
463
  <div
349
464
  class="px-3 py-2 text-sm rounded-md border border-gray-300 dark:border-gray-600 bg-gray-100 dark:bg-gray-800 text-gray-500 dark:text-gray-400"
350
465
  >
@@ -354,7 +469,9 @@
354
469
  <!-- Custom Operator Dropdown -->
355
470
  <CustomDropdown
356
471
  bind:value={newFilterOperator}
357
- options={operatorOptions}
472
+ options={newFilterField === 'mapping_status'
473
+ ? mappingStatusOperatorOptions
474
+ : operatorOptions}
358
475
  getDisplayValue={getOperatorLabel}
359
476
  labelId="filter-operator"
360
477
  />
@@ -367,7 +484,30 @@
367
484
  <label for="filter-value" class="block text-xs text-gray-600 dark:text-gray-400 mb-1"
368
485
  >Value</label
369
486
  >
370
- {#if isSelectField}
487
+ {#if newFilterField === 'mapping_status'}
488
+ <!-- Special dropdown for mapping status -->
489
+ <select
490
+ id="filter-value"
491
+ bind:value={newFilterValue}
492
+ class="w-full rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm"
493
+ >
494
+ <option value="">Select status...</option>
495
+ {#each MAPPING_STATUS_OPTIONS as status}
496
+ <option value={status.value}>{status.label}</option>
497
+ {/each}
498
+ </select>
499
+ {:else if newFilterField === 'has_mappings'}
500
+ <!-- Special dropdown for has_mappings -->
501
+ <select
502
+ id="filter-value"
503
+ bind:value={newFilterValue}
504
+ class="w-full rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm"
505
+ >
506
+ <option value="">Select...</option>
507
+ <option value="true">Yes</option>
508
+ <option value="false">No</option>
509
+ </select>
510
+ {:else if isSelectField}
371
511
  <!-- Custom dropdown for select fields -->
372
512
  <CustomDropdown
373
513
  bind:value={newFilterValue}
@@ -377,15 +517,15 @@
377
517
  />
378
518
  {:else if selectedFieldType === 'boolean'}
379
519
  <!-- Boolean field with CustomDropdown -->
380
- <CustomDropdown
520
+ <select
521
+ id="filter-value"
381
522
  bind:value={newFilterValue}
382
- options={[
383
- { value: 'true', label: 'Yes' },
384
- { value: 'false', label: 'No' }
385
- ]}
386
- placeholder="Select yes/no"
387
- labelId="filter-value"
388
- />
523
+ class="w-full rounded-md border border-gray-300 dark:border-gray-600 bg-white dark:bg-gray-700 text-gray-900 dark:text-white text-sm"
524
+ >
525
+ <option value="">Select...</option>
526
+ <option value="true">Yes</option>
527
+ <option value="false">No</option>
528
+ </select>
389
529
  {:else}
390
530
  <!-- Text input for other fields -->
391
531
  <input
package/src/lib/types.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  // SPDX-FileCopyrightText: 2023-Present The Lula Authors
3
+
3
4
  export interface Control {
4
5
  id: string;
5
6
  title: string;
@@ -5,6 +5,15 @@ import type { Control, Mapping } from '$lib/types';
5
5
  import { appState } from '$lib/websocket';
6
6
  import { get, writable } from 'svelte/store';
7
7
 
8
+ /**
9
+ * Shared mapping status options used across the application
10
+ */
11
+ export const MAPPING_STATUS_OPTIONS = [
12
+ { value: 'planned', label: 'Planned' },
13
+ { value: 'implemented', label: 'Implemented' },
14
+ { value: 'verified', label: 'Verified' }
15
+ ];
16
+
8
17
  /**
9
18
  * Shared filter operator options used across the application
10
19
  */
@@ -133,6 +142,10 @@ export const complianceStore = {
133
142
  });
134
143
  }
135
144
 
145
+ // Add mapping-related fields for filtering
146
+ fieldSet.add('has_mappings');
147
+ fieldSet.add('mapping_status');
148
+
136
149
  return Array.from(fieldSet).sort();
137
150
  }
138
151
  };
@@ -1,2 +0,0 @@
1
- var lt=Array.isArray,bn=Array.prototype.indexOf,wn=Array.from,Je=Object.defineProperty,Se=Object.getOwnPropertyDescriptor,mn=Object.getOwnPropertyDescriptors,En=Object.prototype,Tn=Array.prototype,Rt=Object.getPrototypeOf,yt=Object.isExtensible;function qr(e){return typeof e=="function"}const Z=()=>{};function Vr(e){return e()}function Nt(e){for(var t=0;t<e.length;t++)e[t]()}function Ct(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}function Yr(e,t){if(Array.isArray(e))return e;if(!(Symbol.iterator in e))return Array.from(e);const n=[];for(const r of e)if(n.push(r),n.length===t)break;return n}const k=2,ut=4,Ue=8,ue=16,$=32,fe=64,ft=128,C=256,Ye=512,m=1024,D=2048,B=4096,Q=8192,we=16384,ot=32768,$e=65536,bt=1<<17,An=1<<18,me=1<<19,Dt=1<<20,Qe=1<<21,Be=1<<22,se=1<<23,ie=Symbol("$state"),Hr=Symbol("legacy props"),Ur=Symbol(""),ke=new class extends Error{name="StaleReactionError";message="The reaction that called `getAbortSignal()` was re-run or destroyed"},We=3,De=8;function Ee(e){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function xn(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function Sn(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function kn(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function On(e){throw new Error("https://svelte.dev/e/effect_orphan")}function Rn(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function Nn(){throw new Error("https://svelte.dev/e/get_abort_signal_outside_reaction")}function Cn(){throw new Error("https://svelte.dev/e/hydration_failed")}function It(e){throw new Error("https://svelte.dev/e/lifecycle_legacy_only")}function Br(e){throw new Error("https://svelte.dev/e/props_invalid_value")}function Dn(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function In(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function Pn(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Mn(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Wr=1,Gr=2,zr=4,Kr=8,Xr=16,Zr=1,Jr=2,Qr=4,es=8,ts=16,ns=4,Ln=1,Fn=2,Pt="[",Mt="[!",Lt="]",pe={},E=Symbol(),rs="http://www.w3.org/1999/xhtml",ss="@attach";function Ge(e){console.warn("https://svelte.dev/e/hydration_mismatch")}function is(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function jn(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}let b=!1;function he(e){b=e}let y;function I(e){if(e===null)throw Ge(),pe;return y=e}function ct(){return I(W(y))}function as(e){if(b){if(W(y)!==null)throw Ge(),pe;y=e}}function qn(e=1){if(b){for(var t=e,n=y;t--;)n=W(n);y=n}}function Vn(e=!0){for(var t=0,n=y;;){if(n.nodeType===De){var r=n.data;if(r===Lt){if(t===0)return n;t-=1}else(r===Pt||r===Mt)&&(t+=1)}var s=W(n);e&&n.remove(),n=s}}function ls(e){if(!e||e.nodeType!==De)throw Ge(),pe;return e.data}function Ft(e){return e===this.v}function jt(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function qt(e){return!jt(e,this.v)}let Ie=!1;function us(){Ie=!0}let g=null;function ge(e){g=e}function Yn(e){return ze().get(e)}function Hn(e,t){return ze().set(e,t),t}function Un(e){return ze().has(e)}function $n(){return ze()}function Bn(e,t=!1,n){g={p:g,c:null,e:null,s:e,x:null,l:Ie&&!t?{s:null,u:null,$:[]}:null}}function Wn(e){var t=g,n=t.e;if(n!==null){t.e=null;for(var r of n)en(r)}return g=t.p,{}}function Pe(){return!Ie||g!==null&&g.l===null}function ze(e){return g===null&&Ee(),g.c??=new Map(Gn(g)||void 0)}function Gn(e){let t=e.p;for(;t!==null;){const n=t.c;if(n!==null)return n;t=t.p}return null}let re=[];function Vt(){var e=re;re=[],Nt(e)}function Me(e){if(re.length===0&&!Oe){var t=re;queueMicrotask(()=>{t===re&&Vt()})}re.push(e)}function zn(){for(;re.length>0;)Vt()}const Kn=new WeakMap;function Yt(e){var t=v;if(t===null)return h.f|=se,e;if((t.f&ot)===0){if((t.f&ft)===0)throw!t.parent&&e instanceof Error&&Ht(e),e;t.b.error(e)}else ye(e,t)}function ye(e,t){for(;t!==null;){if((t.f&ft)!==0)try{t.b.error(e);return}catch(n){e=n}t=t.parent}throw e instanceof Error&&Ht(e),e}function Ht(e){const t=Kn.get(e);t&&(Je(e,"message",{value:t.message}),Je(e,"stack",{value:t.stack}))}const qe=new Set;let w=null,Ze=null,et=new Set,F=[],Ke=null,tt=!1,Oe=!1;class N{current=new Map;#r=new Map;#t=new Set;#u=0;#i=null;#f=[];#s=[];#n=[];#e=[];#a=[];#o=[];skipped_effects=new Set;process(t){F=[],Ze=null;var n=N.apply(this);for(const i of t)this.#c(i);if(this.#u===0){this.#_();var r=this.#s,s=this.#n;this.#s=[],this.#n=[],this.#e=[],Ze=this,w=null,wt(r),wt(s),this.#i?.resolve()}else this.#l(this.#s),this.#l(this.#n),this.#l(this.#e);n();for(const i of this.#f)be(i);this.#f=[]}#c(t){t.f^=m;for(var n=t.first;n!==null;){var r=n.f,s=(r&($|fe))!==0,i=s&&(r&m)!==0,l=i||(r&Q)!==0||this.skipped_effects.has(n);if(!l&&n.fn!==null){s?n.f^=m:(r&ut)!==0?this.#n.push(n):(r&m)===0&&((r&Be)!==0&&n.b?.is_pending()?this.#f.push(n):Fe(n)&&((n.f&ue)!==0&&this.#e.push(n),be(n)));var u=n.first;if(u!==null){n=u;continue}}var a=n.parent;for(n=n.next;n===null&&a!==null;)n=a.next,a=a.parent}}#l(t){for(const n of t)((n.f&D)!==0?this.#a:this.#o).push(n),T(n,m);t.length=0}capture(t,n){this.#r.has(t)||this.#r.set(t,n),this.current.set(t,t.v)}activate(){w=this}deactivate(){w=null,Ze=null;for(const t of et)if(et.delete(t),t(),w!==null)break}flush(){if(F.length>0){if(this.activate(),nt(),w!==null&&w!==this)return}else this.#u===0&&this.#_();this.deactivate()}#_(){for(const t of this.#t)t();if(this.#t.clear(),qe.size>1){this.#r.clear();let t=!0;for(const n of qe){if(n===this){t=!1;continue}for(const[r,s]of this.current){if(n.current.has(r))if(t)n.current.set(r,s);else continue;$t(r)}if(F.length>0){w=n;const r=N.apply(n);for(const s of F)n.#c(s);F=[],r()}}w=null}qe.delete(this)}increment(){this.#u+=1}decrement(){if(this.#u-=1,this.#u===0){for(const t of this.#a)T(t,D),le(t);for(const t of this.#o)T(t,B),le(t);this.flush()}else this.deactivate()}add_callback(t){this.#t.add(t)}settled(){return(this.#i??=Ct()).promise}static ensure(){if(w===null){const t=w=new N;qe.add(w),Oe||N.enqueue(()=>{w===t&&t.flush()})}return w}static enqueue(t){Me(t)}static apply(t){return Z}}function Ut(e){var t=Oe;Oe=!0;try{var n;for(e&&(w!==null&&nt(),n=e());;){if(zn(),F.length===0&&(w?.flush(),F.length===0))return Ke=null,n;nt()}}finally{Oe=t}}function nt(){var e=ve;tt=!0;try{var t=0;for(At(!0);F.length>0;){var n=N.ensure();if(t++>1e3){var r,s;Xn()}n.process(F),J.clear()}}finally{tt=!1,At(e),Ke=null}}function Xn(){try{Rn()}catch(e){ye(e,Ke)}}let ne=null;function wt(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(we|Q))===0&&Fe(r)&&(ne=[],be(r),r.deps===null&&r.first===null&&r.nodes_start===null&&(r.teardown===null&&r.ac===null?sn(r):r.fn=null),ne?.length>0)){J.clear();for(const s of ne)be(s);ne=[]}}ne=null}}function $t(e){if(e.reactions!==null)for(const t of e.reactions){const n=t.f;(n&k)!==0?$t(t):(n&(Be|ue))!==0&&(T(t,D),le(t))}}function le(e){for(var t=Ke=e;t.parent!==null;){t=t.parent;var n=t.f;if(tt&&t===v&&(n&ue)!==0)return;if((n&(fe|$))!==0){if((n&m)===0)return;t.f^=m}}F.push(t)}function Zn(e){let t=0,n=Le(0),r;return()=>{fr()&&(H(n),vt(()=>(t===0&&(r=te(()=>e(()=>Re(n)))),t+=1,()=>{Me(()=>{t-=1,t===0&&(r?.(),r=void 0,Re(n))})})))}}var Jn=$e|me|ft;function Qn(e,t,n){new er(e,t,n)}class er{parent;#r=!1;#t;#u=b?y:null;#i;#f;#s;#n=null;#e=null;#a=null;#o=null;#c=0;#l=0;#_=!1;#d=null;#g=()=>{this.#d&&Ne(this.#d,this.#c)};#y=Zn(()=>(this.#d=Le(this.#c),()=>{this.#d=null}));constructor(t,n,r){this.#t=t,this.#i=n,this.#f=r,this.parent=v.b,this.#r=!!this.#i.pending,this.#s=tn(()=>{if(v.b=this,b){const s=this.#u;ct(),s.nodeType===De&&s.data===Mt?this.#w():this.#b()}else{try{this.#n=K(()=>r(this.#t))}catch(s){this.error(s)}this.#l>0?this.#v():this.#r=!1}},Jn),b&&(this.#t=y)}#b(){try{this.#n=K(()=>this.#f(this.#t))}catch(t){this.error(t)}this.#r=!1}#w(){const t=this.#i.pending;t&&(this.#e=K(()=>t(this.#t)),N.enqueue(()=>{this.#n=this.#h(()=>(N.ensure(),K(()=>this.#f(this.#t)))),this.#l>0?this.#v():(Ve(this.#e,()=>{this.#e=null}),this.#r=!1)}))}is_pending(){return this.#r||!!this.parent&&this.parent.is_pending()}has_pending_snippet(){return!!this.#i.pending}#h(t){var n=v,r=h,s=g;q(this.#s),S(this.#s),ge(this.#s.ctx);try{return t()}catch(i){return Yt(i),null}finally{q(n),S(r),ge(s)}}#v(){const t=this.#i.pending;this.#n!==null&&(this.#o=document.createDocumentFragment(),tr(this.#n,this.#o)),this.#e===null&&(this.#e=K(()=>t(this.#t)))}#p(t){if(!this.has_pending_snippet()){this.parent&&this.parent.#p(t);return}this.#l+=t,this.#l===0&&(this.#r=!1,this.#e&&Ve(this.#e,()=>{this.#e=null}),this.#o&&(this.#t.before(this.#o),this.#o=null))}update_pending_count(t){this.#p(t),this.#c+=t,et.add(this.#g)}get_effect_pending(){return this.#y(),H(this.#d)}error(t){var n=this.#i.onerror;let r=this.#i.failed;if(this.#_||!n&&!r)throw t;this.#n&&(M(this.#n),this.#n=null),this.#e&&(M(this.#e),this.#e=null),this.#a&&(M(this.#a),this.#a=null),b&&(I(this.#u),qn(),I(Vn()));var s=!1,i=!1;const l=()=>{if(s){jn();return}s=!0,i&&Mn(),N.ensure(),this.#c=0,this.#a!==null&&Ve(this.#a,()=>{this.#a=null}),this.#r=this.has_pending_snippet(),this.#n=this.#h(()=>(this.#_=!1,K(()=>this.#f(this.#t)))),this.#l>0?this.#v():this.#r=!1};var u=h;try{S(null),i=!0,n?.(t,l),i=!1}catch(a){ye(a,this.#s&&this.#s.parent)}finally{S(u)}r&&Me(()=>{this.#a=this.#h(()=>{this.#_=!0;try{return K(()=>{r(this.#t,()=>t,()=>l)})}catch(a){return ye(a,this.#s.parent),null}finally{this.#_=!1}})})}}function tr(e,t){for(var n=e.nodes_start,r=e.nodes_end;n!==null;){var s=n===r?null:W(n);t.append(n),n=s}}function nr(e,t,n){const r=Pe()?_t:ir;if(t.length===0){n(e.map(r));return}var s=w,i=v,l=rr(),u=b;Promise.all(t.map(a=>sr(a))).then(a=>{s?.activate(),l();try{n([...e.map(r),...a])}catch(f){(i.f&we)===0&&ye(f,i)}u&&he(!1),s?.deactivate(),Bt()}).catch(a=>{ye(a,i)})}function rr(){var e=v,t=h,n=g,r=w,s=b;if(s)var i=y;return function(){q(e),S(t),ge(n),r?.activate(),s&&(he(!0),I(i))}}function Bt(){q(null),S(null),ge(null)}function _t(e){var t=k|D,n=h!==null&&(h.f&k)!==0?h:null;return v===null||n!==null&&(n.f&C)!==0?t|=C:v.f|=me,{ctx:g,deps:null,effects:null,equals:Ft,f:t,fn:e,reactions:null,rv:0,v:E,wv:0,parent:n??v,ac:null}}function sr(e,t){let n=v;n===null&&xn();var r=n.b,s=void 0,i=Le(E),l=!h,u=new Map;return _r(()=>{var a=Ct();s=a.promise;try{Promise.resolve(e()).then(a.resolve,a.reject)}catch(c){a.reject(c)}var f=w,o=r.is_pending();l&&(r.update_pending_count(1),o||(f.increment(),u.get(f)?.reject(ke),u.set(f,a)));const d=(c,_=void 0)=>{o||f.activate(),_?_!==ke&&(i.f|=se,Ne(i,_)):((i.f&se)!==0&&(i.f^=se),Ne(i,c)),l&&(r.update_pending_count(-1),o||f.decrement()),Bt()};a.promise.then(d,c=>d(null,c||"unknown"))}),ht(()=>{for(const a of u.values())a.reject(ke)}),new Promise(a=>{function f(o){function d(){o===s?a(i):f(s)}o.then(d,d)}f(s)})}function fs(e){const t=_t(e);return un(t),t}function ir(e){const t=_t(e);return t.equals=qt,t}function Wt(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)M(t[n])}}function ar(e){for(var t=e.parent;t!==null;){if((t.f&k)===0)return t;t=t.parent}return null}function dt(e){var t,n=v;q(ar(e));try{Wt(e),t=_n(e)}finally{q(n)}return t}function Gt(e){var t=dt(e);if(e.equals(t)||(e.v=t,e.wv=on()),!Te){var n=(X||(e.f&C)!==0)&&e.deps!==null?B:m;T(e,n)}}const J=new Map;function Le(e,t){var n={f:0,v:e,reactions:null,equals:Ft,rv:0,wv:0};return n}function z(e,t){const n=Le(e);return un(n),n}function os(e,t=!1,n=!0){const r=Le(e);return t||(r.equals=qt),Ie&&n&&g!==null&&g.l!==null&&(g.l.s??=[]).push(r),r}function cs(e,t){return Y(e,te(()=>H(e))),t}function Y(e,t,n=!1){h!==null&&(!P||(h.f&bt)!==0)&&Pe()&&(h.f&(k|ue|Be|bt))!==0&&!U?.includes(e)&&Pn();let r=n?Ae(t):t;return Ne(e,r)}function Ne(e,t){if(!e.equals(t)){var n=e.v;Te?J.set(e,t):J.set(e,n),e.v=t;var r=N.ensure();r.capture(e,n),(e.f&k)!==0&&((e.f&D)!==0&&dt(e),T(e,(e.f&C)===0?m:B)),e.wv=on(),zt(e,D),Pe()&&v!==null&&(v.f&m)!==0&&(v.f&($|fe))===0&&(R===null?gr([e]):R.push(e))}return t}function _s(e,t=1){var n=H(e),r=t===1?n++:n--;return Y(e,n),r}function Re(e){Y(e,e.v+1)}function zt(e,t){var n=e.reactions;if(n!==null)for(var r=Pe(),s=n.length,i=0;i<s;i++){var l=n[i],u=l.f;if(!(!r&&l===v)){var a=(u&D)===0;a&&T(l,t),(u&k)!==0?zt(l,B):a&&((u&ue)!==0&&ne!==null&&ne.push(l),le(l))}}}function Ae(e){if(typeof e!="object"||e===null||ie in e)return e;const t=Rt(e);if(t!==En&&t!==Tn)return e;var n=new Map,r=lt(e),s=z(0),i=ae,l=u=>{if(ae===i)return u();var a=h,f=ae;S(null),St(i);var o=u();return S(a),St(f),o};return r&&n.set("length",z(e.length)),new Proxy(e,{defineProperty(u,a,f){(!("value"in f)||f.configurable===!1||f.enumerable===!1||f.writable===!1)&&Dn();var o=n.get(a);return o===void 0?o=l(()=>{var d=z(f.value);return n.set(a,d),d}):Y(o,f.value,!0),!0},deleteProperty(u,a){var f=n.get(a);if(f===void 0){if(a in u){const o=l(()=>z(E));n.set(a,o),Re(s)}}else Y(f,E),Re(s);return!0},get(u,a,f){if(a===ie)return e;var o=n.get(a),d=a in u;if(o===void 0&&(!d||Se(u,a)?.writable)&&(o=l(()=>{var _=Ae(d?u[a]:E),p=z(_);return p}),n.set(a,o)),o!==void 0){var c=H(o);return c===E?void 0:c}return Reflect.get(u,a,f)},getOwnPropertyDescriptor(u,a){var f=Reflect.getOwnPropertyDescriptor(u,a);if(f&&"value"in f){var o=n.get(a);o&&(f.value=H(o))}else if(f===void 0){var d=n.get(a),c=d?.v;if(d!==void 0&&c!==E)return{enumerable:!0,configurable:!0,value:c,writable:!0}}return f},has(u,a){if(a===ie)return!0;var f=n.get(a),o=f!==void 0&&f.v!==E||Reflect.has(u,a);if(f!==void 0||v!==null&&(!o||Se(u,a)?.writable)){f===void 0&&(f=l(()=>{var c=o?Ae(u[a]):E,_=z(c);return _}),n.set(a,f));var d=H(f);if(d===E)return!1}return o},set(u,a,f,o){var d=n.get(a),c=a in u;if(r&&a==="length")for(var _=f;_<d.v;_+=1){var p=n.get(_+"");p!==void 0?Y(p,E):_ in u&&(p=l(()=>z(E)),n.set(_+"",p))}if(d===void 0)(!c||Se(u,a)?.writable)&&(d=l(()=>z(void 0)),Y(d,Ae(f)),n.set(a,d));else{c=d.v!==E;var A=l(()=>Ae(f));Y(d,A)}var oe=Reflect.getOwnPropertyDescriptor(u,a);if(oe?.set&&oe.set.call(o,f),!c){if(r&&typeof a=="string"){var je=n.get("length"),G=Number(a);Number.isInteger(G)&&G>=je.v&&Y(je,G+1)}Re(s)}return!0},ownKeys(u){H(s);var a=Reflect.ownKeys(u).filter(d=>{var c=n.get(d);return c===void 0||c.v!==E});for(var[f,o]of n)o.v!==E&&!(f in u)&&a.push(f);return a},setPrototypeOf(){In()}})}function mt(e){try{if(e!==null&&typeof e=="object"&&ie in e)return e[ie]}catch{}return e}function ds(e,t){return Object.is(mt(e),mt(t))}var Et,Kt,Xt,Zt;function rt(){if(Et===void 0){Et=window,Kt=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Xt=Se(t,"firstChild").get,Zt=Se(t,"nextSibling").get,yt(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),yt(n)&&(n.__t=void 0)}}function ee(e=""){return document.createTextNode(e)}function j(e){return Xt.call(e)}function W(e){return Zt.call(e)}function hs(e,t){if(!b)return j(e);var n=j(y);if(n===null)n=y.appendChild(ee());else if(t&&n.nodeType!==We){var r=ee();return n?.before(r),I(r),r}return I(n),n}function vs(e,t=!1){if(!b){var n=j(e);return n instanceof Comment&&n.data===""?W(n):n}if(t&&y?.nodeType!==We){var r=ee();return y?.before(r),I(r),r}return y}function ps(e,t=1,n=!1){let r=b?y:e;for(var s;t--;)s=r,r=W(r);if(!b)return r;if(n&&r?.nodeType!==We){var i=ee();return r===null?s?.after(i):r.before(i),I(i),i}return I(r),r}function Jt(e){e.textContent=""}function gs(){return!1}function ys(e,t){if(t){const n=document.body;e.autofocus=!0,Me(()=>{document.activeElement===n&&e.focus()})}}function bs(e){b&&j(e)!==null&&Jt(e)}let Tt=!1;function lr(){Tt||(Tt=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{if(!e.defaultPrevented)for(const t of e.target.elements)t.__on_r?.()})},{capture:!0}))}function Xe(e){var t=h,n=v;S(null),q(null);try{return e()}finally{S(t),q(n)}}function ws(e,t,n,r=n){e.addEventListener(t,()=>Xe(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),lr()}function Qt(e){v===null&&h===null&&On(),h!==null&&(h.f&C)!==0&&v===null&&kn(),Te&&Sn()}function ur(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function V(e,t,n,r=!0){var s=v;s!==null&&(s.f&Q)!==0&&(e|=Q);var i={ctx:g,deps:null,nodes_start:null,nodes_end:null,f:e|D,first:null,fn:t,last:null,next:null,parent:s,b:s&&s.b,prev:null,teardown:null,transitions:null,wv:0,ac:null};if(n)try{be(i),i.f|=ot}catch(a){throw M(i),a}else t!==null&&le(i);if(r){var l=i;if(n&&l.deps===null&&l.teardown===null&&l.nodes_start===null&&l.first===l.last&&(l.f&me)===0&&(l=l.first),l!==null&&(l.parent=s,s!==null&&ur(l,s),h!==null&&(h.f&k)!==0&&(e&fe)===0)){var u=h;(u.effects??=[]).push(l)}}return i}function fr(){return h!==null&&!P}function ht(e){const t=V(Ue,null,!1);return T(t,m),t.teardown=e,t}function or(e){Qt();var t=v.f,n=!h&&(t&$)!==0&&(t&ot)===0;if(n){var r=g;(r.e??=[]).push(e)}else return en(e)}function en(e){return V(ut|Dt,e,!1)}function ms(e){return Qt(),V(Ue|Dt,e,!0)}function cr(e){N.ensure();const t=V(fe|me,e,!0);return(n={})=>new Promise(r=>{n.outro?Ve(t,()=>{M(t),r(void 0)}):(M(t),r(void 0))})}function Es(e){return V(ut,e,!1)}function Ts(e,t){var n=g,r={effect:null,ran:!1,deps:e};n.l.$.push(r),r.effect=vt(()=>{e(),!r.ran&&(r.ran=!0,te(t))})}function As(){var e=g;vt(()=>{for(var t of e.l.$){t.deps();var n=t.effect;(n.f&m)!==0&&T(n,B),Fe(n)&&be(n),t.ran=!1}})}function _r(e){return V(Be|me,e,!0)}function vt(e,t=0){return V(Ue|t,e,!0)}function xs(e,t=[],n=[]){nr(t,n,r=>{V(Ue,()=>e(...r.map(H)),!0)})}function tn(e,t=0){var n=V(ue|t,e,!0);return n}function K(e,t=!0){return V($|me,e,!0,t)}function nn(e){var t=e.teardown;if(t!==null){const n=Te,r=h;xt(!0),S(null);try{t.call(null)}finally{xt(n),S(r)}}}function rn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&Xe(()=>{s.abort(ke)});var r=n.next;(n.f&fe)!==0?n.parent=null:M(n,t),n=r}}function dr(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&$)===0&&M(t),t=n}}function M(e,t=!0){var n=!1;(t||(e.f&An)!==0)&&e.nodes_start!==null&&e.nodes_end!==null&&(hr(e.nodes_start,e.nodes_end),n=!0),rn(e,t&&!n),He(e,0),T(e,we);var r=e.transitions;if(r!==null)for(const i of r)i.stop();nn(e);var s=e.parent;s!==null&&s.first!==null&&sn(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes_start=e.nodes_end=e.ac=null}function hr(e,t){for(;e!==null;){var n=e===t?null:W(e);e.remove(),e=n}}function sn(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function Ve(e,t){var n=[];an(e,n,!0),vr(n,()=>{M(e),t&&t()})}function vr(e,t){var n=e.length;if(n>0){var r=()=>--n||t();for(var s of e)s.out(r)}else t()}function an(e,t,n){if((e.f&Q)===0){if(e.f^=Q,e.transitions!==null)for(const l of e.transitions)(l.is_global||n)&&t.push(l);for(var r=e.first;r!==null;){var s=r.next,i=(r.f&$e)!==0||(r.f&$)!==0;an(r,t,i?n:!1),r=s}}}function Ss(e){ln(e,!0)}function ln(e,t){if((e.f&Q)!==0){e.f^=Q,(e.f&m)===0&&(T(e,D),le(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&$e)!==0||(n.f&$)!==0;ln(n,s?t:!1),n=r}if(e.transitions!==null)for(const i of e.transitions)(i.is_global||t)&&i.in()}}let de=null;function pr(e){var t=de;try{if(de=new Set,te(e),t!==null)for(var n of de)t.add(n);return de}finally{de=t}}function ks(e){for(var t of pr(e))Ne(t,t.v)}let ve=!1;function At(e){ve=e}let Te=!1;function xt(e){Te=e}let h=null,P=!1;function S(e){h=e}let v=null;function q(e){v=e}let U=null;function un(e){h!==null&&(U===null?U=[e]:U.push(e))}let x=null,O=0,R=null;function gr(e){R=e}let fn=1,Ce=0,ae=Ce;function St(e){ae=e}let X=!1;function on(){return++fn}function Fe(e){var t=e.f;if((t&D)!==0)return!0;if((t&B)!==0){var n=e.deps,r=(t&C)!==0;if(n!==null){var s,i,l=(t&Ye)!==0,u=r&&v!==null&&!X,a=n.length;if((l||u)&&(v===null||(v.f&we)===0)){var f=e,o=f.parent;for(s=0;s<a;s++)i=n[s],(l||!i?.reactions?.includes(f))&&(i.reactions??=[]).push(f);l&&(f.f^=Ye),u&&o!==null&&(o.f&C)===0&&(f.f^=C)}for(s=0;s<a;s++)if(i=n[s],Fe(i)&&Gt(i),i.wv>e.wv)return!0}(!r||v!==null&&!X)&&T(e,m)}return!1}function cn(e,t,n=!0){var r=e.reactions;if(r!==null&&!U?.includes(e))for(var s=0;s<r.length;s++){var i=r[s];(i.f&k)!==0?cn(i,t,!1):t===i&&(n?T(i,D):(i.f&m)!==0&&T(i,B),le(i))}}function _n(e){var t=x,n=O,r=R,s=h,i=X,l=U,u=g,a=P,f=ae,o=e.f;x=null,O=0,R=null,X=(o&C)!==0&&(P||!ve||h===null),h=(o&($|fe))===0?e:null,U=null,ge(e.ctx),P=!1,ae=++Ce,e.ac!==null&&(Xe(()=>{e.ac.abort(ke)}),e.ac=null);try{e.f|=Qe;var d=e.fn,c=d(),_=e.deps;if(x!==null){var p;if(He(e,O),_!==null&&O>0)for(_.length=O+x.length,p=0;p<x.length;p++)_[O+p]=x[p];else e.deps=_=x;if(!X||(o&k)!==0&&e.reactions!==null)for(p=O;p<_.length;p++)(_[p].reactions??=[]).push(e)}else _!==null&&O<_.length&&(He(e,O),_.length=O);if(Pe()&&R!==null&&!P&&_!==null&&(e.f&(k|B|D))===0)for(p=0;p<R.length;p++)cn(R[p],e);return s!==null&&s!==e&&(Ce++,R!==null&&(r===null?r=R:r.push(...R))),(e.f&se)!==0&&(e.f^=se),c}catch(A){return Yt(A)}finally{e.f^=Qe,x=t,O=n,R=r,h=s,X=i,U=l,ge(u),P=a,ae=f}}function yr(e,t){let n=t.reactions;if(n!==null){var r=bn.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}n===null&&(t.f&k)!==0&&(x===null||!x.includes(t))&&(T(t,B),(t.f&(C|Ye))===0&&(t.f^=Ye),Wt(t),He(t,0))}function He(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)yr(e,n[r])}function be(e){var t=e.f;if((t&we)===0){T(e,m);var n=v,r=ve;v=e,ve=!0;try{(t&ue)!==0?dr(e):rn(e),nn(e);var s=_n(e);e.teardown=typeof s=="function"?s:null,e.wv=fn;var i}finally{ve=r,v=n}}}async function br(){await Promise.resolve(),Ut()}function wr(){return N.ensure().settled()}function H(e){var t=e.f,n=(t&k)!==0;if(de?.add(e),h!==null&&!P){var r=v!==null&&(v.f&we)!==0;if(!r&&!U?.includes(e)){var s=h.deps;if((h.f&Qe)!==0)e.rv<Ce&&(e.rv=Ce,x===null&&s!==null&&s[O]===e?O++:x===null?x=[e]:(!X||!x.includes(e))&&x.push(e));else{(h.deps??=[]).push(e);var i=e.reactions;i===null?e.reactions=[h]:i.includes(h)||i.push(h)}}}else if(n&&e.deps===null&&e.effects===null){var l=e,u=l.parent;u!==null&&(u.f&C)===0&&(l.f^=C)}if(Te){if(J.has(e))return J.get(e);if(n){l=e;var a=l.v;return((l.f&m)===0&&l.reactions!==null||dn(l))&&(a=dt(l)),J.set(l,a),a}}else n&&(l=e,Fe(l)&&Gt(l));if((e.f&se)!==0)throw e.v;return e.v}function dn(e){if(e.v===E)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(J.has(t)||(t.f&k)!==0&&dn(t))return!0;return!1}function te(e){var t=P;try{return P=!0,e()}finally{P=t}}const mr=-7169;function T(e,t){e.f=e.f&mr|t}function Os(e){if(!(typeof e!="object"||!e||e instanceof EventTarget)){if(ie in e)st(e);else if(!Array.isArray(e))for(let t in e){const n=e[t];typeof n=="object"&&n&&ie in n&&st(n)}}}function st(e,t=new Set){if(typeof e=="object"&&e!==null&&!(e instanceof EventTarget)&&!t.has(e)){t.add(e),e instanceof Date&&e.getTime();for(let r in e)try{st(e[r],t)}catch{}const n=Rt(e);if(n!==Object.prototype&&n!==Array.prototype&&n!==Map.prototype&&n!==Set.prototype&&n!==Date.prototype){const r=mn(n);for(let s in r){const i=r[s].get;if(i)try{i.call(e)}catch{}}}}}function Rs(e){return e.endsWith("capture")&&e!=="gotpointercapture"&&e!=="lostpointercapture"}const Er=["beforeinput","click","change","dblclick","contextmenu","focusin","focusout","input","keydown","keyup","mousedown","mousemove","mouseout","mouseover","mouseup","pointerdown","pointermove","pointerout","pointerover","pointerup","touchend","touchmove","touchstart"];function Ns(e){return Er.includes(e)}const Tr={formnovalidate:"formNoValidate",ismap:"isMap",nomodule:"noModule",playsinline:"playsInline",readonly:"readOnly",defaultvalue:"defaultValue",defaultchecked:"defaultChecked",srcobject:"srcObject",novalidate:"noValidate",allowfullscreen:"allowFullscreen",disablepictureinpicture:"disablePictureInPicture",disableremoteplayback:"disableRemotePlayback"};function Cs(e){return e=e.toLowerCase(),Tr[e]??e}const Ar=["touchstart","touchmove"];function xr(e){return Ar.includes(e)}const hn=new Set,it=new Set;function Sr(e,t,n,r={}){function s(i){if(r.capture||xe.call(t,i),!i.cancelBubble)return Xe(()=>n?.call(this,i))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Me(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Ds(e,t,n,r,s){var i={capture:r,passive:s},l=Sr(e,t,n,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&ht(()=>{t.removeEventListener(e,l,i)})}function Is(e){for(var t=0;t<e.length;t++)hn.add(e[t]);for(var n of it)n(e)}let kt=null;function xe(e){var t=this,n=t.ownerDocument,r=e.type,s=e.composedPath?.()||[],i=s[0]||e.target;kt=e;var l=0,u=kt===e&&e.__root;if(u){var a=s.indexOf(u);if(a!==-1&&(t===document||t===window)){e.__root=t;return}var f=s.indexOf(t);if(f===-1)return;a<=f&&(l=a)}if(i=s[l]||e.target,i!==t){Je(e,"currentTarget",{configurable:!0,get(){return i||n}});var o=h,d=v;S(null),q(null);try{for(var c,_=[];i!==null;){var p=i.assignedSlot||i.parentNode||i.host||null;try{var A=i["__"+r];if(A!=null&&(!i.disabled||e.target===i))if(lt(A)){var[oe,...je]=A;oe.apply(i,[e,...je])}else A.call(i,e)}catch(G){c?_.push(G):c=G}if(e.cancelBubble||p===t||p===null)break;i=p}if(c){for(let G of _)queueMicrotask(()=>{throw G});throw c}}finally{e.__root=t,delete e.currentTarget,S(o),q(d)}}}function pt(e){var t=document.createElement("template");return t.innerHTML=e.replaceAll("<!>","<!---->"),t.content}function L(e,t){var n=v;n.nodes_start===null&&(n.nodes_start=e,n.nodes_end=t)}function Ps(e,t){var n=(t&Ln)!==0,r=(t&Fn)!==0,s,i=!e.startsWith("<!>");return()=>{if(b)return L(y,null),y;s===void 0&&(s=pt(i?e:"<!>"+e),n||(s=j(s)));var l=r||Kt?document.importNode(s,!0):s.cloneNode(!0);if(n){var u=j(l),a=l.lastChild;L(u,a)}else L(l,l);return l}}function kr(e,t,n="svg"){var r=!e.startsWith("<!>"),s=`<${n}>${r?e:"<!>"+e}</${n}>`,i;return()=>{if(b)return L(y,null),y;if(!i){var l=pt(s),u=j(l);i=j(u)}var a=i.cloneNode(!0);return L(a,a),a}}function Ms(e,t){return kr(e,t,"svg")}function Ls(e=""){if(!b){var t=ee(e+"");return L(t,t),t}var n=y;return n.nodeType!==We&&(n.before(n=ee()),I(n)),L(n,n),n}function Fs(){if(b)return L(y,null),y;var e=document.createDocumentFragment(),t=document.createComment(""),n=ee();return e.append(t,n),L(t,n),e}function js(e,t){if(b){v.nodes_end=y,ct();return}e!==null&&e.before(t)}let Ot=!0;function qs(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??=e.nodeValue)&&(e.__t=n,e.nodeValue=n+"")}function vn(e,t){return pn(e,t)}function Or(e,t){rt(),t.intro=t.intro??!1;const n=t.target,r=b,s=y;try{for(var i=j(n);i&&(i.nodeType!==De||i.data!==Pt);)i=W(i);if(!i)throw pe;he(!0),I(i);const l=pn(e,{...t,anchor:i});return he(!1),l}catch(l){if(l instanceof Error&&l.message.split(`
2
- `).some(u=>u.startsWith("https://svelte.dev/e/")))throw l;return l!==pe&&console.warn("Failed to hydrate: ",l),t.recover===!1&&Cn(),rt(),Jt(n),he(!1),vn(e,t)}finally{he(r),I(s)}}const ce=new Map;function pn(e,{target:t,anchor:n,props:r={},events:s,context:i,intro:l=!0}){rt();var u=new Set,a=d=>{for(var c=0;c<d.length;c++){var _=d[c];if(!u.has(_)){u.add(_);var p=xr(_);t.addEventListener(_,xe,{passive:p});var A=ce.get(_);A===void 0?(document.addEventListener(_,xe,{passive:p}),ce.set(_,1)):ce.set(_,A+1)}}};a(wn(hn)),it.add(a);var f=void 0,o=cr(()=>{var d=n??t.appendChild(ee());return Qn(d,{pending:()=>{}},c=>{if(i){Bn({});var _=g;_.c=i}if(s&&(r.$$events=s),b&&L(c,null),Ot=l,f=e(c,r)||{},Ot=!0,b&&(v.nodes_end=y,y===null||y.nodeType!==De||y.data!==Lt))throw Ge(),pe;i&&Wn()}),()=>{for(var c of u){t.removeEventListener(c,xe);var _=ce.get(c);--_===0?(document.removeEventListener(c,xe),ce.delete(c)):ce.set(c,_)}it.delete(a),d!==n&&d.parentNode?.removeChild(d)}});return at.set(f,o),f}let at=new WeakMap;function Rr(e,t){const n=at.get(e);return n?(at.delete(e),n(t)):Promise.resolve()}function Vs(e,t,...n){var r=e,s=Z,i;tn(()=>{s!==(s=t())&&(i&&(M(i),i=null),i=K(()=>s(r,...n)))},$e),b&&(r=y)}function Nr(e){return(t,...n)=>{var r=e(...n),s;if(b)s=y,ct();else{var i=r.render().trim(),l=pt(i);s=j(l),t.before(s)}const u=r.setup?.(s);L(s,s),typeof u=="function"&&ht(u)}}function gn(e,t,n){if(e==null)return t(void 0),n&&n(void 0),Z;const r=te(()=>e.subscribe(t,n));return r.unsubscribe?()=>r.unsubscribe():r}const _e=[];function Cr(e,t){return{subscribe:Dr(e,t).subscribe}}function Dr(e,t=Z){let n=null;const r=new Set;function s(u){if(jt(e,u)&&(e=u,n)){const a=!_e.length;for(const f of r)f[1](),_e.push(f,e);if(a){for(let f=0;f<_e.length;f+=2)_e[f][0](_e[f+1]);_e.length=0}}}function i(u){s(u(e))}function l(u,a=Z){const f=[u,a];return r.add(f),r.size===1&&(n=t(s,i)||Z),u(e),()=>{r.delete(f),r.size===0&&n&&(n(),n=null)}}return{set:s,update:i,subscribe:l}}function Ys(e,t,n){const r=!Array.isArray(e),s=r?[e]:e;if(!s.every(Boolean))throw new Error("derived() expects stores as input, got a falsy value");const i=t.length<2;return Cr(n,(l,u)=>{let a=!1;const f=[];let o=0,d=Z;const c=()=>{if(o)return;d();const p=t(r?f[0]:f,l,u);i?l(p):d=typeof p=="function"?p:Z},_=s.map((p,A)=>gn(p,oe=>{f[A]=oe,o&=~(1<<A),a&&c()},()=>{o|=1<<A}));return a=!0,c(),function(){Nt(_),d(),a=!1}})}function Hs(e){let t;return gn(e,n=>t=n)(),t}function Ir(){return h===null&&Nn(),(h.ac??=new AbortController).signal}function yn(e){g===null&&Ee(),Ie&&g.l!==null?gt(g).m.push(e):or(()=>{const t=te(e);if(typeof t=="function")return t})}function Pr(e){g===null&&Ee(),yn(()=>()=>te(e))}function Mr(e,t,{bubbles:n=!1,cancelable:r=!1}={}){return new CustomEvent(e,{detail:t,bubbles:n,cancelable:r})}function Lr(){const e=g;return e===null&&Ee(),(t,n,r)=>{const s=e.s.$$events?.[t];if(s){const i=lt(s)?s.slice():[s],l=Mr(t,n,r);for(const u of i)u.call(e.x,l);return!l.defaultPrevented}return!0}}function Fr(e){g===null&&Ee(),g.l===null&&It(),gt(g).b.push(e)}function jr(e){g===null&&Ee(),g.l===null&&It(),gt(g).a.push(e)}function gt(e){var t=e.l;return t.u??={a:[],b:[],m:[]}}const Us=Object.freeze(Object.defineProperty({__proto__:null,afterUpdate:jr,beforeUpdate:Fr,createEventDispatcher:Lr,createRawSnippet:Nr,flushSync:Ut,getAbortSignal:Ir,getAllContexts:$n,getContext:Yn,hasContext:Un,hydrate:Or,mount:vn,onDestroy:Pr,onMount:yn,setContext:Hn,settled:wr,tick:br,unmount:Rr,untrack:te},Symbol.toStringTag,{value:"Module"}));export{Qr as $,Ve as A,g as B,ms as C,Nt as D,$e as E,Vr as F,Os as G,_t as H,us as I,xs as J,qs as K,ls as L,Mt as M,Vn as N,I as O,he as P,Ss as Q,Z as R,ie as S,os as T,E as U,gn as V,Hs as W,ht as X,Je as Y,Se as Z,Br as _,vs as a,Dr as a$,Ae as a0,v as a1,we as a2,ir as a3,es as a4,Ie as a5,Jr as a6,Zr as a7,ts as a8,Te as a9,Q as aA,M as aB,Wr as aC,Xr as aD,W as aE,an as aF,Jt as aG,vr as aH,zr as aI,Kr as aJ,ws as aK,is as aL,ds as aM,nr as aN,ss as aO,Rs as aP,Sr as aQ,Is as aR,ys as aS,Cs as aT,lr as aU,rs as aV,Rt as aW,Ur as aX,Ns as aY,mn as aZ,Ze as a_,Hr as aa,Le as ab,_s as ac,q as ad,Or as ae,vn as af,Ut as ag,Rr as ah,br as ai,Fs as aj,fs as ak,Ls as al,Ts as am,As as an,Ms as ao,Lr as ap,Ds as aq,ks as ar,Yr as as,j as at,De as au,Lt as av,wn as aw,lt as ax,Ne as ay,Gr as az,js as b,Et as b0,Pr as b1,Vs as b2,jt as b3,Ot as b4,ue as b5,ot as b6,ns as b7,Xe as b8,qr as b9,hr as ba,Ge as bb,pe as bc,L as bd,pt as be,bs as bf,Ys as bg,cs as bh,Us as bi,hs as c,Y as d,Wn as e,Ps as f,z as g,H as h,Es as i,vt as j,te as k,b as l,ct as m,qn as n,yn as o,Bn as p,Me as q,as as r,ps as s,tn as t,or as u,ee as v,K as w,w as x,gs as y,y as z};