@platforma-sdk/ui-vue 1.42.1 → 1.42.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +16 -15
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +15 -15
- package/dist/internal/createAppV2.d.ts.map +1 -1
- package/dist/internal/createAppV2.js +64 -55
- package/dist/internal/createAppV2.js.map +1 -1
- package/dist/lib/ui/uikit/dist/components/DataTable/TableComponent.vue.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/{ExpandTransition.vue.js → ExpandTransition.vue2.js} +1 -1
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js +1 -1
- package/dist/lib/ui/uikit/dist/components/PlNumberField/PlNumberField.vue.js +91 -103
- package/dist/lib/ui/uikit/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
- package/dist/lib/ui/uikit/dist/components/PlNumberField/parseNumber.js +77 -0
- package/dist/lib/ui/uikit/dist/components/PlNumberField/parseNumber.js.map +1 -0
- package/dist/lib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js +4 -4
- package/dist/node_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js +44 -41
- package/dist/node_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js +122 -67
- package/dist/node_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js.map +1 -1
- package/package.json +5 -5
- package/src/internal/createAppV2.ts +22 -13
- package/dist/lib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue.js.map +0 -1
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.42.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.42.3 build /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> vite build
|
|
5
5
|
|
|
6
6
|
[36mvite v6.3.5 [32mbuilding for production...[36m[39m
|
|
7
7
|
transforming...
|
|
8
|
-
[32m✓[39m
|
|
8
|
+
[32m✓[39m 900 modules transformed.
|
|
9
9
|
rendering chunks...
|
|
10
10
|
|
|
11
11
|
[vite:dts] Start generate declaration files...
|
|
12
12
|
computing gzip size...
|
|
13
|
-
[vite:dts] Declaration files built in
|
|
13
|
+
[vite:dts] Declaration files built in 5269ms.
|
|
14
14
|
|
|
15
15
|
[2mdist/[22m[36m_virtual/re.js [39m[1m[2m 0.08 kB[22m[1m[22m[2m │ gzip: 0.10 kB[22m[2m │ map: 0.09 kB[22m
|
|
16
16
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-interpolate@3.0.1/node_modules/d3-interpolate/src/constant.js [39m[1m[2m 0.09 kB[22m[1m[22m[2m │ gzip: 0.10 kB[22m[2m │ map: 0.32 kB[22m
|
|
@@ -38,18 +38,18 @@ computing gzip size...
|
|
|
38
38
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-array@3.2.4/node_modules/d3-array/src/number.js [39m[1m[2m 0.11 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.79 kB[22m
|
|
39
39
|
[2mdist/[22m[36mcomponents/PlAgCsvExporter/PlAgCsvExporter.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
40
40
|
[2mdist/[22m[36mlib/ui/uikit/dist/helpers/math.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m[2m │ map: 0.36 kB[22m
|
|
41
|
-
[2mdist/[22m[36mcomponents/PlAgCellProgress/PlAgCellProgress.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
42
41
|
[2mdist/[22m[36mcomponents/PlAgColumnHeader/PlAgColumnHeader.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
42
|
+
[2mdist/[22m[36mcomponents/PlAgCellProgress/PlAgCellProgress.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
43
43
|
[2mdist/[22m[36mcomponents/PlAgRowNumHeader.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
44
44
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/constant.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.40 kB[22m
|
|
45
45
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/constant.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.40 kB[22m
|
|
46
46
|
[2mdist/[22m[36mcomponents/PlAgDataTable/PlAgOverlayLoading.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
47
|
-
[2mdist/[22m[36mcomponents/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
48
47
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableAddFilterV2.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
48
|
+
[2mdist/[22m[36mcomponents/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue2.js [39m[1m[2m 0.12 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
49
49
|
[2mdist/[22m[36mplugins/Monetization/MonetizationSidebar.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
50
50
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFilterEntryV2.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
51
|
-
[2mdist/[22m[36mcomponents/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
52
51
|
[2mdist/[22m[36mcomponents/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
52
|
+
[2mdist/[22m[36mcomponents/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
53
53
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlRadio/keys.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m[2m │ map: 0.46 kB[22m
|
|
54
54
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/size.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.13 kB[22m[2m │ map: 0.49 kB[22m
|
|
55
55
|
[2mdist/[22m[36mcomponents/ValueOrErrorsComponent.vue2.js [39m[1m[2m 0.13 kB[22m[1m[22m[2m │ gzip: 0.12 kB[22m[2m │ map: 0.11 kB[22m
|
|
@@ -554,7 +554,7 @@ computing gzip size...
|
|
|
554
554
|
[2mdist/[22m[36mlib/ui/uikit/dist/assets/icons/icon-assets-min/24_bubble.svg.js [39m[1m[2m 0.77 kB[22m[1m[22m[2m │ gzip: 0.40 kB[22m[2m │ map: 1.00 kB[22m
|
|
555
555
|
[2mdist/[22m[36mplugins/Monetization/EndOfPeriod.vue2.js [39m[1m[2m 0.77 kB[22m[1m[22m[2m │ gzip: 0.47 kB[22m[2m │ map: 1.55 kB[22m
|
|
556
556
|
[2mdist/[22m[36mlib/ui/uikit/dist/assets/icons/icon-assets-min/24_container.svg.js [39m[1m[2m 0.78 kB[22m[1m[22m[2m │ gzip: 0.43 kB[22m[2m │ map: 1.08 kB[22m
|
|
557
|
-
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlAccordion/ExpandTransition.
|
|
557
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlAccordion/ExpandTransition.vue2.js [39m[1m[2m 0.78 kB[22m[1m[22m[2m │ gzip: 0.43 kB[22m[2m │ map: 1.35 kB[22m
|
|
558
558
|
[2mdist/[22m[36mnode_modules/.pnpm/canonicalize@2.1.0/node_modules/canonicalize/lib/canonicalize.js [39m[1m[2m 0.80 kB[22m[1m[22m[2m │ gzip: 0.45 kB[22m[2m │ map: 2.18 kB[22m
|
|
559
559
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/canonicalize@2.1.0/node_modules/canonicalize/lib/canonicalize.js [39m[1m[2m 0.80 kB[22m[1m[22m[2m │ gzip: 0.45 kB[22m[2m │ map: 2.20 kB[22m
|
|
560
560
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/DataTable/adapters/AsyncData.js [39m[1m[2m 0.81 kB[22m[1m[22m[2m │ gzip: 0.43 kB[22m[2m │ map: 2.16 kB[22m
|
|
@@ -705,6 +705,7 @@ computing gzip size...
|
|
|
705
705
|
[2mdist/[22m[36mAgGridVue/createAgGridColDef.js [39m[1m[2m 1.61 kB[22m[1m[22m[2m │ gzip: 0.72 kB[22m[2m │ map: 9.40 kB[22m
|
|
706
706
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/@vueuse_integrations@13.3.0_axios@1.8.1_focus-trap@7.6.0_sortablejs@1.15.6_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/integrations/useSortable.js [39m[1m[2m 1.61 kB[22m[1m[22m[2m │ gzip: 0.80 kB[22m[2m │ map: 4.03 kB[22m
|
|
707
707
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlTabs/PlTabs.vue.js [39m[1m[2m 1.61 kB[22m[1m[22m[2m │ gzip: 0.80 kB[22m[2m │ map: 2.14 kB[22m
|
|
708
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlNumberField/parseNumber.js [39m[1m[2m 1.61 kB[22m[1m[22m[2m │ gzip: 0.56 kB[22m[2m │ map: 4.44 kB[22m
|
|
708
709
|
[2mdist/[22m[36mlib/ui/uikit/dist/base/BtnBase.vue.js [39m[1m[2m 1.63 kB[22m[1m[22m[2m │ gzip: 0.74 kB[22m[2m │ map: 1.80 kB[22m
|
|
709
710
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-selection@3.0.0/node_modules/d3-selection/src/selection/on.js [39m[1m[2m 1.63 kB[22m[1m[22m[2m │ gzip: 0.68 kB[22m[2m │ map: 4.38 kB[22m
|
|
710
711
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlFileDialog/Shortcuts.vue2.js [39m[1m[2m 1.63 kB[22m[1m[22m[2m │ gzip: 0.60 kB[22m[2m │ map: 0.14 kB[22m
|
|
@@ -757,8 +758,7 @@ computing gzip size...
|
|
|
757
758
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-scale@4.0.2/node_modules/d3-scale/src/continuous.js [39m[1m[2m 2.53 kB[22m[1m[22m[2m │ gzip: 0.94 kB[22m[2m │ map: 7.07 kB[22m
|
|
758
759
|
[2mdist/[22m[36mlib/util/helpers/dist/index.js [39m[1m[2m 2.55 kB[22m[1m[22m[2m │ gzip: 1.06 kB[22m[2m │ map: 25.73 kB[22m
|
|
759
760
|
[2mdist/[22m[36mplugins/Monetization/LimitCard.vue3.js [39m[1m[2m 2.55 kB[22m[1m[22m[2m │ gzip: 0.92 kB[22m[2m │ map: 0.11 kB[22m
|
|
760
|
-
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js [39m[1m[2m 2.
|
|
761
|
-
[2mdist/[22m[36mnode_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js [39m[1m[2m 2.57 kB[22m[1m[22m[2m │ gzip: 1.13 kB[22m[2m │ map: 50.11 kB[22m
|
|
761
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlAccordion/PlAccordionSection.vue2.js [39m[1m[2m 2.57 kB[22m[1m[22m[2m │ gzip: 1.15 kB[22m[2m │ map: 2.90 kB[22m
|
|
762
762
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFiltersV2.vue3.js [39m[1m[2m 2.58 kB[22m[1m[22m[2m │ gzip: 0.94 kB[22m[2m │ map: 0.12 kB[22m
|
|
763
763
|
[2mdist/[22m[36mplugins/Monetization/LimitCard.vue2.js [39m[1m[2m 2.61 kB[22m[1m[22m[2m │ gzip: 0.88 kB[22m[2m │ map: 4.83 kB[22m
|
|
764
764
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/DataTable/TdCell.vue.js [39m[1m[2m 2.61 kB[22m[1m[22m[2m │ gzip: 1.04 kB[22m[2m │ map: 4.63 kB[22m
|
|
@@ -800,6 +800,7 @@ computing gzip size...
|
|
|
800
800
|
[2mdist/[22m[36mcomponents/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js [39m[1m[2m 3.59 kB[22m[1m[22m[2m │ gzip: 1.43 kB[22m[2m │ map: 2.78 kB[22m
|
|
801
801
|
[2mdist/[22m[36mcomponents/PlMultiSequenceAlignment/Consensus.vue2.js [39m[1m[2m 3.59 kB[22m[1m[22m[2m │ gzip: 1.42 kB[22m[2m │ map: 6.62 kB[22m
|
|
802
802
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js [39m[1m[2m 3.61 kB[22m[1m[22m[2m │ gzip: 1.35 kB[22m[2m │ map: 1.24 kB[22m
|
|
803
|
+
[2mdist/[22m[36mnode_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js [39m[1m[2m 3.61 kB[22m[1m[22m[2m │ gzip: 1.45 kB[22m[2m │ map: 51.57 kB[22m
|
|
803
804
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js [39m[1m[2m 3.67 kB[22m[1m[22m[2m │ gzip: 1.01 kB[22m[2m │ map: 5.45 kB[22m
|
|
804
805
|
[2mdist/[22m[36mlib/ui/uikit/dist/composition/useSortable.js [39m[1m[2m 3.68 kB[22m[1m[22m[2m │ gzip: 1.32 kB[22m[2m │ map: 10.93 kB[22m
|
|
805
806
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlElementList/PlElementListItem.vue2.js [39m[1m[2m 3.80 kB[22m[1m[22m[2m │ gzip: 1.15 kB[22m[2m │ map: 6.62 kB[22m
|
|
@@ -816,10 +817,10 @@ computing gzip size...
|
|
|
816
817
|
[2mdist/[22m[36mcomponents/PlAnnotations/components/DynamicForm.vue2.js [39m[1m[2m 4.81 kB[22m[1m[22m[2m │ gzip: 1.43 kB[22m[2m │ map: 6.96 kB[22m
|
|
817
818
|
[2mdist/[22m[36mcomponents/PlAnnotations/components/FilterSidebar.vue2.js [39m[1m[2m 4.88 kB[22m[1m[22m[2m │ gzip: 1.74 kB[22m[2m │ map: 6.15 kB[22m
|
|
818
819
|
[2mdist/[22m[36mcomponents/BlockLayout.vue2.js [39m[1m[2m 4.96 kB[22m[1m[22m[2m │ gzip: 1.83 kB[22m[2m │ map: 2.95 kB[22m
|
|
819
|
-
[2mdist/[22m[36mnode_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js [39m[1m[2m 5.11 kB[22m[1m[22m[2m │ gzip: 1.97 kB[22m[2m │ map: 252.41 kB[22m
|
|
820
820
|
[2mdist/[22m[36mplugins/Monetization/MonetizationSidebar.vue.js [39m[1m[2m 5.12 kB[22m[1m[22m[2m │ gzip: 1.79 kB[22m[2m │ map: 5.01 kB[22m
|
|
821
821
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlBtnGroup/PlBtnGroup.vue.js [39m[1m[2m 5.18 kB[22m[1m[22m[2m │ gzip: 1.94 kB[22m[2m │ map: 3.19 kB[22m
|
|
822
822
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlTooltip/PlTooltip.vue.js [39m[1m[2m 5.23 kB[22m[1m[22m[2m │ gzip: 1.93 kB[22m[2m │ map: 5.49 kB[22m
|
|
823
|
+
[2mdist/[22m[36mnode_modules/.pnpm/@vueuse_core@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/core/index.js [39m[1m[2m 5.24 kB[22m[1m[22m[2m │ gzip: 2.02 kB[22m[2m │ map: 252.41 kB[22m
|
|
823
824
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/Slider.vue.js [39m[1m[2m 5.51 kB[22m[1m[22m[2m │ gzip: 1.92 kB[22m[2m │ map: 8.17 kB[22m
|
|
824
825
|
[2mdist/[22m[36mcomponents/PlAnnotations/components/FilterSidebar.vue3.js [39m[1m[2m 5.58 kB[22m[1m[22m[2m │ gzip: 1.63 kB[22m[2m │ map: 0.11 kB[22m
|
|
825
826
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlSidebar/PlSidebarGroup.vue3.js [39m[1m[2m 5.60 kB[22m[1m[22m[2m │ gzip: 1.65 kB[22m[2m │ map: 0.12 kB[22m
|
|
@@ -827,11 +828,11 @@ computing gzip size...
|
|
|
827
828
|
[2mdist/[22m[36minternal/createAppV1.js [39m[1m[2m 5.80 kB[22m[1m[22m[2m │ gzip: 1.89 kB[22m[2m │ map: 15.32 kB[22m
|
|
828
829
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlDialogModal/PlDialogModal.vue.js [39m[1m[2m 5.80 kB[22m[1m[22m[2m │ gzip: 2.01 kB[22m[2m │ map: 5.33 kB[22m
|
|
829
830
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlSidebar/PlSidebarItem.vue3.js [39m[1m[2m 5.87 kB[22m[1m[22m[2m │ gzip: 1.77 kB[22m[2m │ map: 0.12 kB[22m
|
|
830
|
-
[2mdist/[22m[36minternal/createAppV2.js [39m[1m[2m 6.49 kB[22m[1m[22m[2m │ gzip: 2.29 kB[22m[2m │ map: 18.40 kB[22m
|
|
831
831
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlLogView/PlLogView.vue.js [39m[1m[2m 6.50 kB[22m[1m[22m[2m │ gzip: 2.32 kB[22m[2m │ map: 5.68 kB[22m
|
|
832
832
|
[2mdist/[22m[36mcomponents/PlTableFilters/PlTableFiltersV2.vue2.js [39m[1m[2m 6.57 kB[22m[1m[22m[2m │ gzip: 2.06 kB[22m[2m │ map: 9.28 kB[22m
|
|
833
833
|
[2mdist/[22m[36mnode_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js [39m[1m[2m 6.70 kB[22m[1m[22m[2m │ gzip: 1.86 kB[22m[2m │ map: 15.20 kB[22m
|
|
834
834
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlTextArea/PlTextArea.vue.js [39m[1m[2m 6.71 kB[22m[1m[22m[2m │ gzip: 2.37 kB[22m[2m │ map: 5.76 kB[22m
|
|
835
|
+
[2mdist/[22m[36minternal/createAppV2.js [39m[1m[2m 6.83 kB[22m[1m[22m[2m │ gzip: 2.41 kB[22m[2m │ map: 18.93 kB[22m
|
|
835
836
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlCheckbox/PlCheckboxBase.vue.js [39m[1m[2m 6.88 kB[22m[1m[22m[2m │ gzip: 1.35 kB[22m[2m │ map: 0.85 kB[22m
|
|
836
837
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/SliderRange.vue.js [39m[1m[2m 6.99 kB[22m[1m[22m[2m │ gzip: 2.19 kB[22m[2m │ map: 11.71 kB[22m
|
|
837
838
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlBtnSplit/PlBtnSplit.vue.js [39m[1m[2m 7.12 kB[22m[1m[22m[2m │ gzip: 2.57 kB[22m[2m │ map: 8.61 kB[22m
|
|
@@ -849,7 +850,7 @@ computing gzip size...
|
|
|
849
850
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlElementList/PlElementList.vue2.js [39m[1m[2m 9.17 kB[22m[1m[22m[2m │ gzip: 2.43 kB[22m[2m │ map: 17.22 kB[22m
|
|
850
851
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/d3-color@3.1.0/node_modules/d3-color/src/color.js [39m[1m[2m 9.19 kB[22m[1m[22m[2m │ gzip: 3.33 kB[22m[2m │ map: 22.02 kB[22m
|
|
851
852
|
[2mdist/[22m[36mcomponents/PlTableFilters/filters_logic.js [39m[1m[2m 9.69 kB[22m[1m[22m[2m │ gzip: 2.25 kB[22m[2m │ map: 20.32 kB[22m
|
|
852
|
-
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlNumberField/PlNumberField.vue.js [39m[1m[2m 10.
|
|
853
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlNumberField/PlNumberField.vue.js [39m[1m[2m 10.00 kB[22m[1m[22m[2m │ gzip: 3.17 kB[22m[2m │ map: 12.09 kB[22m
|
|
853
854
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlFileInput/PlFileInput.vue.js [39m[1m[2m 10.78 kB[22m[1m[22m[2m │ gzip: 3.38 kB[22m[2m │ map: 8.09 kB[22m
|
|
854
855
|
[2mdist/[22m[36mlib/ui/uikit/dist/demo-site-data/all-css-variables.js [39m[1m[2m 11.00 kB[22m[1m[22m[2m │ gzip: 1.76 kB[22m[2m │ map: 18.24 kB[22m
|
|
855
856
|
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlDropdownLine/PlDropdownLine.vue.js [39m[1m[2m 14.70 kB[22m[1m[22m[2m │ gzip: 3.91 kB[22m[2m │ map: 12.75 kB[22m
|
|
@@ -876,6 +877,6 @@ computing gzip size...
|
|
|
876
877
|
[2mdist/[22m[36mlib/ui/uikit/dist/node_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/index.js [39m[1m[2m 83.80 kB[22m[1m[22m[2m │ gzip: 17.23 kB[22m[2m │ map: 240.83 kB[22m
|
|
877
878
|
[2mdist/[22m[36mnode_modules/.pnpm/zod@3.23.8/node_modules/zod/lib/index.js [39m[1m[2m 83.81 kB[22m[1m[22m[2m │ gzip: 17.26 kB[22m[2m │ map: 241.15 kB[22m
|
|
878
879
|
[2mdist/[22m[36mlib/ui/uikit/dist/index.js [39m[1m[2m497.77 kB[22m[1m[22m[2m │ gzip: 191.75 kB[22m[2m │ map: 0.18 kB[22m
|
|
879
|
-
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js [39m[1m[33m601.
|
|
880
|
-
[2mdist/[22m[36mlib/ui/uikit/dist/components/DataTable/TableComponent.vue.js [39m[1m[
|
|
881
|
-
[32m✓ built in
|
|
880
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/PlSlideModal/PlPureSlideModal.vue.js [39m[1m[33m601.12 kB[39m[22m[2m │ gzip: 204.71 kB[22m[2m │ map: 0.21 kB[22m
|
|
881
|
+
[2mdist/[22m[36mlib/ui/uikit/dist/components/DataTable/TableComponent.vue.js [39m[1m[33m603.01 kB[39m[22m[2m │ gzip: 205.56 kB[22m[2m │ map: 0.27 kB[22m
|
|
882
|
+
[32m✓ built in 8.94s[39m
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
WARN Issue while reading "/home/runner/_work/platforma/platforma/.npmrc". Failed to replace env in config: ${NPMJS_TOKEN}
|
|
2
2
|
|
|
3
|
-
> @platforma-sdk/ui-vue@1.42.
|
|
3
|
+
> @platforma-sdk/ui-vue@1.42.3 type-check /home/runner/_work/platforma/platforma/sdk/ui-vue
|
|
4
4
|
> vue-tsc --noEmit --project ./tsconfig.json
|
|
5
5
|
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# @platforma-sdk/ui-vue
|
|
2
2
|
|
|
3
|
+
## 1.42.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 6310c08: Use watch ignorable in createApp2
|
|
8
|
+
|
|
9
|
+
## 1.42.2
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Updated dependencies [911f928]
|
|
14
|
+
- @milaboratories/uikit@2.3.26
|
|
15
|
+
|
|
3
16
|
## 1.42.1
|
|
4
17
|
|
|
5
18
|
### Patch Changes
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as I, ref as b, watchEffect as K, computed as P, createElementBlock as $, openBlock as f, Fragment as L, createElementVNode as r, createVNode as o, normalizeClass as
|
|
1
|
+
import { defineComponent as I, ref as b, watchEffect as K, computed as P, createElementBlock as $, openBlock as f, Fragment as L, createElementVNode as r, createVNode as o, normalizeClass as u, unref as n, withModifiers as S, withCtx as s, createTextVNode as i, createCommentVNode as U, createBlock as T, withKeys as C } from "vue";
|
|
2
2
|
import { isJsonEqual as k } from "../../lib/util/helpers/dist/index.js";
|
|
3
3
|
import "../../lib/ui/uikit/dist/index.js";
|
|
4
4
|
import { defaultAlignmentParams as A } from "./multi-sequence-alignment.js";
|
|
@@ -19,7 +19,7 @@ const h = /* @__PURE__ */ I({
|
|
|
19
19
|
colorSchemeOptions: {}
|
|
20
20
|
},
|
|
21
21
|
emits: ["updateSettings", "export"],
|
|
22
|
-
setup(
|
|
22
|
+
setup(d, { emit: w }) {
|
|
23
23
|
const O = w, p = b(!1);
|
|
24
24
|
function m(t, e) {
|
|
25
25
|
O("updateSettings", { [t]: e });
|
|
@@ -27,27 +27,27 @@ const h = /* @__PURE__ */ I({
|
|
|
27
27
|
function v(t, e) {
|
|
28
28
|
m(
|
|
29
29
|
"widgets",
|
|
30
|
-
e ? [...
|
|
30
|
+
e ? [...d.settings.widgets, t] : d.settings.widgets.filter((l) => t !== l)
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
|
-
const a = b({ ...
|
|
33
|
+
const a = b({ ...d.settings.alignmentParams });
|
|
34
34
|
K(() => {
|
|
35
|
-
a.value = { ...
|
|
35
|
+
a.value = { ...d.settings.alignmentParams };
|
|
36
36
|
});
|
|
37
37
|
const E = P(
|
|
38
|
-
() => !k(
|
|
38
|
+
() => !k(d.settings.alignmentParams, a.value)
|
|
39
39
|
), N = P(
|
|
40
|
-
() => !k(
|
|
40
|
+
() => !k(d.settings.alignmentParams, A)
|
|
41
41
|
);
|
|
42
42
|
return (t, e) => (f(), $(L, null, [
|
|
43
43
|
r("div", {
|
|
44
|
-
class:
|
|
44
|
+
class: u(t.$style.container)
|
|
45
45
|
}, [
|
|
46
46
|
r("div", {
|
|
47
|
-
class:
|
|
47
|
+
class: u(t.$style.line)
|
|
48
48
|
}, [
|
|
49
49
|
r("div", {
|
|
50
|
-
class:
|
|
50
|
+
class: u(t.$style.section)
|
|
51
51
|
}, [
|
|
52
52
|
o(n(q), {
|
|
53
53
|
label: "Sequence Columns",
|
|
@@ -71,7 +71,7 @@ const h = /* @__PURE__ */ I({
|
|
|
71
71
|
}, null, 8, ["model-value", "options"])
|
|
72
72
|
], 2),
|
|
73
73
|
r("div", {
|
|
74
|
-
class:
|
|
74
|
+
class: u(t.$style.buttons)
|
|
75
75
|
}, [
|
|
76
76
|
o(n(y), {
|
|
77
77
|
icon: "settings",
|
|
@@ -94,10 +94,10 @@ const h = /* @__PURE__ */ I({
|
|
|
94
94
|
], 2)
|
|
95
95
|
], 2),
|
|
96
96
|
r("div", {
|
|
97
|
-
class:
|
|
97
|
+
class: u(t.$style.line)
|
|
98
98
|
}, [
|
|
99
99
|
r("div", {
|
|
100
|
-
class:
|
|
100
|
+
class: u(t.$style.section)
|
|
101
101
|
}, [
|
|
102
102
|
o(n(g), {
|
|
103
103
|
"model-value": t.settings.widgets.includes("seqLogo"),
|
|
@@ -194,7 +194,7 @@ const h = /* @__PURE__ */ I({
|
|
|
194
194
|
}, 8, ["modelValue"]),
|
|
195
195
|
E.value ? (f(), $("div", {
|
|
196
196
|
key: 0,
|
|
197
|
-
class:
|
|
197
|
+
class: u(t.$style["pending-changes"])
|
|
198
198
|
}, [
|
|
199
199
|
o(n(G), {
|
|
200
200
|
onClick: e[14] || (e[14] = (l) => m("alignmentParams", a.value))
|
|
@@ -215,7 +215,7 @@ const h = /* @__PURE__ */ I({
|
|
|
215
215
|
], 2)) : U("", !0),
|
|
216
216
|
N.value ? (f(), T(n(z), {
|
|
217
217
|
key: 1,
|
|
218
|
-
class:
|
|
218
|
+
class: u(t.$style["reset-button"]),
|
|
219
219
|
icon: "reverse",
|
|
220
220
|
onClick: e[16] || (e[16] = (l) => m("alignmentParams", void 0))
|
|
221
221
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAppV2.d.ts","sourceRoot":"","sources":["../../src/internal/createAppV2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpI,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"createAppV2.d.ts","sourceRoot":"","sources":["../../src/internal/createAppV2.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIpI,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAQ1G,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,eAAO,MAAM,sBAAsB,WAAY,YAAY,GAAG,SAAS,KAAG,YAGxE,CAAC;AAUH;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CACzB,IAAI,GAAG,OAAO,EACd,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EACnD,OAAO,GAAG,OAAO,EACjB,IAAI,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,EAExC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,EAC9D,SAAS,EAAE,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,EACpD,QAAQ,EAAE,WAAW;WAsFZ,MAAM;;;;;;;qBAiF2C,IAAI;wBACH,OAAO;gCACc,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;sBAM5F,CAAC,SAAS,IAAI,mBAAkB,iBAAiB,CAAC,IAAI,EAAE,CAAC,CAAC;oBAmB5D,CAAC,SAAS,OAAO,qBAAqB,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,8BAAuB,MAAM,OAAO;oBAwBvG,CAAC,SAAS,MAAM,OAAO,WAAW,CAAC,EAAE,KAAG,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;qBAWhE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,KAAG,OAAO,CAAC,OAAO,CAAC;wBAcpC,CAAC,IAAI,EAAE,OAAO,KAAK,OAAO,KAAG,OAAO,CAAC,OAAO,CAAC;uBAY9C,IAAI;;;;cAlNf,IAAI;iBACD,OAAO,CAAC,OAAO,CAAC;YACrB,OAAO;yBACM,eAAe,CAAC,IAAI,CAAC;;;;;EAmOzC;AAED,MAAM,MAAM,SAAS,CACnB,IAAI,GAAG,OAAO,EACd,OAAO,SAAS,gBAAgB,GAAG,gBAAgB,EACnD,OAAO,GAAG,OAAO,EACjB,IAAI,SAAS,IAAI,MAAM,EAAE,GAAG,IAAI,MAAM,EAAE,IACtC,UAAU,CAAC,OAAO,WAAW,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -1,77 +1,86 @@
|
|
|
1
|
-
import { deepClone as
|
|
1
|
+
import { deepClone as i, uniqueId as V, delay as L } from "../lib/util/helpers/dist/index.js";
|
|
2
2
|
import "../sdk/model/dist/index.js";
|
|
3
|
-
import { ref as
|
|
4
|
-
import { createModel as
|
|
5
|
-
import { parseQuery as
|
|
3
|
+
import { ref as w, computed as g, reactive as N } from "vue";
|
|
4
|
+
import { createModel as P } from "../createModel.js";
|
|
5
|
+
import { parseQuery as W } from "../urls.js";
|
|
6
6
|
import { MultiError as G, unwrapValueOrErrors as H } from "../utils.js";
|
|
7
7
|
import "../node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/index.js";
|
|
8
|
-
import { UpdateSerializer as
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
|
|
8
|
+
import { UpdateSerializer as v } from "./UpdateSerializer.js";
|
|
9
|
+
import { ignorableWatch as K } from "../node_modules/.pnpm/@vueuse_shared@13.3.0_vue@3.5.13_typescript@5.6.3_/node_modules/@vueuse/shared/index.js";
|
|
10
|
+
import { unwrapResult as c, hasAbortError as X } from "../lib/model/common/dist/index.js";
|
|
11
|
+
import { applyPatch as B } from "../node_modules/.pnpm/fast-json-patch@3.1.1/node_modules/fast-json-patch/module/core.js";
|
|
12
|
+
const O = 100, Y = (n) => ({
|
|
12
13
|
authorId: (n == null ? void 0 : n.authorId) ?? V(),
|
|
13
14
|
localVersion: ((n == null ? void 0 : n.localVersion) ?? 0) + 1
|
|
14
|
-
})
|
|
15
|
-
|
|
15
|
+
}), Q = (n) => {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.stringify(n, null, 2);
|
|
18
|
+
} catch (u) {
|
|
19
|
+
return u instanceof Error ? u.message : String(u);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
function ie(n, u, A) {
|
|
16
23
|
const r = (e, ...t) => {
|
|
17
|
-
|
|
24
|
+
A.debug && console.log(`%c>>> %c${e}`, "color: orange; font-weight: bold", "color: orange", ...t.map((a) => Q(a)));
|
|
18
25
|
}, b = (e, ...t) => {
|
|
19
|
-
console.error(`%c>>> %c${e}`, "color: red; font-weight: bold", "color: red",
|
|
20
|
-
},
|
|
26
|
+
console.error(`%c>>> %c${e}`, "color: red; font-weight: bold", "color: red", ...t.map((a) => Q(a)));
|
|
27
|
+
}, s = {
|
|
21
28
|
isExternalSnapshot: !1,
|
|
22
29
|
author: {
|
|
23
30
|
authorId: V(),
|
|
24
31
|
localVersion: 0
|
|
25
32
|
}
|
|
26
|
-
},
|
|
33
|
+
}, m = () => (s.author = Y(s.author), r("nextAuthorMarker", s.author), s.author), h = w(!1), f = w(n.uTag), p = A.debounceSpan ?? 200, y = new v({ debounceSpan: p }), U = new v({ debounceSpan: p }), M = new v({ debounceSpan: p }), R = new v({ debounceSpan: p }), o = w(n.value), T = async (e) => u.setBlockArgs(e, m()), E = async (e) => u.setBlockUiState(e, m()), D = async (e, t) => u.setBlockArgsAndUiState(e, t, m()), k = async (e) => u.setNavigationState(e), q = g(() => {
|
|
27
34
|
const e = Object.entries(o.value.outputs).map(([t, a]) => [t, a.ok && a.value !== void 0 ? a.value : void 0]);
|
|
28
35
|
return Object.fromEntries(e);
|
|
29
|
-
}),
|
|
36
|
+
}), C = g(() => {
|
|
30
37
|
const e = Object.entries(o.value.outputs).map(([t, a]) => [t, a && !a.ok ? new G(a.errors) : void 0]);
|
|
31
38
|
return Object.fromEntries(e);
|
|
32
|
-
}),
|
|
39
|
+
}), l = N({
|
|
33
40
|
error: "",
|
|
34
41
|
model: {
|
|
35
|
-
args:
|
|
36
|
-
ui:
|
|
37
|
-
outputs:
|
|
38
|
-
outputErrors:
|
|
42
|
+
args: i(o.value.args),
|
|
43
|
+
ui: i(o.value.ui),
|
|
44
|
+
outputs: q,
|
|
45
|
+
outputErrors: C
|
|
39
46
|
}
|
|
40
|
-
}),
|
|
41
|
-
() =>
|
|
47
|
+
}), { ignoreUpdates: $ } = K(
|
|
48
|
+
() => l.model,
|
|
42
49
|
(e) => {
|
|
43
|
-
const t =
|
|
44
|
-
r("appModel.model", t),
|
|
50
|
+
const t = i(e);
|
|
51
|
+
r("setArgsAndUiStateQueue appModel.model", t), M.run(() => D(t.args, t.ui).then(c));
|
|
45
52
|
},
|
|
46
53
|
{ deep: !0 }
|
|
47
|
-
),
|
|
48
|
-
r("
|
|
54
|
+
), z = (e) => {
|
|
55
|
+
r("updateAppModel", e), l.model.args = i(e.args), l.model.ui = i(e.ui);
|
|
49
56
|
};
|
|
50
57
|
(async () => {
|
|
51
58
|
var e, t;
|
|
52
59
|
for (window.addEventListener("beforeunload", () => {
|
|
53
|
-
|
|
60
|
+
h.value = !0, u.dispose().then(c).catch((a) => {
|
|
54
61
|
b("error in dispose", a);
|
|
55
62
|
});
|
|
56
|
-
}); !
|
|
63
|
+
}); !h.value; )
|
|
57
64
|
try {
|
|
58
|
-
const a = await
|
|
59
|
-
if (r("patches.length", a.value.length), r("uTagRef.value",
|
|
60
|
-
await new Promise((
|
|
65
|
+
const a = await u.getPatches(f.value).then(c);
|
|
66
|
+
if (r("patches.length", a.value.length), r("uTagRef.value", f.value), r("patches.uTag", a.uTag), r("patches.author", a.author), r("data.author", s.author), f.value = a.uTag, a.value.length === 0) {
|
|
67
|
+
await new Promise((S) => setTimeout(S, O));
|
|
61
68
|
continue;
|
|
62
69
|
}
|
|
63
|
-
const
|
|
64
|
-
|
|
70
|
+
const d = ((e = s.author) == null ? void 0 : e.authorId) !== ((t = a.author) == null ? void 0 : t.authorId);
|
|
71
|
+
d || s.isExternalSnapshot ? (r("got external changes, applying them to the snapshot", o.value), $(() => {
|
|
72
|
+
o.value = B(o.value, a.value, !1, !1).newDocument, z({ args: o.value.args, ui: o.value.ui }), s.isExternalSnapshot = d;
|
|
73
|
+
})) : o.value = B(o.value, a.value).newDocument, await new Promise((S) => setTimeout(S, O));
|
|
65
74
|
} catch (a) {
|
|
66
|
-
|
|
75
|
+
X(a) ? (r("patches loop aborted"), h.value = !0) : (b("error in patches loop", a), await new Promise((d) => setTimeout(d, 1e3)));
|
|
67
76
|
}
|
|
68
77
|
})();
|
|
69
|
-
const
|
|
70
|
-
cloneArgs:
|
|
78
|
+
const x = () => i(l.model.args), j = () => i(l.model.ui), I = () => i(o.value.navigationState), F = {
|
|
79
|
+
cloneArgs: x,
|
|
71
80
|
cloneUiState: j,
|
|
72
|
-
cloneNavigationState:
|
|
81
|
+
cloneNavigationState: I,
|
|
73
82
|
createArgsModel(e = {}) {
|
|
74
|
-
return
|
|
83
|
+
return P({
|
|
75
84
|
get() {
|
|
76
85
|
return e.transform ? e.transform(o.value.args) : o.value.args;
|
|
77
86
|
},
|
|
@@ -86,14 +95,14 @@ function se(n, d, h) {
|
|
|
86
95
|
* defaultUiState is temporarily here, remove it after implementing initialUiState
|
|
87
96
|
*/
|
|
88
97
|
createUiModel(e = {}, t) {
|
|
89
|
-
return
|
|
98
|
+
return P({
|
|
90
99
|
get() {
|
|
91
100
|
return e.transform ? e.transform(o.value.ui) : o.value.ui ?? t();
|
|
92
101
|
},
|
|
93
102
|
validate: e.validate,
|
|
94
103
|
autoSave: !0,
|
|
95
104
|
onSave(a) {
|
|
96
|
-
|
|
105
|
+
U.run(() => E(a).then(c));
|
|
97
106
|
}
|
|
98
107
|
});
|
|
99
108
|
},
|
|
@@ -106,7 +115,7 @@ function se(n, d, h) {
|
|
|
106
115
|
* @returns An object with unwrapped output values.
|
|
107
116
|
*/
|
|
108
117
|
unwrapOutputs(...e) {
|
|
109
|
-
const t = o.value.outputs, a = e.map((
|
|
118
|
+
const t = o.value.outputs, a = e.map((d) => [d, H(t[d])]);
|
|
110
119
|
return Object.fromEntries(a);
|
|
111
120
|
},
|
|
112
121
|
/**
|
|
@@ -116,8 +125,8 @@ function se(n, d, h) {
|
|
|
116
125
|
* @returns A promise resolving after the update is applied.
|
|
117
126
|
*/
|
|
118
127
|
updateArgs(e) {
|
|
119
|
-
const t =
|
|
120
|
-
return e(t), r("updateArgs", t),
|
|
128
|
+
const t = x();
|
|
129
|
+
return e(t), r("updateArgs", t), l.model.args = t, y.run(() => T(t).then(c));
|
|
121
130
|
},
|
|
122
131
|
/**
|
|
123
132
|
* Updates the UI state by applying a callback.
|
|
@@ -128,7 +137,7 @@ function se(n, d, h) {
|
|
|
128
137
|
*/
|
|
129
138
|
updateUiState(e) {
|
|
130
139
|
const t = e(j());
|
|
131
|
-
return r("updateUiState", t),
|
|
140
|
+
return r("updateUiState", t), l.model.ui = t, U.run(() => E(t).then(c));
|
|
132
141
|
},
|
|
133
142
|
/**
|
|
134
143
|
* Navigates to a specific href by updating the navigation state.
|
|
@@ -137,24 +146,24 @@ function se(n, d, h) {
|
|
|
137
146
|
* @returns A promise resolving after the navigation state is updated.
|
|
138
147
|
*/
|
|
139
148
|
navigateTo(e) {
|
|
140
|
-
const t =
|
|
141
|
-
return t.href = e, R.run(() =>
|
|
149
|
+
const t = I();
|
|
150
|
+
return t.href = e, R.run(() => k(t).then(c));
|
|
142
151
|
},
|
|
143
152
|
async allSettled() {
|
|
144
|
-
return await L(0),
|
|
153
|
+
return await L(0), M.allSettled();
|
|
145
154
|
}
|
|
146
155
|
}, J = {
|
|
147
|
-
closedRef:
|
|
156
|
+
closedRef: h,
|
|
148
157
|
snapshot: o,
|
|
149
|
-
queryParams:
|
|
150
|
-
href:
|
|
151
|
-
hasErrors:
|
|
158
|
+
queryParams: g(() => W(o.value.navigationState.href)),
|
|
159
|
+
href: g(() => o.value.navigationState.href),
|
|
160
|
+
hasErrors: g(() => Object.values(o.value.outputs).some((e) => !(e != null && e.ok)))
|
|
152
161
|
};
|
|
153
|
-
return
|
|
162
|
+
return N(Object.assign(l, F, J));
|
|
154
163
|
}
|
|
155
164
|
export {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
165
|
+
ie as createAppV2,
|
|
166
|
+
Y as createNextAuthorMarker,
|
|
167
|
+
O as patchPoolingDelay
|
|
159
168
|
};
|
|
160
169
|
//# sourceMappingURL=createAppV2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createAppV2.js","sources":["../../src/internal/createAppV2.ts"],"sourcesContent":["import { deepClone, delay, uniqueId } from '@milaboratories/helpers';\nimport type { Mutable } from '@milaboratories/helpers';\nimport type { NavigationState, BlockOutputsBase, BlockState, PlatformaV2, ValueWithUTag, AuthorMarker } from '@platforma-sdk/model';\nimport { hasAbortError, unwrapResult } from '@platforma-sdk/model';\nimport type { Ref } from 'vue';\nimport { reactive, computed, ref, watch } from 'vue';\nimport type { StateModelOptions, UnwrapOutputs, OutputValues, OutputErrors, AppSettings } from '../types';\nimport { createModel } from '../createModel';\nimport { parseQuery } from '../urls';\nimport { MultiError, unwrapValueOrErrors } from '../utils';\nimport { applyPatch } from 'fast-json-patch';\nimport { UpdateSerializer } from './UpdateSerializer';\n\nexport const patchPoolingDelay = 100;\n\nexport const createNextAuthorMarker = (marker: AuthorMarker | undefined): AuthorMarker => ({\n authorId: marker?.authorId ?? uniqueId(),\n localVersion: (marker?.localVersion ?? 0) + 1,\n});\n\n/**\n * Creates an application instance with reactive state management, outputs, and methods for state updates and navigation.\n *\n * @template Args - The type of arguments used in the application.\n * @template Outputs - The type of block outputs extending `BlockOutputsBase`.\n * @template UiState - The type of the UI state.\n * @template Href - The type of navigation href, defaulting to a string starting with `/`.\n *\n * @param state - Initial state of the application, including args, outputs, UI state, and navigation state.\n * @param platforma - A platform interface for interacting with block states.\n * @param settings - Application settings, such as debug flags.\n *\n * @returns A reactive application object with methods, getters, and state.\n */\nexport function createAppV2<\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n UiState = unknown,\n Href extends `/${string}` = `/${string}`,\n>(\n state: ValueWithUTag<BlockState<Args, Outputs, UiState, Href>>,\n platforma: PlatformaV2<Args, Outputs, UiState, Href>,\n settings: AppSettings,\n) {\n const debug = (msg: string, ...rest: unknown[]) => {\n if (settings.debug) {\n console.log(`%c>>> %c${msg}`, 'color: orange; font-weight: bold', 'color: orange', settings.appId, ...rest);\n }\n };\n\n const error = (msg: string, ...rest: unknown[]) => {\n console.error(`%c>>> %c${msg}`, 'color: red; font-weight: bold', 'color: red', settings.appId, ...rest);\n };\n\n const data = {\n isExternalSnapshot: false,\n author: {\n authorId: uniqueId(),\n localVersion: 0,\n },\n };\n\n const nextAuthorMarker = () => {\n data.author = createNextAuthorMarker(data.author);\n debug('nextAuthorMarker', data.author);\n return data.author;\n };\n\n const closedRef = ref(false);\n\n const uTagRef = ref(state.uTag);\n\n const debounceSpan = settings.debounceSpan ?? 200;\n\n const setArgsQueue = new UpdateSerializer({ debounceSpan });\n const setUiStateQueue = new UpdateSerializer({ debounceSpan });\n const setArgsAndUiStateQueue = new UpdateSerializer({ debounceSpan });\n const setNavigationStateQueue = new UpdateSerializer({ debounceSpan });\n /**\n * Reactive snapshot of the application state, including args, outputs, UI state, and navigation state.\n */\n const snapshot = ref<{\n args: Args;\n outputs: Partial<Outputs>;\n ui: UiState;\n navigationState: NavigationState<Href>;\n }>(state.value) as Ref<{\n args: Args;\n outputs: Partial<Outputs>;\n ui: UiState;\n navigationState: NavigationState<Href>;\n }>;\n\n const setBlockArgs = async (args: Args) => {\n return platforma.setBlockArgs(args, nextAuthorMarker());\n };\n\n const setBlockUiState = async (ui: UiState) => {\n return platforma.setBlockUiState(ui, nextAuthorMarker());\n };\n\n const setBlockArgsAndUiState = async (args: Args, ui: UiState) => {\n return platforma.setBlockArgsAndUiState(args, ui, nextAuthorMarker());\n };\n\n const setNavigationState = async (state: NavigationState<Href>) => {\n return platforma.setNavigationState(state);\n };\n\n const outputs = computed<OutputValues<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>).map(([k, vOrErr]) => [k, vOrErr.ok && vOrErr.value !== undefined ? vOrErr.value : undefined]);\n return Object.fromEntries(entries);\n });\n\n const outputErrors = computed<OutputErrors<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>).map(([k, vOrErr]) => [k, vOrErr && !vOrErr.ok ? new MultiError(vOrErr.errors) : undefined]);\n return Object.fromEntries(entries);\n });\n\n const appModel = reactive({\n error: '',\n model: {\n args: deepClone(snapshot.value.args) as Args,\n ui: deepClone(snapshot.value.ui) as UiState,\n outputs,\n outputErrors,\n },\n }) as {\n error: string;\n model: {\n args: Args;\n ui: UiState;\n outputs: OutputValues<Outputs>;\n outputErrors: OutputErrors<Outputs>;\n };\n };\n\n const appModelWatch = watch(\n () => appModel.model,\n (_newData) => {\n const newData = deepClone(_newData);\n debug('appModel.model', newData);\n setArgsAndUiStateQueue.run(() => setBlockArgsAndUiState(newData.args, newData.ui).then(unwrapResult));\n },\n { deep: true },\n );\n\n const updateAppModelSilently = (newData: {\n args: Args;\n ui: UiState;\n }) => {\n debug('updateAppModelSilently', newData);\n appModelWatch.pause();\n appModel.model.args = deepClone(newData.args) as Args;\n appModel.model.ui = deepClone(newData.ui) as UiState;\n appModelWatch.resume();\n };\n\n (async () => {\n window.addEventListener('beforeunload', () => {\n closedRef.value = true;\n platforma.dispose().then(unwrapResult).catch((err) => {\n error('error in dispose', err);\n });\n });\n\n while (!closedRef.value) {\n try {\n const patches = await platforma.getPatches(uTagRef.value).then(unwrapResult);\n\n debug('patches.length', patches.value.length);\n debug('uTagRef.value', uTagRef.value);\n debug('patches.uTag', patches.uTag);\n debug('patches.author', patches.author);\n debug('data.author', data.author);\n\n uTagRef.value = patches.uTag;\n\n if (patches.value.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n continue;\n }\n\n const isAuthorChanged = data.author?.authorId !== patches.author?.authorId;\n\n // Immutable behavior, apply external changes to the snapshot\n if (isAuthorChanged || data.isExternalSnapshot) {\n debug('got external changes, applying them to the snapshot', JSON.stringify(snapshot.value, null, 2));\n snapshot.value = applyPatch(snapshot.value, patches.value, false, false).newDocument;\n updateAppModelSilently(snapshot.value);\n data.isExternalSnapshot = isAuthorChanged;\n } else {\n // Mutable behavior\n snapshot.value = applyPatch(snapshot.value, patches.value).newDocument;\n }\n\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n } catch (err) {\n if (hasAbortError(err)) {\n debug('patches loop aborted');\n closedRef.value = true;\n } else {\n error('error in patches loop', err);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n }\n }\n })();\n\n const cloneArgs = () => deepClone(appModel.model.args) as Args;\n const cloneUiState = () => deepClone(appModel.model.ui) as UiState;\n const cloneNavigationState = () => deepClone(snapshot.value.navigationState) as Mutable<NavigationState<Href>>;\n\n const methods = {\n cloneArgs,\n cloneUiState,\n cloneNavigationState,\n createArgsModel<T extends Args = Args>(options: StateModelOptions<Args, T> = {}) {\n return createModel<T, Args>({\n get() {\n if (options.transform) {\n return options.transform(snapshot.value.args as Args);\n }\n\n return snapshot.value.args as T;\n },\n validate: options.validate,\n autoSave: true,\n onSave(newArgs) {\n setArgsQueue.run(() => setBlockArgs(newArgs).then(unwrapResult));\n },\n });\n },\n /**\n * defaultUiState is temporarily here, remove it after implementing initialUiState\n */\n createUiModel<T extends UiState = UiState>(options: StateModelOptions<UiState, T> = {}, defaultUiState: () => UiState) {\n return createModel<T, UiState>({\n get() {\n if (options.transform) {\n return options.transform(snapshot.value.ui as UiState);\n }\n\n return (snapshot.value.ui ?? defaultUiState()) as T;\n },\n validate: options.validate,\n autoSave: true,\n onSave(newData) {\n setUiStateQueue.run(() => setBlockUiState(newData).then(unwrapResult));\n },\n });\n },\n /**\n * Retrieves the unwrapped values of outputs for the given keys.\n *\n * @template K - Keys of the outputs to unwrap.\n * @param keys - List of output names.\n * @throws Error if the outputs contain errors.\n * @returns An object with unwrapped output values.\n */\n unwrapOutputs<K extends keyof Outputs>(...keys: K[]): UnwrapOutputs<Outputs, K> {\n const outputs = snapshot.value.outputs as Partial<Readonly<Outputs>>;\n const entries = keys.map((key) => [key, unwrapValueOrErrors(outputs[key])]);\n return Object.fromEntries(entries);\n },\n /**\n * Updates the arguments state by applying a callback.\n *\n * @param cb - Callback to modify the current arguments.\n * @returns A promise resolving after the update is applied.\n */\n updateArgs(cb: (args: Args) => void): Promise<boolean> {\n const newArgs = cloneArgs();\n cb(newArgs);\n debug('updateArgs', newArgs);\n appModel.model.args = newArgs;\n return setArgsQueue.run(() => setBlockArgs(newArgs).then(unwrapResult));\n },\n /**\n * Updates the UI state by applying a callback.\n *\n * @param cb - Callback to modify the current UI state.\n * @returns A promise resolving after the update is applied.\n * @todo Make it mutable since there is already an initial one\n */\n updateUiState(cb: (args: UiState) => UiState): Promise<boolean> {\n const newUiState = cb(cloneUiState());\n debug('updateUiState', newUiState);\n appModel.model.ui = newUiState;\n return setUiStateQueue.run(() => setBlockUiState(newUiState).then(unwrapResult));\n },\n /**\n * Navigates to a specific href by updating the navigation state.\n *\n * @param href - The target href to navigate to.\n * @returns A promise resolving after the navigation state is updated.\n */\n navigateTo(href: Href) {\n const newState = cloneNavigationState();\n newState.href = href;\n return setNavigationStateQueue.run(() => setNavigationState(newState).then(unwrapResult));\n },\n async allSettled() {\n await delay(0);\n return setArgsAndUiStateQueue.allSettled();\n },\n };\n\n const getters = {\n closedRef,\n snapshot,\n queryParams: computed(() => parseQuery<Href>(snapshot.value.navigationState.href as Href)),\n href: computed(() => snapshot.value.navigationState.href),\n hasErrors: computed(() => Object.values(snapshot.value.outputs as Partial<Readonly<Outputs>>).some((v) => !v?.ok)),\n };\n\n return reactive(Object.assign(appModel, methods, getters));\n}\n\nexport type BaseAppV2<\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n UiState = unknown,\n Href extends `/${string}` = `/${string}`,\n> = ReturnType<typeof createAppV2<Args, Outputs, UiState, Href>>;\n"],"names":["patchPoolingDelay","createNextAuthorMarker","marker","uniqueId","createAppV2","state","platforma","settings","debug","msg","rest","error","data","nextAuthorMarker","closedRef","ref","uTagRef","debounceSpan","setArgsQueue","UpdateSerializer","setUiStateQueue","setArgsAndUiStateQueue","setNavigationStateQueue","snapshot","setBlockArgs","args","setBlockUiState","ui","setBlockArgsAndUiState","setNavigationState","outputs","computed","entries","k","vOrErr","outputErrors","MultiError","appModel","reactive","deepClone","appModelWatch","watch","_newData","newData","unwrapResult","updateAppModelSilently","err","patches","resolve","isAuthorChanged","_a","_b","applyPatch","hasAbortError","cloneArgs","cloneUiState","cloneNavigationState","methods","options","createModel","newArgs","defaultUiState","keys","key","unwrapValueOrErrors","cb","newUiState","href","newState","delay","getters","parseQuery","v"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createAppV2.js","sources":["../../src/internal/createAppV2.ts"],"sourcesContent":["import { deepClone, delay, uniqueId } from '@milaboratories/helpers';\nimport type { Mutable } from '@milaboratories/helpers';\nimport type { NavigationState, BlockOutputsBase, BlockState, PlatformaV2, ValueWithUTag, AuthorMarker } from '@platforma-sdk/model';\nimport { hasAbortError, unwrapResult } from '@platforma-sdk/model';\nimport type { Ref } from 'vue';\nimport { reactive, computed, ref } from 'vue';\nimport type { StateModelOptions, UnwrapOutputs, OutputValues, OutputErrors, AppSettings } from '../types';\nimport { createModel } from '../createModel';\nimport { parseQuery } from '../urls';\nimport { MultiError, unwrapValueOrErrors } from '../utils';\nimport { applyPatch } from 'fast-json-patch';\nimport { UpdateSerializer } from './UpdateSerializer';\nimport { watchIgnorable } from '@vueuse/core';\n\nexport const patchPoolingDelay = 100;\n\nexport const createNextAuthorMarker = (marker: AuthorMarker | undefined): AuthorMarker => ({\n authorId: marker?.authorId ?? uniqueId(),\n localVersion: (marker?.localVersion ?? 0) + 1,\n});\n\nconst stringifyForDebug = (v: unknown) => {\n try {\n return JSON.stringify(v, null, 2);\n } catch (err) {\n return err instanceof Error ? err.message : String(err);\n }\n};\n\n/**\n * Creates an application instance with reactive state management, outputs, and methods for state updates and navigation.\n *\n * @template Args - The type of arguments used in the application.\n * @template Outputs - The type of block outputs extending `BlockOutputsBase`.\n * @template UiState - The type of the UI state.\n * @template Href - The type of navigation href, defaulting to a string starting with `/`.\n *\n * @param state - Initial state of the application, including args, outputs, UI state, and navigation state.\n * @param platforma - A platform interface for interacting with block states.\n * @param settings - Application settings, such as debug flags.\n *\n * @returns A reactive application object with methods, getters, and state.\n */\nexport function createAppV2<\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n UiState = unknown,\n Href extends `/${string}` = `/${string}`,\n>(\n state: ValueWithUTag<BlockState<Args, Outputs, UiState, Href>>,\n platforma: PlatformaV2<Args, Outputs, UiState, Href>,\n settings: AppSettings,\n) {\n const debug = (msg: string, ...rest: unknown[]) => {\n if (settings.debug) {\n console.log(`%c>>> %c${msg}`, 'color: orange; font-weight: bold', 'color: orange', ...rest.map((r) => stringifyForDebug(r)));\n }\n };\n\n const error = (msg: string, ...rest: unknown[]) => {\n console.error(`%c>>> %c${msg}`, 'color: red; font-weight: bold', 'color: red', ...rest.map((r) => stringifyForDebug(r)));\n };\n\n const data = {\n isExternalSnapshot: false,\n author: {\n authorId: uniqueId(),\n localVersion: 0,\n },\n };\n\n const nextAuthorMarker = () => {\n data.author = createNextAuthorMarker(data.author);\n debug('nextAuthorMarker', data.author);\n return data.author;\n };\n\n const closedRef = ref(false);\n\n const uTagRef = ref(state.uTag);\n\n const debounceSpan = settings.debounceSpan ?? 200;\n\n const setArgsQueue = new UpdateSerializer({ debounceSpan });\n const setUiStateQueue = new UpdateSerializer({ debounceSpan });\n const setArgsAndUiStateQueue = new UpdateSerializer({ debounceSpan });\n const setNavigationStateQueue = new UpdateSerializer({ debounceSpan });\n /**\n * Reactive snapshot of the application state, including args, outputs, UI state, and navigation state.\n */\n const snapshot = ref<{\n args: Args;\n outputs: Partial<Outputs>;\n ui: UiState;\n navigationState: NavigationState<Href>;\n }>(state.value) as Ref<{\n args: Args;\n outputs: Partial<Outputs>;\n ui: UiState;\n navigationState: NavigationState<Href>;\n }>;\n\n const setBlockArgs = async (args: Args) => {\n return platforma.setBlockArgs(args, nextAuthorMarker());\n };\n\n const setBlockUiState = async (ui: UiState) => {\n return platforma.setBlockUiState(ui, nextAuthorMarker());\n };\n\n const setBlockArgsAndUiState = async (args: Args, ui: UiState) => {\n return platforma.setBlockArgsAndUiState(args, ui, nextAuthorMarker());\n };\n\n const setNavigationState = async (state: NavigationState<Href>) => {\n return platforma.setNavigationState(state);\n };\n\n const outputs = computed<OutputValues<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>).map(([k, vOrErr]) => [k, vOrErr.ok && vOrErr.value !== undefined ? vOrErr.value : undefined]);\n return Object.fromEntries(entries);\n });\n\n const outputErrors = computed<OutputErrors<Outputs>>(() => {\n const entries = Object.entries(snapshot.value.outputs as Partial<Readonly<Outputs>>).map(([k, vOrErr]) => [k, vOrErr && !vOrErr.ok ? new MultiError(vOrErr.errors) : undefined]);\n return Object.fromEntries(entries);\n });\n\n const appModel = reactive({\n error: '',\n model: {\n args: deepClone(snapshot.value.args) as Args,\n ui: deepClone(snapshot.value.ui) as UiState,\n outputs,\n outputErrors,\n },\n }) as {\n error: string;\n model: {\n args: Args;\n ui: UiState;\n outputs: OutputValues<Outputs>;\n outputErrors: OutputErrors<Outputs>;\n };\n };\n\n const { ignoreUpdates } = watchIgnorable(\n () => appModel.model,\n (_newData) => {\n const newData = deepClone(_newData);\n debug('setArgsAndUiStateQueue appModel.model', newData);\n setArgsAndUiStateQueue.run(() => setBlockArgsAndUiState(newData.args, newData.ui).then(unwrapResult));\n },\n { deep: true },\n );\n\n const updateAppModel = (newData: {\n args: Args;\n ui: UiState;\n }) => {\n debug('updateAppModel', newData);\n appModel.model.args = deepClone(newData.args) as Args;\n appModel.model.ui = deepClone(newData.ui) as UiState;\n };\n\n (async () => {\n window.addEventListener('beforeunload', () => {\n closedRef.value = true;\n platforma.dispose().then(unwrapResult).catch((err) => {\n error('error in dispose', err);\n });\n });\n\n while (!closedRef.value) {\n try {\n const patches = await platforma.getPatches(uTagRef.value).then(unwrapResult);\n\n debug('patches.length', patches.value.length);\n debug('uTagRef.value', uTagRef.value);\n debug('patches.uTag', patches.uTag);\n debug('patches.author', patches.author);\n debug('data.author', data.author);\n\n uTagRef.value = patches.uTag;\n\n if (patches.value.length === 0) {\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n continue;\n }\n\n const isAuthorChanged = data.author?.authorId !== patches.author?.authorId;\n\n // Immutable behavior, apply external changes to the snapshot\n if (isAuthorChanged || data.isExternalSnapshot) {\n debug('got external changes, applying them to the snapshot', snapshot.value);\n ignoreUpdates(() => {\n snapshot.value = applyPatch(snapshot.value, patches.value, false, false).newDocument;\n updateAppModel({ args: snapshot.value.args, ui: snapshot.value.ui });\n data.isExternalSnapshot = isAuthorChanged;\n });\n } else {\n // Mutable behavior\n snapshot.value = applyPatch(snapshot.value, patches.value).newDocument;\n }\n\n await new Promise((resolve) => setTimeout(resolve, patchPoolingDelay));\n } catch (err) {\n if (hasAbortError(err)) {\n debug('patches loop aborted');\n closedRef.value = true;\n } else {\n error('error in patches loop', err);\n await new Promise((resolve) => setTimeout(resolve, 1000));\n }\n }\n }\n })();\n\n const cloneArgs = () => deepClone(appModel.model.args) as Args;\n const cloneUiState = () => deepClone(appModel.model.ui) as UiState;\n const cloneNavigationState = () => deepClone(snapshot.value.navigationState) as Mutable<NavigationState<Href>>;\n\n const methods = {\n cloneArgs,\n cloneUiState,\n cloneNavigationState,\n createArgsModel<T extends Args = Args>(options: StateModelOptions<Args, T> = {}) {\n return createModel<T, Args>({\n get() {\n if (options.transform) {\n return options.transform(snapshot.value.args as Args);\n }\n\n return snapshot.value.args as T;\n },\n validate: options.validate,\n autoSave: true,\n onSave(newArgs) {\n setArgsQueue.run(() => setBlockArgs(newArgs).then(unwrapResult));\n },\n });\n },\n /**\n * defaultUiState is temporarily here, remove it after implementing initialUiState\n */\n createUiModel<T extends UiState = UiState>(options: StateModelOptions<UiState, T> = {}, defaultUiState: () => UiState) {\n return createModel<T, UiState>({\n get() {\n if (options.transform) {\n return options.transform(snapshot.value.ui as UiState);\n }\n\n return (snapshot.value.ui ?? defaultUiState()) as T;\n },\n validate: options.validate,\n autoSave: true,\n onSave(newData) {\n setUiStateQueue.run(() => setBlockUiState(newData).then(unwrapResult));\n },\n });\n },\n /**\n * Retrieves the unwrapped values of outputs for the given keys.\n *\n * @template K - Keys of the outputs to unwrap.\n * @param keys - List of output names.\n * @throws Error if the outputs contain errors.\n * @returns An object with unwrapped output values.\n */\n unwrapOutputs<K extends keyof Outputs>(...keys: K[]): UnwrapOutputs<Outputs, K> {\n const outputs = snapshot.value.outputs as Partial<Readonly<Outputs>>;\n const entries = keys.map((key) => [key, unwrapValueOrErrors(outputs[key])]);\n return Object.fromEntries(entries);\n },\n /**\n * Updates the arguments state by applying a callback.\n *\n * @param cb - Callback to modify the current arguments.\n * @returns A promise resolving after the update is applied.\n */\n updateArgs(cb: (args: Args) => void): Promise<boolean> {\n const newArgs = cloneArgs();\n cb(newArgs);\n debug('updateArgs', newArgs);\n appModel.model.args = newArgs;\n return setArgsQueue.run(() => setBlockArgs(newArgs).then(unwrapResult));\n },\n /**\n * Updates the UI state by applying a callback.\n *\n * @param cb - Callback to modify the current UI state.\n * @returns A promise resolving after the update is applied.\n * @todo Make it mutable since there is already an initial one\n */\n updateUiState(cb: (args: UiState) => UiState): Promise<boolean> {\n const newUiState = cb(cloneUiState());\n debug('updateUiState', newUiState);\n appModel.model.ui = newUiState;\n return setUiStateQueue.run(() => setBlockUiState(newUiState).then(unwrapResult));\n },\n /**\n * Navigates to a specific href by updating the navigation state.\n *\n * @param href - The target href to navigate to.\n * @returns A promise resolving after the navigation state is updated.\n */\n navigateTo(href: Href) {\n const newState = cloneNavigationState();\n newState.href = href;\n return setNavigationStateQueue.run(() => setNavigationState(newState).then(unwrapResult));\n },\n async allSettled() {\n await delay(0);\n return setArgsAndUiStateQueue.allSettled();\n },\n };\n\n const getters = {\n closedRef,\n snapshot,\n queryParams: computed(() => parseQuery<Href>(snapshot.value.navigationState.href as Href)),\n href: computed(() => snapshot.value.navigationState.href),\n hasErrors: computed(() => Object.values(snapshot.value.outputs as Partial<Readonly<Outputs>>).some((v) => !v?.ok)),\n };\n\n return reactive(Object.assign(appModel, methods, getters));\n}\n\nexport type BaseAppV2<\n Args = unknown,\n Outputs extends BlockOutputsBase = BlockOutputsBase,\n UiState = unknown,\n Href extends `/${string}` = `/${string}`,\n> = ReturnType<typeof createAppV2<Args, Outputs, UiState, Href>>;\n"],"names":["patchPoolingDelay","createNextAuthorMarker","marker","uniqueId","stringifyForDebug","v","err","createAppV2","state","platforma","settings","debug","msg","rest","r","error","data","nextAuthorMarker","closedRef","ref","uTagRef","debounceSpan","setArgsQueue","UpdateSerializer","setUiStateQueue","setArgsAndUiStateQueue","setNavigationStateQueue","snapshot","setBlockArgs","args","setBlockUiState","ui","setBlockArgsAndUiState","setNavigationState","outputs","computed","entries","k","vOrErr","outputErrors","MultiError","appModel","reactive","deepClone","ignoreUpdates","watchIgnorable","_newData","newData","unwrapResult","updateAppModel","patches","resolve","isAuthorChanged","_a","_b","applyPatch","hasAbortError","cloneArgs","cloneUiState","cloneNavigationState","methods","options","createModel","newArgs","defaultUiState","keys","key","unwrapValueOrErrors","cb","newUiState","href","newState","delay","getters","parseQuery"],"mappings":"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"}
|