@platforma-sdk/ui-vue 1.45.35 → 1.45.37
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 +204 -235
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/AgGridVue/useAgGridOptions.js +2 -3
- package/dist/AgGridVue/useAgGridOptions.js.map +1 -1
- package/dist/components/BlockLayout.vue2.js +3 -3
- package/dist/components/BlockLayout.vue2.js.map +1 -1
- package/dist/components/BlockLoader.vue.js.map +1 -1
- package/dist/components/LoaderPage.vue.js +2 -2
- package/dist/components/LoaderPage.vue.js.map +1 -1
- package/dist/components/NotFound.vue.js +3 -3
- package/dist/components/NotFound.vue.js.map +1 -1
- package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +73 -73
- package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
- package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +100 -100
- package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +1 -1
- package/dist/components/PlAgCellFile/PlAgCellFile.vue.js.map +1 -1
- package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js.map +1 -1
- package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js +6 -6
- package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js.map +1 -1
- package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js.map +1 -1
- package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js.map +1 -1
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +22 -22
- package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +1 -1
- package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js +3 -3
- package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +50 -50
- package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js.map +1 -1
- package/dist/components/PlAgDataTable/PlAgRowCount.vue.js +7 -8
- package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +35 -35
- package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
- package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +16 -17
- package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
- package/dist/components/PlAgRowNumHeader.vue.js +14 -15
- package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
- package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js +16 -16
- package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js.map +1 -1
- package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +6 -6
- package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +57 -57
- package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +6 -6
- package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
- package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
- package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +7 -7
- package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +1 -1
- package/dist/components/PlBtnExportArchive/Item.vue2.js +23 -23
- package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
- package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
- package/dist/components/PlBtnExportArchive/Summary.vue2.js +22 -22
- package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +9 -9
- package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +3 -3
- package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +1 -1
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +9 -9
- package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
- package/dist/components/ValueOrErrorsComponent.vue.js.map +1 -1
- package/dist/index.js +48 -50
- package/dist/index.js.map +1 -1
- package/dist/lib.d.ts +0 -1
- package/dist/plugins/Monetization/EndOfPeriod.vue2.js +9 -9
- package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
- package/dist/plugins/Monetization/LimitCard.vue2.js +40 -40
- package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
- package/dist/plugins/Monetization/MonetizationSidebar.vue.js +3 -3
- package/dist/plugins/Monetization/MonetizationSidebar.vue.js.map +1 -1
- package/dist/plugins/Monetization/RunStatus.vue2.js +12 -12
- package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
- package/dist/plugins/Monetization/UserCabinetCard.vue2.js +22 -22
- package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
- package/package.json +7 -8
- package/src/lib.ts +0 -2
- package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js +0 -6
- package/dist/assets/multi-sequence-alignment.worker-Cm0gZp19.js.map +0 -1
- package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js +0 -5
- package/dist/assets/phylogenetic-tree.worker-4CrExYEo.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue.d.ts +0 -9
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js +0 -122
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js +0 -9
- package/dist/components/PlMultiSequenceAlignment/Consensus.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Legend.vue.d.ts +0 -6
- package/dist/components/PlMultiSequenceAlignment/Legend.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/Legend.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js +0 -28
- package/dist/components/PlMultiSequenceAlignment/Legend.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js +0 -13
- package/dist/components/PlMultiSequenceAlignment/Legend.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.d.ts +0 -25
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js +0 -138
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js +0 -31
- package/dist/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.d.ts +0 -8
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js +0 -77
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js +0 -9
- package/dist/components/PlMultiSequenceAlignment/PhylogeneticTree.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.d.ts +0 -71
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js +0 -224
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js +0 -9
- package/dist/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.d.ts +0 -8
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js +0 -127
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js +0 -9
- package/dist/components/PlMultiSequenceAlignment/SeqLogo.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.d.ts +0 -16
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.js +0 -10
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js +0 -228
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue2.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js +0 -19
- package/dist/components/PlMultiSequenceAlignment/Toolbar.vue3.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/cell-size.d.ts +0 -4
- package/dist/components/PlMultiSequenceAlignment/cell-size.js +0 -8
- package/dist/components/PlMultiSequenceAlignment/cell-size.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.d.ts +0 -44
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.js +0 -132
- package/dist/components/PlMultiSequenceAlignment/chemical-properties.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/data.d.ts +0 -61
- package/dist/components/PlMultiSequenceAlignment/data.js +0 -370
- package/dist/components/PlMultiSequenceAlignment/data.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/index.d.ts +0 -1
- package/dist/components/PlMultiSequenceAlignment/markup.d.ts +0 -16
- package/dist/components/PlMultiSequenceAlignment/markup.js +0 -84
- package/dist/components/PlMultiSequenceAlignment/markup.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/migrations.d.ts +0 -3
- package/dist/components/PlMultiSequenceAlignment/migrations.js +0 -24
- package/dist/components/PlMultiSequenceAlignment/migrations.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.d.ts +0 -6
- package/dist/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.d.ts +0 -7
- package/dist/components/PlMultiSequenceAlignment/residue-counts.d.ts +0 -2
- package/dist/components/PlMultiSequenceAlignment/residue-counts.js +0 -13
- package/dist/components/PlMultiSequenceAlignment/residue-counts.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/settings.d.ts +0 -2
- package/dist/components/PlMultiSequenceAlignment/settings.js +0 -9
- package/dist/components/PlMultiSequenceAlignment/settings.js.map +0 -1
- package/dist/components/PlMultiSequenceAlignment/types.d.ts +0 -5
- package/dist/components/PlMultiSequenceAlignment/useMiPlots.d.ts +0 -4
- package/dist/components/PlMultiSequenceAlignment/useMiPlots.js +0 -19
- package/dist/components/PlMultiSequenceAlignment/useMiPlots.js.map +0 -1
- package/src/components/PlMultiSequenceAlignment/Consensus.vue +0 -165
- package/src/components/PlMultiSequenceAlignment/Legend.vue +0 -44
- package/src/components/PlMultiSequenceAlignment/MultiSequenceAlignmentView.vue +0 -299
- package/src/components/PlMultiSequenceAlignment/PhylogeneticTree.vue +0 -110
- package/src/components/PlMultiSequenceAlignment/PlMultiSequenceAlignment.vue +0 -314
- package/src/components/PlMultiSequenceAlignment/README.md +0 -216
- package/src/components/PlMultiSequenceAlignment/SeqLogo.vue +0 -166
- package/src/components/PlMultiSequenceAlignment/Toolbar.vue +0 -228
- package/src/components/PlMultiSequenceAlignment/cell-size.ts +0 -4
- package/src/components/PlMultiSequenceAlignment/chemical-properties.ts +0 -199
- package/src/components/PlMultiSequenceAlignment/data.ts +0 -661
- package/src/components/PlMultiSequenceAlignment/index.ts +0 -1
- package/src/components/PlMultiSequenceAlignment/markup.ts +0 -141
- package/src/components/PlMultiSequenceAlignment/migrations.ts +0 -46
- package/src/components/PlMultiSequenceAlignment/multi-sequence-alignment.worker.ts +0 -54
- package/src/components/PlMultiSequenceAlignment/phylogenetic-tree.worker.ts +0 -89
- package/src/components/PlMultiSequenceAlignment/residue-counts.ts +0 -124
- package/src/components/PlMultiSequenceAlignment/settings.ts +0 -7
- package/src/components/PlMultiSequenceAlignment/types.ts +0 -3
- package/src/components/PlMultiSequenceAlignment/useMiPlots.ts +0 -23
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as w, computed as
|
|
1
|
+
import { defineComponent as w, computed as o, createElementBlock as r, openBlock as i, normalizeClass as a, createElementVNode as n, toDisplayString as d, createTextVNode as f, createCommentVNode as m, normalizeStyle as $ } from "vue";
|
|
2
2
|
const F = { key: 0 }, N = { key: 1 }, A = { key: 0 }, C = { key: 1 }, T = /* @__PURE__ */ w({
|
|
3
3
|
__name: "LimitCard",
|
|
4
4
|
props: {
|
|
@@ -9,70 +9,70 @@ const F = { key: 0 }, N = { key: 1 }, A = { key: 0 }, C = { key: 1 }, T = /* @__
|
|
|
9
9
|
available: {},
|
|
10
10
|
unit: {}
|
|
11
11
|
},
|
|
12
|
-
setup(
|
|
13
|
-
const l =
|
|
14
|
-
return (e,
|
|
15
|
-
class:
|
|
12
|
+
setup(s) {
|
|
13
|
+
const l = s, u = o(() => l.available === null ? null : l.available + l.toSpend + l.used), y = o(() => l.available === null ? !1 : l.available < 0), c = o(() => l.available === null ? null : l.available + l.toSpend), p = (e) => Math.max(0, Math.min(100, e)), g = o(() => u.value === null || u.value === 0 || y.value ? 0 : p(l.toSpend / u.value * 100)), S = o(() => u.value === null || u.value === 0 ? 0 : p(l.used / u.value * 100)), k = o(() => l.available === null || u.value === null || u.value === 0 ? 100 : y.value ? 0 : p(l.available / u.value * 100)), B = o(() => l.type === "unique_launches" ? "Runs Limits" : l.type === "volume_limit" ? "Volume Limits" : l.label), L = (e) => (e / 1024 / 1024 / 1024).toFixed(2) + " GB", v = (e) => l.type === "volume_limit" ? L(e) : e, b = (e) => Number(e.toFixed(2)) > 0;
|
|
14
|
+
return (e, t) => (i(), r("div", {
|
|
15
|
+
class: a(e.$style.container)
|
|
16
16
|
}, [
|
|
17
17
|
n("span", {
|
|
18
|
-
class:
|
|
19
|
-
},
|
|
18
|
+
class: a(e.$style.label)
|
|
19
|
+
}, d(B.value), 3),
|
|
20
20
|
n("div", {
|
|
21
|
-
class:
|
|
21
|
+
class: a(e.$style.content)
|
|
22
22
|
}, [
|
|
23
23
|
n("div", {
|
|
24
|
-
class:
|
|
24
|
+
class: a(e.$style.contentAvailable)
|
|
25
25
|
}, [
|
|
26
26
|
n("div", null, [
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
n("strong", null,
|
|
31
|
-
|
|
32
|
-
])) : (
|
|
27
|
+
t[0] || (t[0] = f(" Available: ", -1)),
|
|
28
|
+
t[1] || (t[1] = n("div", { style: { flex: "1" } }, null, -1)),
|
|
29
|
+
c.value !== null ? (i(), r("span", F, [
|
|
30
|
+
n("strong", null, d(v(c.value)), 1),
|
|
31
|
+
f(" / " + d(v(s.available + s.toSpend + s.used)), 1)
|
|
32
|
+
])) : (i(), r("span", N, "Unlimited"))
|
|
33
33
|
]),
|
|
34
34
|
n("div", {
|
|
35
|
-
class:
|
|
35
|
+
class: a([e.$style.afterRun, { [e.$style.exceeded]: y.value }])
|
|
36
36
|
}, [
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
y.value ? (i(), r("span", A, "Too many files selected")) : m("", !0),
|
|
38
|
+
t[2] || (t[2] = n("span", { style: { flex: "1" } }, null, -1)),
|
|
39
|
+
t[3] || (t[3] = n("span", null, "After run:", -1)),
|
|
40
|
+
s.available !== null ? (i(), r("span", C, d(v(s.available)) + " / " + d(v(s.available + s.toSpend + s.used)), 1)) : m("", !0)
|
|
41
41
|
], 2),
|
|
42
42
|
n("div", {
|
|
43
|
-
class:
|
|
43
|
+
class: a([e.$style.progressBar, { [e.$style.exceeded]: y.value }])
|
|
44
44
|
}, [
|
|
45
|
-
|
|
45
|
+
b(k.value) ? (i(), r("span", {
|
|
46
46
|
key: 0,
|
|
47
|
-
class:
|
|
48
|
-
style:
|
|
49
|
-
}, null, 6)) :
|
|
50
|
-
|
|
47
|
+
class: a(e.$style.progressBarAvailable),
|
|
48
|
+
style: $({ width: `${k.value.toFixed(2)}%` })
|
|
49
|
+
}, null, 6)) : m("", !0),
|
|
50
|
+
b(g.value) ? (i(), r("span", {
|
|
51
51
|
key: 1,
|
|
52
|
-
class:
|
|
53
|
-
style:
|
|
54
|
-
}, null, 6)) :
|
|
55
|
-
|
|
52
|
+
class: a(e.$style.progressBarToSpend),
|
|
53
|
+
style: $({ width: `${g.value.toFixed(2)}%` })
|
|
54
|
+
}, null, 6)) : m("", !0),
|
|
55
|
+
b(S.value) ? (i(), r("span", {
|
|
56
56
|
key: 2,
|
|
57
|
-
class:
|
|
58
|
-
style:
|
|
59
|
-
}, null, 6)) :
|
|
57
|
+
class: a(e.$style.progressBarUsed),
|
|
58
|
+
style: $({ width: `${S.value.toFixed(2)}%` })
|
|
59
|
+
}, null, 6)) : m("", !0)
|
|
60
60
|
], 2)
|
|
61
61
|
], 2),
|
|
62
62
|
n("div", {
|
|
63
|
-
class:
|
|
63
|
+
class: a(e.$style.legends)
|
|
64
64
|
}, [
|
|
65
65
|
n("div", {
|
|
66
|
-
class:
|
|
66
|
+
class: a(e.$style.toSpendLegend)
|
|
67
67
|
}, [
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
t[4] || (t[4] = n("span", null, null, -1)),
|
|
69
|
+
f(" To spend: " + d(v(s.toSpend)), 1)
|
|
70
70
|
], 2),
|
|
71
71
|
n("div", {
|
|
72
|
-
class:
|
|
72
|
+
class: a(e.$style.usedLegend)
|
|
73
73
|
}, [
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
t[5] || (t[5] = n("span", null, null, -1)),
|
|
75
|
+
f(" Used: " + d(v(s.used)), 1)
|
|
76
76
|
], 2)
|
|
77
77
|
], 2)
|
|
78
78
|
], 2)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LimitCard.vue2.js","sources":["../../../src/plugins/Monetization/LimitCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n type: 'unique_launches' | 'volume_limit';\n label: string;\n used: number;\n toSpend: number;\n available: number | null; // If available is null it means Unlimited\n unit?: string;\n}>();\n\nconst total = computed(() => {\n if (props.available === null) return null;\n return props.available + props.toSpend + props.used;\n});\n\nconst exceeded = computed(() => {\n if (props.available === null) return false;\n return props.available < 0;\n});\n\nconst availableNow = computed(() => {\n if (props.available === null) return null;\n return props.available + props.toSpend;\n});\n\nconst clampPercentage = (n: number) => Math.max(0, Math.min(100, n));\n\nconst toSpendPercentage = computed(() => {\n if (total.value === null) return 0;\n if (total.value === 0) return 0;\n if (exceeded.value) return 0;\n return clampPercentage((props.toSpend / total.value) * 100);\n});\n\nconst usedPercentage = computed(() => {\n if (total.value === null) return 0;\n if (total.value === 0) return 0;\n return clampPercentage((props.used / total.value) * 100);\n});\n\nconst availablePercentage = computed(() => {\n if (props.available === null) return 100;\n if (total.value === null) return 100;\n if (total.value === 0) return 100;\n if (exceeded.value) return 0;\n return clampPercentage(props.available / total.value * 100);\n});\n\nconst computedLabel = computed(() => {\n if (props.type === 'unique_launches') return 'Runs Limits';\n if (props.type === 'volume_limit') return 'Volume Limits';\n return props.label;\n});\n\nconst toGB = (v: number) => {\n return (v / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n};\n\nconst formatUnit = (v: number) => {\n if (props.type === 'volume_limit') return toGB(v);\n return v;\n};\n\nconst showBar = (n: number) => {\n return Number(n.toFixed(2)) > 0;\n};\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <span :class=\"$style.label\">{{ computedLabel }}</span>\n <div :class=\"$style.content\">\n <div :class=\"$style.contentAvailable\">\n <div>\n Available:\n <div style=\"flex: 1\" />\n <span v-if=\"availableNow !== null\"><strong>{{ formatUnit(availableNow) }}</strong> / {{ formatUnit(available! + toSpend + used) }}</span>\n <span v-else>Unlimited</span>\n </div>\n <div :class=\"[$style.afterRun, { [$style.exceeded]: exceeded }]\">\n <span v-if=\"exceeded\">Too many files selected</span>\n <span style=\"flex: 1\" />\n <span>After run:</span>\n <span v-if=\"available !== null\">{{ formatUnit(available) }} / {{ formatUnit(available + toSpend + used) }}</span>\n </div>\n <div :class=\"[$style.progressBar, { [$style.exceeded]: exceeded }]\">\n <span v-if=\"showBar(availablePercentage)\" :class=\"$style.progressBarAvailable\" :style=\"{ width: `${availablePercentage.toFixed(2)}%` }\" />\n <span v-if=\"showBar(toSpendPercentage)\" :class=\"$style.progressBarToSpend\" :style=\"{ width: `${toSpendPercentage.toFixed(2)}%` }\" />\n <span v-if=\"showBar(usedPercentage)\" :class=\"$style.progressBarUsed\" :style=\"{ width: `${usedPercentage.toFixed(2)}%` }\" />\n </div>\n </div>\n <div :class=\"$style.legends\">\n <div :class=\"$style.toSpendLegend\">\n <span/>\n To spend: {{ formatUnit(toSpend) }}\n </div>\n <div :class=\"$style.usedLegend\">\n <span/>\n Used: {{ formatUnit(used) }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: column;\n background-color: var(--bg-base-light);\n border-radius: 6px;\n padding: 10px 12px 16px 12px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n border: 1px solid var(--border-color-div-grey);\n}\n\n.label {\n display: block;\n min-height: 36px;\n margin-bottom: 8px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 600;\n line-height: 20px; /* 142.857% */\n}\n\n.content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.contentAvailable {\n display: flex;\n flex-direction: column;\n gap: 6px;\n > div {\n display: flex;\n align-items: flex-start;\n }\n >div:first-child {\n gap: 8px;\n strong {\n font-size: 28px;\n font-weight: 500;\n line-height: 36px; /* 128.571% */\n letter-spacing: -0.56px;\n }\n }\n}\n\n.afterRun {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 16px;\n color: var(--txt-03);\n &.exceeded {\n color: var(--txt-error);\n }\n}\n\n.progressBar {\n width: 100%;\n height: 12px;\n background-color: #E0E0E0;\n display: flex;\n align-items: center;\n border: 1px solid var(--border-color-default);\n > span {\n display: block;\n height: 100%;\n outline: 1px solid var(--border-color-default);\n }\n &.exceeded {\n opacity: 0.2;\n }\n}\n\n.progressBarAvailable {\n background: linear-gradient(270deg, #A1E59C 0%, #D0F5B0 98.81%);\n}\n\n.progressBarUsed {\n background-color: #FFCECC;\n}\n\n.progressBarToSpend {\n background-color: #FAF5AA;\n}\n\n.legends {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n\n span {\n display: block;\n border-radius: 1px;\n border: 1px solid var(--border-color-default);\n width: 12px;\n height: 12px;\n }\n}\n\n.usedLegend {\n display: flex;\n align-items: center;\n gap: 8px;\n span {\n background: #FFCECC;\n }\n}\n\n.toSpendLegend {\n display: flex;\n align-items: center;\n gap: 8px;\n span {\n background: #FAF5AA;\n }\n}\n</style>\n"],"names":["props","__props","total","computed","exceeded","availableNow","clampPercentage","n","toSpendPercentage","usedPercentage","availablePercentage","computedLabel","toGB","v","formatUnit","showBar"],"mappings":";;;;;;;;;;;;AAGA,UAAMA,IAAQC,GASRC,IAAQC,EAAS,MACjBH,EAAM,cAAc,OAAa,OAC9BA,EAAM,YAAYA,EAAM,UAAUA,EAAM,IAChD,GAEKI,IAAWD,EAAS,MACpBH,EAAM,cAAc,OAAa,KAC9BA,EAAM,YAAY,CAC1B,GAEKK,IAAeF,EAAS,MACxBH,EAAM,cAAc,OAAa,OAC9BA,EAAM,YAAYA,EAAM,OAChC,GAEKM,IAAkB,CAACC,MAAc,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKA,CAAC,CAAC,GAE7DC,IAAoBL,EAAS,MAC7BD,EAAM,UAAU,QAChBA,EAAM,UAAU,KAChBE,EAAS,QAAc,IACpBE,EAAiBN,EAAM,UAAUE,EAAM,QAAS,GAAG,CAC3D,GAEKO,IAAiBN,EAAS,MAC1BD,EAAM,UAAU,QAChBA,EAAM,UAAU,IAAU,IACvBI,EAAiBN,EAAM,OAAOE,EAAM,QAAS,GAAG,CACxD,GAEKQ,IAAsBP,EAAS,MAC/BH,EAAM,cAAc,QACpBE,EAAM,UAAU,QAChBA,EAAM,UAAU,IAAU,MAC1BE,EAAS,QAAc,IACpBE,EAAgBN,EAAM,YAAYE,EAAM,QAAQ,GAAG,CAC3D,GAEKS,IAAgBR,EAAS,MACzBH,EAAM,SAAS,oBAA0B,gBACzCA,EAAM,SAAS,iBAAuB,kBACnCA,EAAM,KACd,GAEKY,IAAO,CAACC,OACJA,IAAI,OAAO,OAAO,MAAM,QAAQ,CAAC,IAAI,OAGzCC,IAAa,CAACD,MACdb,EAAM,SAAS,iBAAuBY,EAAKC,CAAC,IACzCA,GAGHE,IAAU,CAACR,MACR,OAAOA,EAAE,QAAQ,CAAC,CAAC,IAAI
|
|
1
|
+
{"version":3,"file":"LimitCard.vue2.js","sources":["../../../src/plugins/Monetization/LimitCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n type: 'unique_launches' | 'volume_limit';\n label: string;\n used: number;\n toSpend: number;\n available: number | null; // If available is null it means Unlimited\n unit?: string;\n}>();\n\nconst total = computed(() => {\n if (props.available === null) return null;\n return props.available + props.toSpend + props.used;\n});\n\nconst exceeded = computed(() => {\n if (props.available === null) return false;\n return props.available < 0;\n});\n\nconst availableNow = computed(() => {\n if (props.available === null) return null;\n return props.available + props.toSpend;\n});\n\nconst clampPercentage = (n: number) => Math.max(0, Math.min(100, n));\n\nconst toSpendPercentage = computed(() => {\n if (total.value === null) return 0;\n if (total.value === 0) return 0;\n if (exceeded.value) return 0;\n return clampPercentage((props.toSpend / total.value) * 100);\n});\n\nconst usedPercentage = computed(() => {\n if (total.value === null) return 0;\n if (total.value === 0) return 0;\n return clampPercentage((props.used / total.value) * 100);\n});\n\nconst availablePercentage = computed(() => {\n if (props.available === null) return 100;\n if (total.value === null) return 100;\n if (total.value === 0) return 100;\n if (exceeded.value) return 0;\n return clampPercentage(props.available / total.value * 100);\n});\n\nconst computedLabel = computed(() => {\n if (props.type === 'unique_launches') return 'Runs Limits';\n if (props.type === 'volume_limit') return 'Volume Limits';\n return props.label;\n});\n\nconst toGB = (v: number) => {\n return (v / 1024 / 1024 / 1024).toFixed(2) + ' GB';\n};\n\nconst formatUnit = (v: number) => {\n if (props.type === 'volume_limit') return toGB(v);\n return v;\n};\n\nconst showBar = (n: number) => {\n return Number(n.toFixed(2)) > 0;\n};\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <span :class=\"$style.label\">{{ computedLabel }}</span>\n <div :class=\"$style.content\">\n <div :class=\"$style.contentAvailable\">\n <div>\n Available:\n <div style=\"flex: 1\" />\n <span v-if=\"availableNow !== null\"><strong>{{ formatUnit(availableNow) }}</strong> / {{ formatUnit(available! + toSpend + used) }}</span>\n <span v-else>Unlimited</span>\n </div>\n <div :class=\"[$style.afterRun, { [$style.exceeded]: exceeded }]\">\n <span v-if=\"exceeded\">Too many files selected</span>\n <span style=\"flex: 1\" />\n <span>After run:</span>\n <span v-if=\"available !== null\">{{ formatUnit(available) }} / {{ formatUnit(available + toSpend + used) }}</span>\n </div>\n <div :class=\"[$style.progressBar, { [$style.exceeded]: exceeded }]\">\n <span v-if=\"showBar(availablePercentage)\" :class=\"$style.progressBarAvailable\" :style=\"{ width: `${availablePercentage.toFixed(2)}%` }\" />\n <span v-if=\"showBar(toSpendPercentage)\" :class=\"$style.progressBarToSpend\" :style=\"{ width: `${toSpendPercentage.toFixed(2)}%` }\" />\n <span v-if=\"showBar(usedPercentage)\" :class=\"$style.progressBarUsed\" :style=\"{ width: `${usedPercentage.toFixed(2)}%` }\" />\n </div>\n </div>\n <div :class=\"$style.legends\">\n <div :class=\"$style.toSpendLegend\">\n <span/>\n To spend: {{ formatUnit(toSpend) }}\n </div>\n <div :class=\"$style.usedLegend\">\n <span/>\n Used: {{ formatUnit(used) }}\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: column;\n background-color: var(--bg-base-light);\n border-radius: 6px;\n padding: 10px 12px 16px 12px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n border: 1px solid var(--border-color-div-grey);\n}\n\n.label {\n display: block;\n min-height: 36px;\n margin-bottom: 8px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 600;\n line-height: 20px; /* 142.857% */\n}\n\n.content {\n display: flex;\n flex-direction: column;\n gap: 16px;\n}\n\n.contentAvailable {\n display: flex;\n flex-direction: column;\n gap: 6px;\n > div {\n display: flex;\n align-items: flex-start;\n }\n >div:first-child {\n gap: 8px;\n strong {\n font-size: 28px;\n font-weight: 500;\n line-height: 36px; /* 128.571% */\n letter-spacing: -0.56px;\n }\n }\n}\n\n.afterRun {\n display: flex;\n align-items: center;\n justify-content: flex-end;\n gap: 4px;\n font-size: 12px;\n font-style: normal;\n font-weight: 500;\n line-height: 16px;\n color: var(--txt-03);\n &.exceeded {\n color: var(--txt-error);\n }\n}\n\n.progressBar {\n width: 100%;\n height: 12px;\n background-color: #E0E0E0;\n display: flex;\n align-items: center;\n border: 1px solid var(--border-color-default);\n > span {\n display: block;\n height: 100%;\n outline: 1px solid var(--border-color-default);\n }\n &.exceeded {\n opacity: 0.2;\n }\n}\n\n.progressBarAvailable {\n background: linear-gradient(270deg, #A1E59C 0%, #D0F5B0 98.81%);\n}\n\n.progressBarUsed {\n background-color: #FFCECC;\n}\n\n.progressBarToSpend {\n background-color: #FAF5AA;\n}\n\n.legends {\n display: flex;\n justify-content: space-between;\n gap: 8px;\n\n span {\n display: block;\n border-radius: 1px;\n border: 1px solid var(--border-color-default);\n width: 12px;\n height: 12px;\n }\n}\n\n.usedLegend {\n display: flex;\n align-items: center;\n gap: 8px;\n span {\n background: #FFCECC;\n }\n}\n\n.toSpendLegend {\n display: flex;\n align-items: center;\n gap: 8px;\n span {\n background: #FAF5AA;\n }\n}\n</style>\n"],"names":["props","__props","total","computed","exceeded","availableNow","clampPercentage","n","toSpendPercentage","usedPercentage","availablePercentage","computedLabel","toGB","v","formatUnit","showBar","_createElementBlock","_normalizeClass","$style","_createElementVNode","_hoisted_1","_toDisplayString","_createTextVNode","_openBlock","_cache","_hoisted_4","_normalizeStyle"],"mappings":";;;;;;;;;;;;AAGA,UAAMA,IAAQC,GASRC,IAAQC,EAAS,MACjBH,EAAM,cAAc,OAAa,OAC9BA,EAAM,YAAYA,EAAM,UAAUA,EAAM,IAChD,GAEKI,IAAWD,EAAS,MACpBH,EAAM,cAAc,OAAa,KAC9BA,EAAM,YAAY,CAC1B,GAEKK,IAAeF,EAAS,MACxBH,EAAM,cAAc,OAAa,OAC9BA,EAAM,YAAYA,EAAM,OAChC,GAEKM,IAAkB,CAACC,MAAc,KAAK,IAAI,GAAG,KAAK,IAAI,KAAKA,CAAC,CAAC,GAE7DC,IAAoBL,EAAS,MAC7BD,EAAM,UAAU,QAChBA,EAAM,UAAU,KAChBE,EAAS,QAAc,IACpBE,EAAiBN,EAAM,UAAUE,EAAM,QAAS,GAAG,CAC3D,GAEKO,IAAiBN,EAAS,MAC1BD,EAAM,UAAU,QAChBA,EAAM,UAAU,IAAU,IACvBI,EAAiBN,EAAM,OAAOE,EAAM,QAAS,GAAG,CACxD,GAEKQ,IAAsBP,EAAS,MAC/BH,EAAM,cAAc,QACpBE,EAAM,UAAU,QAChBA,EAAM,UAAU,IAAU,MAC1BE,EAAS,QAAc,IACpBE,EAAgBN,EAAM,YAAYE,EAAM,QAAQ,GAAG,CAC3D,GAEKS,IAAgBR,EAAS,MACzBH,EAAM,SAAS,oBAA0B,gBACzCA,EAAM,SAAS,iBAAuB,kBACnCA,EAAM,KACd,GAEKY,IAAO,CAACC,OACJA,IAAI,OAAO,OAAO,MAAM,QAAQ,CAAC,IAAI,OAGzCC,IAAa,CAACD,MACdb,EAAM,SAAS,iBAAuBY,EAAKC,CAAC,IACzCA,GAGHE,IAAU,CAACR,MACR,OAAOA,EAAE,QAAQ,CAAC,CAAC,IAAI;2BAK9BS,EAiCM,OAAA;AAAA,MAjCA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,IAAA;MAC3BC,EAAsD,QAAA;AAAA,QAA/C,OAAKF,EAAEC,EAAAA,OAAO,KAAK;AAAA,MAAA,KAAKP,EAAA,KAAa,GAAA,CAAA;AAAA,MAC5CQ,EA8BM,OAAA;AAAA,QA9BA,OAAKF,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA;QACzBC,EAkBM,OAAA;AAAA,UAlBA,OAAKF,EAAEC,EAAAA,OAAO,gBAAgB;AAAA,QAAA;UAClCC,EAKM,OAAA,MAAA;AAAA,8BALD,gBAEH,EAAA;AAAA,4BAAAA,EAAuB,OAAA,EAAlB,OAAA,EAAA,MAAA,IAAA,EAAA,GAAe,MAAA,EAAA;AAAA,YACRd,EAAA,UAAY,aAAxBW,EAAyI,QAAAI,GAAA;AAAA,cAAtGD,EAA+C,UAAA,MAAAE,EAApCP,EAAWT,EAAA,KAAY,CAAA,GAAA,CAAA;AAAA,cAAaiB,EAAA,UAAMR,EAAWb,cAAaA,EAAA,UAAUA,EAAA,IAAI,CAAA,GAAA,CAAA;AAAA,YAAA,OAC9HsB,EAAA,GAAAP,EAA6B,WAAhB,WAAS;AAAA,UAAA;UAExBG,EAKM,OAAA;AAAA,YALA,OAAKF,EAAA,CAAGC,SAAO,aAAaA,EAAAA,OAAO,QAAQ,GAAGd,EAAA,MAAA,CAAQ,CAAA;AAAA,UAAA;YAC9CA,EAAA,SAAZmB,EAAA,GAAAP,EAAoD,WAA9B,yBAAuB;4BAC7CG,EAAwB,QAAA,EAAlB,OAAA,EAAA,MAAA,IAAA,EAAA,GAAe,MAAA,EAAA;AAAA,YACrBK,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAL,EAAuB,cAAjB,cAAU,EAAA;AAAA,YACJlB,EAAA,cAAS,QAArBsB,EAAA,GAAAP,EAAiH,QAAAS,GAAAJ,EAA9EP,EAAWb,EAAA,SAAS,CAAA,IAAI,QAAGoB,EAAGP,EAAWb,EAAA,YAAYA,EAAA,UAAUA,EAAA,IAAI,CAAA,GAAA,CAAA;;UAExGkB,EAIM,OAAA;AAAA,YAJA,OAAKF,EAAA,CAAGC,SAAO,gBAAgBA,EAAAA,OAAO,QAAQ,GAAGd,EAAA,MAAA,CAAQ,CAAA;AAAA,UAAA;YACjDW,EAAQL,EAAA,KAAmB,UAAvCM,EAA0I,QAAA;AAAA;cAA/F,OAAKC,EAAEC,EAAAA,OAAO,oBAAoB;AAAA,cAAG,OAAKQ,EAAA,EAAA,OAAA,GAAchB,EAAA,MAAoB,QAAO,CAAA,CAAA,IAAA,CAAA;AAAA,YAAA;YAClHK,EAAQP,EAAA,KAAiB,UAArCQ,EAAoI,QAAA;AAAA;cAA3F,OAAKC,EAAEC,EAAAA,OAAO,kBAAkB;AAAA,cAAG,OAAKQ,EAAA,EAAA,OAAA,GAAclB,EAAA,MAAkB,QAAO,CAAA,CAAA,IAAA,CAAA;AAAA,YAAA;YAC5GO,EAAQN,EAAA,KAAc,UAAlCO,EAA2H,QAAA;AAAA;cAArF,OAAKC,EAAEC,EAAAA,OAAO,eAAe;AAAA,cAAG,OAAKQ,EAAA,EAAA,OAAA,GAAcjB,EAAA,MAAe,QAAO,CAAA,CAAA,IAAA,CAAA;AAAA,YAAA;;;QAGnHU,EASM,OAAA;AAAA,UATA,OAAKF,EAAEC,EAAAA,OAAO,OAAO;AAAA,QAAA;UACzBC,EAGM,OAAA;AAAA,YAHA,OAAKF,EAAEC,EAAAA,OAAO,aAAa;AAAA,UAAA;4BAC/BC,EAAO,QAAA,MAAA,MAAA,EAAA;AAAA,cAAA,gBACGE,EAAGP,EAAWb,EAAA,OAAO,CAAA,GAAA,CAAA;AAAA,UAAA;UAEjCkB,EAGM,OAAA;AAAA,YAHA,OAAKF,EAAEC,EAAAA,OAAO,UAAU;AAAA,UAAA;4BAC5BC,EAAO,QAAA,MAAA,MAAA,EAAA;AAAA,cAAA,YACDE,EAAGP,EAAWb,EAAA,IAAI,CAAA,GAAA,CAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -54,11 +54,11 @@ const oe = /* @__PURE__ */ T({
|
|
|
54
54
|
modelValue: p.value,
|
|
55
55
|
"onUpdate:modelValue": r[0] || (r[0] = (t) => p.value = t)
|
|
56
56
|
}, {
|
|
57
|
-
title: i(() => r[2] || (r[2] = [
|
|
57
|
+
title: i(() => [...r[2] || (r[2] = [
|
|
58
58
|
N("div", { class: "flex items-center gap-2" }, [
|
|
59
59
|
N("span", null, "Subscription")
|
|
60
60
|
], -1)
|
|
61
|
-
])),
|
|
61
|
+
])]),
|
|
62
62
|
default: i(() => [
|
|
63
63
|
d(e(O), {
|
|
64
64
|
label: "Product",
|
|
@@ -124,7 +124,7 @@ const oe = /* @__PURE__ */ T({
|
|
|
124
124
|
d(e(A), { name: z.value }, null, 8, ["name"])
|
|
125
125
|
]),
|
|
126
126
|
default: i(() => [
|
|
127
|
-
r[3] || (r[3] = x(" Subscription "))
|
|
127
|
+
r[3] || (r[3] = x(" Subscription ", -1))
|
|
128
128
|
]),
|
|
129
129
|
_: 1
|
|
130
130
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MonetizationSidebar.vue.js","sources":["../../../src/plugins/Monetization/MonetizationSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { PlSlideModal, PlBtnGhost, PlDropdown, PlAlert, PlIcon24, PlBtnSecondary } from '@milaboratories/uikit';\nimport { useButtonTarget } from './useButtonTarget';\nimport { useInfo } from './useInfo';\nimport UserCabinetCard from './UserCabinetCard.vue';\nimport RunStatus from './RunStatus.vue';\nimport LimitCard from './LimitCard.vue';\nimport EndOfPeriod from './EndOfPeriod.vue';\n\nconst isOpen = ref(false);\n\nconst {\n result,\n error,\n hasMonetization,\n canRun,\n status,\n customerEmail,\n endOfBillingPeriod,\n limits,\n refresh,\n isLoading,\n} = useInfo();\n\nconst teleportTarget = useButtonTarget(hasMonetization);\n\nconst productName = computed(() => result.value?.productName);\n\nconst userCabinetUrl = computed(() => {\n if (!result.value) return undefined;\n\n const u = new URL(`https://scientist.platforma.bio/product/${result.value.productKey}`);\n\n if (customerEmail.value) {\n u.searchParams.set('email', customerEmail.value);\n }\n\n return u.toString();\n});\n\nconst options = computed(() => {\n if (!result.value) return [];\n\n return [\n {\n label: result.value.productName,\n value: result.value.productName,\n },\n ];\n});\n\nconst statusText = computed(() => {\n switch (status.value) {\n case 'active':\n return '';\n case 'limits_exceeded':\n return 'Usage limits exceeded for the current billing period.';\n case 'payment_required':\n return 'Payment required to continue using the service.';\n case 'select-tariff':\n return 'Select a subscription plan in the Scientist Cabinet.';\n case 'inactive':\n return 'Not found billing period.';\n default:\n return '';\n }\n});\n\nconst btnIcon = computed(() => {\n if (canRun.value) return 'monetization-on';\n return 'monetization-off';\n});\n</script>\n\n<template>\n <PlSlideModal v-if=\"hasMonetization\" v-model=\"isOpen\">\n <template #title>\n <div class=\"flex items-center gap-2\">\n <span>Subscription</span>\n </div>\n </template>\n <PlDropdown label=\"Product\" readonly :model-value=\"productName\" :options=\"options\" />\n <RunStatus :can-run=\"canRun\" :is-loading=\"isLoading\" :status-text=\"statusText\">\n <PlBtnSecondary\n title=\"Refresh status\"\n round\n size=\"small\"\n style=\"margin-left: auto;\"\n icon=\"loading\"\n :loading=\"isLoading\"\n @click=\"refresh\"\n />\n </RunStatus>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <UserCabinetCard v-if=\"userCabinetUrl\" :email=\"customerEmail\" :user-cabinet-url=\"userCabinetUrl\" />\n <EndOfPeriod v-if=\"endOfBillingPeriod\" :end-of-period=\"endOfBillingPeriod\" />\n <template v-if=\"limits\">\n <LimitCard\n v-for=\"limit in limits\"\n :key=\"limit.type\"\n :type=\"limit.type\"\n :label=\"limit.type\"\n :used=\"limit.used\"\n :to-spend=\"limit.toSpend\"\n :available=\"limit.available\"\n />\n </template>\n </PlSlideModal>\n <!-- Teleport to the title slot -->\n <Teleport v-if=\"hasMonetization && teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost @click.stop=\"isOpen = true\">\n Subscription\n <template #append>\n <PlIcon24 :name=\"btnIcon\" />\n </template>\n </PlBtnGhost>\n </Teleport>\n</template>\n"],"names":["isOpen","ref","result","error","hasMonetization","canRun","status","customerEmail","endOfBillingPeriod","limits","refresh","isLoading","useInfo","teleportTarget","useButtonTarget","productName","computed","_a","userCabinetUrl","u","options","statusText","btnIcon"],"mappings":";;;;;;;;;;;AAUA,UAAMA,IAASC,EAAI,EAAK,GAElB;AAAA,MACJ,QAAAC;AAAA,MACA,OAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,QAAAC;AAAA,MACA,QAAAC;AAAA,MACA,eAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,QAAAC;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,IAAA,IACEC,EAAA,GAEEC,IAAiBC,EAAgBV,CAAe,GAEhDW,IAAcC,EAAS,MAAA;;AAAM,cAAAC,IAAAf,EAAO,UAAP,gBAAAe,EAAc;AAAA,KAAW,GAEtDC,IAAiBF,EAAS,MAAM;AACpC,UAAI,CAACd,EAAO,MAAO;AAEnB,YAAMiB,IAAI,IAAI,IAAI,2CAA2CjB,EAAO,MAAM,UAAU,EAAE;AAEtF,aAAIK,EAAc,SAChBY,EAAE,aAAa,IAAI,SAASZ,EAAc,KAAK,GAG1CY,EAAE,SAAA;AAAA,IACX,CAAC,GAEKC,IAAUJ,EAAS,MAClBd,EAAO,QAEL;AAAA,MACL;AAAA,QACE,OAAOA,EAAO,MAAM;AAAA,QACpB,OAAOA,EAAO,MAAM;AAAA,MAAA;AAAA,IACtB,IANwB,CAAA,CAQ3B,GAEKmB,IAAaL,EAAS,MAAM;AAChC,cAAQV,EAAO,OAAA;AAAA,QACb,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKgB,IAAUN,EAAS,MACnBX,EAAO,QAAc,oBAClB,kBACR
|
|
1
|
+
{"version":3,"file":"MonetizationSidebar.vue.js","sources":["../../../src/plugins/Monetization/MonetizationSidebar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { PlSlideModal, PlBtnGhost, PlDropdown, PlAlert, PlIcon24, PlBtnSecondary } from '@milaboratories/uikit';\nimport { useButtonTarget } from './useButtonTarget';\nimport { useInfo } from './useInfo';\nimport UserCabinetCard from './UserCabinetCard.vue';\nimport RunStatus from './RunStatus.vue';\nimport LimitCard from './LimitCard.vue';\nimport EndOfPeriod from './EndOfPeriod.vue';\n\nconst isOpen = ref(false);\n\nconst {\n result,\n error,\n hasMonetization,\n canRun,\n status,\n customerEmail,\n endOfBillingPeriod,\n limits,\n refresh,\n isLoading,\n} = useInfo();\n\nconst teleportTarget = useButtonTarget(hasMonetization);\n\nconst productName = computed(() => result.value?.productName);\n\nconst userCabinetUrl = computed(() => {\n if (!result.value) return undefined;\n\n const u = new URL(`https://scientist.platforma.bio/product/${result.value.productKey}`);\n\n if (customerEmail.value) {\n u.searchParams.set('email', customerEmail.value);\n }\n\n return u.toString();\n});\n\nconst options = computed(() => {\n if (!result.value) return [];\n\n return [\n {\n label: result.value.productName,\n value: result.value.productName,\n },\n ];\n});\n\nconst statusText = computed(() => {\n switch (status.value) {\n case 'active':\n return '';\n case 'limits_exceeded':\n return 'Usage limits exceeded for the current billing period.';\n case 'payment_required':\n return 'Payment required to continue using the service.';\n case 'select-tariff':\n return 'Select a subscription plan in the Scientist Cabinet.';\n case 'inactive':\n return 'Not found billing period.';\n default:\n return '';\n }\n});\n\nconst btnIcon = computed(() => {\n if (canRun.value) return 'monetization-on';\n return 'monetization-off';\n});\n</script>\n\n<template>\n <PlSlideModal v-if=\"hasMonetization\" v-model=\"isOpen\">\n <template #title>\n <div class=\"flex items-center gap-2\">\n <span>Subscription</span>\n </div>\n </template>\n <PlDropdown label=\"Product\" readonly :model-value=\"productName\" :options=\"options\" />\n <RunStatus :can-run=\"canRun\" :is-loading=\"isLoading\" :status-text=\"statusText\">\n <PlBtnSecondary\n title=\"Refresh status\"\n round\n size=\"small\"\n style=\"margin-left: auto;\"\n icon=\"loading\"\n :loading=\"isLoading\"\n @click=\"refresh\"\n />\n </RunStatus>\n <PlAlert v-if=\"error\" type=\"error\">\n {{ error }}\n </PlAlert>\n <UserCabinetCard v-if=\"userCabinetUrl\" :email=\"customerEmail\" :user-cabinet-url=\"userCabinetUrl\" />\n <EndOfPeriod v-if=\"endOfBillingPeriod\" :end-of-period=\"endOfBillingPeriod\" />\n <template v-if=\"limits\">\n <LimitCard\n v-for=\"limit in limits\"\n :key=\"limit.type\"\n :type=\"limit.type\"\n :label=\"limit.type\"\n :used=\"limit.used\"\n :to-spend=\"limit.toSpend\"\n :available=\"limit.available\"\n />\n </template>\n </PlSlideModal>\n <!-- Teleport to the title slot -->\n <Teleport v-if=\"hasMonetization && teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost @click.stop=\"isOpen = true\">\n Subscription\n <template #append>\n <PlIcon24 :name=\"btnIcon\" />\n </template>\n </PlBtnGhost>\n </Teleport>\n</template>\n"],"names":["isOpen","ref","result","error","hasMonetization","canRun","status","customerEmail","endOfBillingPeriod","limits","refresh","isLoading","useInfo","teleportTarget","useButtonTarget","productName","computed","_a","userCabinetUrl","u","options","statusText","btnIcon","_unref","_createBlock","PlSlideModal","$event","_cache","_createElementVNode","_createVNode","PlDropdown","RunStatus","PlBtnSecondary","PlAlert","UserCabinetCard","EndOfPeriod","_createElementBlock","_Fragment","_renderList","limit","LimitCard","_Teleport","PlBtnGhost","PlIcon24"],"mappings":";;;;;;;;;;;AAUA,UAAMA,IAASC,EAAI,EAAK,GAElB;AAAA,MACJ,QAAAC;AAAA,MACA,OAAAC;AAAA,MACA,iBAAAC;AAAA,MACA,QAAAC;AAAA,MACA,QAAAC;AAAA,MACA,eAAAC;AAAA,MACA,oBAAAC;AAAA,MACA,QAAAC;AAAA,MACA,SAAAC;AAAA,MACA,WAAAC;AAAA,IAAA,IACEC,EAAA,GAEEC,IAAiBC,EAAgBV,CAAe,GAEhDW,IAAcC,EAAS,MAAA;;AAAM,cAAAC,IAAAf,EAAO,UAAP,gBAAAe,EAAc;AAAA,KAAW,GAEtDC,IAAiBF,EAAS,MAAM;AACpC,UAAI,CAACd,EAAO,MAAO;AAEnB,YAAMiB,IAAI,IAAI,IAAI,2CAA2CjB,EAAO,MAAM,UAAU,EAAE;AAEtF,aAAIK,EAAc,SAChBY,EAAE,aAAa,IAAI,SAASZ,EAAc,KAAK,GAG1CY,EAAE,SAAA;AAAA,IACX,CAAC,GAEKC,IAAUJ,EAAS,MAClBd,EAAO,QAEL;AAAA,MACL;AAAA,QACE,OAAOA,EAAO,MAAM;AAAA,QACpB,OAAOA,EAAO,MAAM;AAAA,MAAA;AAAA,IACtB,IANwB,CAAA,CAQ3B,GAEKmB,IAAaL,EAAS,MAAM;AAChC,cAAQV,EAAO,OAAA;AAAA,QACb,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO;AAAA,QACT;AACE,iBAAO;AAAA,MAAA;AAAA,IAEb,CAAC,GAEKgB,IAAUN,EAAS,MACnBX,EAAO,QAAc,oBAClB,kBACR;;MAIqBkB,EAAAnB,CAAA,UAApBoB,EAkCeD,EAAAE,CAAA,GAAA;AAAA;oBAlC+BzB,EAAA;AAAA,sDAAAA,EAAM,QAAA0B;AAAA,MAAA;QACvC,SACT,MAEM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,UAFNC,EAEM,OAAA,EAFD,OAAM,6BAAyB;AAAA,YAClCA,EAAyB,cAAnB,cAAY;AAAA,UAAA;;mBAGtB,MAAqF;AAAA,UAArFC,EAAqFN,EAAAO,CAAA,GAAA;AAAA,YAAzE,OAAM;AAAA,YAAU,UAAA;AAAA,YAAU,eAAaf,EAAA;AAAA,YAAc,SAASK,EAAA;AAAA,UAAA;UAC1ES,EAUYE,GAAA;AAAA,YAVA,WAASR,EAAAlB,CAAA;AAAA,YAAS,cAAYkB,EAAAZ,CAAA;AAAA,YAAY,eAAaU,EAAA;AAAA,UAAA;uBACjE,MAQE;AAAA,cARFQ,EAQEN,EAAAS,CAAA,GAAA;AAAA,gBAPA,OAAM;AAAA,gBACN,OAAA;AAAA,gBACA,MAAK;AAAA,gBACL,OAAA,EAAA,eAAA,OAAA;AAAA,gBACA,MAAK;AAAA,gBACJ,SAAST,EAAAZ,CAAA;AAAA,gBACT,SAAOY,EAAAb,CAAA;AAAA,cAAA;;;;UAGGa,EAAApB,CAAA,UAAfqB,EAEUD,EAAAU,CAAA,GAAA;AAAA;YAFY,MAAK;AAAA,UAAA;uBACzB,MAAW;AAAA,kBAARV,EAAApB,CAAA,CAAK,GAAA,CAAA;AAAA,YAAA;;;UAEae,EAAA,cAAvBM,EAAmGU,GAAA;AAAA;YAA3D,OAAOX,EAAAhB,CAAA;AAAA,YAAgB,oBAAkBW,EAAA;AAAA,UAAA;UAC9DK,EAAAf,CAAA,UAAnBgB,EAA6EW,GAAA;AAAA;YAArC,iBAAeZ,EAAAf,CAAA;AAAA,UAAA;UACvCe,EAAAd,CAAA,YACd2B,EAQEC,GAAA,EAAA,KAAA,KAAAC,EAPgBf,EAAAd,CAAA,GAAM,CAAf8B,YADTf,EAQEgB,GAAA;AAAA,YANC,KAAKD,EAAM;AAAA,YACX,MAAMA,EAAM;AAAA,YACZ,OAAOA,EAAM;AAAA,YACb,MAAMA,EAAM;AAAA,YACZ,YAAUA,EAAM;AAAA,YAChB,WAAWA,EAAM;AAAA,UAAA;;;;MAKRhB,EAAAnB,CAAA,KAAmBmB,EAAAV,CAAA,UAAnCW,EAOWiB,GAAA;AAAA;QAPyC,IAAIlB,EAAAV,CAAA;AAAA,MAAA;QACtDgB,EAKaN,EAAAmB,CAAA,GAAA;AAAA,UALA,kCAAY1C,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA;AAAA,QAAA;UAElB,UACT,MAA4B;AAAA,YAA5B6B,EAA4BN,EAAAoB,CAAA,GAAA,EAAjB,MAAMrB,EAAA,SAAO,MAAA,GAAA,CAAA,MAAA,CAAA;AAAA,UAAA;qBAHY,MAEtC;AAAA,8BAFsC,kBAEtC,EAAA;AAAA,UAAA;;;;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as i, computed as d, createElementBlock as
|
|
1
|
+
import { defineComponent as i, computed as d, createElementBlock as l, openBlock as o, createElementVNode as n, createCommentVNode as c, normalizeClass as a, renderSlot as y, toDisplayString as u } from "vue";
|
|
2
2
|
const g = /* @__PURE__ */ i({
|
|
3
3
|
__name: "RunStatus",
|
|
4
4
|
props: {
|
|
@@ -6,32 +6,32 @@ const g = /* @__PURE__ */ i({
|
|
|
6
6
|
statusText: {},
|
|
7
7
|
isLoading: { type: Boolean }
|
|
8
8
|
},
|
|
9
|
-
setup(
|
|
10
|
-
const
|
|
11
|
-
return (e,
|
|
9
|
+
setup(t) {
|
|
10
|
+
const s = t, r = d(() => s.isLoading ? "Updating..." : s.canRun ? "Ready to run" : "Cannot run");
|
|
11
|
+
return (e, m) => (o(), l("div", null, [
|
|
12
12
|
n("div", {
|
|
13
|
-
class:
|
|
13
|
+
class: a([{ [e.$style["can-run"]]: t.canRun, [e.$style.loading]: t.isLoading }, e.$style.container])
|
|
14
14
|
}, [
|
|
15
15
|
n("div", {
|
|
16
|
-
class:
|
|
16
|
+
class: a(e.$style.badge)
|
|
17
17
|
}, [
|
|
18
18
|
n("i", {
|
|
19
|
-
class:
|
|
19
|
+
class: a(e.$style.blob)
|
|
20
20
|
}, [
|
|
21
21
|
n("span", null, [
|
|
22
22
|
n("span", {
|
|
23
|
-
class:
|
|
23
|
+
class: a(e.$style.dot)
|
|
24
24
|
}, null, 2)
|
|
25
25
|
])
|
|
26
26
|
], 2),
|
|
27
|
-
n("span", null,
|
|
27
|
+
n("span", null, u(r.value), 1)
|
|
28
28
|
], 2),
|
|
29
29
|
y(e.$slots, "default")
|
|
30
30
|
], 2),
|
|
31
|
-
|
|
31
|
+
t.statusText ? (o(), l("div", {
|
|
32
32
|
key: 0,
|
|
33
|
-
class:
|
|
34
|
-
},
|
|
33
|
+
class: a(e.$style.statusText)
|
|
34
|
+
}, u(t.statusText), 3)) : c("", !0)
|
|
35
35
|
]));
|
|
36
36
|
}
|
|
37
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunStatus.vue2.js","sources":["../../../src/plugins/Monetization/RunStatus.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n canRun: boolean | undefined;\n statusText: string | undefined;\n isLoading?: boolean;\n}>();\n\nconst badgeText = computed(() => {\n if (props.isLoading) {\n return 'Updating...';\n }\n\n if (props.canRun) {\n return 'Ready to run';\n }\n\n return 'Cannot run';\n});\n</script>\n\n<template>\n <div>\n <div :class=\"[{ [$style['can-run']]: canRun, [$style.loading]: isLoading }, $style.container]\">\n <div :class=\"$style.badge\">\n <i :class=\"$style.blob\">\n <span>\n <span :class=\"$style.dot\" />\n </span>\n </i>\n <span>{{ badgeText }}</span>\n </div>\n <slot />\n </div>\n <div v-if=\"statusText\" :class=\"$style.statusText\">{{ statusText }}</div>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n align-items: center;\n gap: 8px;\n --blob-color: #FF5C5C;\n --badge-background: rgba(255, 92, 92, 0.12);\n\n &.can-run {\n --blob-color: #49CC49;\n --badge-background: rgba(99, 224, 36, 0.12);\n }\n\n &.loading {\n --blob-color: #FFAD0A;\n --badge-background: rgba(255, 173, 10, 0.12);\n }\n}\n\n.statusText {\n margin-top: 6px;\n color: var(--txt-error);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.badge {\n display: flex;\n gap: 6px;\n height: 40px;\n padding: 6px 16px 6px 8px;\n align-items: center;\n border-radius: 6px;\n border: 1px solid var(--badge-background);\n background: var(--badge-background);\n}\n\n.blob {\n width: 24px;\n height: 24px;\n display: flex;\n place-items: center;\n place-content: center;\n\n >span {\n display: flex;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n place-content: center;\n place-items: center;\n background-color: rgb(from var(--blob-color) r g b / 0.24);\n }\n\n .dot {\n border-radius: 50%;\n height: 8px;\n width: 8px;\n transform: scale(1);\n\n background: var(--blob-color);\n box-shadow: 0 0 0 0 var(--blob-color);\n animation: pulse-glob 1s infinite;\n }\n}\n</style>\n"],"names":["props","__props","badgeText","computed"],"mappings":";;;;;;;;;AAGA,UAAMA,IAAQC,GAMRC,IAAYC,EAAS,MACrBH,EAAM,YACD,gBAGLA,EAAM,SACD,iBAGF,YACR
|
|
1
|
+
{"version":3,"file":"RunStatus.vue2.js","sources":["../../../src/plugins/Monetization/RunStatus.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n canRun: boolean | undefined;\n statusText: string | undefined;\n isLoading?: boolean;\n}>();\n\nconst badgeText = computed(() => {\n if (props.isLoading) {\n return 'Updating...';\n }\n\n if (props.canRun) {\n return 'Ready to run';\n }\n\n return 'Cannot run';\n});\n</script>\n\n<template>\n <div>\n <div :class=\"[{ [$style['can-run']]: canRun, [$style.loading]: isLoading }, $style.container]\">\n <div :class=\"$style.badge\">\n <i :class=\"$style.blob\">\n <span>\n <span :class=\"$style.dot\" />\n </span>\n </i>\n <span>{{ badgeText }}</span>\n </div>\n <slot />\n </div>\n <div v-if=\"statusText\" :class=\"$style.statusText\">{{ statusText }}</div>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n align-items: center;\n gap: 8px;\n --blob-color: #FF5C5C;\n --badge-background: rgba(255, 92, 92, 0.12);\n\n &.can-run {\n --blob-color: #49CC49;\n --badge-background: rgba(99, 224, 36, 0.12);\n }\n\n &.loading {\n --blob-color: #FFAD0A;\n --badge-background: rgba(255, 173, 10, 0.12);\n }\n}\n\n.statusText {\n margin-top: 6px;\n color: var(--txt-error);\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.badge {\n display: flex;\n gap: 6px;\n height: 40px;\n padding: 6px 16px 6px 8px;\n align-items: center;\n border-radius: 6px;\n border: 1px solid var(--badge-background);\n background: var(--badge-background);\n}\n\n.blob {\n width: 24px;\n height: 24px;\n display: flex;\n place-items: center;\n place-content: center;\n\n >span {\n display: flex;\n width: 16px;\n height: 16px;\n border-radius: 50%;\n place-content: center;\n place-items: center;\n background-color: rgb(from var(--blob-color) r g b / 0.24);\n }\n\n .dot {\n border-radius: 50%;\n height: 8px;\n width: 8px;\n transform: scale(1);\n\n background: var(--blob-color);\n box-shadow: 0 0 0 0 var(--blob-color);\n animation: pulse-glob 1s infinite;\n }\n}\n</style>\n"],"names":["props","__props","badgeText","computed","_createElementBlock","_createElementVNode","_normalizeClass","$style","_renderSlot","_ctx"],"mappings":";;;;;;;;;AAGA,UAAMA,IAAQC,GAMRC,IAAYC,EAAS,MACrBH,EAAM,YACD,gBAGLA,EAAM,SACD,iBAGF,YACR;2BAICI,EAaM,OAAA,MAAA;AAAA,MAZJC,EAUM,OAAA;AAAA,QAVA,OAAKC,EAAA,CAAA,EAAA,CAAMC,EAAAA,OAAM,SAAA,CAAA,GAAcN,EAAA,QAAM,CAAGM,EAAAA,OAAO,OAAO,GAAGN,EAAA,aAAaM,EAAAA,OAAO,SAAS,CAAA;AAAA,MAAA;QAC1FF,EAOM,OAAA;AAAA,UAPA,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA;UACvBF,EAII,KAAA;AAAA,YAJA,OAAKC,EAAEC,EAAAA,OAAO,IAAI;AAAA,UAAA;YACpBF,EAEO,QAAA,MAAA;AAAA,cADLA,EAA4B,QAAA;AAAA,gBAArB,OAAKC,EAAEC,EAAAA,OAAO,GAAG;AAAA,cAAA;;;UAG5BF,EAA4B,gBAAnBH,EAAA,KAAS,GAAA,CAAA;AAAA,QAAA;QAEpBM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAECR,EAAA,mBAAXG,EAAwE,OAAA;AAAA;QAAhD,OAAKE,EAAEC,EAAAA,OAAO,UAAU;AAAA,MAAA,KAAKN,EAAA,UAAU,GAAA,CAAA;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent as v, ref as b, computed as f, createElementBlock as
|
|
1
|
+
import { defineComponent as v, ref as b, computed as f, createElementBlock as i, openBlock as s, createCommentVNode as u, createElementVNode as a, normalizeClass as t, createVNode as d, toDisplayString as n, unref as p, withCtx as m, createTextVNode as U } from "vue";
|
|
2
2
|
import { PlTooltip as k, PlMaskIcon24 as $ } from "@milaboratories/uikit";
|
|
3
3
|
const T = ["title"], w = /* @__PURE__ */ v({
|
|
4
4
|
__name: "UserCabinetCard",
|
|
@@ -6,9 +6,9 @@ const T = ["title"], w = /* @__PURE__ */ v({
|
|
|
6
6
|
userCabinetUrl: {},
|
|
7
7
|
email: {}
|
|
8
8
|
},
|
|
9
|
-
setup(
|
|
10
|
-
const
|
|
11
|
-
|
|
9
|
+
setup(o) {
|
|
10
|
+
const r = o, l = b(""), y = f(() => l.value ? "clipboard-copied" : "clipboard"), C = () => {
|
|
11
|
+
r.userCabinetUrl && navigator.clipboard.writeText(r.userCabinetUrl).then(() => {
|
|
12
12
|
l.value = "URL copied!", setTimeout(() => {
|
|
13
13
|
l.value = "";
|
|
14
14
|
}, 2e3);
|
|
@@ -18,30 +18,30 @@ const T = ["title"], w = /* @__PURE__ */ v({
|
|
|
18
18
|
}, 2e3);
|
|
19
19
|
});
|
|
20
20
|
};
|
|
21
|
-
return (e,
|
|
22
|
-
|
|
21
|
+
return (e, c) => (s(), i("div", null, [
|
|
22
|
+
o.userCabinetUrl ? (s(), i("div", {
|
|
23
23
|
key: 0,
|
|
24
24
|
class: t(e.$style.urlSection)
|
|
25
25
|
}, [
|
|
26
|
-
|
|
26
|
+
a("div", {
|
|
27
27
|
class: t(e.$style.urlLabel)
|
|
28
28
|
}, "Scientist cabinet URL:", 2),
|
|
29
|
-
|
|
29
|
+
a("div", {
|
|
30
30
|
class: t(e.$style.urlActions)
|
|
31
31
|
}, [
|
|
32
|
-
|
|
32
|
+
a("div", {
|
|
33
33
|
class: t(e.$style.urlDisplay),
|
|
34
|
-
title:
|
|
35
|
-
},
|
|
36
|
-
|
|
34
|
+
title: o.userCabinetUrl
|
|
35
|
+
}, n(o.userCabinetUrl), 11, T),
|
|
36
|
+
d(p(k), {
|
|
37
37
|
"close-delay": 800,
|
|
38
38
|
position: "top"
|
|
39
39
|
}, {
|
|
40
|
-
tooltip:
|
|
41
|
-
U(
|
|
40
|
+
tooltip: m(() => [
|
|
41
|
+
U(n(l.value ? l.value : "Copy"), 1)
|
|
42
42
|
]),
|
|
43
|
-
default:
|
|
44
|
-
|
|
43
|
+
default: m(() => [
|
|
44
|
+
d(p($), {
|
|
45
45
|
class: t(e.$style.copyIcon),
|
|
46
46
|
title: "Copy content",
|
|
47
47
|
name: y.value,
|
|
@@ -51,15 +51,15 @@ const T = ["title"], w = /* @__PURE__ */ v({
|
|
|
51
51
|
_: 1
|
|
52
52
|
})
|
|
53
53
|
], 2),
|
|
54
|
-
|
|
54
|
+
o.email ? (s(), i("div", {
|
|
55
55
|
key: 0,
|
|
56
56
|
class: t(e.$style.email)
|
|
57
57
|
}, [
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
], 2)) :
|
|
61
|
-
], 2)) :
|
|
62
|
-
|
|
58
|
+
c[0] || (c[0] = a("span", null, "License owner:", -1)),
|
|
59
|
+
a("span", null, n(o.email), 1)
|
|
60
|
+
], 2)) : u("", !0)
|
|
61
|
+
], 2)) : u("", !0),
|
|
62
|
+
a("div", {
|
|
63
63
|
class: t(e.$style.hint)
|
|
64
64
|
}, " * Copy and paste the link into your browser ", 2)
|
|
65
65
|
]));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UserCabinetCard.vue2.js","sources":["../../../src/plugins/Monetization/UserCabinetCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { PlTooltip, PlMaskIcon24 } from '@milaboratories/uikit';\n\nconst props = defineProps<{\n userCabinetUrl: string;\n email?: string;\n}>();\n\nconst copiedMessage = ref('');\n\nconst iconName = computed(() => (copiedMessage.value ? 'clipboard-copied' : 'clipboard'));\n\nconst copyToClipboard = () => {\n if (props.userCabinetUrl) {\n navigator.clipboard.writeText(props.userCabinetUrl)\n .then(() => {\n copiedMessage.value = 'URL copied!';\n setTimeout(() => {\n copiedMessage.value = '';\n }, 2000);\n })\n .catch((err) => {\n console.error('Failed to copy text: ', err);\n copiedMessage.value = 'Copy failed';\n setTimeout(() => {\n copiedMessage.value = '';\n }, 2000);\n });\n }\n};\n</script>\n\n<template>\n <div>\n <div v-if=\"userCabinetUrl\" :class=\"$style.urlSection\">\n <div :class=\"$style.urlLabel\">Scientist cabinet URL:</div>\n <div :class=\"$style.urlActions\">\n <div :class=\"$style.urlDisplay\" :title=\"userCabinetUrl\">{{ userCabinetUrl }}</div>\n <PlTooltip :close-delay=\"800\" position=\"top\">\n <PlMaskIcon24 :class=\"$style.copyIcon\" title=\"Copy content\" :name=\"iconName\" @click=\"copyToClipboard\" />\n <template #tooltip>{{ copiedMessage ? copiedMessage : 'Copy' }}</template>\n </PlTooltip>\n </div>\n <div v-if=\"email\" :class=\"$style.email\">\n <span>License owner:</span>\n <span>{{ email }}</span>\n </div>\n </div>\n <div :class=\"$style.hint\">\n * Copy and paste the link into your browser\n </div>\n </div>\n</template>\n\n<style module>\n.hint {\n margin-top: 6px;\n color: var(--txt-03);\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n}\n\n.email {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n color: var(--txt-03);\n\n > span:last-child {\n max-width: 200px;\n text-overflow: ellipsis;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n }\n}\n\n.copyIcon {\n cursor: pointer;\n}\n\n.urlSection {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n background-color: #F7F8FA;\n border-radius: 6px;\n border: 1px solid #E1E3EB;\n}\n\n.urlLabel {\n font-weight: 500;\n color: #555;\n}\n\n.urlActions {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: nowrap;\n}\n\n.urlDisplay {\n font-family: monospace;\n font-size: 14px;\n color: #0066cc;\n padding: 6px 10px 6px 0;\n border-radius: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n}\n</style>\n"],"names":["props","__props","copiedMessage","ref","iconName","computed","copyToClipboard","err"],"mappings":";;;;;;;;;AAIA,UAAMA,IAAQC,GAKRC,IAAgBC,EAAI,EAAE,GAEtBC,IAAWC,EAAS,MAAOH,EAAc,QAAQ,qBAAqB,WAAY,GAElFI,IAAkB,MAAM;AAC5B,MAAIN,EAAM,kBACR,UAAU,UAAU,UAAUA,EAAM,cAAc,EAC/C,KAAK,MAAM;AACV,QAAAE,EAAc,QAAQ,eACtB,WAAW,MAAM;AACf,UAAAA,EAAc,QAAQ;AAAA,QACxB,GAAG,GAAI;AAAA,MACT,CAAC,EACA,MAAM,CAACK,MAAQ;AACd,gBAAQ,MAAM,yBAAyBA,CAAG,GAC1CL,EAAc,QAAQ,eACtB,WAAW,MAAM;AACf,UAAAA,EAAc,QAAQ;AAAA,QACxB,GAAG,GAAI;AAAA,MACT,CAAC;AAAA,IAEP
|
|
1
|
+
{"version":3,"file":"UserCabinetCard.vue2.js","sources":["../../../src/plugins/Monetization/UserCabinetCard.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, computed } from 'vue';\nimport { PlTooltip, PlMaskIcon24 } from '@milaboratories/uikit';\n\nconst props = defineProps<{\n userCabinetUrl: string;\n email?: string;\n}>();\n\nconst copiedMessage = ref('');\n\nconst iconName = computed(() => (copiedMessage.value ? 'clipboard-copied' : 'clipboard'));\n\nconst copyToClipboard = () => {\n if (props.userCabinetUrl) {\n navigator.clipboard.writeText(props.userCabinetUrl)\n .then(() => {\n copiedMessage.value = 'URL copied!';\n setTimeout(() => {\n copiedMessage.value = '';\n }, 2000);\n })\n .catch((err) => {\n console.error('Failed to copy text: ', err);\n copiedMessage.value = 'Copy failed';\n setTimeout(() => {\n copiedMessage.value = '';\n }, 2000);\n });\n }\n};\n</script>\n\n<template>\n <div>\n <div v-if=\"userCabinetUrl\" :class=\"$style.urlSection\">\n <div :class=\"$style.urlLabel\">Scientist cabinet URL:</div>\n <div :class=\"$style.urlActions\">\n <div :class=\"$style.urlDisplay\" :title=\"userCabinetUrl\">{{ userCabinetUrl }}</div>\n <PlTooltip :close-delay=\"800\" position=\"top\">\n <PlMaskIcon24 :class=\"$style.copyIcon\" title=\"Copy content\" :name=\"iconName\" @click=\"copyToClipboard\" />\n <template #tooltip>{{ copiedMessage ? copiedMessage : 'Copy' }}</template>\n </PlTooltip>\n </div>\n <div v-if=\"email\" :class=\"$style.email\">\n <span>License owner:</span>\n <span>{{ email }}</span>\n </div>\n </div>\n <div :class=\"$style.hint\">\n * Copy and paste the link into your browser\n </div>\n </div>\n</template>\n\n<style module>\n.hint {\n margin-top: 6px;\n color: var(--txt-03);\n font-size: 12px;\n font-weight: 500;\n line-height: 16px;\n}\n\n.email {\n display: flex;\n align-items: center;\n justify-content: space-between;\n font-size: 12px;\n color: var(--txt-03);\n\n > span:last-child {\n max-width: 200px;\n text-overflow: ellipsis;\n display: block;\n white-space: nowrap;\n overflow: hidden;\n }\n}\n\n.copyIcon {\n cursor: pointer;\n}\n\n.urlSection {\n display: flex;\n flex-direction: column;\n gap: 8px;\n padding: 12px;\n background-color: #F7F8FA;\n border-radius: 6px;\n border: 1px solid #E1E3EB;\n}\n\n.urlLabel {\n font-weight: 500;\n color: #555;\n}\n\n.urlActions {\n display: flex;\n align-items: center;\n gap: 10px;\n flex-wrap: nowrap;\n}\n\n.urlDisplay {\n font-family: monospace;\n font-size: 14px;\n color: #0066cc;\n padding: 6px 10px 6px 0;\n border-radius: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 300px;\n}\n</style>\n"],"names":["props","__props","copiedMessage","ref","iconName","computed","copyToClipboard","err","_createElementBlock","_normalizeClass","$style","_createElementVNode","_hoisted_1","_createVNode","_unref","PlTooltip","_createTextVNode","_toDisplayString","PlMaskIcon24","_cache"],"mappings":";;;;;;;;;AAIA,UAAMA,IAAQC,GAKRC,IAAgBC,EAAI,EAAE,GAEtBC,IAAWC,EAAS,MAAOH,EAAc,QAAQ,qBAAqB,WAAY,GAElFI,IAAkB,MAAM;AAC5B,MAAIN,EAAM,kBACR,UAAU,UAAU,UAAUA,EAAM,cAAc,EAC/C,KAAK,MAAM;AACV,QAAAE,EAAc,QAAQ,eACtB,WAAW,MAAM;AACf,UAAAA,EAAc,QAAQ;AAAA,QACxB,GAAG,GAAI;AAAA,MACT,CAAC,EACA,MAAM,CAACK,MAAQ;AACd,gBAAQ,MAAM,yBAAyBA,CAAG,GAC1CL,EAAc,QAAQ,eACtB,WAAW,MAAM;AACf,UAAAA,EAAc,QAAQ;AAAA,QACxB,GAAG,GAAI;AAAA,MACT,CAAC;AAAA,IAEP;2BAIEM,EAkBM,OAAA,MAAA;AAAA,MAjBOP,EAAA,uBAAXO,EAaM,OAAA;AAAA;QAbsB,OAAKC,EAAEC,EAAAA,OAAO,UAAU;AAAA,MAAA;QAClDC,EAA0D,OAAA;AAAA,UAApD,OAAKF,EAAEC,EAAAA,OAAO,QAAQ;AAAA,QAAA,GAAE,0BAAsB,CAAA;AAAA,QACpDC,EAMM,OAAA;AAAA,UANA,OAAKF,EAAEC,EAAAA,OAAO,UAAU;AAAA,QAAA;UAC5BC,EAAkF,OAAA;AAAA,YAA5E,OAAKF,EAAEC,EAAAA,OAAO,UAAU;AAAA,YAAG,OAAOT,EAAA;AAAA,UAAA,KAAmBA,EAAA,cAAc,GAAA,IAAAW,CAAA;AAAA,UACzEC,EAGYC,EAAAC,CAAA,GAAA;AAAA,YAHA,eAAa;AAAA,YAAK,UAAS;AAAA,UAAA;YAE1B,WAAQ,MAA4C;AAAA,cAAzCC,EAAAC,EAAAf,EAAA,QAAgBA,EAAA,QAAa,MAAA,GAAA,CAAA;AAAA,YAAA;uBADnD,MAAwG;AAAA,cAAxGW,EAAwGC,EAAAI,CAAA,GAAA;AAAA,gBAAzF,OAAKT,EAAEC,EAAAA,OAAO,QAAQ;AAAA,gBAAE,OAAM;AAAA,gBAAgB,MAAMN,EAAA;AAAA,gBAAW,SAAOE;AAAA,cAAA;;;;;QAI9EL,EAAA,cAAXO,EAGM,OAAA;AAAA;UAHa,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA;UACpCS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAR,EAA2B,cAArB,kBAAc,EAAA;AAAA,UACpBA,EAAwB,gBAAfV,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;MAGlBU,EAEM,OAAA;AAAA,QAFA,OAAKF,EAAEC,EAAAA,OAAO,IAAI;AAAA,MAAA,GAAE,iDAE1B,CAAA;AAAA,IAAA;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@platforma-sdk/ui-vue",
|
|
3
|
-
"version": "1.45.
|
|
3
|
+
"version": "1.45.37",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"styles": "dist/index.js",
|
|
@@ -15,21 +15,20 @@
|
|
|
15
15
|
"@types/node": "~24.5.2",
|
|
16
16
|
"@types/semver": "^7.7.0",
|
|
17
17
|
"@types/d3-format": "^3.0.4",
|
|
18
|
-
"@milaboratories/miplots4": "^1.0.145",
|
|
19
18
|
"ag-grid-enterprise": "~34.1.2",
|
|
20
19
|
"ag-grid-vue3": "~34.1.2",
|
|
21
20
|
"canonicalize": "~2.1.0",
|
|
22
21
|
"lru-cache": "^11.2.2",
|
|
23
|
-
"vue": "^3.5.
|
|
22
|
+
"vue": "^3.5.24",
|
|
24
23
|
"@vueuse/core": "^13.3.0",
|
|
25
24
|
"@vueuse/integrations": "^13.3.0",
|
|
26
25
|
"d3-format": "^3.1.0",
|
|
27
26
|
"zod": "~3.23.8",
|
|
28
27
|
"@zip.js/zip.js": "^2.8.2",
|
|
29
|
-
"@milaboratories/biowasm-tools": "2.0.0",
|
|
30
28
|
"@milaboratories/ptabler-expression-js": "1.1.3",
|
|
29
|
+
"@milaboratories/biowasm-tools": "2.0.0",
|
|
31
30
|
"@platforma-sdk/model": "1.45.35",
|
|
32
|
-
"@milaboratories/uikit": "2.6.
|
|
31
|
+
"@milaboratories/uikit": "2.6.3"
|
|
33
32
|
},
|
|
34
33
|
"devDependencies": {
|
|
35
34
|
"happy-dom": "^15.11.7",
|
|
@@ -44,11 +43,11 @@
|
|
|
44
43
|
"yarpm": "^1.2.0",
|
|
45
44
|
"fast-json-patch": "^3.1.1",
|
|
46
45
|
"@faker-js/faker": "^9.2.0",
|
|
46
|
+
"@milaboratories/helpers": "1.12.0",
|
|
47
|
+
"@milaboratories/ts-builder": "1.0.5",
|
|
47
48
|
"@milaboratories/ts-configs": "1.0.6",
|
|
48
49
|
"@milaboratories/eslint-config": "1.0.5",
|
|
49
|
-
"@milaboratories/
|
|
50
|
-
"@milaboratories/build-configs": "1.0.8",
|
|
51
|
-
"@milaboratories/helpers": "1.12.0"
|
|
50
|
+
"@milaboratories/build-configs": "1.0.8"
|
|
52
51
|
},
|
|
53
52
|
"scripts": {
|
|
54
53
|
"test": "vitest run --passWithNoTests",
|
package/src/lib.ts
CHANGED
|
@@ -28,8 +28,6 @@ export * from './components/PlAgGridColumnManager';
|
|
|
28
28
|
|
|
29
29
|
export * from './components/PlTableFilters';
|
|
30
30
|
|
|
31
|
-
export * from './components/PlMultiSequenceAlignment';
|
|
32
|
-
|
|
33
31
|
export * from './components/PlAnnotations';
|
|
34
32
|
|
|
35
33
|
export * from './components/PlBtnExportArchive';
|