@milaboratories/uikit 2.6.2 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/.turbo/turbo-build.log +135 -135
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +6 -0
  4. package/dist/base/BtnBase.vue.js +18 -18
  5. package/dist/base/BtnBase.vue.js.map +1 -1
  6. package/dist/components/ContextProvider.vue.js.map +1 -1
  7. package/dist/components/DataTable/BaseCellComponent.vue.js +20 -20
  8. package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
  9. package/dist/components/DataTable/ColumnCaret.vue.js +6 -6
  10. package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
  11. package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
  12. package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
  13. package/dist/components/DataTable/TScroll.vue.js +12 -12
  14. package/dist/components/DataTable/TScroll.vue.js.map +1 -1
  15. package/dist/components/DataTable/TableComponent.vue.js +1 -1
  16. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  17. package/dist/components/DataTable/TdCell.vue.js +36 -36
  18. package/dist/components/DataTable/TdCell.vue.js.map +1 -1
  19. package/dist/components/DataTable/ThCell.vue.js +27 -27
  20. package/dist/components/DataTable/ThCell.vue.js.map +1 -1
  21. package/dist/components/DataTable/TrBody.vue.js +12 -12
  22. package/dist/components/DataTable/TrBody.vue.js.map +1 -1
  23. package/dist/components/DataTable/TrHead.vue.js.map +1 -1
  24. package/dist/components/DataTable/assets/TableIcon.vue.js +2 -2
  25. package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
  26. package/dist/components/DropdownListItem.vue.js +18 -18
  27. package/dist/components/DropdownListItem.vue.js.map +1 -1
  28. package/dist/components/HScroll.vue.js.map +1 -1
  29. package/dist/components/InputRange.vue.js.map +1 -1
  30. package/dist/components/LongText.vue.js +1 -1
  31. package/dist/components/LongText.vue.js.map +1 -1
  32. package/dist/components/LongText.vue3.js +1 -1
  33. package/dist/components/PlAccordion/ExpandTransition.vue.js +27 -0
  34. package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
  35. package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -1
  36. package/dist/components/PlAccordion/PlAccordion.vue.js.map +1 -1
  37. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
  38. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  39. package/dist/components/PlAlert/PlAlert.vue.js +23 -23
  40. package/dist/components/PlAlert/PlAlert.vue.js.map +1 -1
  41. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +86 -86
  42. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  43. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +83 -83
  44. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
  45. package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
  46. package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
  47. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js +21 -21
  48. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
  49. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +34 -34
  50. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
  51. package/dist/components/PlBtnLink/PlBtnLink.vue.js +12 -12
  52. package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
  53. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
  54. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
  55. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +31 -31
  56. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
  57. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +18 -18
  58. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  59. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  60. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +15 -15
  61. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  62. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  63. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  64. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  65. package/dist/components/PlCheckbox/PlCheckbox.vue.js +13 -13
  66. package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
  67. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js +6 -6
  68. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
  69. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +28 -28
  70. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
  71. package/dist/components/PlChip/PlChip.vue.js +20 -20
  72. package/dist/components/PlChip/PlChip.vue.js.map +1 -1
  73. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  74. package/dist/components/PlConfirmDialog.vue.js +14 -14
  75. package/dist/components/PlConfirmDialog.vue.js.map +1 -1
  76. package/dist/components/PlDialogModal/PlDialogModal.vue.js +30 -30
  77. package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  78. package/dist/components/PlDropdown/OptionList.vue.js +40 -40
  79. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
  80. package/dist/components/PlDropdown/PlDropdown.vue.js +89 -89
  81. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  82. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +92 -92
  83. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
  84. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
  85. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +4 -4
  86. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
  87. package/dist/components/PlDropdownLine/ResizableInput.vue.js +12 -12
  88. package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
  89. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +70 -70
  90. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
  91. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts +1 -1
  92. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
  93. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -11
  94. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  95. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts +1 -1
  96. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js +36 -36
  97. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
  98. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  99. package/dist/components/PlElementList/PlElementListItem.vue2.js +67 -67
  100. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  101. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  102. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
  103. package/dist/components/PlFileDialog/Local.vue.js +24 -24
  104. package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
  105. package/dist/components/PlFileDialog/PlFileDialog.vue.js +38 -38
  106. package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
  107. package/dist/components/PlFileDialog/Remote.vue.js +2 -2
  108. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  109. package/dist/components/PlFileDialog/Shortcuts.vue2.js +4 -4
  110. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  111. package/dist/components/PlFileInput/PlFileInput.vue.d.ts +1 -1
  112. package/dist/components/PlFileInput/PlFileInput.vue.js +75 -75
  113. package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  114. package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
  115. package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
  116. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +11 -11
  117. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
  118. package/dist/components/PlLogView/PlLogView.vue.js +58 -58
  119. package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  120. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js +22 -22
  121. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
  122. package/dist/components/PlNumberField/PlNumberField.vue.d.ts +1 -1
  123. package/dist/components/PlNumberField/PlNumberField.vue.js +75 -75
  124. package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
  125. package/dist/components/PlProgressBar/PlProgressBar.vue.js +12 -12
  126. package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
  127. package/dist/components/PlProgressCell/PlProgressCell.vue.js +20 -20
  128. package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
  129. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  130. package/dist/components/PlRadio/PlRadioGroup.vue2.js +8 -8
  131. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  132. package/dist/components/PlSearchField/PlSearchField.vue2.js +19 -19
  133. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  134. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +8 -8
  135. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  136. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  137. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  138. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +1 -1
  139. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  140. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  141. package/dist/components/PlSplash/PlSplash.vue.js +16 -16
  142. package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
  143. package/dist/components/PlStatusTag/PlStatusTag.vue.js +7 -7
  144. package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
  145. package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
  146. package/dist/components/PlTabs/PlTabs.vue.js +18 -18
  147. package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
  148. package/dist/components/PlTabs/Tab.vue.js +9 -9
  149. package/dist/components/PlTabs/Tab.vue.js.map +1 -1
  150. package/dist/components/PlTextArea/PlTextArea.vue.js +51 -51
  151. package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
  152. package/dist/components/PlTextField/PlTextField.vue.js +62 -62
  153. package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
  154. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js +14 -14
  155. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
  156. package/dist/components/PlTooltip/Beak.vue.js +2 -2
  157. package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
  158. package/dist/components/PlTooltip/PlTooltip.vue.js +50 -50
  159. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  160. package/dist/components/Scrollable.vue.js.map +1 -1
  161. package/dist/components/Slider.vue.js +35 -35
  162. package/dist/components/Slider.vue.js.map +1 -1
  163. package/dist/components/SliderRange.vue.js +47 -47
  164. package/dist/components/SliderRange.vue.js.map +1 -1
  165. package/dist/components/SliderRangeTriple.vue.js +47 -47
  166. package/dist/components/SliderRangeTriple.vue.js.map +1 -1
  167. package/dist/components/TabItem.vue.js.map +1 -1
  168. package/dist/components/ThemeSwitcher.vue.js +2 -2
  169. package/dist/components/ThemeSwitcher.vue.js.map +1 -1
  170. package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
  171. package/dist/components/VScroll.vue.js.map +1 -1
  172. package/dist/components/contextMenu/Menu.vue2.js +12 -12
  173. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  174. package/dist/index.js +1 -1
  175. package/dist/layout/PlBlockPage/PlBlockPage.vue.js +27 -27
  176. package/dist/layout/PlBlockPage/PlBlockPage.vue.js.map +1 -1
  177. package/dist/layout/PlContainer/PlContainer.vue.js +10 -10
  178. package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
  179. package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
  180. package/dist/layout/PlRow/PlRow.vue.js +8 -8
  181. package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
  182. package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
  183. package/dist/utils/DoubleContour.vue.js +9 -9
  184. package/dist/utils/DoubleContour.vue.js.map +1 -1
  185. package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
  186. package/dist/utils/PlCloseModalBtn.vue.js +2 -2
  187. package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
  188. package/dist/utils/TextLabel.vue.js.map +1 -1
  189. package/package.json +4 -4
  190. package/dist/utils/DoubleContour.vue2.js +0 -23
  191. package/dist/utils/DoubleContour.vue2.js.map +0 -1
@@ -1,28 +1,28 @@
1
- import { defineComponent as I, reactive as w, computed as P, createElementBlock as l, openBlock as a, withModifiers as S, normalizeClass as D, unref as p, createVNode as C, createElementVNode as N, createCommentVNode as v, toDisplayString as c } from "vue";
2
- import g from "./pl-file-dialog.module.scss.js";
1
+ import { defineComponent as I, reactive as w, computed as P, createElementBlock as a, openBlock as c, withModifiers as S, normalizeClass as v, unref as m, createVNode as C, createElementVNode as N, createCommentVNode as g, toDisplayString as p } from "vue";
2
+ import h from "./pl-file-dialog.module.scss.js";
3
3
  import T from "../PlIcon24/PlIcon24.vue.js";
4
- import { getRawPlatformaInstance as m } from "@platforma-sdk/model";
5
- import { normalizeExtensions as _ } from "./utils.js";
6
- const B = {
4
+ import { getRawPlatformaInstance as f } from "@platforma-sdk/model";
5
+ import { normalizeExtensions as B } from "./utils.js";
6
+ const E = {
7
7
  key: 1,
8
8
  class: "alert-error"
9
- }, z = /* @__PURE__ */ I({
9
+ }, A = /* @__PURE__ */ I({
10
10
  __name: "Local",
11
11
  props: {
12
12
  importFiles: { type: Function },
13
13
  multi: { type: Boolean },
14
14
  extensions: {}
15
15
  },
16
- setup(h) {
17
- const o = h, s = w({
16
+ setup(s) {
17
+ const o = s, l = w({
18
18
  error: void 0
19
19
  }), x = P(() => o.multi ? "Drag & Drop files here or click to add" : "Drag & Drop file here or click to add"), k = async (r) => {
20
- var f, d, u;
21
- const t = (d = (f = m()) == null ? void 0 : f.lsDriver) == null ? void 0 : d.fileToImportHandle;
20
+ var d, u, D;
21
+ const t = (u = (d = f()) == null ? void 0 : d.lsDriver) == null ? void 0 : u.fileToImportHandle;
22
22
  if (!t)
23
23
  return console.error("API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available");
24
- const n = _(o.extensions), e = await Promise.all(
25
- [...((u = r.dataTransfer) == null ? void 0 : u.files) ?? []].filter((i) => !!i).filter((i) => n ? n.some((F) => i.name.endsWith(F)) : !0).map((i) => t(i))
24
+ const n = B(o.extensions), e = await Promise.all(
25
+ [...((D = r.dataTransfer) == null ? void 0 : D.files) ?? []].filter((i) => !!i).filter((i) => n ? n.some((F) => i.name.endsWith(F)) : !0).map((i) => t(i))
26
26
  );
27
27
  e.length && o.importFiles({
28
28
  files: e
@@ -35,40 +35,40 @@ const B = {
35
35
  extensions: [...o.extensions]
36
36
  }
37
37
  ] : [];
38
- o.multi ? (t = m()) == null || t.lsDriver.showOpenMultipleFilesDialog({
38
+ o.multi ? (t = f()) == null || t.lsDriver.showOpenMultipleFilesDialog({
39
39
  title: "Select files to import",
40
40
  filters: r
41
41
  }).then(({ files: e }) => {
42
42
  e && o.importFiles({
43
43
  files: e
44
44
  });
45
- }).catch((e) => s.error = e) : (n = m()) == null || n.lsDriver.showOpenSingleFileDialog({
45
+ }).catch((e) => l.error = e) : (n = f()) == null || n.lsDriver.showOpenSingleFileDialog({
46
46
  title: "Select file to import",
47
47
  filters: r
48
48
  }).then(({ file: e }) => {
49
49
  e && o.importFiles({
50
50
  files: [e]
51
51
  });
52
- }).catch((e) => s.error = e);
52
+ }).catch((e) => l.error = e);
53
53
  };
54
- return (r, t) => (a(), l("div", {
55
- class: D(p(g).local),
54
+ return (r, t) => (c(), a("div", {
55
+ class: v(m(h).local),
56
56
  onDrop: k,
57
57
  onDragover: t[0] || (t[0] = S(() => {
58
58
  }, ["prevent"])),
59
59
  onClick: y
60
60
  }, [
61
- C(p(T), { name: "cloud-upload" }),
62
- N("span", null, c(x.value), 1),
63
- r.extensions ? (a(), l("span", {
61
+ C(m(T), { name: "cloud-upload" }),
62
+ N("span", null, p(x.value), 1),
63
+ s.extensions ? (c(), a("span", {
64
64
  key: 0,
65
- class: D(p(g).supported)
66
- }, "Supported formats: " + c(r.extensions.join(", ")), 3)) : v("", !0),
67
- s.error ? (a(), l("span", B, c(s.error), 1)) : v("", !0)
65
+ class: v(m(h).supported)
66
+ }, "Supported formats: " + p(s.extensions.join(", ")), 3)) : g("", !0),
67
+ l.error ? (c(), a("span", E, p(l.error), 1)) : g("", !0)
68
68
  ], 34));
69
69
  }
70
70
  });
71
71
  export {
72
- z as default
72
+ A as default
73
73
  };
74
74
  //# sourceMappingURL=Local.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Local.vue.js","sources":["../../../src/components/PlFileDialog/Local.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport style from './pl-file-dialog.module.scss';\nimport type { ImportedFiles } from '../../types';\nimport { PlIcon24 } from '../PlIcon24';\nimport { computed, reactive } from 'vue';\nimport { getRawPlatformaInstance, type OpenDialogFilter } from '@platforma-sdk/model';\nimport { normalizeExtensions } from './utils';\n\nconst props = defineProps<{\n importFiles: (value: ImportedFiles) => void;\n multi?: boolean;\n extensions?: string[];\n}>();\n\nconst data = reactive({\n error: undefined as unknown,\n});\n\nconst label = computed(() => (props.multi ? 'Drag & Drop files here or click to add' : 'Drag & Drop file here or click to add'));\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error('API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available');\n }\n\n const extensions = normalizeExtensions(props.extensions);\n\n const files = await Promise.all(\n [...(ev.dataTransfer?.files ?? [])]\n .filter((f) => !!f)\n .filter((f) => (extensions ? extensions.some((ext) => f.name.endsWith(ext)) : true))\n .map((file) => {\n return fileToImportHandle(file);\n }),\n );\n\n if (files.length) {\n props.importFiles({\n files,\n });\n }\n};\n\nconst openNativeDialog = async () => {\n const filters: OpenDialogFilter[] = props.extensions\n ? [\n {\n name: 'All Files',\n extensions: [...props.extensions],\n },\n ]\n : [];\n\n if (props.multi) {\n getRawPlatformaInstance()?.lsDriver\n .showOpenMultipleFilesDialog({\n title: 'Select files to import',\n filters,\n })\n .then(({ files }) => {\n if (files) {\n props.importFiles({\n files,\n });\n }\n })\n .catch((err) => (data.error = err));\n } else {\n getRawPlatformaInstance()?.lsDriver\n .showOpenSingleFileDialog({\n title: 'Select file to import',\n filters,\n })\n .then(({ file }) => {\n if (file) {\n props.importFiles({\n files: [file],\n });\n }\n })\n .catch((err) => (data.error = err));\n }\n};\n</script>\n\n<template>\n <div :class=\"style.local\" @drop=\"onDrop\" @dragover.prevent @click=\"openNativeDialog\">\n <PlIcon24 name=\"cloud-upload\" />\n <span>{{ label }}</span>\n <span v-if=\"extensions\" :class=\"style.supported\">Supported formats: {{ extensions.join(', ') }}</span>\n <span v-if=\"data.error\" class=\"alert-error\">{{ data.error }}</span>\n </div>\n</template>\n"],"names":["props","__props","data","reactive","label","computed","onDrop","ev","fileToImportHandle","_b","_a","getRawPlatformaInstance","extensions","normalizeExtensions","files","_c","f","ext","file","openNativeDialog","filters","err"],"mappings":";;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GAMRC,IAAOC,EAAS;AAAA,MACpB,OAAO;AAAA,IAAA,CACR,GAEKC,IAAQC,EAAS,MAAOL,EAAM,QAAQ,2CAA2C,uCAAwC,GAEzHM,IAAS,OAAOC,MAAkB;;AACtC,YAAMC,KAAqBC,KAAAC,IAAAC,QAAA,gBAAAD,EAA2B,aAA3B,gBAAAD,EAAqC;AAEhE,UAAI,CAACD;AACH,eAAO,QAAQ,MAAM,4EAA4E;AAGnG,YAAMI,IAAaC,EAAoBb,EAAM,UAAU,GAEjDc,IAAQ,MAAM,QAAQ;AAAA,QAC1B,CAAC,KAAIC,IAAAR,EAAG,iBAAH,gBAAAQ,EAAiB,UAAS,CAAA,CAAG,EAC/B,OAAO,CAACC,MAAM,CAAC,CAACA,CAAC,EACjB,OAAO,CAACA,MAAOJ,IAAaA,EAAW,KAAK,CAACK,MAAQD,EAAE,KAAK,SAASC,CAAG,CAAC,IAAI,EAAK,EAClF,IAAI,CAACC,MACGV,EAAmBU,CAAI,CAC/B;AAAA,MAAA;AAGL,MAAIJ,EAAM,UACRd,EAAM,YAAY;AAAA,QAChB,OAAAc;AAAA,MAAA,CACD;AAAA,IAEL,GAEMK,IAAmB,YAAY;;AACnC,YAAMC,IAA8BpB,EAAM,aACtC;AAAA,QACE;AAAA,UACE,MAAM;AAAA,UACN,YAAY,CAAC,GAAGA,EAAM,UAAU;AAAA,QAAA;AAAA,MAClC,IAEF,CAAA;AAEJ,MAAIA,EAAM,SACRU,IAAAC,EAAA,MAAA,QAAAD,EAA2B,SACxB,4BAA4B;AAAA,QAC3B,OAAO;AAAA,QACP,SAAAU;AAAA,MAAA,GAED,KAAK,CAAC,EAAE,OAAAN,QAAY;AACnB,QAAIA,KACFd,EAAM,YAAY;AAAA,UAChB,OAAAc;AAAA,QAAA,CACD;AAAA,MAEL,GACC,MAAM,CAACO,MAASnB,EAAK,QAAQmB,MAEhCZ,IAAAE,EAAA,MAAA,QAAAF,EAA2B,SACxB,yBAAyB;AAAA,QACxB,OAAO;AAAA,QACP,SAAAW;AAAA,MAAA,GAED,KAAK,CAAC,EAAE,MAAAF,QAAW;AAClB,QAAIA,KACFlB,EAAM,YAAY;AAAA,UAChB,OAAO,CAACkB,CAAI;AAAA,QAAA,CACb;AAAA,MAEL,GACC,MAAM,CAACG,MAASnB,EAAK,QAAQmB;AAAA,IAEpC;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"Local.vue.js","sources":["../../../src/components/PlFileDialog/Local.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport style from './pl-file-dialog.module.scss';\nimport type { ImportedFiles } from '../../types';\nimport { PlIcon24 } from '../PlIcon24';\nimport { computed, reactive } from 'vue';\nimport { getRawPlatformaInstance, type OpenDialogFilter } from '@platforma-sdk/model';\nimport { normalizeExtensions } from './utils';\n\nconst props = defineProps<{\n importFiles: (value: ImportedFiles) => void;\n multi?: boolean;\n extensions?: string[];\n}>();\n\nconst data = reactive({\n error: undefined as unknown,\n});\n\nconst label = computed(() => (props.multi ? 'Drag & Drop files here or click to add' : 'Drag & Drop file here or click to add'));\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error('API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available');\n }\n\n const extensions = normalizeExtensions(props.extensions);\n\n const files = await Promise.all(\n [...(ev.dataTransfer?.files ?? [])]\n .filter((f) => !!f)\n .filter((f) => (extensions ? extensions.some((ext) => f.name.endsWith(ext)) : true))\n .map((file) => {\n return fileToImportHandle(file);\n }),\n );\n\n if (files.length) {\n props.importFiles({\n files,\n });\n }\n};\n\nconst openNativeDialog = async () => {\n const filters: OpenDialogFilter[] = props.extensions\n ? [\n {\n name: 'All Files',\n extensions: [...props.extensions],\n },\n ]\n : [];\n\n if (props.multi) {\n getRawPlatformaInstance()?.lsDriver\n .showOpenMultipleFilesDialog({\n title: 'Select files to import',\n filters,\n })\n .then(({ files }) => {\n if (files) {\n props.importFiles({\n files,\n });\n }\n })\n .catch((err) => (data.error = err));\n } else {\n getRawPlatformaInstance()?.lsDriver\n .showOpenSingleFileDialog({\n title: 'Select file to import',\n filters,\n })\n .then(({ file }) => {\n if (file) {\n props.importFiles({\n files: [file],\n });\n }\n })\n .catch((err) => (data.error = err));\n }\n};\n</script>\n\n<template>\n <div :class=\"style.local\" @drop=\"onDrop\" @dragover.prevent @click=\"openNativeDialog\">\n <PlIcon24 name=\"cloud-upload\" />\n <span>{{ label }}</span>\n <span v-if=\"extensions\" :class=\"style.supported\">Supported formats: {{ extensions.join(', ') }}</span>\n <span v-if=\"data.error\" class=\"alert-error\">{{ data.error }}</span>\n </div>\n</template>\n"],"names":["props","__props","data","reactive","label","computed","onDrop","ev","fileToImportHandle","_b","_a","getRawPlatformaInstance","extensions","normalizeExtensions","files","_c","f","ext","file","openNativeDialog","filters","err","_createElementBlock","_normalizeClass","_unref","style","_createVNode","PlIcon24","_createElementVNode","_toDisplayString","_openBlock","_hoisted_1"],"mappings":";;;;;;;;;;;;;;;;AAQA,UAAMA,IAAQC,GAMRC,IAAOC,EAAS;AAAA,MACpB,OAAO;AAAA,IAAA,CACR,GAEKC,IAAQC,EAAS,MAAOL,EAAM,QAAQ,2CAA2C,uCAAwC,GAEzHM,IAAS,OAAOC,MAAkB;;AACtC,YAAMC,KAAqBC,KAAAC,IAAAC,QAAA,gBAAAD,EAA2B,aAA3B,gBAAAD,EAAqC;AAEhE,UAAI,CAACD;AACH,eAAO,QAAQ,MAAM,4EAA4E;AAGnG,YAAMI,IAAaC,EAAoBb,EAAM,UAAU,GAEjDc,IAAQ,MAAM,QAAQ;AAAA,QAC1B,CAAC,KAAIC,IAAAR,EAAG,iBAAH,gBAAAQ,EAAiB,UAAS,CAAA,CAAG,EAC/B,OAAO,CAACC,MAAM,CAAC,CAACA,CAAC,EACjB,OAAO,CAACA,MAAOJ,IAAaA,EAAW,KAAK,CAACK,MAAQD,EAAE,KAAK,SAASC,CAAG,CAAC,IAAI,EAAK,EAClF,IAAI,CAACC,MACGV,EAAmBU,CAAI,CAC/B;AAAA,MAAA;AAGL,MAAIJ,EAAM,UACRd,EAAM,YAAY;AAAA,QAChB,OAAAc;AAAA,MAAA,CACD;AAAA,IAEL,GAEMK,IAAmB,YAAY;;AACnC,YAAMC,IAA8BpB,EAAM,aACtC;AAAA,QACE;AAAA,UACE,MAAM;AAAA,UACN,YAAY,CAAC,GAAGA,EAAM,UAAU;AAAA,QAAA;AAAA,MAClC,IAEF,CAAA;AAEJ,MAAIA,EAAM,SACRU,IAAAC,EAAA,MAAA,QAAAD,EAA2B,SACxB,4BAA4B;AAAA,QAC3B,OAAO;AAAA,QACP,SAAAU;AAAA,MAAA,GAED,KAAK,CAAC,EAAE,OAAAN,QAAY;AACnB,QAAIA,KACFd,EAAM,YAAY;AAAA,UAChB,OAAAc;AAAA,QAAA,CACD;AAAA,MAEL,GACC,MAAM,CAACO,MAASnB,EAAK,QAAQmB,MAEhCZ,IAAAE,EAAA,MAAA,QAAAF,EAA2B,SACxB,yBAAyB;AAAA,QACxB,OAAO;AAAA,QACP,SAAAW;AAAA,MAAA,GAED,KAAK,CAAC,EAAE,MAAAF,QAAW;AAClB,QAAIA,KACFlB,EAAM,YAAY;AAAA,UAChB,OAAO,CAACkB,CAAI;AAAA,QAAA,CACb;AAAA,MAEL,GACC,MAAM,CAACG,MAASnB,EAAK,QAAQmB;AAAA,IAEpC;2BAIEC,EAKM,OAAA;AAAA,MALA,OAAKC,EAAEC,EAAAC,CAAA,EAAM,KAAK;AAAA,MAAG,QAAAnB;AAAA,MAAe,8BAAD,MAAA;AAAA,MAAA,GAAiB,CAAA,SAAA,CAAA;AAAA,MAAE,SAAOa;AAAA,IAAA;MACjEO,EAAgCF,EAAAG,CAAA,GAAA,EAAtB,MAAK,gBAAc;AAAA,MAC7BC,EAAwB,gBAAfxB,EAAA,KAAK,GAAA,CAAA;AAAA,MACFH,EAAA,mBAAZqB,EAAsG,QAAA;AAAA;QAA7E,OAAKC,EAAEC,EAAAC,CAAA,EAAM,SAAS;AAAA,MAAA,GAAE,wBAAmBI,EAAG5B,EAAA,WAAW,KAAI,IAAA,CAAA,GAAA,CAAA;MAC1EC,EAAK,SAAjB4B,EAAA,GAAAR,EAAmE,QAAnES,GAAmEF,EAApB3B,EAAK,KAAK,GAAA,CAAA;;;;"}
@@ -1,4 +1,4 @@
1
- import { defineComponent as B, ref as S, computed as b, useTemplateRef as F, createBlock as n, openBlock as u, unref as t, withModifiers as p, normalizeClass as O, createSlots as R, withCtx as i, createElementVNode as w, createCommentVNode as v, createVNode as d, mergeProps as y, createTextVNode as f, toDisplayString as x } from "vue";
1
+ import { defineComponent as _, ref as B, computed as S, useTemplateRef as b, createBlock as u, openBlock as d, unref as l, withModifiers as p, normalizeClass as F, createSlots as O, withCtx as i, createElementVNode as R, createCommentVNode as y, createVNode as f, mergeProps as k, createTextVNode as c, toDisplayString as w } from "vue";
2
2
  import I from "./pl-file-dialog.module.scss.js";
3
3
  import { notEmpty as N } from "@milaboratories/helpers";
4
4
  import T from "../PlDialogModal/PlDialogModal.vue.js";
@@ -7,7 +7,7 @@ import D from "../PlBtnGhost/PlBtnGhost.vue.js";
7
7
  import E from "../PlBtnGroup/PlBtnGroup.vue.js";
8
8
  import P from "./Remote.vue.js";
9
9
  import U from "./Local.vue.js";
10
- const j = { style: { margin: "0 24px" } }, Q = /* @__PURE__ */ B({
10
+ const j = { style: { margin: "0 24px" } }, Q = /* @__PURE__ */ _({
11
11
  __name: "PlFileDialog",
12
12
  props: {
13
13
  modelValue: { type: Boolean },
@@ -18,8 +18,8 @@ const j = { style: { margin: "0 24px" } }, Q = /* @__PURE__ */ B({
18
18
  closeOnOutsideClick: { type: Boolean, default: !0 }
19
19
  },
20
20
  emits: ["update:modelValue", "import:files"],
21
- setup(k, { emit: V }) {
22
- const a = V, C = k, l = S("local"), _ = b(() => C.multi ? "Select Files to Import" : "Select File to Import"), g = [
21
+ setup(m, { emit: V }) {
22
+ const n = V, C = m, o = B("local"), g = S(() => C.multi ? "Select Files to Import" : "Select File to Import"), $ = [
23
23
  {
24
24
  label: "My Computer",
25
25
  value: "local"
@@ -28,67 +28,67 @@ const j = { style: { margin: "0 24px" } }, Q = /* @__PURE__ */ B({
28
28
  label: "Remote",
29
29
  value: "remote"
30
30
  }
31
- ], m = () => a("update:modelValue", !1), r = F("remote"), c = () => {
32
- var o, e;
33
- (o = r.value) != null && o.isReady && (a("import:files", N((e = r.value) == null ? void 0 : e.getFilesToImport())), m());
34
- }, $ = (o) => {
35
- a("import:files", o), m();
31
+ ], a = () => n("update:modelValue", !1), r = b("remote"), v = () => {
32
+ var t, e;
33
+ (t = r.value) != null && t.isReady && (n("import:files", N((e = r.value) == null ? void 0 : e.getFilesToImport())), a());
34
+ }, x = (t) => {
35
+ n("import:files", t), a();
36
36
  };
37
- return (o, e) => (u(), n(t(T), {
37
+ return (t, e) => (d(), u(l(T), {
38
38
  "no-content-gutters": !0,
39
- "close-on-outside-click": o.closeOnOutsideClick,
40
- class: O(["pl-dialog-modal", t(I).component]),
41
- "model-value": o.modelValue,
39
+ "close-on-outside-click": m.closeOnOutsideClick,
40
+ class: F(["pl-dialog-modal", l(I).component]),
41
+ "model-value": m.modelValue,
42
42
  width: "688px",
43
43
  height: "720px",
44
- "onUpdate:modelValue": m,
44
+ "onUpdate:modelValue": a,
45
45
  onClick: e[1] || (e[1] = p(() => {
46
46
  }, ["stop"]))
47
- }, R({
47
+ }, O({
48
48
  title: i(() => [
49
- f(x(o.title ?? _.value), 1)
49
+ c(w(m.title ?? g.value), 1)
50
50
  ]),
51
51
  default: i(() => [
52
- w("div", j, [
53
- d(t(E), {
54
- modelValue: l.value,
55
- "onUpdate:modelValue": e[0] || (e[0] = (s) => l.value = s),
56
- options: g
52
+ R("div", j, [
53
+ f(l(E), {
54
+ modelValue: o.value,
55
+ "onUpdate:modelValue": e[0] || (e[0] = (s) => o.value = s),
56
+ options: $
57
57
  }, null, 8, ["modelValue"])
58
58
  ]),
59
- l.value === "remote" ? (u(), n(P, y({
59
+ o.value === "remote" ? (d(), u(P, k({
60
60
  key: 0,
61
61
  ref: "remote"
62
- }, o.$props, { submit: c }), null, 16)) : v("", !0),
63
- l.value === "local" ? (u(), n(U, y({
62
+ }, t.$props, { submit: v }), null, 16)) : y("", !0),
63
+ o.value === "local" ? (d(), u(U, k({
64
64
  key: 1,
65
- "import-files": $
66
- }, o.$props), null, 16)) : v("", !0)
65
+ "import-files": x
66
+ }, t.$props), null, 16)) : y("", !0)
67
67
  ]),
68
68
  _: 2
69
69
  }, [
70
- l.value === "remote" ? {
70
+ o.value === "remote" ? {
71
71
  name: "actions",
72
72
  fn: i(() => {
73
73
  var s;
74
74
  return [
75
- d(t(M), {
75
+ f(l(M), {
76
76
  style: { "min-width": "160px" },
77
- disabled: !((s = t(r)) != null && s.isReady),
78
- onClick: p(c, ["stop"])
77
+ disabled: !((s = r.value) != null && s.isReady),
78
+ onClick: p(v, ["stop"])
79
79
  }, {
80
- default: i(() => e[2] || (e[2] = [
81
- f("Import")
82
- ])),
80
+ default: i(() => [...e[2] || (e[2] = [
81
+ c("Import", -1)
82
+ ])]),
83
83
  _: 1
84
84
  }, 8, ["disabled"]),
85
- d(t(D), {
85
+ f(l(D), {
86
86
  "justify-center": !1,
87
- onClick: p(m, ["stop"])
87
+ onClick: p(a, ["stop"])
88
88
  }, {
89
- default: i(() => e[3] || (e[3] = [
90
- f("Cancel")
91
- ])),
89
+ default: i(() => [...e[3] || (e[3] = [
90
+ c("Cancel", -1)
91
+ ])]),
92
92
  _: 1
93
93
  })
94
94
  ];
@@ -1 +1 @@
1
- {"version":3,"file":"PlFileDialog.vue.js","sources":["../../../src/components/PlFileDialog/PlFileDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport style from './pl-file-dialog.module.scss';\nimport { computed, ref, useTemplateRef } from 'vue';\nimport { notEmpty } from '@milaboratories/helpers';\nimport type { ImportedFiles, SimpleOption } from '../../types';\nimport { PlDialogModal } from '../PlDialogModal';\nimport { PlBtnPrimary } from '../PlBtnPrimary';\nimport { PlBtnGhost } from '../PlBtnGhost';\nimport { PlBtnGroup } from '../PlBtnGroup';\nimport Remote from './Remote.vue';\nimport Local from './Local.vue';\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n (e: 'import:files', value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Controls the visibility of the modal.\n *\n * When `true`, the modal is open. When `false`, the modal is closed.\n */\n modelValue: boolean;\n /**\n * Specifies the file extensions that are allowed for selection.\n *\n * Provide an array of strings representing file extensions (leading dot can be omitted)\n * If not specified, all file types are allowed.\n */\n extensions?: string[];\n /**\n * Enables the selection of multiple files.\n *\n * When `true`, the user can select multiple files.\n * When `false` or not specified, only a single file can be selected.\n */\n multi?: boolean;\n /**\n * The custom title of the dialog.\n */\n title?: string;\n /**\n * Automatically selects the initial storage option.\n * When `true`, the default storage is pre-selected for the user (default: `true`)\n */\n autoSelectStorage?: boolean;\n /**\n * If `true`, the modal window closes when clicking outside the modal area (default: `true`)\n */\n closeOnOutsideClick?: boolean;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n closeOnOutsideClick: true,\n },\n);\n\nconst mode = ref<'local' | 'remote'>('local');\n\nconst defaultTitle = computed(() => (props.multi ? 'Select Files to Import' : 'Select File to Import'));\n\nconst modeOptions = [\n {\n label: 'My Computer',\n value: 'local',\n },\n {\n label: 'Remote',\n value: 'remote',\n },\n] satisfies SimpleOption[];\n\nconst closeModal = () => emit('update:modelValue', false);\n\nconst remoteRef = useTemplateRef('remote');\n\nconst submit = () => {\n if (remoteRef.value?.isReady) {\n emit('import:files', notEmpty(remoteRef.value?.getFilesToImport()));\n closeModal();\n }\n};\n\nconst importFiles = (importedFiles: ImportedFiles) => {\n emit('import:files', importedFiles);\n closeModal();\n};\n</script>\n\n<template>\n <PlDialogModal\n :no-content-gutters=\"true\"\n :close-on-outside-click=\"closeOnOutsideClick\"\n class=\"pl-dialog-modal\"\n :class=\"style.component\"\n :model-value=\"modelValue\"\n width=\"688px\"\n height=\"720px\"\n @update:model-value=\"closeModal\"\n @click.stop\n >\n <template #title>{{ title ?? defaultTitle }}</template>\n <div style=\"margin: 0 24px\">\n <PlBtnGroup v-model=\"mode\" :options=\"modeOptions\" />\n </div>\n <Remote v-if=\"mode === 'remote'\" ref=\"remote\" v-bind=\"$props\" :submit=\"submit\" />\n <Local v-if=\"mode === 'local'\" :import-files=\"importFiles\" v-bind=\"$props\" />\n <template v-if=\"mode === 'remote'\" #actions>\n <PlBtnPrimary style=\"min-width: 160px\" :disabled=\"!remoteRef?.isReady\" @click.stop=\"submit\">Import</PlBtnPrimary>\n <PlBtnGhost :justify-center=\"false\" @click.stop=\"closeModal\">Cancel</PlBtnGhost>\n </template>\n </PlDialogModal>\n</template>\n"],"names":["emit","__emit","props","__props","mode","ref","defaultTitle","computed","modeOptions","closeModal","remoteRef","useTemplateRef","submit","_a","notEmpty","_b","importFiles","importedFiles"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAYA,UAAMA,IAAOC,GAKPC,IAAQC,GA4CRC,IAAOC,EAAwB,OAAO,GAEtCC,IAAeC,EAAS,MAAOL,EAAM,QAAQ,2BAA2B,uBAAwB,GAEhGM,IAAc;AAAA,MAClB;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,IACT,GAGIC,IAAa,MAAMT,EAAK,qBAAqB,EAAK,GAElDU,IAAYC,EAAe,QAAQ,GAEnCC,IAAS,MAAM;;AACnB,OAAIC,IAAAH,EAAU,UAAV,QAAAG,EAAiB,YACnBb,EAAK,gBAAgBc,GAASC,IAAAL,EAAU,UAAV,gBAAAK,EAAiB,kBAAkB,CAAC,GAClEN,EAAA;AAAA,IAEJ,GAEMO,IAAc,CAACC,MAAiC;AACpD,MAAAjB,EAAK,gBAAgBiB,CAAa,GAClCR,EAAA;AAAA,IACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlFileDialog.vue.js","sources":["../../../src/components/PlFileDialog/PlFileDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport style from './pl-file-dialog.module.scss';\nimport { computed, ref, useTemplateRef } from 'vue';\nimport { notEmpty } from '@milaboratories/helpers';\nimport type { ImportedFiles, SimpleOption } from '../../types';\nimport { PlDialogModal } from '../PlDialogModal';\nimport { PlBtnPrimary } from '../PlBtnPrimary';\nimport { PlBtnGhost } from '../PlBtnGhost';\nimport { PlBtnGroup } from '../PlBtnGroup';\nimport Remote from './Remote.vue';\nimport Local from './Local.vue';\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void;\n (e: 'import:files', value: ImportedFiles): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Controls the visibility of the modal.\n *\n * When `true`, the modal is open. When `false`, the modal is closed.\n */\n modelValue: boolean;\n /**\n * Specifies the file extensions that are allowed for selection.\n *\n * Provide an array of strings representing file extensions (leading dot can be omitted)\n * If not specified, all file types are allowed.\n */\n extensions?: string[];\n /**\n * Enables the selection of multiple files.\n *\n * When `true`, the user can select multiple files.\n * When `false` or not specified, only a single file can be selected.\n */\n multi?: boolean;\n /**\n * The custom title of the dialog.\n */\n title?: string;\n /**\n * Automatically selects the initial storage option.\n * When `true`, the default storage is pre-selected for the user (default: `true`)\n */\n autoSelectStorage?: boolean;\n /**\n * If `true`, the modal window closes when clicking outside the modal area (default: `true`)\n */\n closeOnOutsideClick?: boolean;\n }>(),\n {\n extensions: undefined,\n title: undefined,\n autoSelectStorage: true,\n closeOnOutsideClick: true,\n },\n);\n\nconst mode = ref<'local' | 'remote'>('local');\n\nconst defaultTitle = computed(() => (props.multi ? 'Select Files to Import' : 'Select File to Import'));\n\nconst modeOptions = [\n {\n label: 'My Computer',\n value: 'local',\n },\n {\n label: 'Remote',\n value: 'remote',\n },\n] satisfies SimpleOption[];\n\nconst closeModal = () => emit('update:modelValue', false);\n\nconst remoteRef = useTemplateRef('remote');\n\nconst submit = () => {\n if (remoteRef.value?.isReady) {\n emit('import:files', notEmpty(remoteRef.value?.getFilesToImport()));\n closeModal();\n }\n};\n\nconst importFiles = (importedFiles: ImportedFiles) => {\n emit('import:files', importedFiles);\n closeModal();\n};\n</script>\n\n<template>\n <PlDialogModal\n :no-content-gutters=\"true\"\n :close-on-outside-click=\"closeOnOutsideClick\"\n class=\"pl-dialog-modal\"\n :class=\"style.component\"\n :model-value=\"modelValue\"\n width=\"688px\"\n height=\"720px\"\n @update:model-value=\"closeModal\"\n @click.stop\n >\n <template #title>{{ title ?? defaultTitle }}</template>\n <div style=\"margin: 0 24px\">\n <PlBtnGroup v-model=\"mode\" :options=\"modeOptions\" />\n </div>\n <Remote v-if=\"mode === 'remote'\" ref=\"remote\" v-bind=\"$props\" :submit=\"submit\" />\n <Local v-if=\"mode === 'local'\" :import-files=\"importFiles\" v-bind=\"$props\" />\n <template v-if=\"mode === 'remote'\" #actions>\n <PlBtnPrimary style=\"min-width: 160px\" :disabled=\"!remoteRef?.isReady\" @click.stop=\"submit\">Import</PlBtnPrimary>\n <PlBtnGhost :justify-center=\"false\" @click.stop=\"closeModal\">Cancel</PlBtnGhost>\n </template>\n </PlDialogModal>\n</template>\n"],"names":["emit","__emit","props","__props","mode","ref","defaultTitle","computed","modeOptions","closeModal","remoteRef","useTemplateRef","submit","_a","notEmpty","_b","importFiles","importedFiles","_createBlock","_unref","PlDialogModal","_normalizeClass","style","_createTextVNode","_toDisplayString","_createElementVNode","_hoisted_1","_createVNode","PlBtnGroup","$event","_openBlock","Remote","_mergeProps","$props","Local","PlBtnPrimary","_cache","PlBtnGhost"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAYA,UAAMA,IAAOC,GAKPC,IAAQC,GA4CRC,IAAOC,EAAwB,OAAO,GAEtCC,IAAeC,EAAS,MAAOL,EAAM,QAAQ,2BAA2B,uBAAwB,GAEhGM,IAAc;AAAA,MAClB;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,MAET;AAAA,QACE,OAAO;AAAA,QACP,OAAO;AAAA,MAAA;AAAA,IACT,GAGIC,IAAa,MAAMT,EAAK,qBAAqB,EAAK,GAElDU,IAAYC,EAAe,QAAQ,GAEnCC,IAAS,MAAM;;AACnB,OAAIC,IAAAH,EAAU,UAAV,QAAAG,EAAiB,YACnBb,EAAK,gBAAgBc,GAASC,IAAAL,EAAU,UAAV,gBAAAK,EAAiB,kBAAkB,CAAC,GAClEN,EAAA;AAAA,IAEJ,GAEMO,IAAc,CAACC,MAAiC;AACpD,MAAAjB,EAAK,gBAAgBiB,CAAa,GAClCR,EAAA;AAAA,IACF;2BAIES,EAqBgBC,EAAAC,CAAA,GAAA;AAAA,MApBb,sBAAoB;AAAA,MACpB,0BAAwBjB,EAAA;AAAA,MACzB,OAAKkB,EAAA,CAAC,mBACEF,EAAAG,CAAA,EAAM,SAAS,CAAA;AAAA,MACtB,eAAanB,EAAA;AAAA,MACd,OAAM;AAAA,MACN,QAAO;AAAA,MACN,uBAAoBM;AAAA,MACpB,2BAAD,MAAA;AAAA,MAAA,GAAW,CAAA,MAAA,CAAA;AAAA,IAAA;MAEA,SAAM,MAA2B;AAAA,QAAxBc,EAAAC,EAAArB,EAAA,SAASG,EAAA,KAAY,GAAA,CAAA;AAAA,MAAA;iBACzC,MAEM;AAAA,QAFNmB,EAEM,OAFNC,GAEM;AAAA,UADJC,EAAoDR,EAAAS,CAAA,GAAA;AAAA,wBAA/BxB,EAAA;AAAA,0DAAAA,EAAI,QAAAyB;AAAA,YAAG,SAASrB;AAAA,UAAA;;QAEzBJ,EAAA,UAAI,YAAlB0B,KAAAZ,EAAiFa,GAAjFC,EAAiF;AAAA;UAAhD,KAAI;AAAA,QAAA,GAAiBC,EAAAA,QAAM,EAAG,QAAArB,GAAc,GAAA,MAAA,EAAA;QAChER,EAAA,UAAI,WAAjB0B,KAAAZ,EAA6EgB,GAA7EF,EAA6E;AAAA;UAA7C,gBAAchB;AAAA,QAAA,GAAqBiB,EAAAA,MAAM,GAAA,MAAA,EAAA;;;;MACzD7B,EAAA,UAAI;cAAgB;AAAA,cAClC,MAAA;;AAAiH;AAAA,YAAjHuB,EAAiHR,EAAAgB,CAAA,GAAA;AAAA,cAAnG,OAAA,EAAA,aAAA,QAAA;AAAA,cAA0B,UAAQ,GAAGtB,IAAAH,EAAA,UAAA,QAAAG,EAAW;AAAA,cAAU,WAAYD,GAAM,CAAA,MAAA,CAAA;AAAA,YAAA;yBAAE,MAAM,CAAA,GAAAwB,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAAN,UAAM,EAAA;AAAA,cAAA;;;YAClGT,EAAgFR,EAAAkB,CAAA,GAAA;AAAA,cAAnE,kBAAgB;AAAA,cAAQ,WAAY5B,GAAU,CAAA,MAAA,CAAA;AAAA,YAAA;yBAAE,MAAM,CAAA,GAAA2B,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,kBAAN,UAAM,EAAA;AAAA,cAAA;;;;;;;;;;"}
@@ -165,9 +165,9 @@ const ce = ["title", "onClick"], de = {
165
165
  f(se)
166
166
  ], 2)
167
167
  ], 2),
168
- t.currentLoadingPath !== void 0 ? (i(), d("div", de, l[2] || (l[2] = [
168
+ t.currentLoadingPath !== void 0 ? (i(), d("div", de, [...l[2] || (l[2] = [
169
169
  c("i", { class: "mask-24 mask-loading loader-icon" }, null, -1)
170
- ]))) : t.storageEntry ? t.error ? (i(), d("div", {
170
+ ])])) : t.storageEntry ? t.error ? (i(), d("div", {
171
171
  key: 2,
172
172
  class: n(s(r)["ls-error"])
173
173
  }, [
@@ -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().lsDriver\n .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: item.type === 'file' && (!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(() => data.items.filter((f) => f.canBeSelected && f.selected && !f.isDir));\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().lsDriver\n .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((it) => it.name !== 'local' && !it.name.startsWith('local_disk_'));\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 v-model=\"data.storageEntry\" label=\"Select storage\" :options=\"data.storageOptions\" />\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"],"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, 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().lsDriver\n .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: item.type === 'file' && (!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(() => data.items.filter((f) => f.canBeSelected && f.selected && !f.isDir));\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().lsDriver\n .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((it) => it.name !== 'local' && !it.name.startsWith('local_disk_'));\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 v-model=\"data.storageEntry\" label=\"Select storage\" :options=\"data.storageOptions\" />\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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"}
@@ -14,14 +14,14 @@ const m = /* @__PURE__ */ s({
14
14
  }, "Shortcuts", 2),
15
15
  l("div", {
16
16
  class: n([i.$style.row, i.$style.head])
17
- }, e[0] || (e[0] = [
17
+ }, [...e[0] || (e[0] = [
18
18
  l("div", null, null, -1),
19
19
  l("div", null, "MacOS", -1),
20
20
  l("div", null, "Windows/Linux", -1)
21
- ]), 2),
21
+ ])], 2),
22
22
  l("div", {
23
23
  class: n([i.$style.row, i.$style.body])
24
- }, e[1] || (e[1] = [
24
+ }, [...e[1] || (e[1] = [
25
25
  l("div", null, "Single File", -1),
26
26
  l("div", null, "Click the file", -1),
27
27
  l("div", null, "Click the file", -1),
@@ -34,7 +34,7 @@ const m = /* @__PURE__ */ s({
34
34
  l("div", null, "All files", -1),
35
35
  l("div", null, "Press Command (⌘) + A", -1),
36
36
  l("div", null, "Press Ctrl + A", -1)
37
- ]), 2)
37
+ ])], 2)
38
38
  ]),
39
39
  _: 1
40
40
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"Shortcuts.vue2.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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,EAAM,OAAA,MAAA,MAAA,EAAA;AAAA,UACNA,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;;;;;;"}
@@ -69,8 +69,8 @@ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}
69
69
  label: string;
70
70
  progress: ImportProgress;
71
71
  error: undefined;
72
- helper: string;
73
72
  placeholder: string;
73
+ helper: string;
74
74
  extensions: string[];
75
75
  cellStyle: boolean;
76
76
  fileDialogTitle: string;