@eodash/eodash 5.0.0-rc.1.5 → 5.0.0-rc.2

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 (62) hide show
  1. package/README.md +1 -1
  2. package/core/client/composables/EodashMap.js +47 -28
  3. package/core/client/composables/EodashProcess.js +51 -5
  4. package/core/client/composables/index.js +8 -1
  5. package/core/client/eodash.js +21 -7
  6. package/core/client/eodashSTAC/EodashCollection.js +24 -4
  7. package/core/client/eodashSTAC/createLayers.js +62 -6
  8. package/core/client/eodashSTAC/helpers.js +48 -5
  9. package/core/client/eodashSTAC/triggers.js +52 -1
  10. package/core/client/store/stac.js +7 -2
  11. package/core/client/types.ts +10 -1
  12. package/core/client/utils/index.js +12 -0
  13. package/core/client/utils/states.js +18 -1
  14. package/core/client/views/Dashboard.vue +3 -1
  15. package/dist/client/{DashboardLayout-B-4X57-t.js → DashboardLayout-VrJIbhe8.js} +2 -2
  16. package/dist/client/{DynamicWebComponent-Dj3QYwag.js → DynamicWebComponent-BCwpocDX.js} +1 -1
  17. package/dist/client/EodashDatePicker-Bp5ec3BC.js +430 -0
  18. package/dist/client/{EodashItemFilter-DBQwJQPh.js → EodashItemFilter-Cx0t-qeW.js} +1 -1
  19. package/dist/client/{EodashLayerControl-C5fOCvoI.js → EodashLayerControl-DERx00In.js} +10 -2
  20. package/dist/client/{EodashLayoutSwitcher-BMO9k_20.js → EodashLayoutSwitcher-DTS7otlk.js} +2 -2
  21. package/dist/client/{EodashMap-D2bnMLAC.js → EodashMap-C-I6puhb.js} +101 -73
  22. package/dist/client/{EodashMapBtns-l9B977id.js → EodashMapBtns-CWgtJiG4.js} +4 -4
  23. package/dist/client/{EodashProcess-BtIlJvF1.js → EodashProcess-DWrTIyHT.js} +188 -33
  24. package/dist/client/{EodashStacInfo-CPVvp_Hm.js → EodashStacInfo-Dvsk97Mz.js} +1 -1
  25. package/dist/client/{EodashTools-DY2dlNXW.js → EodashTools-CdnjgTTl.js} +4 -4
  26. package/dist/client/{ExportState-BvD5A0XG.js → ExportState-S4lcehm3.js} +4 -4
  27. package/dist/client/{Footer-w95gBnSH.js → Footer-DlIEbXp-.js} +1 -1
  28. package/dist/client/{Header-BpiorKy9.js → Header-CTiEXLi0.js} +3 -3
  29. package/dist/client/{MobileLayout-CmVlZe7S.js → MobileLayout-DRgyQYFz.js} +17 -7
  30. package/dist/client/{PopUp-CREaSybs.js → PopUp-CzqV8BFZ.js} +3 -3
  31. package/dist/client/{VImg-DF9esgdd.js → VImg-Bn8bCvVM.js} +2 -2
  32. package/dist/client/{VMain-BWLMf-rn.js → VMain-2GOqWb6m.js} +1 -1
  33. package/dist/client/{VOverlay-DmNfblmy.js → VOverlay-BetC0LGI.js} +3 -3
  34. package/dist/client/{VTooltip-C3PeE7iO.js → VTooltip-BWg0dxx5.js} +3 -3
  35. package/dist/client/{WidgetsContainer-6FHEEXns.js → WidgetsContainer-Cv466WUW.js} +1 -1
  36. package/dist/client/{asWebComponent-BnFMd0T6.js → asWebComponent-CLUhauLl.js} +422 -164
  37. package/dist/client/eo-dash.css +1 -1
  38. package/dist/client/eo-dash.js +1 -1
  39. package/dist/client/{forwardRefs-BF3Me2RX.js → forwardRefs-CxSsJulB.js} +1 -1
  40. package/dist/client/{index-CRd5-RSy.js → index-BMj56LY3.js} +1 -1
  41. package/dist/client/{transition-Cpn_g5jE.js → transition-DidoPMgC.js} +1 -1
  42. package/dist/node/cli.js +2 -2
  43. package/dist/types/core/client/composables/EodashMap.d.ts +2 -1
  44. package/dist/types/core/client/composables/EodashProcess.d.ts +17 -11
  45. package/dist/types/core/client/composables/index.d.ts +1 -1
  46. package/dist/types/core/client/eodashSTAC/EodashCollection.d.ts +11 -4
  47. package/dist/types/core/client/eodashSTAC/createLayers.d.ts +6 -6
  48. package/dist/types/core/client/eodashSTAC/helpers.d.ts +77 -20
  49. package/dist/types/core/client/eodashSTAC/triggers.d.ts +6 -0
  50. package/dist/types/core/client/types.d.ts +13 -1
  51. package/dist/types/core/client/utils/index.d.ts +1 -0
  52. package/dist/types/core/client/utils/states.d.ts +9 -0
  53. package/dist/types/widgets/EodashDatePicker.vue.d.ts +459 -2
  54. package/dist/types/widgets/EodashMap.vue.d.ts +2 -0
  55. package/dist/types/widgets/EodashProcess.vue.d.ts +1 -0
  56. package/dist/types/widgets/PopUp.vue.d.ts +1 -2
  57. package/package.json +24 -24
  58. package/widgets/EodashDatePicker.vue +139 -22
  59. package/widgets/EodashLayerControl.vue +13 -1
  60. package/widgets/EodashMap.vue +63 -5
  61. package/widgets/EodashProcess.vue +82 -22
  62. package/dist/client/EodashDatePicker-DGRJrJ0s.js +0 -306
@@ -1,14 +1,46 @@
1
- import { watch, onMounted, nextTick, ref, openBlock, createElementBlock, createCommentVNode, toRaw, createElementVNode, createBlock, withCtx, createTextVNode } from 'vue';
1
+ import { createVNode, watch, onMounted, nextTick, ref, useTemplateRef, computed, openBlock, createElementBlock, createCommentVNode, toRaw, normalizeStyle, withCtx, createElementVNode, createBlock, createTextVNode } from 'vue';
2
2
  import '@eox/chart';
3
3
  import '@eox/drawtools';
4
4
  import '@eox/jsonform';
5
- import { af as axios, ag as getLayers, a3 as mapEl, ah as extractLayerConfig, aa as eoxLayersKey, $ as useSTAcStore, ai as useOnLayersUpdate, V as VBtn } from './asWebComponent-BnFMd0T6.js';
5
+ import { p as propsFactory, b as makeComponentProps, H as makeDimensionProps, c as makeTagProps, g as genericComponent, f as useRtl, J as useDimension, a as useRender, ah as axios, ai as getLayers, a4 as mapEl, aj as extractLayerConfig, a8 as eoxLayersKey, $ as useSTAcStore, ab as useOnLayersUpdate, V as VBtn } from './asWebComponent-CLUhauLl.js';
6
6
  import { storeToRefs } from 'pinia';
7
7
  import { useEventBus } from '@vueuse/core';
8
8
  import { isMulti } from '@eox/jsonform/src/custom-inputs/spatial/utils';
9
9
  import mustache from 'mustache';
10
10
  import log from 'loglevel';
11
11
 
12
+ const makeVContainerProps = propsFactory({
13
+ fluid: {
14
+ type: Boolean,
15
+ default: false
16
+ },
17
+ ...makeComponentProps(),
18
+ ...makeDimensionProps(),
19
+ ...makeTagProps()
20
+ }, 'VContainer');
21
+ const VContainer = genericComponent()({
22
+ name: 'VContainer',
23
+ props: makeVContainerProps(),
24
+ setup(props, _ref) {
25
+ let {
26
+ slots
27
+ } = _ref;
28
+ const {
29
+ rtlClasses
30
+ } = useRtl();
31
+ const {
32
+ dimensionStyles
33
+ } = useDimension(props);
34
+ useRender(() => createVNode(props.tag, {
35
+ "class": ['v-container', {
36
+ 'v-container--fluid': props.fluid
37
+ }, rtlClasses.value, props.class],
38
+ "style": [dimensionStyles.value, props.style]
39
+ }, slots));
40
+ return {};
41
+ }
42
+ });
43
+
12
44
  /**
13
45
  * Polls the process status and fetches a result item when the process is successful.
14
46
  *
@@ -50,6 +82,10 @@ async function pollProcessStatus({
50
82
  console.log("Result file fetched successfully:", resultResponse.data);
51
83
  return resultResponse.data; // Return the json result list
52
84
  }
85
+ if (processReport.status === "failed") {
86
+ isPolling.value = false;
87
+ throw new Error("Process failed.", processReport);
88
+ }
53
89
 
54
90
  // Log the current status if not successful
55
91
  console.log(
@@ -372,7 +408,7 @@ async function processGeoTiff(links, jsonformValue, layerId, isPolling) {
372
408
  * @param {import("stac-ts").StacLink[] | undefined} links
373
409
  * @param {Record<string,any> | undefined} jsonformValue
374
410
  * @param {string} specUrl
375
- * @returns {Promise<[import("vega").Spec|null,Record<string,any>|null]>}
411
+ * @returns {Promise<[import("@eox/chart").EOxChart["spec"] | null,Record<string,any>|null]>}
376
412
  **/
377
413
  async function getChartValues(links, jsonformValue, specUrl) {
378
414
  if (!specUrl || !links) return [null, null];
@@ -391,7 +427,7 @@ async function getChartValues(links, jsonformValue, specUrl) {
391
427
  for (const link of dataLinks ?? []) {
392
428
  if (link.type && ["application/json", "text/csv"].includes(link.type)) {
393
429
  const dataUrl = mustache.render(link.href, {
394
- ...(jsonformValue ?? {}),
430
+ ...(jsonformValue),
395
431
  ...(link["eox:flatstyle"] ?? {}),
396
432
  });
397
433
  // Wait for data to be retrieved
@@ -406,7 +442,7 @@ async function getChartValues(links, jsonformValue, specUrl) {
406
442
  dataValues[/** @type {string} */ (link.id)] = await axios
407
443
  .get(
408
444
  mustache.render(link.href, {
409
- ...(jsonformValue ?? {}),
445
+ ...(jsonformValue),
410
446
  ...(link["eox:flatstyle"] ?? {}),
411
447
  }),
412
448
  )
@@ -421,9 +457,10 @@ async function getChartValues(links, jsonformValue, specUrl) {
421
457
  * @param {import("vue").Ref<import("stac-ts").StacCollection | null>} params.selectedStac
422
458
  * @param {import("vue").Ref<import("@eox/jsonform").EOxJSONForm | null>} params.jsonformEl
423
459
  * @param {import("vue").Ref<Record<string,any>|null>} params.jsonformSchema
424
- * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"]>} params.chartSpec
460
+ * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"] | null>} params.chartSpec
425
461
  * @param {import("vue").Ref<Record<string, any> | null>} params.chartData
426
462
  * @param {import("vue").Ref<boolean>} params.isPolling
463
+ * @param {import("vue").Ref<any[]>} params.processResults
427
464
  */
428
465
  async function handleProcesses({
429
466
  loading,
@@ -433,6 +470,7 @@ async function handleProcesses({
433
470
  chartSpec,
434
471
  chartData,
435
472
  isPolling,
473
+ processResults,
436
474
  }) {
437
475
  log.debug("Processing...");
438
476
  loading.value = true;
@@ -458,22 +496,50 @@ async function handleProcesses({
458
496
  { ...(jsonformValue ?? {}) },
459
497
  specUrl,
460
498
  );
499
+ if (Object.keys(chartData.value ?? {}).length) {
500
+ processResults.value.push(chartData.value);
501
+ }
502
+ //@ts-expect-error we assume that the spec data is of type InlineData
503
+ if (chartSpec.value?.data?.values?.length) {
504
+ //@ts-expect-error we assume that the spec data is of type InlineData
505
+ processResults.value.push(chartSpec.value?.data.values);
506
+ }
507
+
461
508
  if (chartSpec.value && !("background" in chartSpec.value)) {
462
509
  chartSpec.value["background"] = "transparent";
463
510
  }
511
+
464
512
  const geotiffLayer = await processGeoTiff(
465
513
  serviceLinks,
466
514
  jsonformValue,
467
515
  selectedStac.value?.id ?? "",
468
516
  isPolling,
469
517
  );
518
+
519
+ if (geotiffLayer && geotiffLayer.source?.sources.length) {
520
+ processResults.value.push(
521
+ ...(geotiffLayer.source?.sources?.map((source) => source.url) ?? []),
522
+ );
523
+ }
524
+ // 3. vector geojson
470
525
  const vectorLayers = await processVector(
471
526
  serviceLinks,
472
527
  jsonformValue,
473
528
  selectedStac.value?.id ?? "",
474
529
  );
475
530
 
531
+ if (vectorLayers?.length) {
532
+ processResults.value.push(
533
+ ...vectorLayers.map((layer) => layer.source?.url),
534
+ );
535
+ }
536
+
476
537
  const imageLayers = processImage(serviceLinks, jsonformValue, origBbox);
538
+ if (imageLayers?.length) {
539
+ processResults.value.push(
540
+ ...imageLayers.map((layer) => layer.source?.url),
541
+ );
542
+ }
477
543
 
478
544
  log.debug(
479
545
  "rendered layers after processing:",
@@ -511,8 +577,9 @@ async function handleProcesses({
511
577
  * @param {Object} params
512
578
  * @param {import("vue").Ref<boolean>} params.loading
513
579
  * @param {import("vue").Ref<boolean>} params.isProcessed
514
- * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"]>} params.chartSpec
580
+ * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"] | null>} params.chartSpec
515
581
  * @param {import("vue").Ref<boolean>} params.isPolling
582
+ * @param {import("vue").Ref<any[]>} params.processResults
516
583
  * @param {import("vue").Ref<Record<string,any>|null>} params.jsonformSchema
517
584
  */
518
585
  function resetProcess({
@@ -520,12 +587,14 @@ function resetProcess({
520
587
  isProcessed,
521
588
  chartSpec,
522
589
  jsonformSchema,
590
+ processResults,
523
591
  isPolling,
524
592
  }) {
525
593
  loading.value = false;
526
594
  isProcessed.value = false;
527
595
  isPolling.value = false;
528
596
  chartSpec.value = null;
597
+ processResults.value = [];
529
598
  jsonformSchema.value = null;
530
599
  }
531
600
 
@@ -538,7 +607,8 @@ function resetProcess({
538
607
  * @param {import("vue").Ref<import("stac-ts").StacCollection>} params.selectedStac
539
608
  * @param {import("vue").Ref<import("@eox/jsonform").EOxJSONForm | null>} params.jsonformEl
540
609
  * @param {import("vue").Ref<Record<string,any> | null>} params.jsonformSchema
541
- * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"]>} params.chartSpec
610
+ * @param {import("vue").Ref<import("@eox/chart").EOxChart["spec"] | null>} params.chartSpec
611
+ * @param {import("vue").Ref<any[]>} params.processResults
542
612
  * @param {import("vue").Ref<boolean>} params.isProcessed
543
613
  * @param {import("vue").Ref<boolean>} params.loading
544
614
  * @param {import("vue").Ref<boolean>} params.isPolling
@@ -549,13 +619,21 @@ async function initProcess({
549
619
  jsonformSchema,
550
620
  chartSpec,
551
621
  isProcessed,
622
+ processResults,
552
623
  loading,
553
624
  isPolling,
554
625
  }) {
555
626
  if (!selectedStac.value) {
556
627
  return;
557
628
  }
558
- resetProcess({ loading, isProcessed, chartSpec, jsonformSchema, isPolling });
629
+ resetProcess({
630
+ loading,
631
+ isProcessed,
632
+ chartSpec,
633
+ jsonformSchema,
634
+ isPolling,
635
+ processResults,
636
+ });
559
637
  if (selectedStac.value["eodash:jsonform"]) {
560
638
  jsonformEl.value?.editor.destroy();
561
639
  // wait for the layers to be rendered
@@ -575,7 +653,10 @@ async function initProcess({
575
653
  }
576
654
  }
577
655
 
578
- const _hoisted_1 = { class: "process-container" };
656
+ const _hoisted_1 = {
657
+ ref: "container",
658
+ class: "process-container"
659
+ };
579
660
  const _hoisted_2 = [".schema"];
580
661
  const _hoisted_3 = [".spec", ".dataValues"];
581
662
 
@@ -599,12 +680,47 @@ const jsonformSchema = ref(null);
599
680
 
600
681
  /** @type {import("vue").Ref<import("@eox/jsonform").EOxJSONForm | null>} */
601
682
  const jsonformEl = ref(null);
683
+
684
+ const containerEl = useTemplateRef("container");
685
+
602
686
  const loading = ref(false);
603
687
 
604
688
  const autoExec = ref(false);
605
689
 
606
690
  const isPolling = ref(false);
691
+ /** @type {import("vue").Ref<any[]>} */
692
+ const processResults = ref([]);
607
693
 
694
+ const downloadResults = () => {
695
+ processResults.value.forEach((result) => {
696
+ if (!result) {
697
+ return;
698
+ }
699
+ let url = "";
700
+ let downloadFile = "";
701
+ if (typeof result === "string") {
702
+ url = result;
703
+ //@ts-expect-error TODO
704
+ downloadFile = url.includes("/") ? url.split("/").pop() : url;
705
+ downloadFile = downloadFile.includes("?")
706
+ ? downloadFile.split("?")[0]
707
+ : downloadFile;
708
+ } else {
709
+ result = JSON.stringify(result);
710
+ const blob = new Blob([result], { type: "text" });
711
+ url = URL.createObjectURL(blob);
712
+ downloadFile = selectedStac.value?.id + "_process_results.json";
713
+ }
714
+ const link = document.createElement("a");
715
+ if (confirm(`Would you like to download ${downloadFile}?`)) {
716
+ link.href = url;
717
+ link.download = downloadFile;
718
+ link.click();
719
+ }
720
+ URL.revokeObjectURL(url);
721
+ link.remove();
722
+ });
723
+ };
608
724
  onMounted(async () => {
609
725
  // wait for the layers to be rendered
610
726
  if (mapEl.value?.layers.length <= 1) {
@@ -617,6 +733,7 @@ onMounted(async () => {
617
733
  chartSpec,
618
734
  isProcessed,
619
735
  loading,
736
+ processResults,
620
737
  isPolling,
621
738
  });
622
739
  });
@@ -628,14 +745,15 @@ onMounted(async () => {
628
745
  jsonformSchema,
629
746
  chartSpec,
630
747
  isProcessed,
748
+ processResults,
631
749
  loading,
632
750
  isPolling,
633
751
  });
634
752
  }
635
753
  });
636
754
 
637
- useOnLayersUpdate(
638
- async () =>
755
+ useOnLayersUpdate(async (evt, _payload) => {
756
+ if (evt === "layers:updated") {
639
757
  await initProcess({
640
758
  //@ts-expect-error TODO
641
759
  selectedStac,
@@ -643,10 +761,12 @@ useOnLayersUpdate(
643
761
  jsonformSchema,
644
762
  chartSpec,
645
763
  isProcessed,
764
+ processResults,
646
765
  loading,
647
766
  isPolling,
648
- }),
649
- );
767
+ });
768
+ }
769
+ });
650
770
 
651
771
  const startProcess = async () => {
652
772
  const errors = jsonformEl.value?.editor.validate();
@@ -654,6 +774,7 @@ const startProcess = async () => {
654
774
  console.warn("[eodash] Form validation failed", errors);
655
775
  return;
656
776
  }
777
+ processResults.value = [];
657
778
  await handleProcesses({
658
779
  jsonformEl,
659
780
  jsonformSchema,
@@ -664,13 +785,29 @@ const startProcess = async () => {
664
785
  selectedStac,
665
786
  isProcessed,
666
787
  isPolling,
788
+ processResults,
667
789
  });
668
790
  isProcessed.value = true;
669
791
  };
670
792
  useAutoExec(autoExec, jsonformEl, jsonformSchema, startProcess);
671
793
 
794
+ const chartStyles = computed(() => {
795
+ /** @type {Record<string,string> }*/
796
+ const styles = {};
797
+ if (!chartSpec.value?.["height"]) {
798
+ styles["height"] =
799
+ Math.max(
800
+ (containerEl.value?.offsetHeight ?? 0) -
801
+ (jsonformEl.value?.offsetHeight ?? 0),
802
+ 200,
803
+ ) + "px";
804
+ }
805
+ return styles;
806
+ });
807
+
672
808
  return (_ctx, _cache) => {
673
809
 
810
+
674
811
 
675
812
  return (openBlock(), createElementBlock("div", _hoisted_1, [
676
813
  (jsonformSchema.value)
@@ -686,26 +823,44 @@ return (_ctx, _cache) => {
686
823
  key: 1,
687
824
  class: "chart",
688
825
  ".spec": toRaw(chartSpec.value),
689
- ".dataValues": toRaw(chartData.value)
690
- }, null, 40 /* PROPS, NEED_HYDRATION */, _hoisted_3))
826
+ ".dataValues": toRaw(chartData.value),
827
+ style: normalizeStyle(chartStyles.value)
828
+ }, null, 44 /* STYLE, PROPS, NEED_HYDRATION */, _hoisted_3))
691
829
  : createCommentVNode("v-if", true),
692
- createElementVNode("span", null, [
693
- (!autoExec.value)
694
- ? (openBlock(), createBlock(VBtn, {
695
- key: 0,
696
- loading: loading.value,
697
- style: {"float":"right","margin-right":"20px"},
698
- onClick: startProcess,
699
- color: "primary"
700
- }, {
701
- default: withCtx(() => _cache[0] || (_cache[0] = [
702
- createTextVNode(" Execute ")
703
- ])),
704
- _: 1 /* STABLE */
705
- }, 8 /* PROPS */, ["loading"]))
706
- : createCommentVNode("v-if", true)
707
- ])
708
- ]))
830
+ createVNode(VContainer, null, {
831
+ default: withCtx(() => [
832
+ createElementVNode("span", null, [
833
+ (!autoExec.value)
834
+ ? (openBlock(), createBlock(VBtn, {
835
+ key: 0,
836
+ loading: loading.value,
837
+ style: {"float":"right","margin-right":"20px"},
838
+ onClick: startProcess,
839
+ color: "primary"
840
+ }, {
841
+ default: withCtx(() => _cache[0] || (_cache[0] = [
842
+ createTextVNode(" Execute ")
843
+ ])),
844
+ _: 1 /* STABLE */
845
+ }, 8 /* PROPS */, ["loading"]))
846
+ : createCommentVNode("v-if", true),
847
+ (processResults.value.length && isProcessed.value)
848
+ ? (openBlock(), createBlock(VBtn, {
849
+ key: 1,
850
+ color: "primary",
851
+ onClick: downloadResults
852
+ }, {
853
+ default: withCtx(() => _cache[1] || (_cache[1] = [
854
+ createTextVNode(" Download ")
855
+ ])),
856
+ _: 1 /* STABLE */
857
+ }))
858
+ : createCommentVNode("v-if", true)
859
+ ])
860
+ ]),
861
+ _: 1 /* STABLE */
862
+ })
863
+ ], 512 /* NEED_PATCH */))
709
864
  }
710
865
  }
711
866
 
@@ -1,6 +1,6 @@
1
1
  import { openBlock, createElementBlock, createElementVNode, unref } from 'vue';
2
2
  import '@eox/stacinfo';
3
- import { aj as currentUrl } from './asWebComponent-BnFMd0T6.js';
3
+ import { ak as currentUrl } from './asWebComponent-CLUhauLl.js';
4
4
 
5
5
  const _hoisted_1 = { class: "flex-grow-1 fill-height overflow-auto" };
6
6
  const _hoisted_2 = [".for", ".allowHtml", ".body", ".featured", ".footer", ".styleOverride", ".header", ".subheader", ".tags"];
@@ -1,9 +1,9 @@
1
1
  import { ref, computed, openBlock, createElementBlock, createElementVNode, createBlock, unref, createCommentVNode, createVNode, withCtx, mergeProps } from 'vue';
2
- import _sfc_main$2 from './PopUp-CREaSybs.js';
3
- import _sfc_main$3 from './EodashItemFilter-DBQwJQPh.js';
4
- import _sfc_main$1 from './EodashLayoutSwitcher-BMO9k_20.js';
2
+ import _sfc_main$2 from './PopUp-CzqV8BFZ.js';
3
+ import _sfc_main$3 from './EodashItemFilter-Cx0t-qeW.js';
4
+ import _sfc_main$1 from './EodashLayoutSwitcher-DTS7otlk.js';
5
5
  import { mdiViewDashboard, mdiPlus } from '@mdi/js';
6
- import { t as useDisplay, a1 as makePanelTransparent, V as VBtn } from './asWebComponent-BnFMd0T6.js';
6
+ import { t as useDisplay, a2 as makePanelTransparent, V as VBtn } from './asWebComponent-CLUhauLl.js';
7
7
 
8
8
  const _hoisted_1 = { class: "d-flex flex-row justify-space-between pa-4 align-center" };
9
9
 
@@ -1,9 +1,9 @@
1
1
  import { createVNode, Fragment, computed, withDirectives, mergeProps, resolveDirective, toRef, mergeModels, useModel, ref, openBlock, createBlock, withCtx, createElementVNode, createTextVNode, toDisplayString, unref, createElementBlock, createCommentVNode, renderList } from 'vue';
2
2
  import { mdiClipboardCheckOutline, mdiContentCopy } from '@mdi/js';
3
- import _sfc_main$1 from './PopUp-CREaSybs.js';
4
- import { am as createSimpleFunctional, g as genericComponent, b as makeComponentProps, D as provideDefaults, a as useRender, p as propsFactory, c as makeTagProps, I as IconValue, K as makeBorderProps, A as makeDensityProps, M as makeRoundedProps, an as makeSizeProps, d as makeThemeProps, ao as makeVariantProps, e as provideTheme, N as useBorder, ap as useVariant, B as useDensity, P as useRounded, aq as useSize, y as VIcon, Q as VDefaultsProvider, ar as genOverlays, H as makeDimensionProps, L as makeElevationProps, as as makeLoaderProps, at as makeLocationProps, au as makePositionProps, av as makeRouterProps, aw as Ripple, J as useDimension, O as useElevation, ax as useLoader, ay as useLocation, az as usePosition, aA as useLink, aB as LoaderSlot, u as useTextColor, q as convertToUnit, _ as _export_sfc, ag as getLayers, aC as removeUnneededProperties, aD as VRow, aE as VCol, V as VBtn, aF as copyToClipBoard, ad as mapPosition, a8 as availableMapProjection } from './asWebComponent-BnFMd0T6.js';
5
- import { a as VExpandTransition } from './index-CRd5-RSy.js';
6
- import { V as VImg } from './VImg-DF9esgdd.js';
3
+ import _sfc_main$1 from './PopUp-CzqV8BFZ.js';
4
+ import { an as createSimpleFunctional, g as genericComponent, b as makeComponentProps, D as provideDefaults, a as useRender, p as propsFactory, c as makeTagProps, I as IconValue, K as makeBorderProps, A as makeDensityProps, M as makeRoundedProps, ao as makeSizeProps, d as makeThemeProps, ap as makeVariantProps, e as provideTheme, N as useBorder, aq as useVariant, B as useDensity, P as useRounded, ar as useSize, y as VIcon, Q as VDefaultsProvider, as as genOverlays, H as makeDimensionProps, L as makeElevationProps, at as makeLoaderProps, au as makeLocationProps, av as makePositionProps, aw as makeRouterProps, ax as Ripple, J as useDimension, O as useElevation, ay as useLoader, az as useLocation, aA as usePosition, aB as useLink, aC as LoaderSlot, u as useTextColor, q as convertToUnit, _ as _export_sfc, ai as getLayers, aD as removeUnneededProperties, aE as VRow, aF as VCol, V as VBtn, aG as copyToClipBoard, ad as mapPosition, ae as availableMapProjection } from './asWebComponent-CLUhauLl.js';
5
+ import { a as VExpandTransition } from './index-BMj56LY3.js';
6
+ import { V as VImg } from './VImg-Bn8bCvVM.js';
7
7
 
8
8
  // Styles
9
9
  const VSpacer = createSimpleFunctional('v-spacer', 'div', 'VSpacer');
@@ -1,5 +1,5 @@
1
1
  import { ref, toRef, shallowRef, computed, createVNode, watchEffect, inject, openBlock, createBlock, unref, withCtx, createElementVNode, toDisplayString, createTextVNode } from 'vue';
2
- import { p as propsFactory, K as makeBorderProps, b as makeComponentProps, L as makeElevationProps, T as makeLayoutItemProps, M as makeRoundedProps, c as makeTagProps, d as makeThemeProps, g as genericComponent, e as provideTheme, C as useBackgroundColor, N as useBorder, O as useElevation, P as useRounded, v as useResizeObserver, U as useToggleScope, a as useRender, q as convertToUnit, W as useLayoutItem, _ as _export_sfc, X as eodashKey, t as useDisplay } from './asWebComponent-BnFMd0T6.js';
2
+ import { p as propsFactory, K as makeBorderProps, b as makeComponentProps, L as makeElevationProps, T as makeLayoutItemProps, M as makeRoundedProps, c as makeTagProps, d as makeThemeProps, g as genericComponent, e as provideTheme, C as useBackgroundColor, N as useBorder, O as useElevation, P as useRounded, v as useResizeObserver, U as useToggleScope, a as useRender, q as convertToUnit, W as useLayoutItem, _ as _export_sfc, X as eodashKey, t as useDisplay } from './asWebComponent-CLUhauLl.js';
3
3
 
4
4
  const makeVFooterProps = propsFactory({
5
5
  app: Boolean,
@@ -1,7 +1,7 @@
1
1
  import { createVNode, toRef, shallowRef, computed, ref, watch, onMounted, onBeforeUnmount, mergeProps, watchEffect, inject, openBlock, createBlock, withCtx, createTextVNode, toDisplayString, unref } from 'vue';
2
- import { p as propsFactory, b as makeComponentProps, c as makeTagProps, g as genericComponent, a as useRender, K as makeBorderProps, L as makeElevationProps, M as makeRoundedProps, d as makeThemeProps, C as useBackgroundColor, N as useBorder, O as useElevation, P as useRounded, e as provideTheme, f as useRtl, D as provideDefaults, Q as VDefaultsProvider, q as convertToUnit, R as clamp, S as consoleWarn, T as makeLayoutItemProps, j as useProxiedModel, U as useToggleScope, W as useLayoutItem, _ as _export_sfc, X as eodashKey } from './asWebComponent-BnFMd0T6.js';
3
- import { a as VExpandTransition } from './index-CRd5-RSy.js';
4
- import { V as VImg } from './VImg-DF9esgdd.js';
2
+ import { p as propsFactory, b as makeComponentProps, c as makeTagProps, g as genericComponent, a as useRender, K as makeBorderProps, L as makeElevationProps, M as makeRoundedProps, d as makeThemeProps, C as useBackgroundColor, N as useBorder, O as useElevation, P as useRounded, e as provideTheme, f as useRtl, D as provideDefaults, Q as VDefaultsProvider, q as convertToUnit, R as clamp, S as consoleWarn, T as makeLayoutItemProps, j as useProxiedModel, U as useToggleScope, W as useLayoutItem, _ as _export_sfc, X as eodashKey } from './asWebComponent-CLUhauLl.js';
3
+ import { a as VExpandTransition } from './index-BMj56LY3.js';
4
+ import { V as VImg } from './VImg-Bn8bCvVM.js';
5
5
  import { u as useSsrBoot } from './ssrBoot-BP7SYRyC.js';
6
6
 
7
7
  const makeVToolbarTitleProps = propsFactory({
@@ -1,10 +1,10 @@
1
1
  import { ref, computed, createVNode, mergeProps, Fragment, shallowRef, watch, provide, withDirectives, resolveDirective, inject, vShow, nextTick, toRef, useCssVars, onMounted, openBlock, createBlock, withCtx, Suspense, unref, resolveDynamicComponent, createCommentVNode, createElementBlock, renderList, createElementVNode, createTextVNode, toDisplayString } from 'vue';
2
- import { k as keys, p as propsFactory, o as omit, m as makeVBtnProps, g as genericComponent, u as useTextColor, a as useRender, V as VBtn, b as makeComponentProps, c as makeTagProps, d as makeThemeProps, e as provideTheme, f as useRtl, h as useLocale, i as useGroup, j as useProxiedModel, l as makeGroupItemProps, n as useGroupItem, q as convertToUnit, I as IconValue, r as makeDisplayProps, s as makeGroupProps, t as useDisplay, v as useResizeObserver, w as useGoTo, x as IN_BROWSER, y as VIcon, z as focusableChildren, A as makeDensityProps, B as useDensity, C as useBackgroundColor, D as provideDefaults, E as isObject, _ as _export_sfc, F as useDefineTemplate, G as useLayout } from './asWebComponent-BnFMd0T6.js';
3
- import { V as VMain } from './VMain-BWLMf-rn.js';
4
- import { f as forwardRefs, a as animate, s as standardEasing, m as makeLazyProps, u as useLazy, b as useScopeId } from './forwardRefs-BF3Me2RX.js';
2
+ import { k as keys, p as propsFactory, o as omit, m as makeVBtnProps, g as genericComponent, u as useTextColor, a as useRender, V as VBtn, b as makeComponentProps, c as makeTagProps, d as makeThemeProps, e as provideTheme, f as useRtl, h as useLocale, i as useGroup, j as useProxiedModel, l as makeGroupItemProps, n as useGroupItem, q as convertToUnit, I as IconValue, r as makeDisplayProps, s as makeGroupProps, t as useDisplay, v as useResizeObserver, w as useGoTo, x as IN_BROWSER, y as VIcon, z as focusableChildren, A as makeDensityProps, B as useDensity, C as useBackgroundColor, D as provideDefaults, E as isObject, _ as _export_sfc, F as useDefineTemplate, G as useLayout } from './asWebComponent-CLUhauLl.js';
3
+ import { V as VMain } from './VMain-2GOqWb6m.js';
4
+ import { f as forwardRefs, a as animate, s as standardEasing, m as makeLazyProps, u as useLazy, b as useScopeId } from './forwardRefs-CxSsJulB.js';
5
5
  import { u as useSsrBoot } from './ssrBoot-BP7SYRyC.js';
6
- import { M as MaybeTransition } from './transition-Cpn_g5jE.js';
7
- import { V as VFadeTransition } from './index-CRd5-RSy.js';
6
+ import { M as MaybeTransition } from './transition-DidoPMgC.js';
7
+ import { V as VFadeTransition } from './index-BMj56LY3.js';
8
8
 
9
9
  // Utilities
10
10
  const handleGesture = wrapper => {
@@ -818,6 +818,14 @@ const VSlideGroup = genericComponent()({
818
818
  toFocus('last');
819
819
  }
820
820
  }
821
+ function getSiblingElement(el, location) {
822
+ if (!el) return undefined;
823
+ let sibling = el;
824
+ do {
825
+ sibling = sibling?.[location === 'next' ? 'nextElementSibling' : 'previousElementSibling'];
826
+ } while (sibling?.hasAttribute('disabled'));
827
+ return sibling;
828
+ }
821
829
  function focus(location) {
822
830
  if (!contentRef.el) return;
823
831
  let el;
@@ -825,15 +833,17 @@ const VSlideGroup = genericComponent()({
825
833
  const focusable = focusableChildren(contentRef.el);
826
834
  el = focusable[0];
827
835
  } else if (location === 'next') {
828
- el = contentRef.el.querySelector(':focus')?.nextElementSibling;
836
+ el = getSiblingElement(contentRef.el.querySelector(':focus'), location);
829
837
  if (!el) return focus('first');
830
838
  } else if (location === 'prev') {
831
- el = contentRef.el.querySelector(':focus')?.previousElementSibling;
839
+ el = getSiblingElement(contentRef.el.querySelector(':focus'), location);
832
840
  if (!el) return focus('last');
833
841
  } else if (location === 'first') {
834
842
  el = contentRef.el.firstElementChild;
843
+ if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'next');
835
844
  } else if (location === 'last') {
836
845
  el = contentRef.el.lastElementChild;
846
+ if (el?.hasAttribute('disabled')) el = getSiblingElement(el, 'prev');
837
847
  }
838
848
  if (el) {
839
849
  el.focus({
@@ -1,7 +1,7 @@
1
1
  import { createVNode, Transition, mergeProps, ref, onBeforeUnmount, watch, nextTick, toRef, mergeModels, useModel, openBlock, createElementBlock, withCtx, createBlock, resolveDynamicComponent, unref, createCommentVNode, renderSlot } from 'vue';
2
- import { g as genericComponent, p as propsFactory, j as useProxiedModel, x as IN_BROWSER, a as useRender, z as focusableChildren, Q as VDefaultsProvider, K as makeBorderProps, b as makeComponentProps, H as makeDimensionProps, L as makeElevationProps, at as makeLocationProps, au as makePositionProps, M as makeRoundedProps, c as makeTagProps, d as makeThemeProps, e as provideTheme, C as useBackgroundColor, N as useBorder, J as useDimension, O as useElevation, ay as useLocation, az as usePosition, P as useRounded, aI as useDefineWidgets } from './asWebComponent-BnFMd0T6.js';
3
- import { m as makeVOverlayProps, V as VOverlay } from './VOverlay-DmNfblmy.js';
4
- import { a as animate, d as deceleratedEasing, s as standardEasing, c as acceleratedEasing, g as getTargetBox, n as nullifyTransforms, b as useScopeId, f as forwardRefs } from './forwardRefs-BF3Me2RX.js';
2
+ import { g as genericComponent, p as propsFactory, j as useProxiedModel, x as IN_BROWSER, a as useRender, z as focusableChildren, Q as VDefaultsProvider, K as makeBorderProps, b as makeComponentProps, H as makeDimensionProps, L as makeElevationProps, au as makeLocationProps, av as makePositionProps, M as makeRoundedProps, c as makeTagProps, d as makeThemeProps, e as provideTheme, C as useBackgroundColor, N as useBorder, J as useDimension, O as useElevation, az as useLocation, aA as usePosition, P as useRounded, aJ as useDefineWidgets } from './asWebComponent-CLUhauLl.js';
3
+ import { m as makeVOverlayProps, V as VOverlay } from './VOverlay-BetC0LGI.js';
4
+ import { a as animate, d as deceleratedEasing, s as standardEasing, c as acceleratedEasing, g as getTargetBox, n as nullifyTransforms, b as useScopeId, f as forwardRefs } from './forwardRefs-CxSsJulB.js';
5
5
 
6
6
  const makeVDialogTransitionProps = propsFactory({
7
7
  target: [Object, Array]
@@ -1,6 +1,6 @@
1
1
  import { createVNode, computed, toRef, shallowRef, ref, watch, onBeforeMount, nextTick, onBeforeUnmount, withDirectives, mergeProps, Fragment, resolveDirective, vShow } from 'vue';
2
- import { aG as SUPPORTS_INTERSECTION, p as propsFactory, b as makeComponentProps, H as makeDimensionProps, g as genericComponent, J as useDimension, a as useRender, M as makeRoundedProps, C as useBackgroundColor, P as useRounded, aH as getCurrentInstance, q as convertToUnit } from './asWebComponent-BnFMd0T6.js';
3
- import { m as makeTransitionProps, M as MaybeTransition } from './transition-Cpn_g5jE.js';
2
+ import { aH as SUPPORTS_INTERSECTION, p as propsFactory, b as makeComponentProps, H as makeDimensionProps, g as genericComponent, J as useDimension, a as useRender, M as makeRoundedProps, C as useBackgroundColor, P as useRounded, aI as getCurrentInstance, q as convertToUnit } from './asWebComponent-CLUhauLl.js';
3
+ import { m as makeTransitionProps, M as MaybeTransition } from './transition-DidoPMgC.js';
4
4
 
5
5
  // Utilities
6
6
  function mounted(el, binding) {
@@ -1,5 +1,5 @@
1
1
  import { createVNode } from 'vue';
2
- import { p as propsFactory, b as makeComponentProps, H as makeDimensionProps, c as makeTagProps, g as genericComponent, J as useDimension, G as useLayout, a as useRender } from './asWebComponent-BnFMd0T6.js';
2
+ import { p as propsFactory, b as makeComponentProps, H as makeDimensionProps, c as makeTagProps, g as genericComponent, J as useDimension, G as useLayout, a as useRender } from './asWebComponent-CLUhauLl.js';
3
3
  import { u as useSsrBoot } from './ssrBoot-BP7SYRyC.js';
4
4
 
5
5
  const makeVMainProps = propsFactory({
@@ -1,7 +1,7 @@
1
1
  import { ref, watch, onScopeDispose, computed, nextTick, watchEffect, effectScope, inject, mergeProps, shallowRef, onMounted, reactive, provide, readonly, toRaw, warn, toRef, onBeforeUnmount, createVNode, Fragment, Teleport, withDirectives, vShow, resolveDirective, Transition } from 'vue';
2
- import { aJ as isOn, aK as eventName, p as propsFactory, x as IN_BROWSER, U as useToggleScope, aL as destructComputed, aM as parseAnchor, aN as flipSide, aO as flipAlign, aP as flipCorner, Y as consoleError, aQ as getAxis, q as convertToUnit, R as clamp, aR as defer, aH as getCurrentInstance, aS as templateRef, aT as matchesSelector, t as useDisplay, b as makeComponentProps, H as makeDimensionProps, d as makeThemeProps, g as genericComponent, j as useProxiedModel, e as provideTheme, f as useRtl, C as useBackgroundColor, J as useDimension, aU as useRouter, a as useRender, aV as useBackButton } from './asWebComponent-BnFMd0T6.js';
3
- import { g as getTargetBox, B as Box, e as getOverflow, n as nullifyTransforms, m as makeLazyProps, u as useLazy, b as useScopeId, a as animate, s as standardEasing } from './forwardRefs-BF3Me2RX.js';
4
- import { m as makeTransitionProps, M as MaybeTransition } from './transition-Cpn_g5jE.js';
2
+ import { aK as isOn, aL as eventName, p as propsFactory, x as IN_BROWSER, U as useToggleScope, aM as destructComputed, aN as parseAnchor, aO as flipSide, aP as flipAlign, aQ as flipCorner, Y as consoleError, aR as getAxis, q as convertToUnit, R as clamp, aS as defer, aI as getCurrentInstance, aT as templateRef, aU as matchesSelector, t as useDisplay, b as makeComponentProps, H as makeDimensionProps, d as makeThemeProps, g as genericComponent, j as useProxiedModel, e as provideTheme, f as useRtl, C as useBackgroundColor, J as useDimension, aV as useRouter, a as useRender, aW as useBackButton } from './asWebComponent-CLUhauLl.js';
3
+ import { g as getTargetBox, B as Box, e as getOverflow, n as nullifyTransforms, m as makeLazyProps, u as useLazy, b as useScopeId, a as animate, s as standardEasing } from './forwardRefs-CxSsJulB.js';
4
+ import { m as makeTransitionProps, M as MaybeTransition } from './transition-DidoPMgC.js';
5
5
 
6
6
  // Utilities
7
7
  const handlers = new WeakMap();
@@ -1,7 +1,7 @@
1
1
  import { computed, ref, mergeProps, createVNode } from 'vue';
2
- import { m as makeVOverlayProps, V as VOverlay } from './VOverlay-DmNfblmy.js';
3
- import { b as useScopeId, f as forwardRefs } from './forwardRefs-BF3Me2RX.js';
4
- import { p as propsFactory, o as omit, g as genericComponent, j as useProxiedModel, al as getUid, a as useRender } from './asWebComponent-BnFMd0T6.js';
2
+ import { m as makeVOverlayProps, V as VOverlay } from './VOverlay-BetC0LGI.js';
3
+ import { b as useScopeId, f as forwardRefs } from './forwardRefs-CxSsJulB.js';
4
+ import { p as propsFactory, o as omit, g as genericComponent, j as useProxiedModel, am as getUid, a as useRender } from './asWebComponent-CLUhauLl.js';
5
5
 
6
6
  const makeVTooltipProps = propsFactory({
7
7
  id: String,
@@ -1,5 +1,5 @@
1
1
  import { ref, onMounted, nextTick, openBlock, createElementBlock, Fragment, renderList, unref, createElementVNode, toDisplayString, normalizeStyle, createBlock, resolveDynamicComponent, mergeProps } from 'vue';
2
- import { aI as useDefineWidgets, G as useLayout } from './asWebComponent-BnFMd0T6.js';
2
+ import { aJ as useDefineWidgets, G as useLayout } from './asWebComponent-CLUhauLl.js';
3
3
  import 'animated-details';
4
4
 
5
5
  const _sfc_main = {