@milaboratories/uikit 2.10.26 → 2.10.28

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 (80) hide show
  1. package/.turbo/turbo-build.log +40 -41
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +12 -0
  6. package/dist/components/DataTable/TableComponent.vue.js +16 -17
  7. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  8. package/dist/components/PlAccordion/ExpandTransition.vue3.js +2 -2
  9. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +2 -2
  10. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +33 -33
  11. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +17 -17
  12. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +17 -17
  13. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +12 -12
  14. package/dist/components/PlChip/PlChip.vue.js +8 -8
  15. package/dist/components/PlDropdown/PlDropdown.vue.js +27 -27
  16. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +39 -39
  17. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +20 -20
  18. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts +3 -1
  19. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts.map +1 -1
  20. package/dist/components/PlFileDialog/Remote.vue.d.ts +3 -1
  21. package/dist/components/PlFileDialog/Remote.vue.d.ts.map +1 -1
  22. package/dist/components/PlFileDialog/Remote.vue.js +80 -76
  23. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  24. package/dist/components/PlFileDialog/Shortcuts.vue.d.ts +4 -1
  25. package/dist/components/PlFileDialog/Shortcuts.vue.d.ts.map +1 -1
  26. package/dist/components/PlFileDialog/Shortcuts.vue2.js +18 -14
  27. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  28. package/dist/components/PlFileInput/PlFileInput.vue.js +17 -17
  29. package/dist/components/PlLogView/PlLogView.vue.js +22 -22
  30. package/dist/components/PlNumberField/PlNumberField.vue.js +8 -8
  31. package/dist/components/PlSearchField/PlSearchField.vue.d.ts +28 -4
  32. package/dist/components/PlSearchField/PlSearchField.vue.d.ts.map +1 -1
  33. package/dist/components/PlSearchField/PlSearchField.vue2.js +40 -30
  34. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  35. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +3 -4
  36. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  37. package/dist/components/PlTabs/Tab.vue.d.ts +42 -12
  38. package/dist/components/PlTabs/Tab.vue.d.ts.map +1 -1
  39. package/dist/components/PlTabs/Tab.vue.js +6 -6
  40. package/dist/components/PlTextArea/PlTextArea.vue.js +22 -22
  41. package/dist/components/PlTextField/PlTextField.vue.js +14 -14
  42. package/dist/components/PlTooltip/PlTooltip.vue.d.ts +30 -3
  43. package/dist/components/PlTooltip/PlTooltip.vue.d.ts.map +1 -1
  44. package/dist/components/PlTooltip/PlTooltip.vue.js +7 -110
  45. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  46. package/dist/components/PlTooltip/PlTooltip.vue2.js +132 -2
  47. package/dist/components/PlTooltip/PlTooltip.vue2.js.map +1 -1
  48. package/dist/components/PlTooltip/PlTooltip.vue3.js +26 -0
  49. package/dist/components/PlTooltip/PlTooltip.vue3.js.map +1 -0
  50. package/dist/components/Slider.vue.d.ts +1 -1
  51. package/dist/components/Slider.vue.d.ts.map +1 -1
  52. package/dist/components/Slider.vue.js +21 -21
  53. package/dist/components/SliderRange.vue.d.ts +1 -1
  54. package/dist/components/SliderRange.vue.d.ts.map +1 -1
  55. package/dist/components/SliderRange.vue.js +31 -31
  56. package/dist/components/SliderRangeTriple.vue.d.ts +1 -1
  57. package/dist/components/SliderRangeTriple.vue.d.ts.map +1 -1
  58. package/dist/components/SliderRangeTriple.vue.js +23 -23
  59. package/dist/index.js +1 -1
  60. package/dist/utils/DoubleContour.vue2.js +23 -0
  61. package/dist/utils/DoubleContour.vue2.js.map +1 -0
  62. package/package.json +3 -3
  63. package/src/assets/base.scss +4 -1
  64. package/src/assets/mixins.scss +1 -2
  65. package/src/assets/utils.scss +1 -1
  66. package/src/components/PlFileDialog/Remote.vue +5 -3
  67. package/src/components/PlFileDialog/Shortcuts.vue +5 -1
  68. package/src/components/PlSearchField/PlSearchField.vue +22 -17
  69. package/src/components/PlTooltip/PlTooltip.vue +228 -33
  70. package/dist/components/PlTooltip/Beak.vue.d.ts +0 -3
  71. package/dist/components/PlTooltip/Beak.vue.d.ts.map +0 -1
  72. package/dist/components/PlTooltip/Beak.vue.js +0 -23
  73. package/dist/components/PlTooltip/Beak.vue.js.map +0 -1
  74. package/dist/components/PlTooltip/useTooltipPosition.d.ts +0 -12
  75. package/dist/components/PlTooltip/useTooltipPosition.d.ts.map +0 -1
  76. package/dist/components/PlTooltip/useTooltipPosition.js +0 -18
  77. package/dist/components/PlTooltip/useTooltipPosition.js.map +0 -1
  78. package/src/components/PlTooltip/Beak.vue +0 -12
  79. package/src/components/PlTooltip/pl-tooltip.scss +0 -117
  80. package/src/components/PlTooltip/useTooltipPosition.ts +0 -59
@@ -1,18 +1,18 @@
1
- import { defineComponent as G, reactive as J, computed as h, watch as V, toRef as Q, onMounted as X, createElementBlock as d, openBlock as i, withModifiers as I, normalizeClass as n, unref as s, createElementVNode as c, createVNode as f, Fragment as g, renderList as K, createBlock as Y, createCommentVNode as Z, toDisplayString as v, withDirectives as L, createTextVNode as O } from "vue";
2
- import { useEventListener as ee } from "../../composition/useEventListener.js";
3
- import { notEmpty as A, between as te, tapIf as le } from "@milaboratories/helpers";
1
+ import { defineComponent as J, reactive as Q, computed as p, watch as V, toRef as X, onMounted as Y, ref as Z, createElementBlock as d, openBlock as i, withModifiers as K, normalizeClass as n, unref as s, createElementVNode as c, createVNode as h, Fragment as g, renderList as L, createBlock as ee, createCommentVNode as te, toDisplayString as v, withDirectives as O, createTextVNode as A } from "vue";
2
+ import { useEventListener as le } from "../../composition/useEventListener.js";
3
+ import { notEmpty as M, between as ae, tapIf as se } from "@milaboratories/helpers";
4
4
  import { getRawPlatformaInstance as y } from "@platforma-sdk/model";
5
- import ae from "../PlDropdown/PlDropdown.vue.js";
6
- import b from "../PlIcon16/PlIcon16.vue.js";
7
- import se from "./Shortcuts.vue.js";
8
- import oe from "../PlSearchField/PlSearchField.vue.js";
5
+ import oe from "../PlDropdown/PlDropdown.vue.js";
6
+ import _ from "../PlIcon16/PlIcon16.vue.js";
7
+ import re from "./Shortcuts.vue.js";
8
+ import ne from "../PlSearchField/PlSearchField.vue.js";
9
9
  import r from "./pl-file-dialog.module.scss.js";
10
- import { defaultData as M, useVisibleItems as re, vTextOverflown as H } from "./remote.js";
11
- import { normalizeExtensions as ne, getFilePathBreadcrumbs as ie } from "./utils.js";
12
- const ce = ["title", "onClick"], de = {
10
+ import { defaultData as R, useVisibleItems as ie, vTextOverflown as H } from "./remote.js";
11
+ import { normalizeExtensions as ce, getFilePathBreadcrumbs as de } from "./utils.js";
12
+ const ue = ["title", "onClick"], me = {
13
13
  key: 0,
14
14
  class: "ls-loader"
15
- }, me = ["onClick"], ue = ["title"], pe = ["onClick"], he = ["title"], _e = /* @__PURE__ */ G({
15
+ }, fe = ["onClick"], pe = ["title"], he = ["onClick"], ve = ["title"], Be = /* @__PURE__ */ J({
16
16
  __name: "Remote",
17
17
  props: {
18
18
  modelValue: { type: Boolean },
@@ -23,64 +23,64 @@ const ce = ["title", "onClick"], de = {
23
23
  submit: {}
24
24
  },
25
25
  emits: ["update:modelValue", "import:files"],
26
- setup(N, { expose: R }) {
27
- const E = (e) => e.ctrlKey || e.metaKey, u = N, t = J(M()), k = () => {
26
+ setup(N, { expose: T }) {
27
+ const b = (e) => e.ctrlKey || e.metaKey, m = N, t = Q(R()), k = () => {
28
28
  t.search = "", t.error = "", t.lastSelected = void 0;
29
- }, _ = h(() => ne(u.extensions)), S = re(t), T = h(() => {
29
+ }, E = p(() => ce(m.extensions)), S = ie(t), $ = p(() => {
30
30
  var e;
31
31
  return {
32
- modelValue: u.modelValue,
32
+ modelValue: m.modelValue,
33
33
  dirPath: t.dirPath,
34
34
  storageHandle: (e = t.storageEntry) == null ? void 0 : e.handle
35
35
  };
36
- }), $ = (e, l) => {
36
+ }), z = (e, l) => {
37
37
  y() && t.currentLoadingPath !== l && (t.currentLoadingPath = l, y().lsDriver.listFiles(e, l).then((a) => {
38
- l === t.dirPath && (t.items = A(a).entries.map((o) => ({
38
+ l === t.dirPath && (t.items = M(a).entries.map((o) => ({
39
39
  path: o.fullPath,
40
40
  name: o.name,
41
41
  isDir: o.type === "dir",
42
- canBeSelected: o.type === "file" && (!_.value || _.value.some((m) => o.fullPath.endsWith(m))),
42
+ canBeSelected: o.type === "file" && (!E.value || E.value.some((u) => o.fullPath.endsWith(u))),
43
43
  handle: o.type === "file" ? o.handle : void 0,
44
44
  selected: !1
45
- })).sort((o, m) => o.isDir && !m.isDir ? -1 : !o.isDir && m.isDir ? 1 : o.name.localeCompare(m.name)).map((o, m) => ({ id: m, ...o })), t.lastSelected = void 0);
45
+ })).sort((o, u) => o.isDir && !u.isDir ? -1 : !o.isDir && u.isDir ? 1 : o.name.localeCompare(u.name)).map((o, u) => ({ id: u, ...o })), t.lastSelected = void 0);
46
46
  }).catch((a) => t.error = String(a)).finally(() => {
47
47
  t.currentLoadingPath = void 0;
48
48
  }));
49
- }, z = () => {
49
+ }, U = () => {
50
50
  k();
51
- const { storageHandle: e, dirPath: l, modelValue: a } = T.value;
52
- e && a && $(e, l);
53
- }, B = h(() => ie(t.dirPath)), P = h(
51
+ const { storageHandle: e, dirPath: l, modelValue: a } = $.value;
52
+ e && a && z(e, l);
53
+ }, C = p(() => de(t.dirPath)), P = p(
54
54
  () => t.items.filter((e) => e.canBeSelected && e.selected && !e.isDir)
55
- ), U = h(() => {
55
+ ), W = p(() => {
56
56
  var e;
57
57
  return P.value.length > 0 && ((e = t.storageEntry) == null ? void 0 : e.handle);
58
- }), W = () => {
58
+ }), j = () => {
59
59
  var e;
60
60
  return {
61
- storageHandle: A((e = t.storageEntry) == null ? void 0 : e.handle),
61
+ storageHandle: M((e = t.storageEntry) == null ? void 0 : e.handle),
62
62
  files: P.value.map((l) => l.handle)
63
63
  };
64
- }, x = (e) => {
64
+ }, B = (e) => {
65
65
  t.dirPath = e;
66
- }, j = (e, l) => {
67
- const { shiftKey: a } = e, o = E(e), { lastSelected: m } = t;
66
+ }, q = (e, l) => {
67
+ const { shiftKey: a } = e, o = b(e), { lastSelected: u } = t;
68
68
  e.preventDefault();
69
69
  const D = S.value;
70
70
  if (l.canBeSelected) {
71
- if (u.multi || D.forEach((p) => p.selected = !1), l.selected = !l.selected, !u.multi)
71
+ if (m.multi || D.forEach((f) => f.selected = !1), l.selected = !l.selected, !m.multi)
72
72
  return;
73
- !o && !a && D.forEach((p) => {
74
- p.id !== l.id && (p.selected = !1);
75
- }), a && m !== void 0 && D.forEach((p) => {
76
- te(p.id, m, l.id) && (p.selected = !0);
73
+ !o && !a && D.forEach((f) => {
74
+ f.id !== l.id && (f.selected = !1);
75
+ }), a && u !== void 0 && D.forEach((f) => {
76
+ ae(f.id, u, l.id) && (f.selected = !0);
77
77
  }), l.selected && (t.lastSelected = l.id);
78
78
  }
79
- }, C = (e) => {
80
- e && !u.multi || S.value.filter((l) => l.canBeSelected).forEach((l) => {
79
+ }, x = (e) => {
80
+ e && !m.multi || S.value.filter((l) => l.canBeSelected).forEach((l) => {
81
81
  l.selected = e;
82
82
  });
83
- }, q = () => C(!0), w = () => C(!1), F = () => {
83
+ }, G = () => x(!0), w = () => x(!1), F = () => {
84
84
  if (k(), w(), !y()) {
85
85
  console.warn("platforma API is not found");
86
86
  return;
@@ -91,42 +91,44 @@ const ce = ["title", "onClick"], de = {
91
91
  ), t.storageOptions = e.map((l) => ({
92
92
  text: l.name,
93
93
  value: l
94
- })), u.autoSelectStorage && le(e[0], (l) => {
94
+ })), m.autoSelectStorage && se(e[0], (l) => {
95
95
  t.storageEntry = l;
96
96
  });
97
97
  }).catch((e) => t.error = String(e));
98
98
  };
99
- return V(
100
- Q(t, "storageEntry"),
99
+ V(
100
+ X(t, "storageEntry"),
101
101
  (e) => {
102
102
  k(), t.dirPath = (e == null ? void 0 : e.initialFullPath) ?? "";
103
103
  },
104
104
  { immediate: !0 }
105
105
  ), V([() => t.dirPath, () => t.storageEntry], () => {
106
- z();
106
+ U();
107
107
  }), V(
108
- () => u.modelValue,
108
+ () => m.modelValue,
109
109
  (e) => {
110
- e ? F() : Object.assign(t, M());
110
+ e ? F() : Object.assign(t, R());
111
111
  },
112
112
  { immediate: !0 }
113
- ), ee(document, "keydown", (e) => {
114
- if (!u.modelValue || e.target !== document.body)
113
+ ), le(document, "keydown", (e) => {
114
+ if (!m.modelValue || e.target !== document.body)
115
115
  return;
116
- const l = E(e);
117
- l && e.code === "KeyA" && (e.preventDefault(), q()), l && e.shiftKey && e.code === "Period" && (e.preventDefault(), t.showHiddenItems = !t.showHiddenItems), e.code === "Enter" && u.submit();
118
- }), R({
119
- isReady: U,
120
- getFilesToImport: W
121
- }), X(F), (e, l) => (i(), d("div", {
116
+ const l = b(e);
117
+ l && e.code === "KeyA" && (e.preventDefault(), G()), l && e.shiftKey && e.code === "Period" && (e.preventDefault(), t.showHiddenItems = !t.showHiddenItems), e.code === "Enter" && m.submit();
118
+ }), T({
119
+ isReady: W,
120
+ getFilesToImport: j
121
+ }), Y(F);
122
+ const I = Z();
123
+ return (e, l) => (i(), d("div", {
122
124
  class: n(s(r).remote),
123
- onClick: I(w, ["stop"])
125
+ onClick: K(w, ["stop"])
124
126
  }, [
125
127
  c("div", {
126
128
  class: n(s(r).search)
127
129
  }, [
128
130
  c("div", null, [
129
- f(s(ae), {
131
+ h(s(oe), {
130
132
  modelValue: t.storageEntry,
131
133
  "onUpdate:modelValue": l[0] || (l[0] = (a) => t.storageEntry = a),
132
134
  label: "Select storage",
@@ -134,7 +136,7 @@ const ce = ["title", "onClick"], de = {
134
136
  }, null, 8, ["modelValue", "options"])
135
137
  ]),
136
138
  c("div", null, [
137
- f(s(oe), {
139
+ h(s(ne), {
138
140
  modelValue: t.search,
139
141
  "onUpdate:modelValue": l[1] || (l[1] = (a) => t.search = a),
140
142
  label: "Search in folder",
@@ -143,7 +145,9 @@ const ce = ["title", "onClick"], de = {
143
145
  ])
144
146
  ], 2),
145
147
  c("div", {
146
- class: n(s(r)["ls-container"])
148
+ class: n(s(r)["ls-container"]),
149
+ ref_key: "lsContainerRef",
150
+ ref: I
147
151
  }, [
148
152
  c("div", {
149
153
  class: n(s(r)["ls-head"])
@@ -151,25 +155,25 @@ const ce = ["title", "onClick"], de = {
151
155
  c("div", {
152
156
  class: n(s(r).breadcrumbs)
153
157
  }, [
154
- (i(!0), d(g, null, K(B.value, (a, o) => (i(), d(g, { key: o }, [
158
+ (i(!0), d(g, null, L(C.value, (a, o) => (i(), d(g, { key: o }, [
155
159
  c("div", {
156
160
  title: a.path,
157
- onClick: (m) => x(a.path)
158
- }, v(a.name), 9, ce),
159
- a.index !== B.value.length - 1 ? (i(), Y(s(b), {
161
+ onClick: (u) => B(a.path)
162
+ }, v(a.name), 9, ue),
163
+ a.index !== C.value.length - 1 ? (i(), ee(s(_), {
160
164
  key: 0,
161
165
  name: "chevron-right"
162
- })) : Z("", !0)
166
+ })) : te("", !0)
163
167
  ], 64))), 128))
164
168
  ], 2),
165
169
  c("div", {
166
170
  class: n(s(r).selected)
167
171
  }, [
168
172
  c("span", null, "Selected: " + v(P.value.length), 1),
169
- f(se)
173
+ h(re, { container: I.value }, null, 8, ["container"])
170
174
  ], 2)
171
175
  ], 2),
172
- t.currentLoadingPath !== void 0 ? (i(), d("div", de, [...l[2] || (l[2] = [
176
+ t.currentLoadingPath !== void 0 ? (i(), d("div", me, [...l[2] || (l[2] = [
173
177
  c("i", { class: "mask-24 mask-loading loader-icon" }, null, -1)
174
178
  ])])) : t.storageEntry ? t.error ? (i(), d("div", {
175
179
  key: 2,
@@ -185,39 +189,39 @@ const ce = ["title", "onClick"], de = {
185
189
  key: 3,
186
190
  class: n(s(r)["ls-body"])
187
191
  }, [
188
- (i(!0), d(g, null, K(s(S), (a) => (i(), d(g, {
192
+ (i(!0), d(g, null, L(s(S), (a) => (i(), d(g, {
189
193
  key: a.id
190
194
  }, [
191
195
  a.isDir ? (i(), d("div", {
192
196
  key: 0,
193
197
  class: n(s(r).isDir),
194
- onClick: (o) => x(a.path)
198
+ onClick: (o) => B(a.path)
195
199
  }, [
196
- f(s(b), { name: "chevron-right" }),
197
- L((i(), d("span", {
200
+ h(s(_), { name: "chevron-right" }),
201
+ O((i(), d("span", {
198
202
  title: a.name
199
203
  }, [
200
- O(v(a.name), 1)
201
- ], 8, ue)), [
204
+ A(v(a.name), 1)
205
+ ], 8, pe)), [
202
206
  [s(H)]
203
207
  ])
204
- ], 10, me)) : (i(), d("div", {
208
+ ], 10, fe)) : (i(), d("div", {
205
209
  key: 1,
206
210
  class: n({ [s(r).canBeSelected]: a.canBeSelected, [s(r).selected]: a.selected }),
207
- onClick: I((o) => j(o, a), ["stop"])
211
+ onClick: K((o) => q(o, a), ["stop"])
208
212
  }, [
209
- f(s(b), {
213
+ h(s(_), {
210
214
  name: "box",
211
215
  class: n(s(r).isFile)
212
216
  }, null, 8, ["class"]),
213
- L((i(), d("span", {
217
+ O((i(), d("span", {
214
218
  title: a.name
215
219
  }, [
216
- O(v(a.name), 1)
217
- ], 8, he)), [
220
+ A(v(a.name), 1)
221
+ ], 8, ve)), [
218
222
  [s(H)]
219
223
  ])
220
- ], 10, pe))
224
+ ], 10, he))
221
225
  ], 64))), 128))
222
226
  ], 2)) : (i(), d("div", {
223
227
  key: 1,
@@ -235,6 +239,6 @@ const ce = ["title", "onClick"], de = {
235
239
  }
236
240
  });
237
241
  export {
238
- _e as default
242
+ Be as default
239
243
  };
240
244
  //# sourceMappingURL=Remote.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Remote.vue.js","sources":["../../../src/components/PlFileDialog/Remote.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useEventListener } from \"../../composition/useEventListener\";\nimport type { ImportedFiles } from \"../../types\";\nimport { between, notEmpty, tapIf } from \"@milaboratories/helpers\";\nimport { getRawPlatformaInstance, type StorageHandle } from \"@platforma-sdk/model\";\nimport { computed, onMounted, reactive, toRef, watch } from \"vue\";\nimport { PlDropdown } from \"../PlDropdown\";\nimport { PlIcon16 } from \"../PlIcon16\";\nimport Shortcuts from \"./Shortcuts.vue\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\nimport { PlSearchField } from \"../PlSearchField\";\nimport style from \"./pl-file-dialog.module.scss\";\nimport { defaultData, useVisibleItems, vTextOverflown } from \"./remote\";\nimport { getFilePathBreadcrumbs, normalizeExtensions, type FileDialogItem } from \"./utils\";\n\n// note that on a Mac, a click combined with the control key is intercepted by the operating system and used to open a context menu, so ctrlKey is not detectable on click events.\nconst isCtrlOrMeta = (ev: KeyboardEvent | MouseEvent) => ev.ctrlKey || ev.metaKey;\n\ndefineEmits<{\n (e: \"update:modelValue\", value: boolean): void;\n (e: \"import:files\", value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean;\n extensions?: string[]; // with dot, like ['.fastq.gz', '.fastq']\n multi?: boolean;\n title?: string;\n autoSelectStorage?: boolean;\n submit: () => void;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n },\n);\n\nconst data = reactive(defaultData());\n\nconst resetData = () => {\n data.search = \"\";\n data.error = \"\";\n data.lastSelected = undefined;\n};\n\nconst extensions = computed(() => normalizeExtensions(props.extensions));\n\nconst visibleItems = useVisibleItems(data);\n\nconst lookup = computed(() => {\n return {\n modelValue: props.modelValue,\n dirPath: data.dirPath,\n storageHandle: data.storageEntry?.handle,\n };\n});\n\nconst query = (storageHandle: StorageHandle, dirPath: string) => {\n if (!getRawPlatformaInstance()) {\n return;\n }\n\n if (data.currentLoadingPath === dirPath) {\n return;\n }\n\n data.currentLoadingPath = dirPath;\n\n getRawPlatformaInstance()\n .lsDriver.listFiles(storageHandle, dirPath)\n .then((res) => {\n if (dirPath !== data.dirPath) {\n return;\n }\n\n data.items = notEmpty(res)\n .entries.map((item) => ({\n path: item.fullPath,\n name: item.name,\n isDir: item.type === \"dir\",\n canBeSelected:\n item.type === \"file\" &&\n (!extensions.value || extensions.value.some((ext) => item.fullPath.endsWith(ext))),\n handle: item.type === \"file\" ? item.handle : undefined,\n selected: false,\n }))\n .sort((a, b) => {\n if (a.isDir && !b.isDir) return -1;\n if (!a.isDir && b.isDir) return 1;\n // localeCompare for unicode alphabets\n return a.name.localeCompare(b.name);\n })\n .map((it, id) => ({ id, ...it }));\n\n data.lastSelected = undefined;\n })\n .catch((err) => (data.error = String(err)))\n .finally(() => {\n data.currentLoadingPath = undefined;\n });\n};\n\nconst load = () => {\n resetData();\n const { storageHandle, dirPath, modelValue } = lookup.value;\n if (storageHandle && modelValue) {\n query(storageHandle, dirPath);\n }\n};\n\nconst breadcrumbs = computed(() => getFilePathBreadcrumbs(data.dirPath));\n\nconst selectedFiles = computed(() =>\n data.items.filter((f) => f.canBeSelected && f.selected && !f.isDir),\n);\n\nconst isReady = computed(() => selectedFiles.value.length > 0 && data.storageEntry?.handle);\n\nconst getFilesToImport = () => ({\n storageHandle: notEmpty(data.storageEntry?.handle),\n files: selectedFiles.value.map((f) => f.handle!),\n});\n\nconst setDirPath = (dirPath: string) => {\n data.dirPath = dirPath;\n};\n\nconst selectFile = (ev: MouseEvent, file: FileDialogItem) => {\n const { shiftKey } = ev;\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n const { lastSelected } = data;\n\n ev.preventDefault();\n\n const items = visibleItems.value;\n\n if (file.canBeSelected) {\n if (!props.multi) {\n items.forEach((f) => (f.selected = false));\n }\n\n file.selected = !file.selected;\n\n if (!props.multi) {\n return;\n }\n\n if (!ctrlOrMetaKey && !shiftKey) {\n items.forEach((f) => {\n if (f.id !== file.id) {\n f.selected = false;\n }\n });\n }\n\n if (shiftKey && lastSelected !== undefined) {\n items.forEach((f) => {\n if (between(f.id, lastSelected, file.id)) {\n f.selected = true;\n }\n });\n }\n\n if (file.selected) {\n data.lastSelected = file.id;\n }\n }\n};\n\nconst changeAll = (selected: boolean) => {\n if (selected && !props.multi) {\n return;\n }\n\n visibleItems.value\n .filter((f) => f.canBeSelected)\n .forEach((file) => {\n file.selected = selected;\n });\n};\n\nconst selectAll = () => changeAll(true);\n\nconst deselectAll = () => changeAll(false);\n\nconst loadAvailableStorages = () => {\n resetData();\n deselectAll();\n if (!getRawPlatformaInstance()) {\n console.warn(\"platforma API is not found\");\n return;\n }\n getRawPlatformaInstance()\n .lsDriver.getStorageList()\n .then((storageEntries) => {\n // local storage is always returned by the ML, so we need to remove it from remote dialog manually\n storageEntries = storageEntries.filter(\n (it) => it.name !== \"local\" && !it.name.startsWith(\"local_disk_\"),\n );\n\n data.storageOptions = storageEntries.map((it) => ({\n text: it.name,\n value: it,\n }));\n\n if (props.autoSelectStorage) {\n tapIf(storageEntries[0], (entry) => {\n data.storageEntry = entry;\n });\n }\n })\n .catch((err) => (data.error = String(err)));\n};\n\nwatch(\n toRef(data, \"storageEntry\"),\n (entry) => {\n resetData();\n data.dirPath = entry?.initialFullPath ?? \"\";\n },\n { immediate: true },\n);\n\nwatch([() => data.dirPath, () => data.storageEntry], () => {\n load();\n});\n\nwatch(\n () => props.modelValue,\n (isOpen) => {\n if (isOpen) {\n loadAvailableStorages();\n } else {\n Object.assign(data, defaultData());\n }\n },\n { immediate: true },\n);\n\nuseEventListener(document, \"keydown\", (ev: KeyboardEvent) => {\n if (!props.modelValue) {\n return;\n }\n\n if (ev.target !== document.body) {\n return;\n }\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n if (ctrlOrMetaKey && ev.code === \"KeyA\") {\n ev.preventDefault();\n selectAll();\n }\n\n if (ctrlOrMetaKey && ev.shiftKey && ev.code === \"Period\") {\n ev.preventDefault();\n data.showHiddenItems = !data.showHiddenItems;\n }\n\n if (ev.code === \"Enter\") {\n props.submit();\n }\n});\n\ndefineExpose({\n isReady,\n getFilesToImport,\n});\n\nonMounted(loadAvailableStorages);\n</script>\n\n<template>\n <div :class=\"style.remote\" @click.stop=\"deselectAll\">\n <div :class=\"style.search\">\n <div>\n <PlDropdown\n v-model=\"data.storageEntry\"\n label=\"Select storage\"\n :options=\"data.storageOptions\"\n />\n </div>\n <div>\n <PlSearchField v-model=\"data.search\" label=\"Search in folder\" clearable />\n </div>\n </div>\n <div :class=\"style['ls-container']\">\n <div :class=\"style['ls-head']\">\n <div :class=\"style['breadcrumbs']\">\n <template v-for=\"(s, i) in breadcrumbs\" :key=\"i\">\n <div :title=\"s.path\" @click=\"setDirPath(s.path)\">{{ s.name }}</div>\n <PlIcon16 v-if=\"s.index !== breadcrumbs.length - 1\" name=\"chevron-right\" />\n </template>\n </div>\n <div :class=\"style.selected\">\n <span>Selected: {{ selectedFiles.length }}</span>\n <Shortcuts />\n </div>\n </div>\n <div v-if=\"data.currentLoadingPath !== undefined\" class=\"ls-loader\">\n <i class=\"mask-24 mask-loading loader-icon\" />\n </div>\n <div v-else-if=\"!data.storageEntry\" :class=\"style['ls-empty']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">Select storage to preview</div>\n </div>\n <div v-else-if=\"data.error\" :class=\"style['ls-error']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">{{ data.error }}</div>\n </div>\n <div v-else :class=\"style['ls-body']\">\n <template v-for=\"file in visibleItems\" :key=\"file.id\">\n <div v-if=\"file.isDir\" :class=\"style.isDir\" @click=\"setDirPath(file.path)\">\n <PlIcon16 name=\"chevron-right\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n <div\n v-else\n :class=\"{ [style.canBeSelected]: file.canBeSelected, [style.selected]: file.selected }\"\n @click.stop=\"(ev) => selectFile(ev, file)\"\n >\n <PlMaskIcon16 name=\"box\" :class=\"style.isFile\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n"],"names":["isCtrlOrMeta","ev","props","__props","data","reactive","defaultData","resetData","extensions","computed","normalizeExtensions","visibleItems","useVisibleItems","lookup","_a","query","storageHandle","dirPath","getRawPlatformaInstance","res","notEmpty","item","ext","a","b","it","id","err","load","modelValue","breadcrumbs","getFilePathBreadcrumbs","selectedFiles","f","isReady","getFilesToImport","setDirPath","selectFile","file","shiftKey","ctrlOrMetaKey","lastSelected","items","between","changeAll","selected","selectAll","deselectAll","loadAvailableStorages","storageEntries","tapIf","entry","watch","toRef","isOpen","useEventListener","__expose","onMounted","_createElementBlock","_normalizeClass","_unref","style","_createElementVNode","_createVNode","PlDropdown","_cache","$event","PlSearchField","_openBlock","_Fragment","_renderList","s","i","_toDisplayString","_hoisted_1","_createBlock","PlIcon16","Shortcuts","_hoisted_2","_createTextVNode","PlMaskIcon16"],"mappings":"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"}
1
+ {"version":3,"file":"Remote.vue.js","sources":["../../../src/components/PlFileDialog/Remote.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useEventListener } from \"../../composition/useEventListener\";\nimport type { ImportedFiles } from \"../../types\";\nimport { between, notEmpty, tapIf } from \"@milaboratories/helpers\";\nimport { getRawPlatformaInstance, type StorageHandle } from \"@platforma-sdk/model\";\nimport { computed, onMounted, reactive, ref, toRef, watch } from \"vue\";\nimport { PlDropdown } from \"../PlDropdown\";\nimport { PlIcon16 } from \"../PlIcon16\";\nimport Shortcuts from \"./Shortcuts.vue\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\nimport { PlSearchField } from \"../PlSearchField\";\nimport style from \"./pl-file-dialog.module.scss\";\nimport { defaultData, useVisibleItems, vTextOverflown } from \"./remote\";\nimport { getFilePathBreadcrumbs, normalizeExtensions, type FileDialogItem } from \"./utils\";\n\n// note that on a Mac, a click combined with the control key is intercepted by the operating system and used to open a context menu, so ctrlKey is not detectable on click events.\nconst isCtrlOrMeta = (ev: KeyboardEvent | MouseEvent) => ev.ctrlKey || ev.metaKey;\n\ndefineEmits<{\n (e: \"update:modelValue\", value: boolean): void;\n (e: \"import:files\", value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n modelValue: boolean;\n extensions?: string[]; // with dot, like ['.fastq.gz', '.fastq']\n multi?: boolean;\n title?: string;\n autoSelectStorage?: boolean;\n submit: () => void;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n },\n);\n\nconst data = reactive(defaultData());\n\nconst resetData = () => {\n data.search = \"\";\n data.error = \"\";\n data.lastSelected = undefined;\n};\n\nconst extensions = computed(() => normalizeExtensions(props.extensions));\n\nconst visibleItems = useVisibleItems(data);\n\nconst lookup = computed(() => {\n return {\n modelValue: props.modelValue,\n dirPath: data.dirPath,\n storageHandle: data.storageEntry?.handle,\n };\n});\n\nconst query = (storageHandle: StorageHandle, dirPath: string) => {\n if (!getRawPlatformaInstance()) {\n return;\n }\n\n if (data.currentLoadingPath === dirPath) {\n return;\n }\n\n data.currentLoadingPath = dirPath;\n\n getRawPlatformaInstance()\n .lsDriver.listFiles(storageHandle, dirPath)\n .then((res) => {\n if (dirPath !== data.dirPath) {\n return;\n }\n\n data.items = notEmpty(res)\n .entries.map((item) => ({\n path: item.fullPath,\n name: item.name,\n isDir: item.type === \"dir\",\n canBeSelected:\n item.type === \"file\" &&\n (!extensions.value || extensions.value.some((ext) => item.fullPath.endsWith(ext))),\n handle: item.type === \"file\" ? item.handle : undefined,\n selected: false,\n }))\n .sort((a, b) => {\n if (a.isDir && !b.isDir) return -1;\n if (!a.isDir && b.isDir) return 1;\n // localeCompare for unicode alphabets\n return a.name.localeCompare(b.name);\n })\n .map((it, id) => ({ id, ...it }));\n\n data.lastSelected = undefined;\n })\n .catch((err) => (data.error = String(err)))\n .finally(() => {\n data.currentLoadingPath = undefined;\n });\n};\n\nconst load = () => {\n resetData();\n const { storageHandle, dirPath, modelValue } = lookup.value;\n if (storageHandle && modelValue) {\n query(storageHandle, dirPath);\n }\n};\n\nconst breadcrumbs = computed(() => getFilePathBreadcrumbs(data.dirPath));\n\nconst selectedFiles = computed(() =>\n data.items.filter((f) => f.canBeSelected && f.selected && !f.isDir),\n);\n\nconst isReady = computed(() => selectedFiles.value.length > 0 && data.storageEntry?.handle);\n\nconst getFilesToImport = () => ({\n storageHandle: notEmpty(data.storageEntry?.handle),\n files: selectedFiles.value.map((f) => f.handle!),\n});\n\nconst setDirPath = (dirPath: string) => {\n data.dirPath = dirPath;\n};\n\nconst selectFile = (ev: MouseEvent, file: FileDialogItem) => {\n const { shiftKey } = ev;\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n const { lastSelected } = data;\n\n ev.preventDefault();\n\n const items = visibleItems.value;\n\n if (file.canBeSelected) {\n if (!props.multi) {\n items.forEach((f) => (f.selected = false));\n }\n\n file.selected = !file.selected;\n\n if (!props.multi) {\n return;\n }\n\n if (!ctrlOrMetaKey && !shiftKey) {\n items.forEach((f) => {\n if (f.id !== file.id) {\n f.selected = false;\n }\n });\n }\n\n if (shiftKey && lastSelected !== undefined) {\n items.forEach((f) => {\n if (between(f.id, lastSelected, file.id)) {\n f.selected = true;\n }\n });\n }\n\n if (file.selected) {\n data.lastSelected = file.id;\n }\n }\n};\n\nconst changeAll = (selected: boolean) => {\n if (selected && !props.multi) {\n return;\n }\n\n visibleItems.value\n .filter((f) => f.canBeSelected)\n .forEach((file) => {\n file.selected = selected;\n });\n};\n\nconst selectAll = () => changeAll(true);\n\nconst deselectAll = () => changeAll(false);\n\nconst loadAvailableStorages = () => {\n resetData();\n deselectAll();\n if (!getRawPlatformaInstance()) {\n console.warn(\"platforma API is not found\");\n return;\n }\n getRawPlatformaInstance()\n .lsDriver.getStorageList()\n .then((storageEntries) => {\n // local storage is always returned by the ML, so we need to remove it from remote dialog manually\n storageEntries = storageEntries.filter(\n (it) => it.name !== \"local\" && !it.name.startsWith(\"local_disk_\"),\n );\n\n data.storageOptions = storageEntries.map((it) => ({\n text: it.name,\n value: it,\n }));\n\n if (props.autoSelectStorage) {\n tapIf(storageEntries[0], (entry) => {\n data.storageEntry = entry;\n });\n }\n })\n .catch((err) => (data.error = String(err)));\n};\n\nwatch(\n toRef(data, \"storageEntry\"),\n (entry) => {\n resetData();\n data.dirPath = entry?.initialFullPath ?? \"\";\n },\n { immediate: true },\n);\n\nwatch([() => data.dirPath, () => data.storageEntry], () => {\n load();\n});\n\nwatch(\n () => props.modelValue,\n (isOpen) => {\n if (isOpen) {\n loadAvailableStorages();\n } else {\n Object.assign(data, defaultData());\n }\n },\n { immediate: true },\n);\n\nuseEventListener(document, \"keydown\", (ev: KeyboardEvent) => {\n if (!props.modelValue) {\n return;\n }\n\n if (ev.target !== document.body) {\n return;\n }\n\n const ctrlOrMetaKey = isCtrlOrMeta(ev);\n\n if (ctrlOrMetaKey && ev.code === \"KeyA\") {\n ev.preventDefault();\n selectAll();\n }\n\n if (ctrlOrMetaKey && ev.shiftKey && ev.code === \"Period\") {\n ev.preventDefault();\n data.showHiddenItems = !data.showHiddenItems;\n }\n\n if (ev.code === \"Enter\") {\n props.submit();\n }\n});\n\ndefineExpose({\n isReady,\n getFilesToImport,\n});\n\nonMounted(loadAvailableStorages);\n\nconst lsContainerRef = ref<HTMLElement | undefined>();\n</script>\n\n<template>\n <div :class=\"style.remote\" @click.stop=\"deselectAll\">\n <div :class=\"style.search\">\n <div>\n <PlDropdown\n v-model=\"data.storageEntry\"\n label=\"Select storage\"\n :options=\"data.storageOptions\"\n />\n </div>\n <div>\n <PlSearchField v-model=\"data.search\" label=\"Search in folder\" clearable />\n </div>\n </div>\n <div :class=\"style['ls-container']\" ref=\"lsContainerRef\">\n <div :class=\"style['ls-head']\">\n <div :class=\"style['breadcrumbs']\">\n <template v-for=\"(s, i) in breadcrumbs\" :key=\"i\">\n <div :title=\"s.path\" @click=\"setDirPath(s.path)\">{{ s.name }}</div>\n <PlIcon16 v-if=\"s.index !== breadcrumbs.length - 1\" name=\"chevron-right\" />\n </template>\n </div>\n <div :class=\"style.selected\">\n <span>Selected: {{ selectedFiles.length }}</span>\n <Shortcuts :container=\"lsContainerRef\" />\n </div>\n </div>\n <div v-if=\"data.currentLoadingPath !== undefined\" class=\"ls-loader\">\n <i class=\"mask-24 mask-loading loader-icon\" />\n </div>\n <div v-else-if=\"!data.storageEntry\" :class=\"style['ls-empty']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">Select storage to preview</div>\n </div>\n <div v-else-if=\"data.error\" :class=\"style['ls-error']\">\n <div :class=\"style.cat\" />\n <div :class=\"style.message\">{{ data.error }}</div>\n </div>\n <div v-else :class=\"style['ls-body']\">\n <template v-for=\"file in visibleItems\" :key=\"file.id\">\n <div v-if=\"file.isDir\" :class=\"style.isDir\" @click=\"setDirPath(file.path)\">\n <PlIcon16 name=\"chevron-right\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n <div\n v-else\n :class=\"{ [style.canBeSelected]: file.canBeSelected, [style.selected]: file.selected }\"\n @click.stop=\"(ev) => selectFile(ev, file)\"\n >\n <PlMaskIcon16 name=\"box\" :class=\"style.isFile\" />\n <span v-text-overflown :title=\"file.name\">{{ file.name }}</span>\n </div>\n </template>\n </div>\n </div>\n </div>\n</template>\n"],"names":["isCtrlOrMeta","ev","props","__props","data","reactive","defaultData","resetData","extensions","computed","normalizeExtensions","visibleItems","useVisibleItems","lookup","_a","query","storageHandle","dirPath","getRawPlatformaInstance","res","notEmpty","item","ext","a","b","it","id","err","load","modelValue","breadcrumbs","getFilePathBreadcrumbs","selectedFiles","f","isReady","getFilesToImport","setDirPath","selectFile","file","shiftKey","ctrlOrMetaKey","lastSelected","items","between","changeAll","selected","selectAll","deselectAll","loadAvailableStorages","storageEntries","tapIf","entry","watch","toRef","isOpen","useEventListener","__expose","onMounted","lsContainerRef","ref","_createElementBlock","_normalizeClass","_unref","style","_createElementVNode","_createVNode","PlDropdown","_cache","$event","PlSearchField","_openBlock","_Fragment","_renderList","s","i","_toDisplayString","_hoisted_1","_createBlock","PlIcon16","Shortcuts","_hoisted_2","_createTextVNode","PlMaskIcon16"],"mappings":"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"}
@@ -1,3 +1,6 @@
1
- declare const _default: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
1
+ type __VLS_Props = {
2
+ container?: "body" | HTMLElement;
3
+ };
4
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
2
5
  export default _default;
3
6
  //# sourceMappingURL=Shortcuts.vue.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Shortcuts.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/Shortcuts.vue"],"names":[],"mappings":";AA4MA,wBAMG"}
1
+ {"version":3,"file":"Shortcuts.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/Shortcuts.vue"],"names":[],"mappings":"AA8GA,KAAK,WAAW,GAAG;IACjB,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CAClC,CAAC;;AAwGF,wBAOG"}
@@ -1,27 +1,31 @@
1
- import { defineComponent as s, createBlock as t, openBlock as d, unref as o, withCtx as u, createElementVNode as l, normalizeClass as n } from "vue";
2
- import a from "../PlTooltip/PlTooltip.vue.js";
3
- const m = /* @__PURE__ */ s({
1
+ import { defineComponent as o, createBlock as s, openBlock as d, unref as a, withCtx as r, createElementVNode as l, normalizeClass as e } from "vue";
2
+ import u from "../PlTooltip/PlTooltip.vue.js";
3
+ const m = /* @__PURE__ */ o({
4
4
  __name: "Shortcuts",
5
- setup(r) {
6
- return (i, e) => (d(), t(o(a), {
5
+ props: {
6
+ container: {}
7
+ },
8
+ setup(t) {
9
+ return (i, n) => (d(), s(a(u), {
7
10
  class: "info",
8
- position: "southwest",
9
- "max-width": "420px"
11
+ position: "bottom",
12
+ "max-width": "420px",
13
+ container: t.container
10
14
  }, {
11
- tooltip: u(() => [
15
+ tooltip: r(() => [
12
16
  l("span", {
13
- class: n(i.$style.title)
17
+ class: e(i.$style.title)
14
18
  }, "Shortcuts", 2),
15
19
  l("div", {
16
- class: n([i.$style.row, i.$style.head])
17
- }, [...e[0] || (e[0] = [
20
+ class: e([i.$style.row, i.$style.head])
21
+ }, [...n[0] || (n[0] = [
18
22
  l("div", null, null, -1),
19
23
  l("div", null, "MacOS", -1),
20
24
  l("div", null, "Windows/Linux", -1)
21
25
  ])], 2),
22
26
  l("div", {
23
- class: n([i.$style.row, i.$style.body])
24
- }, [...e[1] || (e[1] = [
27
+ class: e([i.$style.row, i.$style.body])
28
+ }, [...n[1] || (n[1] = [
25
29
  l("div", null, "Single File", -1),
26
30
  l("div", null, "Click the file", -1),
27
31
  l("div", null, "Click the file", -1),
@@ -37,7 +41,7 @@ const m = /* @__PURE__ */ s({
37
41
  ])], 2)
38
42
  ]),
39
43
  _: 1
40
- }));
44
+ }, 8, ["container"]));
41
45
  }
42
46
  });
43
47
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"Shortcuts.vue2.js","sources":["../../../src/components/PlFileDialog/Shortcuts.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlTooltip } from \"../PlTooltip\";\n</script>\n\n<template>\n <PlTooltip class=\"info\" position=\"southwest\" max-width=\"420px\">\n <template #tooltip>\n <span :class=\"$style.title\">Shortcuts</span>\n\n <div :class=\"[$style.row, $style.head]\">\n <div />\n <div>MacOS</div>\n <div>Windows/Linux</div>\n </div>\n\n <div :class=\"[$style.row, $style.body]\">\n <div>Single File</div>\n <div>Click the file</div>\n <div>Click the file</div>\n\n <div>Adjacent multiple files</div>\n <div>Hold Shift, click first and last files</div>\n <div>Hold Shift, click first and last files</div>\n\n <div>Non-adjacent multiple files</div>\n <div>Hold Command (⌘), click each file</div>\n <div>Hold Ctrl, click each file</div>\n\n <div>All files</div>\n <div>Press Command (⌘) + A</div>\n <div>Press Ctrl + A</div>\n </div>\n </template>\n </PlTooltip>\n</template>\n\n<style lang=\"css\" module>\n.title {\n display: inline-block;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n margin-bottom: 10px;\n}\n\n.row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n width: 100%;\n color: #fff;\n column-gap: 1px;\n\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.row > div:nth-child(3n + 1) {\n padding-left: 4px;\n}\n\n.row > div:nth-child(3n) {\n padding-right: 4px;\n}\n\n.head {\n background-color: #110529;\n position: relative;\n}\n\n.head:before {\n position: absolute;\n content: \"\";\n background-color: #231842;\n width: 12px;\n left: -12px;\n height: 100%;\n}\n\n.head:after {\n position: absolute;\n content: \"\";\n background-color: #231842;\n width: 12px;\n right: -12px;\n height: 100%;\n}\n\n.head > div {\n padding: 6px 12px;\n background-color: #231842;\n}\n\n.body {\n background-color: #231842;\n}\n\n.body > div {\n padding: 6px 12px;\n background: #110529;\n}\n</style>\n"],"names":["_createBlock","_unref","PlTooltip","_createElementVNode","_normalizeClass","$style"],"mappings":";;;;;2BAKEA,EA4BYC,EAAAC,CAAA,GAAA;AAAA,MA5BD,OAAM;AAAA,MAAO,UAAS;AAAA,MAAY,aAAU;AAAA,IAAA;MAC1C,WACT,MAA4C;AAAA,QAA5CC,EAA4C,QAAA;AAAA,UAArC,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA,GAAE,aAAS,CAAA;AAAA,QAErCF,EAIM,OAAA;AAAA,UAJA,UAAQE,EAAAA,OAAO,KAAKA,EAAAA,OAAO,IAAI,CAAA;AAAA,QAAA;UACnCF,EAAO,OAAA,MAAA,MAAA,EAAA;AAAA,UACPA,EAAgB,aAAX,SAAK,EAAA;AAAA,UACVA,EAAwB,aAAnB,iBAAa,EAAA;AAAA,QAAA;QAGpBA,EAgBM,OAAA;AAAA,UAhBA,UAAQE,EAAAA,OAAO,KAAKA,EAAAA,OAAO,IAAI,CAAA;AAAA,QAAA;UACnCF,EAAsB,aAAjB,eAAW,EAAA;AAAA,UAChBA,EAAyB,aAApB,kBAAc,EAAA;AAAA,UACnBA,EAAyB,aAApB,kBAAc,EAAA;AAAA,UAEnBA,EAAkC,aAA7B,2BAAuB,EAAA;AAAA,UAC5BA,EAAiD,aAA5C,0CAAsC,EAAA;AAAA,UAC3CA,EAAiD,aAA5C,0CAAsC,EAAA;AAAA,UAE3CA,EAAsC,aAAjC,+BAA2B,EAAA;AAAA,UAChCA,EAA4C,aAAvC,qCAAiC,EAAA;AAAA,UACtCA,EAAqC,aAAhC,8BAA0B,EAAA;AAAA,UAE/BA,EAAoB,aAAf,aAAS,EAAA;AAAA,UACdA,EAAgC,aAA3B,yBAAqB,EAAA;AAAA,UAC1BA,EAAyB,aAApB,kBAAc,EAAA;AAAA,QAAA;;;;;;"}
1
+ {"version":3,"file":"Shortcuts.vue2.js","sources":["../../../src/components/PlFileDialog/Shortcuts.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { PlTooltip } from \"../PlTooltip\";\n\ndefineProps<{\n container?: \"body\" | HTMLElement;\n}>();\n</script>\n\n<template>\n <PlTooltip class=\"info\" position=\"bottom\" max-width=\"420px\" :container=\"container\">\n <template #tooltip>\n <span :class=\"$style.title\">Shortcuts</span>\n\n <div :class=\"[$style.row, $style.head]\">\n <div />\n <div>MacOS</div>\n <div>Windows/Linux</div>\n </div>\n\n <div :class=\"[$style.row, $style.body]\">\n <div>Single File</div>\n <div>Click the file</div>\n <div>Click the file</div>\n\n <div>Adjacent multiple files</div>\n <div>Hold Shift, click first and last files</div>\n <div>Hold Shift, click first and last files</div>\n\n <div>Non-adjacent multiple files</div>\n <div>Hold Command (⌘), click each file</div>\n <div>Hold Ctrl, click each file</div>\n\n <div>All files</div>\n <div>Press Command (⌘) + A</div>\n <div>Press Ctrl + A</div>\n </div>\n </template>\n </PlTooltip>\n</template>\n\n<style lang=\"css\" module>\n.title {\n display: inline-block;\n font-size: 14px;\n font-weight: 600;\n line-height: 20px;\n margin-bottom: 10px;\n}\n\n.row {\n display: grid;\n grid-template-columns: repeat(3, 1fr);\n width: 100%;\n color: #fff;\n column-gap: 1px;\n\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n}\n\n.row > div:nth-child(3n + 1) {\n padding-left: 4px;\n}\n\n.row > div:nth-child(3n) {\n padding-right: 4px;\n}\n\n.head {\n background-color: #110529;\n position: relative;\n}\n\n.head:before {\n position: absolute;\n content: \"\";\n background-color: #231842;\n width: 12px;\n left: -12px;\n height: 100%;\n}\n\n.head:after {\n position: absolute;\n content: \"\";\n background-color: #231842;\n width: 12px;\n right: -12px;\n height: 100%;\n}\n\n.head > div {\n padding: 6px 12px;\n background-color: #231842;\n}\n\n.body {\n background-color: #231842;\n}\n\n.body > div {\n padding: 6px 12px;\n background: #110529;\n}\n</style>\n"],"names":["_createBlock","_unref","PlTooltip","__props","_createElementVNode","_normalizeClass","$style"],"mappings":";;;;;;;;2BASEA,EA4BYC,EAAAC,CAAA,GAAA;AAAA,MA5BD,OAAM;AAAA,MAAO,UAAS;AAAA,MAAS,aAAU;AAAA,MAAS,WAAWC,EAAA;AAAA,IAAA;MAC3D,WACT,MAA4C;AAAA,QAA5CC,EAA4C,QAAA;AAAA,UAArC,OAAKC,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA,GAAE,aAAS,CAAA;AAAA,QAErCF,EAIM,OAAA;AAAA,UAJA,UAAQE,EAAAA,OAAO,KAAKA,EAAAA,OAAO,IAAI,CAAA;AAAA,QAAA;UACnCF,EAAO,OAAA,MAAA,MAAA,EAAA;AAAA,UACPA,EAAgB,aAAX,SAAK,EAAA;AAAA,UACVA,EAAwB,aAAnB,iBAAa,EAAA;AAAA,QAAA;QAGpBA,EAgBM,OAAA;AAAA,UAhBA,UAAQE,EAAAA,OAAO,KAAKA,EAAAA,OAAO,IAAI,CAAA;AAAA,QAAA;UACnCF,EAAsB,aAAjB,eAAW,EAAA;AAAA,UAChBA,EAAyB,aAApB,kBAAc,EAAA;AAAA,UACnBA,EAAyB,aAApB,kBAAc,EAAA;AAAA,UAEnBA,EAAkC,aAA7B,2BAAuB,EAAA;AAAA,UAC5BA,EAAiD,aAA5C,0CAAsC,EAAA;AAAA,UAC3CA,EAAiD,aAA5C,0CAAsC,EAAA;AAAA,UAE3CA,EAAsC,aAAjC,+BAA2B,EAAA;AAAA,UAChCA,EAA4C,aAAvC,qCAAiC,EAAA;AAAA,UACtCA,EAAqC,aAAhC,8BAA0B,EAAA;AAAA,UAE/BA,EAAoB,aAAf,aAAS,EAAA;AAAA,UACdA,EAAgC,aAA3B,yBAAqB,EAAA;AAAA,UAC1BA,EAAyB,aAApB,kBAAc,EAAA;AAAA,QAAA;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as I, reactive as $, useSlots as q, computed as s, watch as R, ref as U, createElementBlock as u, openBlock as t, Fragment as x, createElementVNode as f, createVNode as B, normalizeClass as O, createCommentVNode as d, withModifiers as F, withKeys as z, createBlock as a, normalizeStyle as H, unref as r, toDisplayString as c, withCtx as K, renderSlot as L, createTextVNode as j } from "vue";
1
+ import { defineComponent as I, reactive as q, useSlots as R, computed as s, watch as U, ref as $, createElementBlock as u, openBlock as t, Fragment as x, createElementVNode as f, createVNode as B, normalizeClass as O, createCommentVNode as d, withModifiers as P, withKeys as z, createBlock as a, normalizeStyle as H, unref as r, toDisplayString as c, withCtx as K, renderSlot as L, createTextVNode as j } from "vue";
2
2
  /* empty css */
3
3
  import { prettyBytes as g } from "@milaboratories/helpers";
4
4
  import { getFileNameFromHandle as A, getFilePathFromHandle as G } from "@platforma-sdk/model";
@@ -40,37 +40,37 @@ const le = {
40
40
  fileDialogCloseOnOutsideClick: { type: Boolean, default: !0 }
41
41
  },
42
42
  emits: ["update:modelValue"],
43
- setup(l, { emit: N }) {
44
- const n = $({
43
+ setup(l, { emit: F }) {
44
+ const n = q({
45
45
  fileDialogOpen: !1,
46
46
  error: void 0
47
- }), v = q(), h = N, o = l, k = (e, i) => {
47
+ }), v = R(), h = F, o = l, k = (e, i) => {
48
48
  if (e)
49
49
  try {
50
50
  return i(e);
51
51
  } catch (p) {
52
52
  return n.error = p instanceof Error ? p.message : String(p), e;
53
53
  }
54
- }, V = s(() => k(o.modelValue, A)), S = s(() => k(o.modelValue, G)), P = s(() => o.progress && !o.progress.done), E = s(() => o.progress && o.progress.done), _ = s(() => J(n.error, o.error)), y = s(() => typeof _.value == "string"), b = s(() => {
54
+ }, V = s(() => k(o.modelValue, A)), S = s(() => k(o.modelValue, G)), N = s(() => o.progress && !o.progress.done), T = s(() => o.progress && o.progress.done), b = s(() => J(n.error, o.error)), y = s(() => typeof b.value == "string"), C = s(() => {
55
55
  const { status: e, done: i } = o.progress ?? {};
56
56
  return !e || !e.bytesTotal ? "" : e.bytesProcessed && !i ? g(e.bytesProcessed, {}) + " / " + g(e.bytesTotal, {}) : g(e.bytesTotal, {});
57
- }), T = s(() => {
57
+ }), E = s(() => {
58
58
  var i;
59
59
  const { progress: e } = o;
60
60
  return e ? {
61
61
  width: e.done ? "100%" : Math.round((((i = e.status) == null ? void 0 : i.progress) ?? 0) * 100) + "%"
62
62
  } : {};
63
- }), C = () => {
63
+ }), _ = () => {
64
64
  n.fileDialogOpen = !0;
65
65
  }, w = (e) => {
66
66
  e.files.length && h("update:modelValue", e.files[0]);
67
67
  }, M = () => h("update:modelValue", void 0);
68
- R(
68
+ U(
69
69
  () => o.modelValue,
70
70
  () => n.error = void 0,
71
71
  { immediate: !0 }
72
72
  );
73
- const D = U();
73
+ const D = $();
74
74
  return o.cellStyle || W(D), (e, i) => (t(), u(x, null, [
75
75
  f("div", {
76
76
  class: O([{ "pl-file-input__cell-style": !!l.cellStyle, "has-file": !!V.value }, "pl-file-input__envelope"])
@@ -80,11 +80,11 @@ const le = {
80
80
  ref: D,
81
81
  class: O([{ dashed: l.dashed, error: y.value }, "pl-file-input"]),
82
82
  tabindex: "0",
83
- onKeyup: z(C, ["enter"]),
84
- onClick: F(C, ["stop"])
83
+ onKeyup: z(_, ["enter"]),
84
+ onClick: P(_, ["stop"])
85
85
  }, [
86
86
  f("div", {
87
- style: H(T.value),
87
+ style: H(E.value),
88
88
  class: "pl-file-input__progress"
89
89
  }, null, 4),
90
90
  !l.cellStyle && l.label ? (t(), u("label", le, [
@@ -109,10 +109,10 @@ const le = {
109
109
  y.value ? (t(), a(r(m), {
110
110
  key: 1,
111
111
  name: "restart"
112
- })) : P.value ? (t(), a(r(m), {
112
+ })) : N.value ? (t(), a(r(m), {
113
113
  key: 2,
114
114
  name: "cloud-upload"
115
- })) : E.value ? (t(), a(r(m), {
115
+ })) : T.value ? (t(), a(r(m), {
116
116
  key: 3,
117
117
  name: "success"
118
118
  })) : (t(), a(r(m), {
@@ -123,16 +123,16 @@ const le = {
123
123
  "data-placeholder": l.placeholder ?? "Choose file",
124
124
  class: "pl-file-input__filename"
125
125
  }, c(V.value), 9, te),
126
- b.value ? (t(), u("div", oe, c(b.value), 1)) : d("", !0),
126
+ C.value ? (t(), u("div", oe, c(C.value), 1)) : d("", !0),
127
127
  l.modelValue ? (t(), a(r(m), {
128
128
  key: 6,
129
129
  class: "pl-file-input__clear",
130
130
  name: "close",
131
- onClick: F(M, ["stop"])
131
+ onClick: P(M, ["stop"])
132
132
  })) : d("", !0),
133
133
  B(Q, { class: "pl-file-input__contour" })
134
134
  ], 34),
135
- y.value ? (t(), u("div", re, c(_.value), 1)) : l.helper ? (t(), u("div", ie, c(l.helper), 1)) : d("", !0)
135
+ y.value ? (t(), u("div", re, c(b.value), 1)) : l.helper ? (t(), u("div", ie, c(l.helper), 1)) : d("", !0)
136
136
  ], 2),
137
137
  B(r(X), {
138
138
  modelValue: n.fileDialogOpen,