@platforma-sdk/ui-vue 1.45.36 → 1.45.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/.turbo/turbo-build.log +45 -45
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +16 -0
  4. package/dist/components/BlockLayout.vue2.js +3 -3
  5. package/dist/components/BlockLayout.vue2.js.map +1 -1
  6. package/dist/components/BlockLoader.vue.js.map +1 -1
  7. package/dist/components/LoaderPage.vue.js +2 -2
  8. package/dist/components/LoaderPage.vue.js.map +1 -1
  9. package/dist/components/NotFound.vue.js +3 -3
  10. package/dist/components/NotFound.vue.js.map +1 -1
  11. package/dist/components/PlAdvancedFilter/OperandButton.vue2.js.map +1 -1
  12. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js +73 -73
  13. package/dist/components/PlAdvancedFilter/PlAdvancedFilter.vue2.js.map +1 -1
  14. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js +100 -100
  15. package/dist/components/PlAdvancedFilter/SingleFilter.vue2.js.map +1 -1
  16. package/dist/components/PlAgCellFile/PlAgCellFile.vue.js.map +1 -1
  17. package/dist/components/PlAgCellProgress/PlAgCellProgress.vue.js.map +1 -1
  18. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js +6 -6
  19. package/dist/components/PlAgCellStatusTag/PlAgCellStatusTag.vue.js.map +1 -1
  20. package/dist/components/PlAgChartHistogramCell/PlAgChartHistogramCell.vue.js.map +1 -1
  21. package/dist/components/PlAgChartStackedBarCell/PlAgChartStackedBarCell.vue.js.map +1 -1
  22. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js +22 -22
  23. package/dist/components/PlAgColumnHeader/PlAgColumnHeader.vue.js.map +1 -1
  24. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js +3 -3
  25. package/dist/components/PlAgCsvExporter/PlAgCsvExporter.vue.js.map +1 -1
  26. package/dist/components/PlAgDataTable/PlAgDataTableSheets.vue2.js.map +1 -1
  27. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js +50 -50
  28. package/dist/components/PlAgDataTable/PlAgDataTableV2.vue2.js.map +1 -1
  29. package/dist/components/PlAgDataTable/PlAgOverlayLoading.vue.js.map +1 -1
  30. package/dist/components/PlAgDataTable/PlAgOverlayNoRows.vue.js.map +1 -1
  31. package/dist/components/PlAgDataTable/PlAgRowCount.vue.js.map +1 -1
  32. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js +35 -35
  33. package/dist/components/PlAgGridColumnManager/PlAgGridColumnManager.vue2.js.map +1 -1
  34. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js +15 -15
  35. package/dist/components/PlAgRowNumCheckbox/PlAgRowNumCheckbox.vue.js.map +1 -1
  36. package/dist/components/PlAgRowNumHeader.vue.js +13 -13
  37. package/dist/components/PlAgRowNumHeader.vue.js.map +1 -1
  38. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js +16 -16
  39. package/dist/components/PlAgTextAndButtonCell/PlAgTextAndButtonCell.vue.js.map +1 -1
  40. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js +6 -6
  41. package/dist/components/PlAnnotations/components/AnnotationsSidebar.vue2.js.map +1 -1
  42. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js +57 -57
  43. package/dist/components/PlAnnotations/components/DynamicForm.vue2.js.map +1 -1
  44. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js +6 -6
  45. package/dist/components/PlAnnotations/components/FilterSidebar.vue2.js.map +1 -1
  46. package/dist/components/PlAnnotations/components/PlAnnotations.vue2.js.map +1 -1
  47. package/dist/components/PlAnnotations/components/PlAnnotationsModal.vue2.js.map +1 -1
  48. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js +7 -7
  49. package/dist/components/PlAppErrorNotificationAlert/PlAppErrorNotificationAlert.vue.js.map +1 -1
  50. package/dist/components/PlBtnExportArchive/Item.vue2.js +23 -23
  51. package/dist/components/PlBtnExportArchive/Item.vue2.js.map +1 -1
  52. package/dist/components/PlBtnExportArchive/PlBtnExportArchive.vue2.js.map +1 -1
  53. package/dist/components/PlBtnExportArchive/Summary.vue2.js +22 -22
  54. package/dist/components/PlBtnExportArchive/Summary.vue2.js.map +1 -1
  55. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js +9 -9
  56. package/dist/components/PlTableFilters/PlTableAddFilterV2.vue.js.map +1 -1
  57. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js +3 -3
  58. package/dist/components/PlTableFilters/PlTableFilterEntryV2.vue.js.map +1 -1
  59. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js +9 -9
  60. package/dist/components/PlTableFilters/PlTableFiltersV2.vue2.js.map +1 -1
  61. package/dist/components/ValueOrErrorsComponent.vue.js.map +1 -1
  62. package/dist/plugins/Monetization/EndOfPeriod.vue2.js +9 -9
  63. package/dist/plugins/Monetization/EndOfPeriod.vue2.js.map +1 -1
  64. package/dist/plugins/Monetization/LimitCard.vue2.js +40 -40
  65. package/dist/plugins/Monetization/LimitCard.vue2.js.map +1 -1
  66. package/dist/plugins/Monetization/MonetizationSidebar.vue.js +3 -3
  67. package/dist/plugins/Monetization/MonetizationSidebar.vue.js.map +1 -1
  68. package/dist/plugins/Monetization/RunStatus.vue2.js +12 -12
  69. package/dist/plugins/Monetization/RunStatus.vue2.js.map +1 -1
  70. package/dist/plugins/Monetization/UserCabinetCard.vue2.js +22 -22
  71. package/dist/plugins/Monetization/UserCabinetCard.vue2.js.map +1 -1
  72. package/package.json +8 -8
@@ -1,42 +1,42 @@
1
- import { defineComponent as p, createElementBlock as i, openBlock as n, normalizeClass as s, createElementVNode as t, createTextVNode as o, createCommentVNode as d, toDisplayString as m, unref as a } from "vue";
2
- import { prettyBytes as r } from "../../lib/util/helpers/dist/prettyBytes.js";
3
- const v = /* @__PURE__ */ p({
1
+ import { defineComponent as u, createElementBlock as n, openBlock as m, normalizeClass as s, createElementVNode as l, createTextVNode as d, createCommentVNode as y, toDisplayString as a, unref as r } from "vue";
2
+ import { prettyBytes as o } from "../../lib/util/helpers/dist/prettyBytes.js";
3
+ const k = /* @__PURE__ */ u({
4
4
  __name: "Summary",
5
5
  props: {
6
6
  item: {}
7
7
  },
8
8
  emits: ["cancel"],
9
- setup(u, { emit: y }) {
10
- return (e, l) => (n(), i("div", {
11
- class: s(e.$style.summary)
9
+ setup(e, { emit: c }) {
10
+ return (t, i) => (m(), n("div", {
11
+ class: s(t.$style.summary)
12
12
  }, [
13
- t("div", {
14
- class: s(e.$style.name)
13
+ l("div", {
14
+ class: s(t.$style.name)
15
15
  }, [
16
- o(m(e.item.fileName), 1),
17
- d("", !0)
16
+ d(a(e.item.fileName), 1),
17
+ y("", !0)
18
18
  ], 2),
19
- e.item.status === "in-progress" ? (n(), i("div", {
19
+ e.item.status === "in-progress" ? (m(), n("div", {
20
20
  key: 0,
21
- class: s(e.$style.details)
21
+ class: s(t.$style.details)
22
22
  }, [
23
- t("span", null, m(a(r)(e.item.current, {})), 1),
24
- l[1] || (l[1] = t("span", null, "/", -1)),
25
- t("span", null, m(a(r)(e.item.size, {})), 1)
26
- ], 2)) : e.item.status === "completed" ? (n(), i("div", {
23
+ l("span", null, a(r(o)(e.item.current, {})), 1),
24
+ i[1] || (i[1] = l("span", null, "/", -1)),
25
+ l("span", null, a(r(o)(e.item.size, {})), 1)
26
+ ], 2)) : e.item.status === "completed" ? (m(), n("div", {
27
27
  key: 1,
28
- class: s(e.$style.details)
28
+ class: s(t.$style.details)
29
29
  }, [
30
- l[2] || (l[2] = o(" Done ")),
31
- t("span", null, m(a(r)(e.item.size, {})), 1)
32
- ], 2)) : (n(), i("div", {
30
+ i[2] || (i[2] = d(" Done ", -1)),
31
+ l("span", null, a(r(o)(e.item.size, {})), 1)
32
+ ], 2)) : (m(), n("div", {
33
33
  key: 2,
34
- class: s(e.$style.details)
34
+ class: s(t.$style.details)
35
35
  }, " Pending ", 2))
36
36
  ], 2));
37
37
  }
38
38
  });
39
39
  export {
40
- v as default
40
+ k as default
41
41
  };
42
42
  //# sourceMappingURL=Summary.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Summary.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Summary.vue2.js","sources":["../../../src/components/PlBtnExportArchive/Summary.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ExportItem } from './types';\nimport { prettyBytes } from '@milaboratories/helpers';\n\ndefineProps<{\n item: ExportItem;\n}>();\n\nconst emit = defineEmits<{\n (e: 'cancel'): void;\n}>();\n</script>\n\n<template>\n <div\n :class=\"$style.summary\"\n >\n <div :class=\"$style.name\">{{ item.fileName }}<span v-if=\"false\" @click.stop=\"emit('cancel')\">[TODO: Cancel]</span></div>\n <div v-if=\"item.status === 'in-progress'\" :class=\"$style.details\">\n <span>{{ prettyBytes(item.current, {}) }}</span>\n <span>/</span>\n <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else-if=\"item.status === 'completed'\" :class=\"$style.details\">\n Done <span>{{ prettyBytes(item.size, {}) }}</span>\n </div>\n <div v-else :class=\"$style.details\">\n Pending\n </div>\n </div>\n</template>\n\n<style module>\n.summary {\n display: flex;\n flex-direction: column;\n margin-bottom: 8px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n padding-bottom: 8px;\n --name-font-size: 14px;\n --details-font-size: 12px;\n}\n\n.name {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n font-size: var(--name-font-size);\n font-weight: 600;\n}\n.details {\n font-size: var(--details-font-size);\n font-weight: 400;\n color: rgba(255, 255, 255, 0.6);\n}\n</style>\n"],"names":["_createElementBlock","_normalizeClass","$style","_createElementVNode","_createTextVNode","_toDisplayString","__props","_unref","prettyBytes","_cache"],"mappings":";;;;;;;;;2BAcEA,EAeM,OAAA;AAAA,MAdH,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,IAAA;MAEtBC,EAAwH,OAAA;AAAA,QAAlH,OAAKF,EAAEC,EAAAA,OAAO,IAAI;AAAA,MAAA;QAAKE,EAAAC,EAAAC,EAAA,KAAK,QAAQ,GAAA,CAAA;AAAA;;MAC/BA,EAAA,KAAK,WAAM,sBAAtBN,EAIM,OAAA;AAAA;QAJqC,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA;QAC9DC,EAAgD,QAAA,MAAAE,EAAvCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,SAAO,EAAA,CAAA,GAAA,CAAA;AAAA,QACjCG,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAN,EAAc,cAAR,KAAC,EAAA;AAAA,QACPA,EAA6C,QAAA,MAAAE,EAApCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,MAAI,CAAA,CAAA,CAAA,GAAA,CAAA;AAAA,MAAA,SAEhBA,EAAA,KAAK,WAAM,oBAA3BN,EAEM,OAAA;AAAA;QAFwC,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA;0BAAE,UAC9D,EAAA;AAAA,QAAAC,EAA6C,QAAA,MAAAE,EAApCE,EAAAC,CAAA,EAAYF,EAAA,KAAK,MAAI,CAAA,CAAA,CAAA,GAAA,CAAA;AAAA,MAAA,eAErCN,EAEM,OAAA;AAAA;QAFO,OAAKC,EAAEC,EAAAA,OAAO,OAAO;AAAA,MAAA,GAAE,aAEpC,CAAA;AAAA,IAAA;;;"}
@@ -47,26 +47,26 @@ const E = { class: "d-flex flex-column gap-24" }, T = {
47
47
  "onUpdate:modelValue": e[2] || (e[2] = (a) => d.value = a),
48
48
  "close-on-outside-click": !1
49
49
  }, {
50
- title: u(() => e[3] || (e[3] = [
51
- m("Add Filter")
52
- ])),
50
+ title: u(() => [...e[3] || (e[3] = [
51
+ m("Add Filter", -1)
52
+ ])]),
53
53
  actions: u(() => [
54
54
  s(r(A), {
55
55
  disabled: !l.value,
56
56
  onClick: F
57
57
  }, {
58
- default: u(() => e[4] || (e[4] = [
59
- m("Add Filter")
60
- ])),
58
+ default: u(() => [...e[4] || (e[4] = [
59
+ m("Add Filter", -1)
60
+ ])]),
61
61
  _: 1
62
62
  }, 8, ["disabled"]),
63
63
  s(r(U), {
64
64
  "justify-center": !1,
65
65
  onClick: p
66
66
  }, {
67
- default: u(() => e[5] || (e[5] = [
68
- m("Cancel")
69
- ])),
67
+ default: u(() => [...e[5] || (e[5] = [
68
+ m("Cancel", -1)
69
+ ])]),
70
70
  _: 1
71
71
  })
72
72
  ]),
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableAddFilterV2.vue.js","sources":["../../../src/components/PlTableFilters/PlTableAddFilterV2.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n deepClone,\n} from '@milaboratories/helpers';\nimport {\n PlBtnGhost,\n PlBtnPrimary,\n PlDropdown,\n PlSlideModal,\n type ListOption,\n} from '@milaboratories/uikit';\nimport {\n computed,\n ref,\n watch,\n} from 'vue';\nimport {\n type PlDataTableFilterStateInternal,\n} from './types';\nimport {\n getFilterDefault,\n} from './filters_logic';\nimport PlTableFilterEntryV2 from './PlTableFilterEntryV2.vue';\n\nconst show = defineModel<boolean>({ required: true });\nconst props = defineProps<{\n filters: Readonly<PlDataTableFilterStateInternal[]>;\n setFilter(idx: number, filter: PlDataTableFilterStateInternal): void;\n}>();\n\nconst filterOptions = computed<ListOption<number>[]>(() => {\n return props.filters\n .map((s, i) => {\n return {\n value: i,\n text: s.label,\n };\n })\n .filter((o) => props.filters[o.value].filter === null);\n});\n\nconst newFilterIdx = ref<number>();\nconst newFilter = ref<PlDataTableFilterStateInternal | null>(null);\nwatch(\n () => newFilterIdx.value,\n (newFilterIdx) => {\n if (newFilterIdx === undefined) {\n newFilter.value = null;\n } else {\n const filterClone = deepClone(props.filters[newFilterIdx]);\n if (!filterClone.filter) {\n filterClone.filter = {\n value: filterClone.defaultFilter ?? getFilterDefault(filterClone.options[0].value),\n disabled: false,\n open: true,\n };\n }\n newFilter.value = filterClone;\n }\n },\n);\nconst discardFilter = () => {\n newFilterIdx.value = undefined;\n show.value = false;\n};\nconst applyFilter = () => {\n if (newFilterIdx.value !== undefined && newFilter.value) {\n props.setFilter(newFilterIdx.value, newFilter.value);\n }\n discardFilter();\n};\n</script>\n\n<template>\n <PlSlideModal v-model=\"show\" :close-on-outside-click=\"false\">\n <template #title>Add Filter</template>\n <div class=\"d-flex flex-column gap-24\">\n <PlDropdown\n v-model=\"newFilterIdx\"\n :options=\"filterOptions\"\n label=\"Column\"\n placeholder=\"Choose...\"\n />\n <div\n v-if=\"newFilterIdx === undefined\"\n class=\"text-subtitle-m\"\n style=\"color: var(--txt-mask)\"\n >\n Choose a column to view and adjust its options\n </div>\n <PlTableFilterEntryV2\n v-if=\"newFilter\"\n v-model=\"newFilter\"\n />\n </div>\n <template #actions>\n <PlBtnPrimary :disabled=\"!newFilter\" @click=\"applyFilter\">Add Filter</PlBtnPrimary>\n <PlBtnGhost :justify-center=\"false\" @click=\"discardFilter\">Cancel</PlBtnGhost>\n </template>\n </PlSlideModal>\n</template>\n"],"names":["show","_useModel","__props","props","filterOptions","computed","s","i","newFilterIdx","ref","newFilter","watch","filterClone","deepClone","getFilterDefault","discardFilter","applyFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwBA,UAAMA,IAAOC,EAAoBC,GAAA,YAAmB,GAC9CC,IAAQD,GAKRE,IAAgBC,EAA+B,MAC5CF,EAAM,QACV,IAAI,CAACG,GAAGC,OACA;AAAA,MACL,OAAOA;AAAA,MACP,MAAMD,EAAE;AAAA,IAAA,EAEX,EACA,OAAO,CAAC,MAAMH,EAAM,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,CACxD,GAEKK,IAAeC,EAAA,GACfC,IAAYD,EAA2C,IAAI;AACjE,IAAAE;AAAA,MACE,MAAMH,EAAa;AAAA,MACnB,CAACA,MAAiB;AAChB,YAAIA,MAAiB;AACnB,UAAAE,EAAU,QAAQ;AAAA,aACb;AACL,gBAAME,IAAcC,EAAUV,EAAM,QAAQK,CAAY,CAAC;AACzD,UAAKI,EAAY,WACfA,EAAY,SAAS;AAAA,YACnB,OAAOA,EAAY,iBAAiBE,EAAiBF,EAAY,QAAQ,CAAC,EAAE,KAAK;AAAA,YACjF,UAAU;AAAA,YACV,MAAM;AAAA,UAAA,IAGVF,EAAU,QAAQE;AAAA,QACpB;AAAA,MACF;AAAA,IAAA;AAEF,UAAMG,IAAgB,MAAM;AAC1B,MAAAP,EAAa,QAAQ,QACrBR,EAAK,QAAQ;AAAA,IACf,GACMgB,IAAc,MAAM;AACxB,MAAIR,EAAa,UAAU,UAAaE,EAAU,SAChDP,EAAM,UAAUK,EAAa,OAAOE,EAAU,KAAK,GAErDK,EAAA;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlTableAddFilterV2.vue.js","sources":["../../../src/components/PlTableFilters/PlTableAddFilterV2.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n deepClone,\n} from '@milaboratories/helpers';\nimport {\n PlBtnGhost,\n PlBtnPrimary,\n PlDropdown,\n PlSlideModal,\n type ListOption,\n} from '@milaboratories/uikit';\nimport {\n computed,\n ref,\n watch,\n} from 'vue';\nimport {\n type PlDataTableFilterStateInternal,\n} from './types';\nimport {\n getFilterDefault,\n} from './filters_logic';\nimport PlTableFilterEntryV2 from './PlTableFilterEntryV2.vue';\n\nconst show = defineModel<boolean>({ required: true });\nconst props = defineProps<{\n filters: Readonly<PlDataTableFilterStateInternal[]>;\n setFilter(idx: number, filter: PlDataTableFilterStateInternal): void;\n}>();\n\nconst filterOptions = computed<ListOption<number>[]>(() => {\n return props.filters\n .map((s, i) => {\n return {\n value: i,\n text: s.label,\n };\n })\n .filter((o) => props.filters[o.value].filter === null);\n});\n\nconst newFilterIdx = ref<number>();\nconst newFilter = ref<PlDataTableFilterStateInternal | null>(null);\nwatch(\n () => newFilterIdx.value,\n (newFilterIdx) => {\n if (newFilterIdx === undefined) {\n newFilter.value = null;\n } else {\n const filterClone = deepClone(props.filters[newFilterIdx]);\n if (!filterClone.filter) {\n filterClone.filter = {\n value: filterClone.defaultFilter ?? getFilterDefault(filterClone.options[0].value),\n disabled: false,\n open: true,\n };\n }\n newFilter.value = filterClone;\n }\n },\n);\nconst discardFilter = () => {\n newFilterIdx.value = undefined;\n show.value = false;\n};\nconst applyFilter = () => {\n if (newFilterIdx.value !== undefined && newFilter.value) {\n props.setFilter(newFilterIdx.value, newFilter.value);\n }\n discardFilter();\n};\n</script>\n\n<template>\n <PlSlideModal v-model=\"show\" :close-on-outside-click=\"false\">\n <template #title>Add Filter</template>\n <div class=\"d-flex flex-column gap-24\">\n <PlDropdown\n v-model=\"newFilterIdx\"\n :options=\"filterOptions\"\n label=\"Column\"\n placeholder=\"Choose...\"\n />\n <div\n v-if=\"newFilterIdx === undefined\"\n class=\"text-subtitle-m\"\n style=\"color: var(--txt-mask)\"\n >\n Choose a column to view and adjust its options\n </div>\n <PlTableFilterEntryV2\n v-if=\"newFilter\"\n v-model=\"newFilter\"\n />\n </div>\n <template #actions>\n <PlBtnPrimary :disabled=\"!newFilter\" @click=\"applyFilter\">Add Filter</PlBtnPrimary>\n <PlBtnGhost :justify-center=\"false\" @click=\"discardFilter\">Cancel</PlBtnGhost>\n </template>\n </PlSlideModal>\n</template>\n"],"names":["show","_useModel","__props","props","filterOptions","computed","s","i","newFilterIdx","ref","newFilter","watch","filterClone","deepClone","getFilterDefault","discardFilter","applyFilter","_createBlock","_unref","PlSlideModal","$event","_cache","_createVNode","PlBtnPrimary","PlBtnGhost","_createElementVNode","_hoisted_1","PlDropdown","_createElementBlock","_hoisted_2","PlTableFilterEntryV2"],"mappings":";;;;;;;;;;;;;;;;;;;;AAwBA,UAAMA,IAAOC,EAAoBC,GAAA,YAAmB,GAC9CC,IAAQD,GAKRE,IAAgBC,EAA+B,MAC5CF,EAAM,QACV,IAAI,CAACG,GAAGC,OACA;AAAA,MACL,OAAOA;AAAA,MACP,MAAMD,EAAE;AAAA,IAAA,EAEX,EACA,OAAO,CAAC,MAAMH,EAAM,QAAQ,EAAE,KAAK,EAAE,WAAW,IAAI,CACxD,GAEKK,IAAeC,EAAA,GACfC,IAAYD,EAA2C,IAAI;AACjE,IAAAE;AAAA,MACE,MAAMH,EAAa;AAAA,MACnB,CAACA,MAAiB;AAChB,YAAIA,MAAiB;AACnB,UAAAE,EAAU,QAAQ;AAAA,aACb;AACL,gBAAME,IAAcC,EAAUV,EAAM,QAAQK,CAAY,CAAC;AACzD,UAAKI,EAAY,WACfA,EAAY,SAAS;AAAA,YACnB,OAAOA,EAAY,iBAAiBE,EAAiBF,EAAY,QAAQ,CAAC,EAAE,KAAK;AAAA,YACjF,UAAU;AAAA,YACV,MAAM;AAAA,UAAA,IAGVF,EAAU,QAAQE;AAAA,QACpB;AAAA,MACF;AAAA,IAAA;AAEF,UAAMG,IAAgB,MAAM;AAC1B,MAAAP,EAAa,QAAQ,QACrBR,EAAK,QAAQ;AAAA,IACf,GACMgB,IAAc,MAAM;AACxB,MAAIR,EAAa,UAAU,UAAaE,EAAU,SAChDP,EAAM,UAAUK,EAAa,OAAOE,EAAU,KAAK,GAErDK,EAAA;AAAA,IACF;2BAIEE,EAyBeC,EAAAC,CAAA,GAAA;AAAA,kBAzBQnB,EAAA;AAAA,oDAAAA,EAAI,QAAAoB;AAAA,MAAG,0BAAwB;AAAA,IAAA;MACzC,SAAM,MAAU,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,UAAV,cAAU,EAAA;AAAA,MAAA;MAoBhB,WACT,MAAmF;AAAA,QAAnFC,EAAmFJ,EAAAK,CAAA,GAAA;AAAA,UAApE,WAAWb,EAAA;AAAA,UAAY,SAAOM;AAAA,QAAA;qBAAa,MAAU,CAAA,GAAAK,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAAV,cAAU,EAAA;AAAA,UAAA;;;QACpEC,EAA8EJ,EAAAM,CAAA,GAAA;AAAA,UAAjE,kBAAgB;AAAA,UAAQ,SAAOT;AAAA,QAAA;qBAAe,MAAM,CAAA,GAAAM,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,cAAN,UAAM,EAAA;AAAA,UAAA;;;;iBArBnE,MAkBM;AAAA,QAlBNI,EAkBM,OAlBNC,GAkBM;AAAA,UAjBJJ,EAKEJ,EAAAS,CAAA,GAAA;AAAA,wBAJSnB,EAAA;AAAA,0DAAAA,EAAY,QAAAY;AAAA,YACpB,SAAShB,EAAA;AAAA,YACV,OAAM;AAAA,YACN,aAAY;AAAA,UAAA;UAGNI,EAAA,UAAiB,eADzBoB,EAMM,OANNC,GAIC,kDAED;UAEQnB,EAAA,cADRO,EAGEa,GAAA;AAAA;wBADSpB,EAAA;AAAA,0DAAAA,EAAS,QAAAU;AAAA,UAAA;;;;;;;"}
@@ -127,9 +127,9 @@ const O = {
127
127
  icon: "reverse",
128
128
  onClick: a[13] || (a[13] = (l) => e.value.filter.value = e.value.defaultFilter)
129
129
  }, {
130
- default: U(() => a[14] || (a[14] = [
131
- k(" Revert Settings to Default ")
132
- ])),
130
+ default: U(() => [...a[14] || (a[14] = [
131
+ k(" Revert Settings to Default ", -1)
132
+ ])]),
133
133
  _: 1
134
134
  }, 8, ["disabled"])
135
135
  ])) : d("", !0)
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFilterEntryV2.vue.js","sources":["../../../src/components/PlTableFilters/PlTableFilterEntryV2.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlDropdown,\n PlTextField,\n PlToggleSwitch,\n Slider,\n PlBtnGhost,\n} from '@milaboratories/uikit';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n changeFilter,\n parseNumber,\n parseString,\n parseRegex,\n makeWildcardOptions,\n isFilterDiscrete,\n getFilterDefault,\n} from './filters_logic';\nimport type { PlDataTableFilterStateInternal } from './types';\nimport { watchEffect } from 'vue';\n\nconst entry = defineModel<PlDataTableFilterStateInternal>({ required: true });\nwatchEffect(() => {\n if (!entry.value.filter) {\n entry.value.filter = {\n value: getFilterDefault(entry.value.options[0].value),\n disabled: false,\n open: true,\n };\n }\n});\n</script>\n\n<template>\n <div v-if=\"entry.filter\" class=\"d-flex flex-column gap-24\">\n <PlDropdown\n :model-value=\"entry.filter.value.type\"\n :options=\"entry.options\"\n :disabled=\"entry.filter.disabled\"\n label=\"Predicate\"\n @update:model-value=\"(type) => (entry.filter!.value = changeFilter(entry.filter!.value, type!, entry.discreteOptions))\"\n />\n\n <template v-if=\"entry.discreteOptions.length > 0 && isFilterDiscrete(entry.filter.value)\">\n <PlDropdown\n v-model=\"entry.filter.value.reference\"\n :options=\"entry.discreteOptions\"\n />\n </template>\n <template v-else>\n <template\n v-if=\"\n entry.filter.value.type === 'number_equals' ||\n entry.filter.value.type === 'number_notEquals' ||\n entry.filter.value.type === 'number_lessThan' ||\n entry.filter.value.type === 'number_lessThanOrEqualTo' ||\n entry.filter.value.type === 'number_greaterThan' ||\n entry.filter.value.type === 'number_greaterThanOrEqualTo'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'number_between'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.lowerBound\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Lower bound\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.includeLowerBound\"\n :disabled=\"entry.filter.disabled\"\n label=\"Include lower bound\"\n />\n <PlTextField\n v-model=\"entry.filter.value.upperBound\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Upper bound\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.includeUpperBound\"\n :disabled=\"entry.filter.disabled\"\n label=\"Include upper bound\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_equals' ||\n entry.filter.value.type === 'string_notEquals' ||\n entry.filter.value.type === 'string_contains' ||\n entry.filter.value.type === 'string_doesNotContain'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): string => parseString(entry.spec, value)\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_matches' ||\n entry.filter.value.type === 'string_doesNotMatch'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"parseRegex\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_containsFuzzyMatch'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): string => parseString(entry.spec, value)\"\n label=\"Reference value\"\n />\n <Slider\n v-model=\"entry.filter.value.maxEdits\"\n :max=\"5\"\n :disabled=\"entry.filter.disabled\"\n breakpoints label=\"Maximum nuber of substitutions and indels\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.substitutionsOnly\"\n :disabled=\"entry.filter.disabled\"\n label=\"Substitutions only\"\n />\n <PlDropdown\n v-model=\"entry.filter.value.wildcard\"\n :disabled=\"entry.filter.disabled\"\n :options=\"makeWildcardOptions(entry.spec, entry.filter.value.reference)\"\n clearable\n label=\"Wildcard symbol\"\n />\n </template>\n </template>\n\n <div v-if=\"entry.defaultFilter\" class=\"d-flex justify-center\">\n <PlBtnGhost\n :disabled=\"entry.filter.disabled || isJsonEqual(entry.filter.value, entry.defaultFilter)\"\n icon=\"reverse\"\n @click=\"entry.filter.value = entry.defaultFilter\"\n >\n Revert Settings to Default\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["entry","_useModel","__props","watchEffect","getFilterDefault"],"mappings":";;;;;;;;;;;;;;;;;;AAqBA,UAAMA,IAAQC,EAA2CC,GAAA,YAAmB;AAC5E,WAAAC,EAAY,MAAM;AAChB,MAAKH,EAAM,MAAM,WACfA,EAAM,MAAM,SAAS;AAAA,QACnB,OAAOI,EAAiBJ,EAAM,MAAM,QAAQ,CAAC,EAAE,KAAK;AAAA,QACpD,UAAU;AAAA,QACV,MAAM;AAAA,MAAA;AAAA,IAGZ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlTableFilterEntryV2.vue.js","sources":["../../../src/components/PlTableFilters/PlTableFilterEntryV2.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n PlDropdown,\n PlTextField,\n PlToggleSwitch,\n Slider,\n PlBtnGhost,\n} from '@milaboratories/uikit';\nimport { isJsonEqual } from '@milaboratories/helpers';\nimport {\n changeFilter,\n parseNumber,\n parseString,\n parseRegex,\n makeWildcardOptions,\n isFilterDiscrete,\n getFilterDefault,\n} from './filters_logic';\nimport type { PlDataTableFilterStateInternal } from './types';\nimport { watchEffect } from 'vue';\n\nconst entry = defineModel<PlDataTableFilterStateInternal>({ required: true });\nwatchEffect(() => {\n if (!entry.value.filter) {\n entry.value.filter = {\n value: getFilterDefault(entry.value.options[0].value),\n disabled: false,\n open: true,\n };\n }\n});\n</script>\n\n<template>\n <div v-if=\"entry.filter\" class=\"d-flex flex-column gap-24\">\n <PlDropdown\n :model-value=\"entry.filter.value.type\"\n :options=\"entry.options\"\n :disabled=\"entry.filter.disabled\"\n label=\"Predicate\"\n @update:model-value=\"(type) => (entry.filter!.value = changeFilter(entry.filter!.value, type!, entry.discreteOptions))\"\n />\n\n <template v-if=\"entry.discreteOptions.length > 0 && isFilterDiscrete(entry.filter.value)\">\n <PlDropdown\n v-model=\"entry.filter.value.reference\"\n :options=\"entry.discreteOptions\"\n />\n </template>\n <template v-else>\n <template\n v-if=\"\n entry.filter.value.type === 'number_equals' ||\n entry.filter.value.type === 'number_notEquals' ||\n entry.filter.value.type === 'number_lessThan' ||\n entry.filter.value.type === 'number_lessThanOrEqualTo' ||\n entry.filter.value.type === 'number_greaterThan' ||\n entry.filter.value.type === 'number_greaterThanOrEqualTo'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'number_between'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.lowerBound\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Lower bound\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.includeLowerBound\"\n :disabled=\"entry.filter.disabled\"\n label=\"Include lower bound\"\n />\n <PlTextField\n v-model=\"entry.filter.value.upperBound\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): number => parseNumber(entry.spec, value)\"\n label=\"Upper bound\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.includeUpperBound\"\n :disabled=\"entry.filter.disabled\"\n label=\"Include upper bound\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_equals' ||\n entry.filter.value.type === 'string_notEquals' ||\n entry.filter.value.type === 'string_contains' ||\n entry.filter.value.type === 'string_doesNotContain'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): string => parseString(entry.spec, value)\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_matches' ||\n entry.filter.value.type === 'string_doesNotMatch'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"parseRegex\"\n label=\"Reference value\"\n />\n </template>\n\n <template\n v-if=\"\n entry.filter.value.type === 'string_containsFuzzyMatch'\n \"\n >\n <PlTextField\n v-model=\"entry.filter.value.reference\"\n :disabled=\"entry.filter.disabled\"\n :parse=\"(value: string): string => parseString(entry.spec, value)\"\n label=\"Reference value\"\n />\n <Slider\n v-model=\"entry.filter.value.maxEdits\"\n :max=\"5\"\n :disabled=\"entry.filter.disabled\"\n breakpoints label=\"Maximum nuber of substitutions and indels\"\n />\n <PlToggleSwitch\n v-model=\"entry.filter.value.substitutionsOnly\"\n :disabled=\"entry.filter.disabled\"\n label=\"Substitutions only\"\n />\n <PlDropdown\n v-model=\"entry.filter.value.wildcard\"\n :disabled=\"entry.filter.disabled\"\n :options=\"makeWildcardOptions(entry.spec, entry.filter.value.reference)\"\n clearable\n label=\"Wildcard symbol\"\n />\n </template>\n </template>\n\n <div v-if=\"entry.defaultFilter\" class=\"d-flex justify-center\">\n <PlBtnGhost\n :disabled=\"entry.filter.disabled || isJsonEqual(entry.filter.value, entry.defaultFilter)\"\n icon=\"reverse\"\n @click=\"entry.filter.value = entry.defaultFilter\"\n >\n Revert Settings to Default\n </PlBtnGhost>\n </div>\n </div>\n</template>\n"],"names":["entry","_useModel","__props","watchEffect","getFilterDefault","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","PlDropdown","_cache","type","changeFilter","isFilterDiscrete","_createBlock","$event","_Fragment","PlTextField","value","parseNumber","PlToggleSwitch","parseString","parseRegex","Slider","makeWildcardOptions","_hoisted_2","PlBtnGhost","isJsonEqual"],"mappings":"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"}
@@ -55,9 +55,9 @@ const le = ["disabled"], te = { key: 1 }, ue = /* @__PURE__ */ D({
55
55
  icon: N.value ? "filter-on" : "filter",
56
56
  onClick: t[0] || (t[0] = $((l) => c.value = !0, ["stop"]))
57
57
  }, {
58
- default: d(() => t[5] || (t[5] = [
59
- p(" Filters ")
60
- ])),
58
+ default: d(() => [...t[5] || (t[5] = [
59
+ p(" Filters ", -1)
60
+ ])]),
61
61
  _: 1
62
62
  }, 8, ["icon"])
63
63
  ], 8, ["to"])) : V("", !0),
@@ -66,9 +66,9 @@ const le = ["disabled"], te = { key: 1 }, ue = /* @__PURE__ */ D({
66
66
  "onUpdate:modelValue": t[3] || (t[3] = (l) => c.value = l),
67
67
  "close-on-outside-click": !1
68
68
  }, {
69
- title: d(() => t[6] || (t[6] = [
70
- p("Manage Filters")
71
- ])),
69
+ title: d(() => [...t[6] || (t[6] = [
70
+ p("Manage Filters", -1)
71
+ ])]),
72
72
  default: d(() => [
73
73
  k("div", {
74
74
  ref_key: "filterManager",
@@ -127,9 +127,9 @@ const le = ["disabled"], te = { key: 1 }, ue = /* @__PURE__ */ D({
127
127
  disabled: !x.value,
128
128
  onClick: $(z, ["stop"])
129
129
  }, {
130
- default: d(() => t[7] || (t[7] = [
131
- p(" Reset to defaults ")
132
- ])),
130
+ default: d(() => [...t[7] || (t[7] = [
131
+ p(" Reset to defaults ", -1)
132
+ ])]),
133
133
  _: 1
134
134
  }, 8, ["disabled"])
135
135
  ], 2)) : V("", !0),
@@ -1 +1 @@
1
- {"version":3,"file":"PlTableFiltersV2.vue2.js","sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n type PlDataTableFilterState,\n canonicalizeJson,\n type PTableColumnId,\n} from '@platforma-sdk/model';\nimport type {\n PlDataTableFiltersSettings,\n} from './types';\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n toRefs,\n watch,\n} from 'vue';\nimport {\n PlBtnGhost,\n PlSlideModal,\n PlBtnSecondary,\n PlMaskIcon16,\n PlElementList,\n usePlBlockPageTitleTeleportTarget,\n} from '@milaboratories/uikit';\nimport { useFilters } from './filters-state';\nimport PlTableAddFilterV2 from './PlTableAddFilterV2.vue';\nimport PlTableFilterEntryV2 from './PlTableFilterEntryV2.vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\nconst state = defineModel<PlDataTableFilterState[]>({\n default: [],\n});\nconst props = defineProps<{\n settings: Readonly<PlDataTableFiltersSettings>;\n}>();\nconst { settings } = toRefs(props);\n\nconst filters = useFilters(settings, state);\n\nconst filtersOn = computed<boolean>(() => filters.value.some((s) => s.filter && !s.filter.disabled));\n\nconst mounted = ref(false);\nonMounted(() => {\n mounted.value = true;\n});\nconst teleportTarget = usePlBlockPageTitleTeleportTarget('PlTableFiltersV2');\n\nconst showManager = ref(false);\n\nconst scrollIsActive = ref(false);\nconst filterManager = ref<HTMLElement>();\nlet observer: ResizeObserver;\nonMounted(() => {\n observer = new ResizeObserver(() => {\n const parent = filterManager.value?.parentElement;\n if (!parent) return;\n scrollIsActive.value = parent.scrollHeight > parent.clientHeight || parent.scrollWidth > parent.clientWidth;\n });\n if (filterManager.value && filterManager.value.parentElement) {\n observer.observe(filterManager.value!.parentElement);\n }\n});\n\nwatch(filterManager, (newElement, oldElement) => {\n if (oldElement?.parentElement) {\n observer.unobserve(oldElement.parentElement);\n }\n if (newElement?.parentElement) {\n observer.observe(newElement.parentElement);\n }\n});\n\nonBeforeUnmount(() => {\n if (observer !== undefined) {\n observer.disconnect();\n }\n});\n\nconst canAddFilter = computed<boolean>(() => filters.value.some((s) => !s.filter));\nconst showAddFilter = ref(false);\n\nconst canResetToDefaults = computed<boolean>(() => {\n return filters.value\n .some((s) => (!s.defaultFilter && s.filter) || (s.defaultFilter\n && (s.filter?.disabled === true || !isJsonEqual(s.filter?.value, s.defaultFilter))));\n});\nconst resetToDefaults = () => {\n filters.value.forEach((s) => {\n if (s.defaultFilter) {\n s.filter = {\n value: s.defaultFilter,\n disabled: false,\n open: false,\n };\n } else {\n s.filter = null;\n }\n });\n};\n\nconst items = computed(() => filters.value.filter((s) => s.filter !== null));\n</script>\n\n<template>\n <Teleport v-if=\"mounted && teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost :icon=\"filtersOn ? 'filter-on' : 'filter'\" @click.stop=\"showManager = true\">\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div ref=\"filterManager\" :class=\"$style['filter-manager']\">\n <PlElementList\n v-model:items=\"items\"\n :on-expand=\"(item) => {\n if (item.filter) {\n item.filter.open = !item.filter.open;\n }\n }\"\n :is-expanded=\"(item) => item.filter?.open ?? false\"\n :on-toggle=\"(item) => {\n if (item.filter) {\n item.filter.disabled = !item.filter.disabled;\n }\n }\"\n :is-toggled=\"(item) => item.filter?.disabled ?? false\"\n :on-remove=\"(item) => {\n if (item.filter) {\n item.filter = null;\n }\n }\"\n :get-item-key=\"(item) => canonicalizeJson<PTableColumnId>(item.id)\"\n disable-dragging\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n <template #item-content=\"{ index }\">\n <PlTableFilterEntryV2 v-model=\"filters.value[index]\" />\n </template>\n </PlElementList>\n\n <div\n v-if=\"filters.value.length\"\n :class=\"$style['add-action-wrapper']\"\n >\n <button\n :disabled=\"!canAddFilter\"\n :class=\"$style['add-btn']\"\n @click=\"showAddFilter = true\"\n >\n <PlMaskIcon16 name=\"add\" />\n <div :class=\"$style['add-btn-title']\">Add Filter</div>\n </button>\n\n <PlBtnSecondary\n :disabled=\"!canResetToDefaults\"\n @click.stop=\"resetToDefaults\"\n >\n Reset to defaults\n </PlBtnSecondary>\n </div>\n\n <div v-if=\"!filters.value.length\">No filters applicable</div>\n </div>\n </PlSlideModal>\n\n <PlTableAddFilterV2\n v-model=\"showAddFilter\"\n :filters=\"filters.value\"\n :set-filter=\"(idx, filter) => filters.value[idx] = filter\"\n />\n</template>\n\n<style lang=\"scss\" module>\n.filter-manager {\n --expand-icon-rotation: rotate(0deg);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.add-action-wrapper {\n position: sticky;\n bottom: -16px;\n background-color: var(--bg-elevated-01);\n transition: all .15s ease-in-out;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.add-btn {\n height: 40px;\n background-color: var(--bg-elevated-01);\n display: flex;\n align-items: center;\n gap: 8px;\n padding-left: 12px;\n padding-right: 12px;\n border-radius: 6px;\n border: 1px dashed var(--border-color-div-grey);\n line-height: 0;\n cursor: pointer;\n text-align: left;\n}\n\n.add-btn:disabled {\n --icon-color: var(--dis-01);\n cursor: auto;\n}\n\n.add-btn:not([disabled]):hover {\n border-radius: 6px;\n border: 1px dashed var(--border-color-focus, #49CC49);\n background: rgba(99, 224, 36, 0.12);\n}\n\n.add-btn-title {\n flex-grow: 1;\n font-weight: 600;\n}\n\n.expand-icon {\n transition: all .15s ease-in-out;\n transform: var(--expand-icon-rotation);\n line-height: 0;\n cursor: pointer;\n}\n\n.toggle,\n.delete {\n line-height: 0;\n cursor: pointer;\n display: none;\n}\n\n.toggle .mask-24,\n.delete .mask-24 {\n --icon-color: var(--ic-02);\n}\n\n.toggle:hover .mask-24 {\n --icon-color: var(--ic-01);\n}\n\n.delete:hover .mask-24 {\n --icon-color: var(--ic-01);\n}\n\n.filter:hover .toggle,\n.filter:hover .delete {\n display: block;\n}\n\n.filter {\n border-radius: 6px;\n border: 1px solid var(--border-color-div-grey);\n background-color: var(--bg-base-light);\n transition: background-color .15s ease-in-out;\n overflow: auto;\n}\n\n.filter.disabled .expand-icon,\n.filter.disabled .title {\n opacity: 0.3;\n}\n\n.filter:hover {\n background-color: var(--bg-elevated-01);\n}\n\n.filter:global(.open) {\n background-color: var(--bg-elevated-01);\n --expand-icon-rotation: rotate(90deg);\n}\n</style>\n"],"names":["state","_useModel","props","__props","settings","toRefs","filters","useFilters","filtersOn","computed","s","mounted","ref","onMounted","teleportTarget","usePlBlockPageTitleTeleportTarget","showManager","scrollIsActive","filterManager","observer","parent","_a","watch","newElement","oldElement","onBeforeUnmount","canAddFilter","showAddFilter","canResetToDefaults","isJsonEqual","_b","resetToDefaults","items"],"mappings":";;;;;;;;;;;;;;;;;;;AA8BA,UAAMA,IAAQC,iBAEb,GACKC,IAAQC,GAGR,EAAE,UAAAC,EAAA,IAAaC,EAAOH,CAAK,GAE3BI,IAAUC,EAAWH,GAAUJ,CAAK,GAEpCQ,IAAYC,EAAkB,MAAMH,EAAQ,MAAM,KAAK,CAACI,MAAMA,EAAE,UAAU,CAACA,EAAE,OAAO,QAAQ,CAAC,GAE7FC,IAAUC,EAAI,EAAK;AACzB,IAAAC,EAAU,MAAM;AACd,MAAAF,EAAQ,QAAQ;AAAA,IAClB,CAAC;AACD,UAAMG,IAAiBC,EAAkC,kBAAkB,GAErEC,IAAcJ,EAAI,EAAK,GAEvBK,IAAiBL,EAAI,EAAK,GAC1BM,IAAgBN,EAAA;AACtB,QAAIO;AACJ,IAAAN,EAAU,MAAM;AACd,MAAAM,IAAW,IAAI,eAAe,MAAM;;AAClC,cAAMC,KAASC,IAAAH,EAAc,UAAd,gBAAAG,EAAqB;AACpC,QAAKD,MACLH,EAAe,QAAQG,EAAO,eAAeA,EAAO,gBAAgBA,EAAO,cAAcA,EAAO;AAAA,MAClG,CAAC,GACGF,EAAc,SAASA,EAAc,MAAM,iBAC7CC,EAAS,QAAQD,EAAc,MAAO,aAAa;AAAA,IAEvD,CAAC,GAEDI,EAAMJ,GAAe,CAACK,GAAYC,MAAe;AAC/C,MAAIA,KAAA,QAAAA,EAAY,iBACdL,EAAS,UAAUK,EAAW,aAAa,GAEzCD,KAAA,QAAAA,EAAY,iBACdJ,EAAS,QAAQI,EAAW,aAAa;AAAA,IAE7C,CAAC,GAEDE,EAAgB,MAAM;AACpB,MAAIN,MAAa,UACfA,EAAS,WAAA;AAAA,IAEb,CAAC;AAED,UAAMO,IAAejB,EAAkB,MAAMH,EAAQ,MAAM,KAAK,CAACI,MAAM,CAACA,EAAE,MAAM,CAAC,GAC3EiB,IAAgBf,EAAI,EAAK,GAEzBgB,IAAqBnB,EAAkB,MACpCH,EAAQ,MACZ,KAAK,CAACI;;AAAO,cAACA,EAAE,iBAAiBA,EAAE,UAAYA,EAAE,oBAC5CW,IAAAX,EAAE,WAAF,gBAAAW,EAAU,cAAa,MAAQ,CAACQ,IAAYC,IAAApB,EAAE,WAAF,gBAAAoB,EAAU,OAAOpB,EAAE,aAAa;AAAA,KAAG,CACxF,GACKqB,IAAkB,MAAM;AAC5B,MAAAzB,EAAQ,MAAM,QAAQ,CAACI,MAAM;AAC3B,QAAIA,EAAE,gBACJA,EAAE,SAAS;AAAA,UACT,OAAOA,EAAE;AAAA,UACT,UAAU;AAAA,UACV,MAAM;AAAA,QAAA,IAGRA,EAAE,SAAS;AAAA,MAEf,CAAC;AAAA,IACH,GAEMsB,IAAQvB,EAAS,MAAMH,EAAQ,MAAM,OAAO,CAACI,MAAMA,EAAE,WAAW,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlTableFiltersV2.vue2.js","sources":["../../../src/components/PlTableFilters/PlTableFiltersV2.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport {\n type PlDataTableFilterState,\n canonicalizeJson,\n type PTableColumnId,\n} from '@platforma-sdk/model';\nimport type {\n PlDataTableFiltersSettings,\n} from './types';\nimport {\n computed,\n onBeforeUnmount,\n onMounted,\n ref,\n toRefs,\n watch,\n} from 'vue';\nimport {\n PlBtnGhost,\n PlSlideModal,\n PlBtnSecondary,\n PlMaskIcon16,\n PlElementList,\n usePlBlockPageTitleTeleportTarget,\n} from '@milaboratories/uikit';\nimport { useFilters } from './filters-state';\nimport PlTableAddFilterV2 from './PlTableAddFilterV2.vue';\nimport PlTableFilterEntryV2 from './PlTableFilterEntryV2.vue';\nimport { isJsonEqual } from '@milaboratories/helpers';\n\nconst state = defineModel<PlDataTableFilterState[]>({\n default: [],\n});\nconst props = defineProps<{\n settings: Readonly<PlDataTableFiltersSettings>;\n}>();\nconst { settings } = toRefs(props);\n\nconst filters = useFilters(settings, state);\n\nconst filtersOn = computed<boolean>(() => filters.value.some((s) => s.filter && !s.filter.disabled));\n\nconst mounted = ref(false);\nonMounted(() => {\n mounted.value = true;\n});\nconst teleportTarget = usePlBlockPageTitleTeleportTarget('PlTableFiltersV2');\n\nconst showManager = ref(false);\n\nconst scrollIsActive = ref(false);\nconst filterManager = ref<HTMLElement>();\nlet observer: ResizeObserver;\nonMounted(() => {\n observer = new ResizeObserver(() => {\n const parent = filterManager.value?.parentElement;\n if (!parent) return;\n scrollIsActive.value = parent.scrollHeight > parent.clientHeight || parent.scrollWidth > parent.clientWidth;\n });\n if (filterManager.value && filterManager.value.parentElement) {\n observer.observe(filterManager.value!.parentElement);\n }\n});\n\nwatch(filterManager, (newElement, oldElement) => {\n if (oldElement?.parentElement) {\n observer.unobserve(oldElement.parentElement);\n }\n if (newElement?.parentElement) {\n observer.observe(newElement.parentElement);\n }\n});\n\nonBeforeUnmount(() => {\n if (observer !== undefined) {\n observer.disconnect();\n }\n});\n\nconst canAddFilter = computed<boolean>(() => filters.value.some((s) => !s.filter));\nconst showAddFilter = ref(false);\n\nconst canResetToDefaults = computed<boolean>(() => {\n return filters.value\n .some((s) => (!s.defaultFilter && s.filter) || (s.defaultFilter\n && (s.filter?.disabled === true || !isJsonEqual(s.filter?.value, s.defaultFilter))));\n});\nconst resetToDefaults = () => {\n filters.value.forEach((s) => {\n if (s.defaultFilter) {\n s.filter = {\n value: s.defaultFilter,\n disabled: false,\n open: false,\n };\n } else {\n s.filter = null;\n }\n });\n};\n\nconst items = computed(() => filters.value.filter((s) => s.filter !== null));\n</script>\n\n<template>\n <Teleport v-if=\"mounted && teleportTarget\" :to=\"teleportTarget\">\n <PlBtnGhost :icon=\"filtersOn ? 'filter-on' : 'filter'\" @click.stop=\"showManager = true\">\n Filters\n </PlBtnGhost>\n </Teleport>\n\n <PlSlideModal v-model=\"showManager\" :close-on-outside-click=\"false\">\n <template #title>Manage Filters</template>\n\n <div ref=\"filterManager\" :class=\"$style['filter-manager']\">\n <PlElementList\n v-model:items=\"items\"\n :on-expand=\"(item) => {\n if (item.filter) {\n item.filter.open = !item.filter.open;\n }\n }\"\n :is-expanded=\"(item) => item.filter?.open ?? false\"\n :on-toggle=\"(item) => {\n if (item.filter) {\n item.filter.disabled = !item.filter.disabled;\n }\n }\"\n :is-toggled=\"(item) => item.filter?.disabled ?? false\"\n :on-remove=\"(item) => {\n if (item.filter) {\n item.filter = null;\n }\n }\"\n :get-item-key=\"(item) => canonicalizeJson<PTableColumnId>(item.id)\"\n disable-dragging\n >\n <template #item-title=\"{ item }\">\n {{ item.label }}\n </template>\n <template #item-content=\"{ index }\">\n <PlTableFilterEntryV2 v-model=\"filters.value[index]\" />\n </template>\n </PlElementList>\n\n <div\n v-if=\"filters.value.length\"\n :class=\"$style['add-action-wrapper']\"\n >\n <button\n :disabled=\"!canAddFilter\"\n :class=\"$style['add-btn']\"\n @click=\"showAddFilter = true\"\n >\n <PlMaskIcon16 name=\"add\" />\n <div :class=\"$style['add-btn-title']\">Add Filter</div>\n </button>\n\n <PlBtnSecondary\n :disabled=\"!canResetToDefaults\"\n @click.stop=\"resetToDefaults\"\n >\n Reset to defaults\n </PlBtnSecondary>\n </div>\n\n <div v-if=\"!filters.value.length\">No filters applicable</div>\n </div>\n </PlSlideModal>\n\n <PlTableAddFilterV2\n v-model=\"showAddFilter\"\n :filters=\"filters.value\"\n :set-filter=\"(idx, filter) => filters.value[idx] = filter\"\n />\n</template>\n\n<style lang=\"scss\" module>\n.filter-manager {\n --expand-icon-rotation: rotate(0deg);\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.add-action-wrapper {\n position: sticky;\n bottom: -16px;\n background-color: var(--bg-elevated-01);\n transition: all .15s ease-in-out;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.add-btn {\n height: 40px;\n background-color: var(--bg-elevated-01);\n display: flex;\n align-items: center;\n gap: 8px;\n padding-left: 12px;\n padding-right: 12px;\n border-radius: 6px;\n border: 1px dashed var(--border-color-div-grey);\n line-height: 0;\n cursor: pointer;\n text-align: left;\n}\n\n.add-btn:disabled {\n --icon-color: var(--dis-01);\n cursor: auto;\n}\n\n.add-btn:not([disabled]):hover {\n border-radius: 6px;\n border: 1px dashed var(--border-color-focus, #49CC49);\n background: rgba(99, 224, 36, 0.12);\n}\n\n.add-btn-title {\n flex-grow: 1;\n font-weight: 600;\n}\n\n.expand-icon {\n transition: all .15s ease-in-out;\n transform: var(--expand-icon-rotation);\n line-height: 0;\n cursor: pointer;\n}\n\n.toggle,\n.delete {\n line-height: 0;\n cursor: pointer;\n display: none;\n}\n\n.toggle .mask-24,\n.delete .mask-24 {\n --icon-color: var(--ic-02);\n}\n\n.toggle:hover .mask-24 {\n --icon-color: var(--ic-01);\n}\n\n.delete:hover .mask-24 {\n --icon-color: var(--ic-01);\n}\n\n.filter:hover .toggle,\n.filter:hover .delete {\n display: block;\n}\n\n.filter {\n border-radius: 6px;\n border: 1px solid var(--border-color-div-grey);\n background-color: var(--bg-base-light);\n transition: background-color .15s ease-in-out;\n overflow: auto;\n}\n\n.filter.disabled .expand-icon,\n.filter.disabled .title {\n opacity: 0.3;\n}\n\n.filter:hover {\n background-color: var(--bg-elevated-01);\n}\n\n.filter:global(.open) {\n background-color: var(--bg-elevated-01);\n --expand-icon-rotation: rotate(90deg);\n}\n</style>\n"],"names":["state","_useModel","props","__props","settings","toRefs","filters","useFilters","filtersOn","computed","s","mounted","ref","onMounted","teleportTarget","usePlBlockPageTitleTeleportTarget","showManager","scrollIsActive","filterManager","observer","parent","_a","watch","newElement","oldElement","onBeforeUnmount","canAddFilter","showAddFilter","canResetToDefaults","isJsonEqual","_b","resetToDefaults","items","_unref","_createBlock","_Teleport","_createVNode","PlBtnGhost","_cache","PlSlideModal","$event","_createElementVNode","$style","PlElementList","item","_withCtx","_createTextVNode","_toDisplayString","index","PlTableFilterEntryV2","_createElementBlock","PlMaskIcon16","PlBtnSecondary","_openBlock","PlTableAddFilterV2","idx","filter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueOrErrorsComponent.vue.js","sources":["../../src/components/ValueOrErrorsComponent.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport { computed } from 'vue';\nimport type { ValueOrErrors } from '@platforma-sdk/model';\n\nconst props = defineProps<{\n valueOrError: ValueOrErrors<T> | undefined;\n}>();\n\nconst value = computed(() => (props.valueOrError && props.valueOrError.ok ? props.valueOrError.value : undefined));\n\nconst error = computed(() => (props.valueOrError && !props.valueOrError.ok ? props.valueOrError.errors : undefined));\n\nconst isUnresolved = computed(() => value.value === undefined && error.value === undefined);\n\ndefineSlots<{\n default(props: { value: T }): void;\n}>();\n</script>\n\n<template>\n <div>\n <slot v-if=\"value !== undefined\" name=\"default\" v-bind=\"{ value }\" />\n <div v-if=\"error\" class=\"alert-error\">\n {{ error }}\n </div>\n <div v-if=\"isUnresolved\">Unresolved</div>\n </div>\n</template>\n"],"names":["props","__props","value","computed","error","isUnresolved"],"mappings":";;;;;;;;;;AAIA,UAAMA,IAAQC,GAIRC,IAAQC,EAAS,MAAOH,EAAM,gBAAgBA,EAAM,aAAa,KAAKA,EAAM,aAAa,QAAQ,MAAU,GAE3GI,IAAQD,EAAS,MAAOH,EAAM,gBAAgB,CAACA,EAAM,aAAa,KAAKA,EAAM,aAAa,SAAS,MAAU,GAE7GK,IAAeF,EAAS,MAAMD,EAAM,UAAU,UAAaE,EAAM,UAAU,MAAS;;;;;;;;"}
1
+ {"version":3,"file":"ValueOrErrorsComponent.vue.js","sources":["../../src/components/ValueOrErrorsComponent.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"T\">\nimport { computed } from 'vue';\nimport type { ValueOrErrors } from '@platforma-sdk/model';\n\nconst props = defineProps<{\n valueOrError: ValueOrErrors<T> | undefined;\n}>();\n\nconst value = computed(() => (props.valueOrError && props.valueOrError.ok ? props.valueOrError.value : undefined));\n\nconst error = computed(() => (props.valueOrError && !props.valueOrError.ok ? props.valueOrError.errors : undefined));\n\nconst isUnresolved = computed(() => value.value === undefined && error.value === undefined);\n\ndefineSlots<{\n default(props: { value: T }): void;\n}>();\n</script>\n\n<template>\n <div>\n <slot v-if=\"value !== undefined\" name=\"default\" v-bind=\"{ value }\" />\n <div v-if=\"error\" class=\"alert-error\">\n {{ error }}\n </div>\n <div v-if=\"isUnresolved\">Unresolved</div>\n </div>\n</template>\n"],"names":["props","__props","value","computed","error","isUnresolved","_createElementBlock","_renderSlot","_ctx","_hoisted_1","_toDisplayString","_openBlock"],"mappings":";;;;;;;;;;AAIA,UAAMA,IAAQC,GAIRC,IAAQC,EAAS,MAAOH,EAAM,gBAAgBA,EAAM,aAAa,KAAKA,EAAM,aAAa,QAAQ,MAAU,GAE3GI,IAAQD,EAAS,MAAOH,EAAM,gBAAgB,CAACA,EAAM,aAAa,KAAKA,EAAM,aAAa,SAAS,MAAU,GAE7GK,IAAeF,EAAS,MAAMD,EAAM,UAAU,UAAaE,EAAM,UAAU,MAAS;2BAQxFE,EAMM,OAAA,MAAA;AAAA,MALQJ,EAAA,UAAU,SAAtBK,EAAqEC,8CAAXN,EAAA,MAAA,CAAK,CAAA,CAAA;MACpDE,EAAA,cAAXE,EAEM,OAFNG,GAEMC,EADDN,EAAA,KAAK,GAAA,CAAA;MAECC,EAAA,SAAXM,EAAA,GAAAL,EAAyC,UAAhB,YAAU;;;;"}
@@ -1,20 +1,20 @@
1
- import { defineComponent as i, createElementBlock as l, openBlock as d, normalizeClass as p, createElementVNode as n, toDisplayString as c } from "vue";
2
- const u = /* @__PURE__ */ i({
1
+ import { defineComponent as l, createElementBlock as d, openBlock as p, normalizeClass as c, createElementVNode as n, toDisplayString as f } from "vue";
2
+ const u = /* @__PURE__ */ l({
3
3
  __name: "EndOfPeriod",
4
4
  props: {
5
5
  endOfPeriod: {}
6
6
  },
7
- setup(f) {
8
- const o = (e) => {
7
+ setup(o) {
8
+ const r = (e) => {
9
9
  if (!e) return "N/A";
10
- const t = new Date(e), r = t.getDate().toString().padStart(2, "0"), a = (t.getMonth() + 1).toString().padStart(2, "0"), s = t.getFullYear();
11
- return `${r}.${a}.${s}`;
10
+ const t = new Date(e), a = t.getDate().toString().padStart(2, "0"), s = (t.getMonth() + 1).toString().padStart(2, "0"), i = t.getFullYear();
11
+ return `${a}.${s}.${i}`;
12
12
  };
13
- return (e, t) => (d(), l("div", {
14
- class: p(e.$style.container)
13
+ return (e, t) => (p(), d("div", {
14
+ class: c(e.$style.container)
15
15
  }, [
16
16
  t[0] || (t[0] = n("span", null, "End of period", -1)),
17
- n("span", null, c(o(e.endOfPeriod)), 1)
17
+ n("span", null, f(r(o.endOfPeriod)), 1)
18
18
  ], 2));
19
19
  }
20
20
  });
@@ -1 +1 @@
1
- {"version":3,"file":"EndOfPeriod.vue2.js","sources":["../../../src/plugins/Monetization/EndOfPeriod.vue"],"sourcesContent":["<script setup lang=\"ts\">\ndefineProps<{\n endOfPeriod: string | null;\n}>();\n\nconst formateStringDate = (date: string | null) => {\n if (!date) return 'N/A';\n const dateObj = new Date(date);\n const day = dateObj.getDate().toString().padStart(2, '0');\n const month = (dateObj.getMonth() + 1).toString().padStart(2, '0'); // Month is 0-indexed\n const year = dateObj.getFullYear();\n return `${day}.${month}.${year}`;\n};\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <span>End of period</span>\n <span>{{ formateStringDate(endOfPeriod) }}</span>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n background-color: #F7F8FA;\n border-radius: 6px;\n min-height: 40px;\n padding: 0 12px 0 12px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 500;\n border: 1px solid var(--border-color-div-grey);\n span:first-child {\n overflow: hidden;\n font-weight: 600;\n }\n}\n</style>\n"],"names":["formateStringDate","date","dateObj","day","month","year"],"mappings":";;;;;;;AAKA,UAAMA,IAAoB,CAACC,MAAwB;AACjD,UAAI,CAACA,EAAM,QAAO;AAClB,YAAMC,IAAU,IAAI,KAAKD,CAAI,GACvBE,IAAMD,EAAQ,QAAA,EAAU,WAAW,SAAS,GAAG,GAAG,GAClDE,KAASF,EAAQ,SAAA,IAAa,GAAG,WAAW,SAAS,GAAG,GAAG,GAC3DG,IAAOH,EAAQ,YAAA;AACrB,aAAO,GAAGC,CAAG,IAAIC,CAAK,IAAIC,CAAI;AAAA,IAChC;;;;;;;;;"}
1
+ {"version":3,"file":"EndOfPeriod.vue2.js","sources":["../../../src/plugins/Monetization/EndOfPeriod.vue"],"sourcesContent":["<script setup lang=\"ts\">\ndefineProps<{\n endOfPeriod: string | null;\n}>();\n\nconst formateStringDate = (date: string | null) => {\n if (!date) return 'N/A';\n const dateObj = new Date(date);\n const day = dateObj.getDate().toString().padStart(2, '0');\n const month = (dateObj.getMonth() + 1).toString().padStart(2, '0'); // Month is 0-indexed\n const year = dateObj.getFullYear();\n return `${day}.${month}.${year}`;\n};\n</script>\n\n<template>\n <div :class=\"$style.container\">\n <span>End of period</span>\n <span>{{ formateStringDate(endOfPeriod) }}</span>\n </div>\n</template>\n\n<style module>\n.container {\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: space-between;\n gap: 8px;\n background-color: #F7F8FA;\n border-radius: 6px;\n min-height: 40px;\n padding: 0 12px 0 12px;\n color: var(--txt-01);\n font-size: 14px;\n font-weight: 500;\n border: 1px solid var(--border-color-div-grey);\n span:first-child {\n overflow: hidden;\n font-weight: 600;\n }\n}\n</style>\n"],"names":["formateStringDate","date","dateObj","day","month","year","_createElementBlock","_normalizeClass","$style","_cache","_createElementVNode","_toDisplayString","__props"],"mappings":";;;;;;;AAKA,UAAMA,IAAoB,CAACC,MAAwB;AACjD,UAAI,CAACA,EAAM,QAAO;AAClB,YAAMC,IAAU,IAAI,KAAKD,CAAI,GACvBE,IAAMD,EAAQ,QAAA,EAAU,WAAW,SAAS,GAAG,GAAG,GAClDE,KAASF,EAAQ,SAAA,IAAa,GAAG,WAAW,SAAS,GAAG,GAAG,GAC3DG,IAAOH,EAAQ,YAAA;AACrB,aAAO,GAAGC,CAAG,IAAIC,CAAK,IAAIC,CAAI;AAAA,IAChC;2BAIEC,EAGM,OAAA;AAAA,MAHA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,IAAA;MAC3BC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAC,EAA0B,cAApB,iBAAa,EAAA;AAAA,MACnBA,EAAiD,QAAA,MAAAC,EAAxCX,EAAkBY,EAAA,WAAW,CAAA,GAAA,CAAA;AAAA,IAAA;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as w, computed as i, createElementBlock as u, openBlock as r, normalizeClass as t, createElementVNode as n, toDisplayString as o, createTextVNode as y, createCommentVNode as p, normalizeStyle as b } from "vue";
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(B) {
13
- const l = B, s = i(() => l.available === null ? null : l.available + l.toSpend + l.used), v = i(() => l.available === null ? !1 : l.available < 0), $ = i(() => l.available === null ? null : l.available + l.toSpend), m = (e) => Math.max(0, Math.min(100, e)), g = i(() => s.value === null || s.value === 0 || v.value ? 0 : m(l.toSpend / s.value * 100)), S = i(() => s.value === null || s.value === 0 ? 0 : m(l.used / s.value * 100)), k = i(() => l.available === null || s.value === null || s.value === 0 ? 100 : v.value ? 0 : m(l.available / s.value * 100)), c = i(() => l.type === "unique_launches" ? "Runs Limits" : l.type === "volume_limit" ? "Volume Limits" : l.label), L = (e) => (e / 1024 / 1024 / 1024).toFixed(2) + " GB", d = (e) => l.type === "volume_limit" ? L(e) : e, f = (e) => Number(e.toFixed(2)) > 0;
14
- return (e, a) => (r(), u("div", {
15
- class: t(e.$style.container)
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: t(e.$style.label)
19
- }, o(c.value), 3),
18
+ class: a(e.$style.label)
19
+ }, d(B.value), 3),
20
20
  n("div", {
21
- class: t(e.$style.content)
21
+ class: a(e.$style.content)
22
22
  }, [
23
23
  n("div", {
24
- class: t(e.$style.contentAvailable)
24
+ class: a(e.$style.contentAvailable)
25
25
  }, [
26
26
  n("div", null, [
27
- a[0] || (a[0] = y(" Available: ")),
28
- a[1] || (a[1] = n("div", { style: { flex: "1" } }, null, -1)),
29
- $.value !== null ? (r(), u("span", F, [
30
- n("strong", null, o(d($.value)), 1),
31
- y(" / " + o(d(e.available + e.toSpend + e.used)), 1)
32
- ])) : (r(), u("span", N, "Unlimited"))
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: t([e.$style.afterRun, { [e.$style.exceeded]: v.value }])
35
+ class: a([e.$style.afterRun, { [e.$style.exceeded]: y.value }])
36
36
  }, [
37
- v.value ? (r(), u("span", A, "Too many files selected")) : p("", !0),
38
- a[2] || (a[2] = n("span", { style: { flex: "1" } }, null, -1)),
39
- a[3] || (a[3] = n("span", null, "After run:", -1)),
40
- e.available !== null ? (r(), u("span", C, o(d(e.available)) + " / " + o(d(e.available + e.toSpend + e.used)), 1)) : p("", !0)
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: t([e.$style.progressBar, { [e.$style.exceeded]: v.value }])
43
+ class: a([e.$style.progressBar, { [e.$style.exceeded]: y.value }])
44
44
  }, [
45
- f(k.value) ? (r(), u("span", {
45
+ b(k.value) ? (i(), r("span", {
46
46
  key: 0,
47
- class: t(e.$style.progressBarAvailable),
48
- style: b({ width: `${k.value.toFixed(2)}%` })
49
- }, null, 6)) : p("", !0),
50
- f(g.value) ? (r(), u("span", {
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: t(e.$style.progressBarToSpend),
53
- style: b({ width: `${g.value.toFixed(2)}%` })
54
- }, null, 6)) : p("", !0),
55
- f(S.value) ? (r(), u("span", {
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: t(e.$style.progressBarUsed),
58
- style: b({ width: `${S.value.toFixed(2)}%` })
59
- }, null, 6)) : p("", !0)
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: t(e.$style.legends)
63
+ class: a(e.$style.legends)
64
64
  }, [
65
65
  n("div", {
66
- class: t(e.$style.toSpendLegend)
66
+ class: a(e.$style.toSpendLegend)
67
67
  }, [
68
- a[4] || (a[4] = n("span", null, null, -1)),
69
- y(" To spend: " + o(d(e.toSpend)), 1)
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: t(e.$style.usedLegend)
72
+ class: a(e.$style.usedLegend)
73
73
  }, [
74
- a[5] || (a[5] = n("span", null, null, -1)),
75
- y(" Used: " + o(d(e.used)), 1)
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":"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"}
@@ -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":"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"}