@milaboratories/uikit 2.10.26 → 2.10.27

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 (73) hide show
  1. package/.turbo/turbo-build.log +47 -48
  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 +6 -0
  6. package/dist/components/DataTable/TableComponent.vue.js +15 -16
  7. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  8. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +33 -33
  9. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +17 -17
  10. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +17 -17
  11. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +12 -12
  12. package/dist/components/PlChip/PlChip.vue.js +8 -8
  13. package/dist/components/PlDropdown/PlDropdown.vue.js +27 -27
  14. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +39 -39
  15. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +20 -20
  16. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts +3 -1
  17. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts.map +1 -1
  18. package/dist/components/PlFileDialog/Remote.vue.d.ts +3 -1
  19. package/dist/components/PlFileDialog/Remote.vue.d.ts.map +1 -1
  20. package/dist/components/PlFileDialog/Remote.vue.js +80 -76
  21. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  22. package/dist/components/PlFileDialog/Shortcuts.vue.d.ts +4 -1
  23. package/dist/components/PlFileDialog/Shortcuts.vue.d.ts.map +1 -1
  24. package/dist/components/PlFileDialog/Shortcuts.vue2.js +18 -14
  25. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  26. package/dist/components/PlFileInput/PlFileInput.vue.js +17 -17
  27. package/dist/components/PlLogView/PlLogView.vue.js +22 -22
  28. package/dist/components/PlNumberField/PlNumberField.vue.js +8 -8
  29. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +2 -3
  30. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  31. package/dist/components/PlTabs/Tab.vue.d.ts +42 -12
  32. package/dist/components/PlTabs/Tab.vue.d.ts.map +1 -1
  33. package/dist/components/PlTabs/Tab.vue.js +6 -6
  34. package/dist/components/PlTextArea/PlTextArea.vue.js +22 -22
  35. package/dist/components/PlTextField/PlTextField.vue.js +14 -14
  36. package/dist/components/PlTooltip/PlTooltip.vue.d.ts +30 -3
  37. package/dist/components/PlTooltip/PlTooltip.vue.d.ts.map +1 -1
  38. package/dist/components/PlTooltip/PlTooltip.vue.js +7 -110
  39. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  40. package/dist/components/PlTooltip/PlTooltip.vue2.js +132 -2
  41. package/dist/components/PlTooltip/PlTooltip.vue2.js.map +1 -1
  42. package/dist/components/PlTooltip/PlTooltip.vue3.js +26 -0
  43. package/dist/components/PlTooltip/PlTooltip.vue3.js.map +1 -0
  44. package/dist/components/Slider.vue.d.ts +1 -1
  45. package/dist/components/Slider.vue.d.ts.map +1 -1
  46. package/dist/components/Slider.vue.js +21 -21
  47. package/dist/components/SliderRange.vue.d.ts +1 -1
  48. package/dist/components/SliderRange.vue.d.ts.map +1 -1
  49. package/dist/components/SliderRange.vue.js +31 -31
  50. package/dist/components/SliderRangeTriple.vue.d.ts +1 -1
  51. package/dist/components/SliderRangeTriple.vue.d.ts.map +1 -1
  52. package/dist/components/SliderRangeTriple.vue.js +23 -23
  53. package/dist/index.js +1 -1
  54. package/dist/utils/DoubleContour.vue2.js +23 -0
  55. package/dist/utils/DoubleContour.vue2.js.map +1 -0
  56. package/package.json +4 -4
  57. package/src/assets/base.scss +4 -1
  58. package/src/assets/mixins.scss +1 -2
  59. package/src/assets/utils.scss +1 -1
  60. package/src/components/PlFileDialog/Remote.vue +5 -3
  61. package/src/components/PlFileDialog/Shortcuts.vue +5 -1
  62. package/src/components/PlTooltip/PlTooltip.vue +227 -32
  63. package/dist/components/PlTooltip/Beak.vue.d.ts +0 -3
  64. package/dist/components/PlTooltip/Beak.vue.d.ts.map +0 -1
  65. package/dist/components/PlTooltip/Beak.vue.js +0 -23
  66. package/dist/components/PlTooltip/Beak.vue.js.map +0 -1
  67. package/dist/components/PlTooltip/useTooltipPosition.d.ts +0 -12
  68. package/dist/components/PlTooltip/useTooltipPosition.d.ts.map +0 -1
  69. package/dist/components/PlTooltip/useTooltipPosition.js +0 -18
  70. package/dist/components/PlTooltip/useTooltipPosition.js.map +0 -1
  71. package/src/components/PlTooltip/Beak.vue +0 -12
  72. package/src/components/PlTooltip/pl-tooltip.scss +0 -117
  73. 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,