@milaboratories/uikit 2.15.36 → 2.15.38

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 (457) hide show
  1. package/.turbo/turbo-build.log +175 -175
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +12 -0
  6. package/dist/__tests__/default-testid.test.d.ts +2 -0
  7. package/dist/__tests__/default-testid.test.d.ts.map +1 -0
  8. package/dist/base/BtnBase.js.map +1 -1
  9. package/dist/base/BtnBase.vue.d.ts.map +1 -1
  10. package/dist/base/BtnBase.vue2.js +6 -1
  11. package/dist/base/BtnBase.vue2.js.map +1 -1
  12. package/dist/components/DropdownListItem.js.map +1 -1
  13. package/dist/components/DropdownListItem.vue.d.ts.map +1 -1
  14. package/dist/components/DropdownListItem.vue2.js +13 -4
  15. package/dist/components/DropdownListItem.vue2.js.map +1 -1
  16. package/dist/components/InputRange.js.map +1 -1
  17. package/dist/components/InputRange.vue.d.ts.map +1 -1
  18. package/dist/components/InputRange.vue2.js +10 -2
  19. package/dist/components/InputRange.vue2.js.map +1 -1
  20. package/dist/components/PlAccordion/PlAccordionSection.js.map +1 -1
  21. package/dist/components/PlAccordion/PlAccordionSection.style.js.map +1 -1
  22. package/dist/components/PlAccordion/PlAccordionSection.vue.d.ts.map +1 -1
  23. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +7 -1
  24. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  25. package/dist/components/PlAlert/PlAlert.js.map +1 -1
  26. package/dist/components/PlAlert/PlAlert.vue.d.ts.map +1 -1
  27. package/dist/components/PlAlert/PlAlert.vue2.js +10 -1
  28. package/dist/components/PlAlert/PlAlert.vue2.js.map +1 -1
  29. package/dist/components/PlAutocomplete/PlAutocomplete.js.map +1 -1
  30. package/dist/components/PlAutocomplete/PlAutocomplete.vue.d.ts.map +1 -1
  31. package/dist/components/PlAutocomplete/PlAutocomplete.vue2.js +29 -11
  32. package/dist/components/PlAutocomplete/PlAutocomplete.vue2.js.map +1 -1
  33. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.js.map +1 -1
  34. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.d.ts.map +1 -1
  35. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue2.js +30 -9
  36. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue2.js.map +1 -1
  37. package/dist/components/PlBtnAccent/PlBtnAccent.js.map +1 -1
  38. package/dist/components/PlBtnAccent/PlBtnAccent.vue.d.ts.map +1 -1
  39. package/dist/components/PlBtnAccent/PlBtnAccent.vue2.js +4 -1
  40. package/dist/components/PlBtnAccent/PlBtnAccent.vue2.js.map +1 -1
  41. package/dist/components/PlBtnDanger/PlBtnDanger.js.map +1 -1
  42. package/dist/components/PlBtnDanger/PlBtnDanger.vue.d.ts.map +1 -1
  43. package/dist/components/PlBtnDanger/PlBtnDanger.vue2.js +4 -1
  44. package/dist/components/PlBtnDanger/PlBtnDanger.vue2.js.map +1 -1
  45. package/dist/components/PlBtnGhost/PlBtnGhost.js.map +1 -1
  46. package/dist/components/PlBtnGhost/PlBtnGhost.vue.d.ts.map +1 -1
  47. package/dist/components/PlBtnGhost/PlBtnGhost.vue2.js +7 -1
  48. package/dist/components/PlBtnGhost/PlBtnGhost.vue2.js.map +1 -1
  49. package/dist/components/PlBtnGroup/PlBtnGroup.js.map +1 -1
  50. package/dist/components/PlBtnGroup/PlBtnGroup.vue.d.ts.map +1 -1
  51. package/dist/components/PlBtnGroup/PlBtnGroup.vue2.js +19 -6
  52. package/dist/components/PlBtnGroup/PlBtnGroup.vue2.js.map +1 -1
  53. package/dist/components/PlBtnLink/PlBtnLink.js.map +1 -1
  54. package/dist/components/PlBtnLink/PlBtnLink.vue.d.ts.map +1 -1
  55. package/dist/components/PlBtnLink/PlBtnLink.vue2.js +2 -0
  56. package/dist/components/PlBtnLink/PlBtnLink.vue2.js.map +1 -1
  57. package/dist/components/PlBtnPrimary/PlBtnPrimary.js.map +1 -1
  58. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.d.ts.map +1 -1
  59. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue2.js +4 -1
  60. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue2.js.map +1 -1
  61. package/dist/components/PlBtnSecondary/PlBtnSecondary.js.map +1 -1
  62. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.d.ts.map +1 -1
  63. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue2.js +1 -1
  64. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue2.js.map +1 -1
  65. package/dist/components/PlBtnSplit/PlBtnSplit.js.map +1 -1
  66. package/dist/components/PlBtnSplit/PlBtnSplit.vue.d.ts.map +1 -1
  67. package/dist/components/PlBtnSplit/PlBtnSplit.vue2.js +6 -0
  68. package/dist/components/PlBtnSplit/PlBtnSplit.vue2.js.map +1 -1
  69. package/dist/components/PlChartHistogram/PlChartHistogram.js.map +1 -1
  70. package/dist/components/PlChartHistogram/PlChartHistogram.style.js.map +1 -1
  71. package/dist/components/PlChartHistogram/PlChartHistogram.vue.d.ts.map +1 -1
  72. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +7 -2
  73. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  74. package/dist/components/PlChartHistogram/createGridlines.d.ts.map +1 -1
  75. package/dist/components/PlChartHistogram/createGridlines.js +1 -1
  76. package/dist/components/PlChartHistogram/createGridlines.js.map +1 -1
  77. package/dist/components/PlChartHistogram/createLabels.d.ts.map +1 -1
  78. package/dist/components/PlChartHistogram/createLabels.js +1 -1
  79. package/dist/components/PlChartHistogram/createLabels.js.map +1 -1
  80. package/dist/components/PlChartHistogram/createSvgContainer.d.ts.map +1 -1
  81. package/dist/components/PlChartHistogram/createSvgContainer.js +1 -1
  82. package/dist/components/PlChartHistogram/createSvgContainer.js.map +1 -1
  83. package/dist/components/PlChartHistogram/drawBins.d.ts.map +1 -1
  84. package/dist/components/PlChartHistogram/drawBins.js +2 -2
  85. package/dist/components/PlChartHistogram/drawBins.js.map +1 -1
  86. package/dist/components/PlChartHistogram/drawThreshold.d.ts.map +1 -1
  87. package/dist/components/PlChartHistogram/drawThreshold.js +1 -1
  88. package/dist/components/PlChartHistogram/drawThreshold.js.map +1 -1
  89. package/dist/components/PlChartHistogram/histogram.d.ts.map +1 -1
  90. package/dist/components/PlChartHistogram/histogram.js +1 -1
  91. package/dist/components/PlChartHistogram/histogram.js.map +1 -1
  92. package/dist/components/PlChartStackedBar/Legends.js.map +1 -1
  93. package/dist/components/PlChartStackedBar/Legends.style.js.map +1 -1
  94. package/dist/components/PlChartStackedBar/Legends.vue.d.ts.map +1 -1
  95. package/dist/components/PlChartStackedBar/Legends.vue2.js +7 -1
  96. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  97. package/dist/components/PlChartStackedBar/PlChartStackedBar.js.map +1 -1
  98. package/dist/components/PlChartStackedBar/PlChartStackedBar.style.js.map +1 -1
  99. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue.d.ts.map +1 -1
  100. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +5 -1
  101. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  102. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.js.map +1 -1
  103. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.style.js.map +1 -1
  104. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue.d.ts.map +1 -1
  105. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js +4 -1
  106. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  107. package/dist/components/PlChartStackedBar/StackedRow.js.map +1 -1
  108. package/dist/components/PlChartStackedBar/StackedRow.style.js.map +1 -1
  109. package/dist/components/PlChartStackedBar/StackedRow.vue.d.ts.map +1 -1
  110. package/dist/components/PlChartStackedBar/StackedRow.vue2.js +13 -3
  111. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  112. package/dist/components/PlChartStackedBar/StackedRowCompact.js.map +1 -1
  113. package/dist/components/PlChartStackedBar/StackedRowCompact.style.js.map +1 -1
  114. package/dist/components/PlChartStackedBar/StackedRowCompact.vue.d.ts.map +1 -1
  115. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js +8 -2
  116. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  117. package/dist/components/PlCheckbox/PlCheckbox.js.map +1 -1
  118. package/dist/components/PlCheckbox/PlCheckbox.vue.d.ts.map +1 -1
  119. package/dist/components/PlCheckbox/PlCheckbox.vue2.js +9 -2
  120. package/dist/components/PlCheckbox/PlCheckbox.vue2.js.map +1 -1
  121. package/dist/components/PlCheckbox/PlCheckboxBase.js.map +1 -1
  122. package/dist/components/PlCheckbox/PlCheckboxBase.vue.d.ts.map +1 -1
  123. package/dist/components/PlCheckbox/PlCheckboxBase.vue2.js +1 -0
  124. package/dist/components/PlCheckbox/PlCheckboxBase.vue2.js.map +1 -1
  125. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.js.map +1 -1
  126. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.d.ts.map +1 -1
  127. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue2.js +19 -5
  128. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue2.js.map +1 -1
  129. package/dist/components/PlChip/PlChip.js.map +1 -1
  130. package/dist/components/PlChip/PlChip.vue.d.ts.map +1 -1
  131. package/dist/components/PlChip/PlChip.vue2.js +7 -1
  132. package/dist/components/PlChip/PlChip.vue2.js.map +1 -1
  133. package/dist/components/PlClipboard/PlClipboard.js.map +1 -1
  134. package/dist/components/PlClipboard/PlClipboard.style.js.map +1 -1
  135. package/dist/components/PlClipboard/PlClipboard.vue.d.ts.map +1 -1
  136. package/dist/components/PlClipboard/PlClipboard.vue2.js +1 -0
  137. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  138. package/dist/components/PlConfirmDialog.js.map +1 -1
  139. package/dist/components/PlConfirmDialog.vue.d.ts.map +1 -1
  140. package/dist/components/PlConfirmDialog.vue2.js +9 -2
  141. package/dist/components/PlConfirmDialog.vue2.js.map +1 -1
  142. package/dist/components/PlDialogModal/PlDialogModal.js.map +1 -1
  143. package/dist/components/PlDialogModal/PlDialogModal.vue.d.ts.map +1 -1
  144. package/dist/components/PlDialogModal/PlDialogModal.vue2.js +12 -5
  145. package/dist/components/PlDialogModal/PlDialogModal.vue2.js.map +1 -1
  146. package/dist/components/PlDropdown/OptionList.js.map +1 -1
  147. package/dist/components/PlDropdown/OptionList.vue.d.ts.map +1 -1
  148. package/dist/components/PlDropdown/OptionList.vue2.js +11 -5
  149. package/dist/components/PlDropdown/OptionList.vue2.js.map +1 -1
  150. package/dist/components/PlDropdown/PlDropdown.js.map +1 -1
  151. package/dist/components/PlDropdown/PlDropdown.vue.d.ts.map +1 -1
  152. package/dist/components/PlDropdown/PlDropdown.vue2.js +26 -10
  153. package/dist/components/PlDropdown/PlDropdown.vue2.js.map +1 -1
  154. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.js.map +1 -1
  155. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.d.ts.map +1 -1
  156. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue2.js +32 -10
  157. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue2.js.map +1 -1
  158. package/dist/components/PlDropdownLine/PlDropdownLine.js.map +1 -1
  159. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts.map +1 -1
  160. package/dist/components/PlDropdownLine/PlDropdownLine.vue2.js +17 -3
  161. package/dist/components/PlDropdownLine/PlDropdownLine.vue2.js.map +1 -1
  162. package/dist/components/PlDropdownLine/ResizableInput.js.map +1 -1
  163. package/dist/components/PlDropdownLine/ResizableInput.vue.d.ts.map +1 -1
  164. package/dist/components/PlDropdownLine/ResizableInput.vue2.js +5 -2
  165. package/dist/components/PlDropdownLine/ResizableInput.vue2.js.map +1 -1
  166. package/dist/components/PlDropdownMulti/PlDropdownMulti.js.map +1 -1
  167. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.d.ts.map +1 -1
  168. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue2.js +31 -10
  169. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue2.js.map +1 -1
  170. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.js.map +1 -1
  171. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts.map +1 -1
  172. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue2.js +1 -1
  173. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue2.js.map +1 -1
  174. package/dist/components/PlDropdownRef/PlDropdownRef.js.map +1 -1
  175. package/dist/components/PlDropdownRef/PlDropdownRef.vue.d.ts.map +1 -1
  176. package/dist/components/PlDropdownRef/PlDropdownRef.vue2.js +1 -1
  177. package/dist/components/PlDropdownRef/PlDropdownRef.vue2.js.map +1 -1
  178. package/dist/components/PlEditableTitle/PlEditableTitle.js.map +1 -1
  179. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts.map +1 -1
  180. package/dist/components/PlEditableTitle/PlEditableTitle.vue2.js +9 -3
  181. package/dist/components/PlEditableTitle/PlEditableTitle.vue2.js.map +1 -1
  182. package/dist/components/PlElementList/PlElementList.js.map +1 -1
  183. package/dist/components/PlElementList/PlElementList.style.js.map +1 -1
  184. package/dist/components/PlElementList/PlElementList.vue.d.ts.map +1 -1
  185. package/dist/components/PlElementList/PlElementList.vue2.js +6 -1
  186. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  187. package/dist/components/PlElementList/PlElementListItem.js.map +1 -1
  188. package/dist/components/PlElementList/PlElementListItem.style.js.map +1 -1
  189. package/dist/components/PlElementList/PlElementListItem.vue.d.ts.map +1 -1
  190. package/dist/components/PlElementList/PlElementListItem.vue2.js +34 -13
  191. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  192. package/dist/components/PlErrorAlert/PlErrorAlert.js.map +1 -1
  193. package/dist/components/PlErrorAlert/PlErrorAlert.style.js.map +1 -1
  194. package/dist/components/PlErrorAlert/PlErrorAlert.vue.d.ts.map +1 -1
  195. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js +15 -3
  196. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  197. package/dist/components/PlErrorBoundary/PlErrorBoundary.js.map +1 -1
  198. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.d.ts.map +1 -1
  199. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue2.js +1 -0
  200. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue2.js.map +1 -1
  201. package/dist/components/PlFileDialog/Local.js.map +1 -1
  202. package/dist/components/PlFileDialog/Local.vue.d.ts.map +1 -1
  203. package/dist/components/PlFileDialog/Local.vue2.js +23 -20
  204. package/dist/components/PlFileDialog/Local.vue2.js.map +1 -1
  205. package/dist/components/PlFileDialog/PlFileDialog.js.map +1 -1
  206. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts.map +1 -1
  207. package/dist/components/PlFileDialog/PlFileDialog.vue2.js +5 -1
  208. package/dist/components/PlFileDialog/PlFileDialog.vue2.js.map +1 -1
  209. package/dist/components/PlFileDialog/Remote.js.map +1 -1
  210. package/dist/components/PlFileDialog/Remote.vue.d.ts.map +1 -1
  211. package/dist/components/PlFileDialog/Remote.vue2.js +108 -94
  212. package/dist/components/PlFileDialog/Remote.vue2.js.map +1 -1
  213. package/dist/components/PlFileDialog/Shortcuts.js.map +1 -1
  214. package/dist/components/PlFileDialog/Shortcuts.style.js.map +1 -1
  215. package/dist/components/PlFileDialog/Shortcuts.vue.d.ts.map +1 -1
  216. package/dist/components/PlFileDialog/Shortcuts.vue2.js +2 -1
  217. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  218. package/dist/components/PlFileInput/PlFileInput.js.map +1 -1
  219. package/dist/components/PlFileInput/PlFileInput.vue.d.ts.map +1 -1
  220. package/dist/components/PlFileInput/PlFileInput.vue2.js +92 -71
  221. package/dist/components/PlFileInput/PlFileInput.vue2.js.map +1 -1
  222. package/dist/components/PlLoaderCircular/PlLoaderCircular.js.map +1 -1
  223. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.d.ts.map +1 -1
  224. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue2.js +4 -1
  225. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue2.js.map +1 -1
  226. package/dist/components/PlLoaderLogo.js.map +1 -1
  227. package/dist/components/PlLoaderLogo.style.js.map +1 -1
  228. package/dist/components/PlLoaderLogo.vue.css +1 -1
  229. package/dist/components/PlLoaderLogo.vue.d.ts.map +1 -1
  230. package/dist/components/PlLoaderLogo.vue2.js +4 -3
  231. package/dist/components/PlLoaderLogo.vue2.js.map +1 -1
  232. package/dist/components/PlLogView/PlLogView.js.map +1 -1
  233. package/dist/components/PlLogView/PlLogView.vue.d.ts.map +1 -1
  234. package/dist/components/PlLogView/PlLogView.vue2.js +13 -1
  235. package/dist/components/PlLogView/PlLogView.vue2.js.map +1 -1
  236. package/dist/components/PlNotificationAlert/PlNotificationAlert.js.map +1 -1
  237. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.d.ts.map +1 -1
  238. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue2.js +8 -2
  239. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue2.js.map +1 -1
  240. package/dist/components/PlNumberField/PlNumberField.js.map +1 -1
  241. package/dist/components/PlNumberField/PlNumberField.vue.d.ts.map +1 -1
  242. package/dist/components/PlNumberField/PlNumberField.vue2.js +12 -3
  243. package/dist/components/PlNumberField/PlNumberField.vue2.js.map +1 -1
  244. package/dist/components/PlProgressBar/PlProgressBar.js.map +1 -1
  245. package/dist/components/PlProgressBar/PlProgressBar.vue.d.ts.map +1 -1
  246. package/dist/components/PlProgressBar/PlProgressBar.vue2.js +9 -1
  247. package/dist/components/PlProgressBar/PlProgressBar.vue2.js.map +1 -1
  248. package/dist/components/PlProgressCell/PlProgressCell.js.map +1 -1
  249. package/dist/components/PlProgressCell/PlProgressCell.vue.d.ts.map +1 -1
  250. package/dist/components/PlProgressCell/PlProgressCell.vue2.js +19 -7
  251. package/dist/components/PlProgressCell/PlProgressCell.vue2.js.map +1 -1
  252. package/dist/components/PlRadio/PlRadio.js.map +1 -1
  253. package/dist/components/PlRadio/PlRadio.style.js.map +1 -1
  254. package/dist/components/PlRadio/PlRadio.vue.d.ts.map +1 -1
  255. package/dist/components/PlRadio/PlRadio.vue2.js +10 -3
  256. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  257. package/dist/components/PlRadio/PlRadioGroup.js.map +1 -1
  258. package/dist/components/PlRadio/PlRadioGroup.style.js.map +1 -1
  259. package/dist/components/PlRadio/PlRadioGroup.vue.d.ts.map +1 -1
  260. package/dist/components/PlRadio/PlRadioGroup.vue2.js +10 -3
  261. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  262. package/dist/components/PlSearchField/PlSearchField.js.map +1 -1
  263. package/dist/components/PlSearchField/PlSearchField.style.js.map +1 -1
  264. package/dist/components/PlSearchField/PlSearchField.vue.d.ts.map +1 -1
  265. package/dist/components/PlSearchField/PlSearchField.vue2.js +11 -4
  266. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  267. package/dist/components/PlSectionSeparator/PlSectionSeparator.js.map +1 -1
  268. package/dist/components/PlSectionSeparator/PlSectionSeparator.style.js.map +1 -1
  269. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue.d.ts.map +1 -1
  270. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +7 -1
  271. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  272. package/dist/components/PlSidebar/PlSidebarGroup.js.map +1 -1
  273. package/dist/components/PlSidebar/PlSidebarGroup.style.js.map +1 -1
  274. package/dist/components/PlSidebar/PlSidebarGroup.vue.d.ts.map +1 -1
  275. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js +5 -1
  276. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  277. package/dist/components/PlSidebar/PlSidebarItem.js.map +1 -1
  278. package/dist/components/PlSidebar/PlSidebarItem.style.js.map +1 -1
  279. package/dist/components/PlSidebar/PlSidebarItem.vue.d.ts.map +1 -1
  280. package/dist/components/PlSidebar/PlSidebarItem.vue2.js +7 -1
  281. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  282. package/dist/components/PlSlideModal/PlPureSlideModal.js.map +1 -1
  283. package/dist/components/PlSlideModal/PlPureSlideModal.vue.d.ts.map +1 -1
  284. package/dist/components/PlSlideModal/PlPureSlideModal.vue2.js +4 -1
  285. package/dist/components/PlSlideModal/PlPureSlideModal.vue2.js.map +1 -1
  286. package/dist/components/PlSlideModal/PlSlideModal.js.map +1 -1
  287. package/dist/components/PlSlideModal/PlSlideModal.style.js.map +1 -1
  288. package/dist/components/PlSlideModal/PlSlideModal.vue.d.ts.map +1 -1
  289. package/dist/components/PlSlideModal/PlSlideModal.vue2.js +7 -2
  290. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  291. package/dist/components/PlSpacer/PlSpacer.vue.d.ts.map +1 -1
  292. package/dist/components/PlSplash/PlSplash.js.map +1 -1
  293. package/dist/components/PlSplash/PlSplash.vue.d.ts.map +1 -1
  294. package/dist/components/PlSplash/PlSplash.vue2.js +13 -5
  295. package/dist/components/PlSplash/PlSplash.vue2.js.map +1 -1
  296. package/dist/components/PlStatusTag/PlStatusTag.js.map +1 -1
  297. package/dist/components/PlStatusTag/PlStatusTag.vue.d.ts.map +1 -1
  298. package/dist/components/PlStatusTag/PlStatusTag.vue2.js +4 -1
  299. package/dist/components/PlStatusTag/PlStatusTag.vue2.js.map +1 -1
  300. package/dist/components/PlTabs/PlTabs.js.map +1 -1
  301. package/dist/components/PlTabs/PlTabs.vue.d.ts.map +1 -1
  302. package/dist/components/PlTabs/PlTabs.vue2.js +16 -11
  303. package/dist/components/PlTabs/PlTabs.vue2.js.map +1 -1
  304. package/dist/components/PlTextArea/PlTextArea.js.map +1 -1
  305. package/dist/components/PlTextArea/PlTextArea.vue.d.ts.map +1 -1
  306. package/dist/components/PlTextArea/PlTextArea.vue2.js +21 -8
  307. package/dist/components/PlTextArea/PlTextArea.vue2.js.map +1 -1
  308. package/dist/components/PlTextField/PlTextField.js.map +1 -1
  309. package/dist/components/PlTextField/PlTextField.vue.d.ts.map +1 -1
  310. package/dist/components/PlTextField/PlTextField.vue2.js +23 -9
  311. package/dist/components/PlTextField/PlTextField.vue2.js.map +1 -1
  312. package/dist/components/PlToggleSwitch/PlToggleSwitch.js.map +1 -1
  313. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.d.ts.map +1 -1
  314. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue2.js +10 -2
  315. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue2.js.map +1 -1
  316. package/dist/components/PlTooltip/PlTooltip.js.map +1 -1
  317. package/dist/components/PlTooltip/PlTooltip.style.js.map +1 -1
  318. package/dist/components/PlTooltip/PlTooltip.vue.css +1 -1
  319. package/dist/components/PlTooltip/PlTooltip.vue.d.ts.map +1 -1
  320. package/dist/components/PlTooltip/PlTooltip.vue2.js +7 -2
  321. package/dist/components/PlTooltip/PlTooltip.vue2.js.map +1 -1
  322. package/dist/components/Slider.js.map +1 -1
  323. package/dist/components/Slider.vue.d.ts.map +1 -1
  324. package/dist/components/Slider.vue2.js +13 -1
  325. package/dist/components/Slider.vue2.js.map +1 -1
  326. package/dist/components/SliderRange.js.map +1 -1
  327. package/dist/components/SliderRange.vue.d.ts.map +1 -1
  328. package/dist/components/SliderRange.vue2.js +14 -1
  329. package/dist/components/SliderRange.vue2.js.map +1 -1
  330. package/dist/components/SliderRangeTriple.js.map +1 -1
  331. package/dist/components/SliderRangeTriple.vue.d.ts.map +1 -1
  332. package/dist/components/SliderRangeTriple.vue2.js +13 -1
  333. package/dist/components/SliderRangeTriple.vue2.js.map +1 -1
  334. package/dist/components/TabItem.js.map +1 -1
  335. package/dist/components/TabItem.vue.d.ts.map +1 -1
  336. package/dist/components/TabItem.vue2.js +8 -2
  337. package/dist/components/TabItem.vue2.js.map +1 -1
  338. package/dist/components/contextMenu/Menu.js +1 -1
  339. package/dist/components/contextMenu/Menu.js.map +1 -1
  340. package/dist/components/contextMenu/Menu.style.css +1 -1
  341. package/dist/components/contextMenu/Menu.vue.d.ts.map +1 -1
  342. package/dist/components/contextMenu/Menu.vue2.js +12 -8
  343. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  344. package/dist/layout/PlBlockPage/PlBlockPage.js.map +1 -1
  345. package/dist/layout/PlBlockPage/PlBlockPage.style.js.map +1 -1
  346. package/dist/layout/PlBlockPage/PlBlockPage.vue.d.ts.map +1 -1
  347. package/dist/layout/PlBlockPage/PlBlockPage.vue2.js +45 -25
  348. package/dist/layout/PlBlockPage/PlBlockPage.vue2.js.map +1 -1
  349. package/dist/layout/PlContainer/PlContainer.js.map +1 -1
  350. package/dist/layout/PlContainer/PlContainer.vue.d.ts.map +1 -1
  351. package/dist/layout/PlContainer/PlContainer.vue2.js +1 -0
  352. package/dist/layout/PlContainer/PlContainer.vue2.js.map +1 -1
  353. package/dist/layout/PlGrid/PlGrid.js.map +1 -1
  354. package/dist/layout/PlGrid/PlGrid.vue.d.ts.map +1 -1
  355. package/dist/layout/PlGrid/PlGrid.vue2.js +1 -0
  356. package/dist/layout/PlGrid/PlGrid.vue2.js.map +1 -1
  357. package/dist/layout/PlPlaceholder/PlPlaceholder.js.map +1 -1
  358. package/dist/layout/PlPlaceholder/PlPlaceholder.style.js.map +1 -1
  359. package/dist/layout/PlPlaceholder/PlPlaceholder.vue.d.ts.map +1 -1
  360. package/dist/layout/PlPlaceholder/PlPlaceholder.vue2.js +25 -6
  361. package/dist/layout/PlPlaceholder/PlPlaceholder.vue2.js.map +1 -1
  362. package/dist/layout/PlRow/PlRow.js.map +1 -1
  363. package/dist/layout/PlRow/PlRow.vue.d.ts.map +1 -1
  364. package/dist/layout/PlRow/PlRow.vue2.js +7 -4
  365. package/dist/layout/PlRow/PlRow.vue2.js.map +1 -1
  366. package/dist/layout/PlSpacer/PlSpacer.js.map +1 -1
  367. package/dist/layout/PlSpacer/PlSpacer.vue.d.ts.map +1 -1
  368. package/dist/layout/PlSpacer/PlSpacer.vue2.js +1 -0
  369. package/dist/layout/PlSpacer/PlSpacer.vue2.js.map +1 -1
  370. package/package.json +4 -4
  371. package/src/__tests__/default-testid.test.ts +95 -0
  372. package/src/base/BtnBase.vue +3 -3
  373. package/src/components/DropdownListItem.vue +14 -4
  374. package/src/components/InputRange.vue +6 -2
  375. package/src/components/PlAccordion/PlAccordionSection.vue +13 -4
  376. package/src/components/PlAlert/PlAlert.vue +5 -3
  377. package/src/components/PlAutocomplete/PlAutocomplete.vue +47 -11
  378. package/src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue +53 -11
  379. package/src/components/PlBtnAccent/PlBtnAccent.vue +1 -1
  380. package/src/components/PlBtnDanger/PlBtnDanger.vue +1 -1
  381. package/src/components/PlBtnGhost/PlBtnGhost.vue +4 -3
  382. package/src/components/PlBtnGroup/PlBtnGroup.vue +16 -6
  383. package/src/components/PlBtnLink/PlBtnLink.vue +2 -1
  384. package/src/components/PlBtnPrimary/PlBtnPrimary.vue +1 -1
  385. package/src/components/PlBtnSecondary/PlBtnSecondary.vue +1 -1
  386. package/src/components/PlBtnSplit/PlBtnSplit.vue +12 -2
  387. package/src/components/PlChartHistogram/PlChartHistogram.vue +9 -3
  388. package/src/components/PlChartHistogram/createGridlines.ts +2 -0
  389. package/src/components/PlChartHistogram/createLabels.ts +2 -0
  390. package/src/components/PlChartHistogram/createSvgContainer.ts +2 -0
  391. package/src/components/PlChartHistogram/drawBins.ts +2 -0
  392. package/src/components/PlChartHistogram/drawThreshold.ts +1 -0
  393. package/src/components/PlChartHistogram/histogram.ts +6 -1
  394. package/src/components/PlChartStackedBar/Legends.vue +18 -4
  395. package/src/components/PlChartStackedBar/PlChartStackedBar.vue +4 -2
  396. package/src/components/PlChartStackedBar/PlChartStackedBarCompact.vue +1 -1
  397. package/src/components/PlChartStackedBar/StackedRow.vue +12 -4
  398. package/src/components/PlChartStackedBar/StackedRowCompact.vue +10 -3
  399. package/src/components/PlCheckbox/PlCheckbox.vue +15 -4
  400. package/src/components/PlCheckbox/PlCheckboxBase.vue +1 -0
  401. package/src/components/PlCheckboxGroup/PlCheckboxGroup.vue +15 -4
  402. package/src/components/PlChip/PlChip.vue +4 -3
  403. package/src/components/PlClipboard/PlClipboard.vue +7 -1
  404. package/src/components/PlConfirmDialog.vue +8 -3
  405. package/src/components/PlDialogModal/PlDialogModal.vue +15 -2
  406. package/src/components/PlDropdown/OptionList.vue +13 -3
  407. package/src/components/PlDropdown/PlDropdown.vue +35 -11
  408. package/src/components/PlDropdownLegacy/PlDropdownLegacy.vue +51 -12
  409. package/src/components/PlDropdownLine/PlDropdownLine.vue +29 -5
  410. package/src/components/PlDropdownLine/ResizableInput.vue +2 -1
  411. package/src/components/PlDropdownMulti/PlDropdownMulti.vue +47 -11
  412. package/src/components/PlDropdownMultiRef/PlDropdownMultiRef.vue +1 -0
  413. package/src/components/PlDropdownRef/PlDropdownRef.vue +1 -0
  414. package/src/components/PlEditableTitle/PlEditableTitle.vue +11 -3
  415. package/src/components/PlElementList/PlElementList.vue +8 -3
  416. package/src/components/PlElementList/PlElementListItem.vue +16 -5
  417. package/src/components/PlErrorAlert/PlErrorAlert.vue +8 -6
  418. package/src/components/PlErrorBoundary/PlErrorBoundary.vue +7 -1
  419. package/src/components/PlFileDialog/Local.vue +12 -4
  420. package/src/components/PlFileDialog/PlFileDialog.vue +13 -3
  421. package/src/components/PlFileDialog/Remote.vue +39 -11
  422. package/src/components/PlFileDialog/Shortcuts.vue +7 -1
  423. package/src/components/PlFileInput/PlFileInput.vue +44 -19
  424. package/src/components/PlLoaderCircular/PlLoaderCircular.vue +1 -1
  425. package/src/components/PlLoaderLogo.vue +6 -1
  426. package/src/components/PlLogView/PlLogView.vue +30 -8
  427. package/src/components/PlNotificationAlert/PlNotificationAlert.vue +15 -3
  428. package/src/components/PlNumberField/PlNumberField.vue +14 -3
  429. package/src/components/PlProgressBar/PlProgressBar.vue +12 -4
  430. package/src/components/PlProgressCell/PlProgressCell.vue +13 -4
  431. package/src/components/PlRadio/PlRadio.vue +10 -3
  432. package/src/components/PlRadio/PlRadioGroup.vue +3 -2
  433. package/src/components/PlSearchField/PlSearchField.vue +5 -3
  434. package/src/components/PlSectionSeparator/PlSectionSeparator.vue +6 -2
  435. package/src/components/PlSidebar/PlSidebarGroup.vue +2 -2
  436. package/src/components/PlSidebar/PlSidebarItem.vue +12 -4
  437. package/src/components/PlSlideModal/PlPureSlideModal.vue +7 -1
  438. package/src/components/PlSlideModal/PlSlideModal.vue +4 -3
  439. package/src/components/PlSpacer/PlSpacer.vue +1 -1
  440. package/src/components/PlSplash/PlSplash.vue +6 -3
  441. package/src/components/PlStatusTag/PlStatusTag.vue +1 -0
  442. package/src/components/PlTabs/PlTabs.vue +6 -2
  443. package/src/components/PlTextArea/PlTextArea.vue +21 -8
  444. package/src/components/PlTextField/PlTextField.vue +23 -8
  445. package/src/components/PlToggleSwitch/PlToggleSwitch.vue +4 -3
  446. package/src/components/PlTooltip/PlTooltip.vue +3 -0
  447. package/src/components/Slider.vue +27 -7
  448. package/src/components/SliderRange.vue +28 -7
  449. package/src/components/SliderRangeTriple.vue +19 -5
  450. package/src/components/TabItem.vue +2 -2
  451. package/src/components/contextMenu/Menu.vue +8 -3
  452. package/src/layout/PlBlockPage/PlBlockPage.vue +40 -11
  453. package/src/layout/PlContainer/PlContainer.vue +1 -0
  454. package/src/layout/PlGrid/PlGrid.vue +1 -1
  455. package/src/layout/PlPlaceholder/PlPlaceholder.vue +20 -8
  456. package/src/layout/PlRow/PlRow.vue +5 -1
  457. package/src/layout/PlSpacer/PlSpacer.vue +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"PlElementListItem.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"names":[],"mappings":"AA6SA,QAAA,MAAM,YAAY,GAAK,CAAC,SAAS,OAAO,GAAG,OAAO,EACjD,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAkRO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;cAhRhD,CAAC;eACA,MAAM;wBACG,OAAO;kBACb,OAAO;qBACJ,OAAO;qBACP,OAAO;sBACN,OAAO;oBACT,OAAO;oBACP,OAAO;mBACR,OAAO;oBACN,OAAO;kBACT,OAAO;oBACL,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;sBACtB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;oBAC1B,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;qBACvB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;;;;;;;KAiQoD,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;eA7PF,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;kBAC3C,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;gBAChD,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;iBAC7C,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;;;YAQnD,OAAO,QAAQ,UAAU,GAAG,IAAI;YAChC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACvC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACvC,KAAK,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACpC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;;EAkPzC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"PlElementListItem.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"names":[],"mappings":"AAwTA,QAAA,MAAM,YAAY,GAAK,CAAC,SAAS,OAAO,GAAG,OAAO,EACjD,aAAa,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,EAC9D,YAAY,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,EAC3G,gBAAgB,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,EAClE;WAgSO,OAAO,KAAK,EAAE,WAAW,GAAG,mBAAmB,CAAC;cA9RhD,CAAC;eACA,MAAM;wBACG,OAAO;kBACb,OAAO;qBACJ,OAAO;qBACP,OAAO;sBACN,OAAO;oBACT,OAAO;oBACP,OAAO;mBACR,OAAO;oBACN,OAAO;kBACT,OAAO;oBACL,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;sBACtB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;oBAC1B,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;qBACvB,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;;;;;;;KA+QoD,CAAC,GAAG,CAAC,OAAO,UAAU,SAAS;QAAE,oBAAoB,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,EAAE,CAAC;YAC5J,CAAC,OAAO,EAAE,EAAE,KAAK,IAAI;WACtB,GAAG;;eA3QF,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;kBAC3C,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;gBAChD,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;iBAC7C,CAAC,KAAK,EAAE;YAAE,IAAI,EAAE,CAAC,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,KAAK,OAAO;;;YAQnD,OAAO,QAAQ,UAAU,GAAG,IAAI;YAChC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACvC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACvC,KAAK,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;YACpC,QAAQ,QAAQ,CAAC,SAAS,MAAM,GAAG,IAAI;;EAgQzC,KACQ,OAAO,KAAK,EAAE,KAAK,GAAG;IAAE,KAAK,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAA;CAAI,CAAC;wBACpE,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,CAAC,GAAG,EAAE,CAAC"}
@@ -34,24 +34,32 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
34
34
  ],
35
35
  setup(c, { emit: g }) {
36
36
  let _ = c, v = p(), y = n(() => v.content !== void 0), b = n(() => v.after !== void 0), x = n(() => v.before !== void 0), S = g;
37
- return (n, p) => (u(), a("div", { onClick: p[4] ||= (e) => S("click", e) }, [
37
+ return (n, p) => (u(), a("div", {
38
+ "data-testid": "pl-element-list-item",
39
+ onClick: p[4] ||= (e) => S("click", e)
40
+ }, [
38
41
  x.value ? (u(), a("div", {
39
42
  key: 0,
43
+ "data-testid": "pl-element-list-item-before",
40
44
  class: l(c.beforeClass)
41
45
  }, [d(n.$slots, "before", {
42
46
  item: _.item,
43
47
  index: _.index
44
48
  })], 2)) : i("", !0),
45
- o("div", { class: l([
46
- n.$style.root,
47
- n.$attrs.class,
48
- {
49
- [n.$style.active]: _.isActive,
50
- [n.$style.pinned]: _.isPinned,
51
- [n.$style.opened]: _.isExpanded,
52
- [n.$style.disabled]: _.isToggled
53
- }
54
- ]) }, [o("div", {
49
+ o("div", {
50
+ "data-testid": "pl-element-list-item-card",
51
+ class: l([
52
+ n.$style.root,
53
+ n.$attrs.class,
54
+ {
55
+ [n.$style.active]: _.isActive,
56
+ [n.$style.pinned]: _.isPinned,
57
+ [n.$style.opened]: _.isExpanded,
58
+ [n.$style.disabled]: _.isToggled
59
+ }
60
+ ])
61
+ }, [o("div", {
62
+ "data-testid": "pl-element-list-item-head",
55
63
  class: l([
56
64
  n.$style.head,
57
65
  c.titleClass,
@@ -64,6 +72,7 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
64
72
  class: l(n.$style.headIcons)
65
73
  }, [_.showDragHandle ? (u(), a("div", {
66
74
  key: 0,
75
+ "data-testid": "pl-element-list-item-drag",
67
76
  class: l([
68
77
  n.$style.action,
69
78
  n.$style.draggable,
@@ -72,16 +81,24 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
72
81
  "data-draggable": _.isDraggable
73
82
  }, [s(f(t), { name: "drag-dots" })], 10, h)) : i("", !0), c.isExpandable ? (u(), r(f(t), {
74
83
  key: 1,
84
+ "data-testid": "pl-element-list-item-expand",
75
85
  class: l([n.$style.contentChevron, { [n.$style.opened]: _.isExpanded }]),
76
86
  name: "chevron-down"
77
87
  }, null, 8, ["class"])) : i("", !0)], 2)) : i("", !0),
78
- o("div", { class: l(n.$style.title) }, [d(n.$slots, "title", {
88
+ o("div", {
89
+ "data-testid": "pl-element-list-item-title",
90
+ class: l(n.$style.title)
91
+ }, [d(n.$slots, "title", {
79
92
  item: _.item,
80
93
  index: _.index
81
94
  })], 2),
82
- o("div", { class: l([n.$style.actions, n.$style.showOnHover]) }, [
95
+ o("div", {
96
+ "data-testid": "pl-element-list-item-actions",
97
+ class: l([n.$style.actions, n.$style.showOnHover])
98
+ }, [
83
99
  _.isToggable ? (u(), a("div", {
84
100
  key: 0,
101
+ "data-testid": "pl-element-list-item-toggle",
85
102
  class: l([
86
103
  n.$style.action,
87
104
  n.$style.clickable,
@@ -94,6 +111,7 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
94
111
  }, null, 8, ["name"])], 2)) : i("", !0),
95
112
  _.isPinnable ? (u(), a("div", {
96
113
  key: 1,
114
+ "data-testid": "pl-element-list-item-pin",
97
115
  class: l([
98
116
  n.$style.action,
99
117
  n.$style.clickable,
@@ -109,12 +127,14 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
109
127
  })], 2)) : i("", !0),
110
128
  _.isRemovable ? (u(), a("div", {
111
129
  key: 2,
130
+ "data-testid": "pl-element-list-item-remove",
112
131
  class: l([n.$style.action, n.$style.clickable]),
113
132
  onClick: p[2] ||= m((e) => S("remove", _.item, _.index), ["stop"])
114
133
  }, [s(f(t), { name: "close" })], 2)) : i("", !0)
115
134
  ], 2)
116
135
  ], 2), y.value && _.isExpanded ? (u(), a("div", {
117
136
  key: 0,
137
+ "data-testid": "pl-element-list-item-content",
118
138
  class: l([
119
139
  n.$style.body,
120
140
  c.contentClass,
@@ -126,6 +146,7 @@ var h = ["data-draggable"], g = /* @__PURE__ */ c({
126
146
  })], 2)) : i("", !0)], 2),
127
147
  b.value ? (u(), a("div", {
128
148
  key: 1,
149
+ "data-testid": "pl-element-list-item-after",
129
150
  class: l(c.afterClass)
130
151
  }, [d(n.$slots, "after", {
131
152
  item: _.item,
@@ -1 +1 @@
1
- {"version":3,"file":"PlElementListItem.vue_vue_type_script_setup_true_lang.js","names":["$style","$attrs"],"sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown\" lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { PlIcon16 } from \"../PlIcon16\";\nimport { PlIcon24 } from \"../PlIcon24\";\n\nconst props = defineProps<{\n item: T;\n index: number;\n showDragHandle: boolean;\n isActive: boolean;\n isDraggable: boolean;\n isRemovable: boolean;\n isExpandable: boolean;\n isExpanded: boolean;\n isToggable: boolean;\n isToggled: boolean;\n isPinnable: boolean;\n isPinned: boolean;\n titleClass: string | string[] | null;\n contentClass: string | string[] | null;\n afterClass: string | string[] | null;\n beforeClass: string | string[] | null;\n}>();\ndefineOptions({ inheritAttrs: false });\n\nconst slots = defineSlots<{\n title: (props: { item: T; index: number }) => unknown;\n content?: (props: { item: T; index: number }) => unknown;\n after?: (props: { item: T; index: number }) => unknown;\n before?: (props: { item: T; index: number }) => unknown;\n}>();\nconst hasContentSlot = computed(() => slots[\"content\"] !== undefined);\nconst hasAfterSlot = computed(() => slots[\"after\"] !== undefined);\nconst hasBeforeSlot = computed(() => slots[\"before\"] !== undefined);\n\nconst emit = defineEmits<{\n (e: \"click\", item: MouseEvent): void;\n (e: \"expand\", item: T, index: number): void;\n (e: \"toggle\", item: T, index: number): void;\n (e: \"pin\", item: T, index: number): void;\n (e: \"remove\", item: T, index: number): void;\n}>();\n</script>\n\n<template>\n <div @click=\"(event) => emit('click', event)\">\n <div v-if=\"hasBeforeSlot\" :class=\"beforeClass\">\n <slot name=\"before\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n <div\n :class=\"[\n $style.root,\n $attrs.class,\n {\n [$style.active]: props.isActive,\n [$style.pinned]: props.isPinned,\n [$style.opened]: props.isExpanded,\n [$style.disabled]: props.isToggled,\n },\n ]\"\n >\n <div\n :class=\"[\n $style.head,\n titleClass,\n {\n [$style.clickable]: hasContentSlot,\n },\n ]\"\n @click=\"isExpandable && emit('expand', props.item, props.index)\"\n >\n <div v-if=\"props.showDragHandle || isExpandable\" :class=\"$style.headIcons\">\n <div\n v-if=\"props.showDragHandle\"\n :class=\"[$style.action, $style.draggable, { [$style.disable]: !props.isDraggable }]\"\n :data-draggable=\"props.isDraggable\"\n >\n <PlIcon16 name=\"drag-dots\" />\n </div>\n <PlIcon16\n v-if=\"isExpandable\"\n :class=\"[$style.contentChevron, { [$style.opened]: props.isExpanded }]\"\n name=\"chevron-down\"\n />\n </div>\n\n <div :class=\"$style.title\">\n <slot name=\"title\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n\n <div :class=\"[$style.actions, $style.showOnHover]\">\n <div\n v-if=\"props.isToggable\"\n :class=\"[$style.action, $style.clickable, { [$style.disable]: !props.isToggable }]\"\n @click.stop=\"emit('toggle', props.item, props.index)\"\n >\n <PlIcon24 :name=\"props.isToggled === true ? 'view-hide' : 'view-show'\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isPinnable\"\n :class=\"[\n $style.action,\n $style.clickable,\n {\n [$style.disable]: !props.isPinnable,\n [$style.activated]: props.isPinned,\n },\n ]\"\n @click.stop=\"emit('pin', props.item, props.index)\"\n >\n <PlIcon24 name=\"pin\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isRemovable\"\n :class=\"[$style.action, $style.clickable]\"\n @click.stop=\"emit('remove', props.item, props.index)\"\n >\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n </div>\n <div\n v-if=\"hasContentSlot && props.isExpanded\"\n :class=\"[$style.body, contentClass, { [$style.disabled]: props.isToggled }]\"\n >\n <slot name=\"content\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n <div v-if=\"hasAfterSlot\" :class=\"afterClass\">\n <slot name=\"after\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n</template>\n\n<style module>\n@use \"../../assets/variables.scss\" as *;\n\n.root {\n --background: rgba(255, 255, 255, 0.8);\n --border-color: var(--color-div-grey);\n --head-background: unset;\n --box-shadow: none;\n --box-shadow-active: 0 0 0 4px color-mix(in srgb, var(--border-color-focus) 50%, transparent);\n\n &:global(.sortable-drag),\n &:global(.sortable-chosen) {\n --head-background: var(--gradient-light-lime);\n --border-color: var(--border-color-focus);\n --box-shadow: var(--box-shadow-active);\n }\n}\n.root {\n display: flex;\n flex-direction: column;\n justify-content: center;\n border-radius: var(--border-radius);\n border: 1px solid var(--border-color);\n background-color: var(--background);\n transition: box-shadow 0.15s;\n box-shadow: var(--box-shadow);\n overflow: hidden;\n\n &:hover {\n --border-color: var(--border-color-focus);\n --head-background: var(--gradient-light-lime);\n }\n\n &.opened {\n --head-background: var(--gradient-light-lime);\n }\n\n &.disabled {\n --icon-color: var(--ic-02);\n --border-color: var(--border-color-div-grey);\n color: var(--txt-03);\n filter: grayscale(1);\n }\n\n &.pinned {\n --background: var(--bg-base-light);\n }\n\n &.active {\n --border-color: var(--border-color-focus);\n --head-background: var(--btn-accent-positive-500);\n }\n}\n\n.head {\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px;\n min-height: 40px;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background: var(--head-background);\n}\n\n.headIcons {\n display: flex;\n align-items: center;\n align-self: flex-start;\n height: 24px;\n flex: 0 0 auto;\n}\n\n.contentChevron {\n display: block;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n transform: rotate(-90deg);\n transition: transform 0.15s;\n\n &.opened {\n transform: rotate(0deg);\n }\n}\n\n.title {\n display: flex;\n flex-direction: row;\n flex: 1 1 0;\n gap: 8px;\n overflow: hidden;\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 24px;\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n\n &.disabled {\n pointer-events: none;\n }\n}\n\n.actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n align-items: center;\n background-color: var(--background);\n border-radius: var(--border-radius);\n}\n\n.action {\n width: 24px;\n height: 24px;\n padding: 4px; /* use padding instead of gap on parent, for better accessibility */\n opacity: 0.6;\n border-radius: var(--border-radius);\n transition: all 0.15s;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--bg-elevated-02);\n }\n\n &.activated {\n opacity: 0.8;\n }\n\n &.disable {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.clickable {\n cursor: pointer;\n}\n\n.draggable {\n cursor: grab;\n}\n\n.showOnHover {\n opacity: 0;\n transition: opacity 0.15s;\n}\n\n.root:hover .showOnHover {\n opacity: 1;\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"PlElementListItem.vue_vue_type_script_setup_true_lang.js","names":["$style","$attrs"],"sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown\" lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport { PlIcon16 } from \"../PlIcon16\";\nimport { PlIcon24 } from \"../PlIcon24\";\n\nconst props = defineProps<{\n item: T;\n index: number;\n showDragHandle: boolean;\n isActive: boolean;\n isDraggable: boolean;\n isRemovable: boolean;\n isExpandable: boolean;\n isExpanded: boolean;\n isToggable: boolean;\n isToggled: boolean;\n isPinnable: boolean;\n isPinned: boolean;\n titleClass: string | string[] | null;\n contentClass: string | string[] | null;\n afterClass: string | string[] | null;\n beforeClass: string | string[] | null;\n}>();\ndefineOptions({ inheritAttrs: false });\n\nconst slots = defineSlots<{\n title: (props: { item: T; index: number }) => unknown;\n content?: (props: { item: T; index: number }) => unknown;\n after?: (props: { item: T; index: number }) => unknown;\n before?: (props: { item: T; index: number }) => unknown;\n}>();\nconst hasContentSlot = computed(() => slots[\"content\"] !== undefined);\nconst hasAfterSlot = computed(() => slots[\"after\"] !== undefined);\nconst hasBeforeSlot = computed(() => slots[\"before\"] !== undefined);\n\nconst emit = defineEmits<{\n (e: \"click\", item: MouseEvent): void;\n (e: \"expand\", item: T, index: number): void;\n (e: \"toggle\", item: T, index: number): void;\n (e: \"pin\", item: T, index: number): void;\n (e: \"remove\", item: T, index: number): void;\n}>();\n</script>\n\n<template>\n <div data-testid=\"pl-element-list-item\" @click=\"(event) => emit('click', event)\">\n <div v-if=\"hasBeforeSlot\" data-testid=\"pl-element-list-item-before\" :class=\"beforeClass\">\n <slot name=\"before\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n <div\n data-testid=\"pl-element-list-item-card\"\n :class=\"[\n $style.root,\n $attrs.class,\n {\n [$style.active]: props.isActive,\n [$style.pinned]: props.isPinned,\n [$style.opened]: props.isExpanded,\n [$style.disabled]: props.isToggled,\n },\n ]\"\n >\n <div\n data-testid=\"pl-element-list-item-head\"\n :class=\"[\n $style.head,\n titleClass,\n {\n [$style.clickable]: hasContentSlot,\n },\n ]\"\n @click=\"isExpandable && emit('expand', props.item, props.index)\"\n >\n <div v-if=\"props.showDragHandle || isExpandable\" :class=\"$style.headIcons\">\n <div\n v-if=\"props.showDragHandle\"\n data-testid=\"pl-element-list-item-drag\"\n :class=\"[$style.action, $style.draggable, { [$style.disable]: !props.isDraggable }]\"\n :data-draggable=\"props.isDraggable\"\n >\n <PlIcon16 name=\"drag-dots\" />\n </div>\n <PlIcon16\n v-if=\"isExpandable\"\n data-testid=\"pl-element-list-item-expand\"\n :class=\"[$style.contentChevron, { [$style.opened]: props.isExpanded }]\"\n name=\"chevron-down\"\n />\n </div>\n\n <div data-testid=\"pl-element-list-item-title\" :class=\"$style.title\">\n <slot name=\"title\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n\n <div\n data-testid=\"pl-element-list-item-actions\"\n :class=\"[$style.actions, $style.showOnHover]\"\n >\n <div\n v-if=\"props.isToggable\"\n data-testid=\"pl-element-list-item-toggle\"\n :class=\"[$style.action, $style.clickable, { [$style.disable]: !props.isToggable }]\"\n @click.stop=\"emit('toggle', props.item, props.index)\"\n >\n <PlIcon24 :name=\"props.isToggled === true ? 'view-hide' : 'view-show'\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isPinnable\"\n data-testid=\"pl-element-list-item-pin\"\n :class=\"[\n $style.action,\n $style.clickable,\n {\n [$style.disable]: !props.isPinnable,\n [$style.activated]: props.isPinned,\n },\n ]\"\n @click.stop=\"emit('pin', props.item, props.index)\"\n >\n <PlIcon24 name=\"pin\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isRemovable\"\n data-testid=\"pl-element-list-item-remove\"\n :class=\"[$style.action, $style.clickable]\"\n @click.stop=\"emit('remove', props.item, props.index)\"\n >\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n </div>\n <div\n v-if=\"hasContentSlot && props.isExpanded\"\n data-testid=\"pl-element-list-item-content\"\n :class=\"[$style.body, contentClass, { [$style.disabled]: props.isToggled }]\"\n >\n <slot name=\"content\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n <div v-if=\"hasAfterSlot\" data-testid=\"pl-element-list-item-after\" :class=\"afterClass\">\n <slot name=\"after\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n</template>\n\n<style module>\n@use \"../../assets/variables.scss\" as *;\n\n.root {\n --background: rgba(255, 255, 255, 0.8);\n --border-color: var(--color-div-grey);\n --head-background: unset;\n --box-shadow: none;\n --box-shadow-active: 0 0 0 4px color-mix(in srgb, var(--border-color-focus) 50%, transparent);\n\n &:global(.sortable-drag),\n &:global(.sortable-chosen) {\n --head-background: var(--gradient-light-lime);\n --border-color: var(--border-color-focus);\n --box-shadow: var(--box-shadow-active);\n }\n}\n.root {\n display: flex;\n flex-direction: column;\n justify-content: center;\n border-radius: var(--border-radius);\n border: 1px solid var(--border-color);\n background-color: var(--background);\n transition: box-shadow 0.15s;\n box-shadow: var(--box-shadow);\n overflow: hidden;\n\n &:hover {\n --border-color: var(--border-color-focus);\n --head-background: var(--gradient-light-lime);\n }\n\n &.opened {\n --head-background: var(--gradient-light-lime);\n }\n\n &.disabled {\n --icon-color: var(--ic-02);\n --border-color: var(--border-color-div-grey);\n color: var(--txt-03);\n filter: grayscale(1);\n }\n\n &.pinned {\n --background: var(--bg-base-light);\n }\n\n &.active {\n --border-color: var(--border-color-focus);\n --head-background: var(--btn-accent-positive-500);\n }\n}\n\n.head {\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px;\n min-height: 40px;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background: var(--head-background);\n}\n\n.headIcons {\n display: flex;\n align-items: center;\n align-self: flex-start;\n height: 24px;\n flex: 0 0 auto;\n}\n\n.contentChevron {\n display: block;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n transform: rotate(-90deg);\n transition: transform 0.15s;\n\n &.opened {\n transform: rotate(0deg);\n }\n}\n\n.title {\n display: flex;\n flex-direction: row;\n flex: 1 1 0;\n gap: 8px;\n overflow: hidden;\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 24px;\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n\n &.disabled {\n pointer-events: none;\n }\n}\n\n.actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n align-items: center;\n background-color: var(--background);\n border-radius: var(--border-radius);\n}\n\n.action {\n width: 24px;\n height: 24px;\n padding: 4px; /* use padding instead of gap on parent, for better accessibility */\n opacity: 0.6;\n border-radius: var(--border-radius);\n transition: all 0.15s;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--bg-elevated-02);\n }\n\n &.activated {\n opacity: 0.8;\n }\n\n &.disable {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.clickable {\n cursor: pointer;\n}\n\n.draggable {\n cursor: grab;\n}\n\n.showOnHover {\n opacity: 0;\n transition: opacity 0.15s;\n}\n\n.root:hover .showOnHover {\n opacity: 1;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorAlert.js","names":[],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div :class=\"$style.title\">\n <PlMaskIcon16 :class=\"$style.titleIcon\" name=\"warning\" />\n <div :class=\"$style.titleText\">{{ props.title }}</div>\n </div>\n </slot>\n <slot name=\"message\">\n <div :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlErrorAlert.js","names":[],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div data-testid=\"pl-error-alert\" :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard data-testid=\"pl-error-alert-copy\" :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div data-testid=\"pl-error-alert-title\" :class=\"$style.title\">\n <PlMaskIcon16 data-testid=\"pl-error-alert-icon\" :class=\"$style.titleIcon\" name=\"warning\" />\n <div data-testid=\"pl-error-alert-title-text\" :class=\"$style.titleText\">\n {{ props.title }}\n </div>\n </div>\n </slot>\n <slot name=\"message\">\n <div data-testid=\"pl-error-alert-message\" :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorAlert.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div :class=\"$style.title\">\n <PlMaskIcon16 :class=\"$style.titleIcon\" name=\"warning\" />\n <div :class=\"$style.titleText\">{{ props.title }}</div>\n </div>\n </slot>\n <slot name=\"message\">\n <div :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlErrorAlert.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div data-testid=\"pl-error-alert\" :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard data-testid=\"pl-error-alert-copy\" :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div data-testid=\"pl-error-alert-title\" :class=\"$style.title\">\n <PlMaskIcon16 data-testid=\"pl-error-alert-icon\" :class=\"$style.titleIcon\" name=\"warning\" />\n <div data-testid=\"pl-error-alert-title-text\" :class=\"$style.titleText\">\n {{ props.title }}\n </div>\n </div>\n </slot>\n <slot name=\"message\">\n <div data-testid=\"pl-error-alert-message\" :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorAlert.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"names":[],"mappings":"wBAgHqB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;YAEN,MAAM;cACJ,MAAM;gBACJ,MAAM;kBACJ,MAAM;;YAHZ,MAAM;cACJ,MAAM;gBACJ,MAAM;kBACJ,MAAM;;WAHZ,MAAM;aACJ,MAAM;eACJ,MAAM;iBACJ,MAAM;;YA2GZ,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC5B,CAAC,KAAK,IAAiB,KAAK,GAAG;EAUzC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlErrorAlert.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"names":[],"mappings":"wBAkHqB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;YAEN,MAAM;cACJ,MAAM;gBACJ,MAAM;kBACJ,MAAM;;YAHZ,MAAM;cACJ,MAAM;gBACJ,MAAM;kBACJ,MAAM;;WAHZ,MAAM;aACJ,MAAM;eACJ,MAAM;iBACJ,MAAM;;YAmHZ,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC5B,CAAC,KAAK,IAAiB,KAAK,GAAG;EAUzC,CAAC;AAWL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -18,18 +18,30 @@ var f = /* @__PURE__ */ a({
18
18
  typeof e == "string" && navigator.clipboard.writeText(e);
19
19
  }
20
20
  return (a, m) => (c(), n("div", {
21
+ "data-testid": "pl-error-alert",
21
22
  style: s({ maxHeight: f.maxHeight }),
22
23
  class: o(a.$style.root)
23
24
  }, [
24
25
  i(d(t), {
26
+ "data-testid": "pl-error-alert-copy",
25
27
  class: o(a.$style.copy),
26
28
  onCopy: p
27
29
  }, null, 8, ["class"]),
28
- l(a.$slots, "title", {}, () => [r("div", { class: o(a.$style.title) }, [i(d(e), {
30
+ l(a.$slots, "title", {}, () => [r("div", {
31
+ "data-testid": "pl-error-alert-title",
32
+ class: o(a.$style.title)
33
+ }, [i(d(e), {
34
+ "data-testid": "pl-error-alert-icon",
29
35
  class: o(a.$style.titleIcon),
30
36
  name: "warning"
31
- }, null, 8, ["class"]), r("div", { class: o(a.$style.titleText) }, u(f.title), 3)], 2)]),
32
- l(a.$slots, "message", {}, () => [r("div", { class: o(a.$style.message) }, u(f.message), 3)])
37
+ }, null, 8, ["class"]), r("div", {
38
+ "data-testid": "pl-error-alert-title-text",
39
+ class: o(a.$style.titleText)
40
+ }, u(f.title), 3)], 2)]),
41
+ l(a.$slots, "message", {}, () => [r("div", {
42
+ "data-testid": "pl-error-alert-message",
43
+ class: o(a.$style.message)
44
+ }, u(f.message), 3)])
33
45
  ], 6));
34
46
  }
35
47
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorAlert.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div :class=\"$style.title\">\n <PlMaskIcon16 :class=\"$style.titleIcon\" name=\"warning\" />\n <div :class=\"$style.titleText\">{{ props.title }}</div>\n </div>\n </slot>\n <slot name=\"message\">\n <div :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":";;;;;;CAEE,MAAM;;;;;;;;EAQR,IAAM,IAAQ;EAed,SAAS,IAAS;GAChB,IAAM,IAAQ,EAAM,eAAe,EAAM;AACzC,GAAI,OAAO,KAAU,YACnB,UAAU,UAAU,UAAU,EAAM;;yBAMtC,EAaM,OAAA;GAbA,OAAK,EAAA,EAAA,WAAe,EAAM,WAAS,CAAA;GAAK,OAAK,EAAEA,EAAAA,OAAO,KAAI;;GAC9D,EAAmD,EAAA,EAAA,EAAA;IAArC,OAAK,EAAEA,EAAAA,OAAO,KAAI;IAAS;;GACzC,EAKO,EAAA,QAAA,SAAA,EAAA,QAAA,CAJL,EAGM,OAAA,EAHA,OAAK,EAAEA,EAAAA,OAAO,MAAK,EAAA,EAAA,CACvB,EAAyD,EAAA,EAAA,EAAA;IAA1C,OAAK,EAAEA,EAAAA,OAAO,UAAS;IAAE,MAAK;2BAC7C,EAAsD,OAAA,EAAhD,OAAK,EAAEA,EAAAA,OAAO,UAAS,EAAA,EAAA,EAAK,EAAM,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA;GAGjD,EAIO,EAAA,QAAA,WAAA,EAAA,QAAA,CAHL,EAEM,OAAA,EAFA,OAAK,EAAEA,EAAAA,OAAO,QAAO,EAAA,EAAA,EACtB,EAAM,QAAO,EAAA,EAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PlErrorAlert.vue_vue_type_script_setup_true_lang.js","names":["$style"],"sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlErrorAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from \"../PlClipboard\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: \"300px\",\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === \"string\") {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div data-testid=\"pl-error-alert\" :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard data-testid=\"pl-error-alert-copy\" :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div data-testid=\"pl-error-alert-title\" :class=\"$style.title\">\n <PlMaskIcon16 data-testid=\"pl-error-alert-icon\" :class=\"$style.titleIcon\" name=\"warning\" />\n <div data-testid=\"pl-error-alert-title-text\" :class=\"$style.titleText\">\n {{ props.title }}\n </div>\n </div>\n </slot>\n <slot name=\"message\">\n <div data-testid=\"pl-error-alert-message\" :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"mappings":";;;;;;CAEE,MAAM;;;;;;;;EAQR,IAAM,IAAQ;EAed,SAAS,IAAS;GAChB,IAAM,IAAQ,EAAM,eAAe,EAAM;AACzC,GAAI,OAAO,KAAU,YACnB,UAAU,UAAU,UAAU,EAAM;;yBAMtC,EAeM,OAAA;GAfD,eAAY;GAAkB,OAAK,EAAA,EAAA,WAAe,EAAM,WAAS,CAAA;GAAK,OAAK,EAAEA,EAAAA,OAAO,KAAI;;GAC3F,EAAqF,EAAA,EAAA,EAAA;IAAxE,eAAY;IAAuB,OAAK,EAAEA,EAAAA,OAAO,KAAI;IAAS;;GAC3E,EAOO,EAAA,QAAA,SAAA,EAAA,QAAA,CANL,EAKM,OAAA;IALD,eAAY;IAAwB,OAAK,EAAEA,EAAAA,OAAO,MAAK;OAC1D,EAA2F,EAAA,EAAA,EAAA;IAA7E,eAAY;IAAuB,OAAK,EAAEA,EAAAA,OAAO,UAAS;IAAE,MAAK;2BAC/E,EAEM,OAAA;IAFD,eAAY;IAA6B,OAAK,EAAEA,EAAAA,OAAO,UAAS;QAChE,EAAM,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA,CAAA,CAAA;GAIpB,EAIO,EAAA,QAAA,WAAA,EAAA,QAAA,CAHL,EAEM,OAAA;IAFD,eAAY;IAA0B,OAAK,EAAEA,EAAAA,OAAO,QAAO;QAC3D,EAAM,QAAO,EAAA,EAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorBoundary.js","names":[],"sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from \"vue\";\nimport { PlErrorAlert } from \"../PlErrorAlert\";\nimport { isErrorLike, tryDo } from \"@milaboratories/helpers\";\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + \"\\n\" + err.stack;\n }\n\n return tryDo(\n () => JSON.stringify(err, null, 4),\n () => err.toString(),\n );\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert v-if=\"error\" ref=\"errorAlert\" :message=\"message\" :title=\"data?.title\" />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlErrorBoundary.js","names":[],"sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from \"vue\";\nimport { PlErrorAlert } from \"../PlErrorAlert\";\nimport { isErrorLike, tryDo } from \"@milaboratories/helpers\";\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + \"\\n\" + err.stack;\n }\n\n return tryDo(\n () => JSON.stringify(err, null, 4),\n () => err.toString(),\n );\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert\n v-if=\"error\"\n ref=\"errorAlert\"\n data-testid=\"pl-error-boundary-alert\"\n :message=\"message\"\n :title=\"data?.title\"\n />\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorBoundary.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"names":[],"mappings":"AAgGA,iBAAS,KAAK,SAEb;AA8DD,QAAA,IAAI,OAAO,IAA8B,CAAE;AAC3C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU;;;0OAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlErrorBoundary.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"names":[],"mappings":"AAsGA,iBAAS,KAAK,SAEb;AAgED,QAAA,IAAI,OAAO,IAA8B,CAAE;AAC3C,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK/C,QAAA,MAAM,UAAU;;;0OAEd,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AACzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -25,6 +25,7 @@ var h = /* @__PURE__ */ o({
25
25
  key: 0,
26
26
  ref_key: "errorAlert",
27
27
  ref: x,
28
+ "data-testid": "pl-error-boundary-alert",
28
29
  message: y.value,
29
30
  title: _.value?.title
30
31
  }, null, 8, ["message", "title"])) : i("", !0)], 64));
@@ -1 +1 @@
1
- {"version":3,"file":"PlErrorBoundary.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from \"vue\";\nimport { PlErrorAlert } from \"../PlErrorAlert\";\nimport { isErrorLike, tryDo } from \"@milaboratories/helpers\";\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + \"\\n\" + err.stack;\n }\n\n return tryDo(\n () => JSON.stringify(err, null, 4),\n () => err.toString(),\n );\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert v-if=\"error\" ref=\"errorAlert\" :message=\"message\" :title=\"data?.title\" />\n</template>\n"],"mappings":";;;;;;;;EAKA,IAAM,KAAkB,MAAqC;AACvD,YAAO,KAYX,QARI,EAAY,EAAI,GACX,EAAI,SAAS,QAAQ,EAAI,MAAM,WAAW,IAC7C,EAAI,UACJ,EAAI,MAAM,SAAS,EAAI,QAAO,GAC5B,EAAI,QACJ,EAAI,UAAU,OAAO,EAAI,QAG1B,QACC,KAAK,UAAU,GAAK,MAAM,EAAE,QAC5B,EAAI,UAAU,CACrB;KAGG,IAAO,EAGV,KAAK,EAEF,IAAQ,QAAe,EAAK,OAAO,MAAM,EACzC,IAAU,QAAe,EAAe,EAAM,MAAM,CAAC;EAE3D,SAAS,IAAQ;AACf,KAAK,QAAQ;;EAGf,IAAM,IAAa,EAA8C,KAAK;SAEtE,QAAqB;AAGnB,GAAI,EAAK,UAAU,QAAQ,EAAW,SACpC,GAAO;IAET,EAEF,GAAiB,GAAK,OACpB,EAAK,QAAQ;GACX,OAAO,GAAU,GAAG,MAAM,QAAQ,KAAA;GAClC,OAAO;GACR,EAEM,IACP,EAEF,EAAa;GAAE;GAAO;GAAO,CAAC,8BAI5B,EAAQ,EAAA,QAAA,UAAA,EACY,EAAA,SAAA,GAAA,EAApB,EAAsF,EAAA,EAAA,EAAA;;YAAvD;GAAJ,KAAI;GAAc,SAAS,EAAA;GAAU,OAAO,EAAA,OAAM"}
1
+ {"version":3,"file":"PlErrorBoundary.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from \"vue\";\nimport { PlErrorAlert } from \"../PlErrorAlert\";\nimport { isErrorLike, tryDo } from \"@milaboratories/helpers\";\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + \"\\n\" + err.stack;\n }\n\n return tryDo(\n () => JSON.stringify(err, null, 4),\n () => err.toString(),\n );\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert\n v-if=\"error\"\n ref=\"errorAlert\"\n data-testid=\"pl-error-boundary-alert\"\n :message=\"message\"\n :title=\"data?.title\"\n />\n</template>\n"],"mappings":";;;;;;;;EAKA,IAAM,KAAkB,MAAqC;AACvD,YAAO,KAYX,QARI,EAAY,EAAI,GACX,EAAI,SAAS,QAAQ,EAAI,MAAM,WAAW,IAC7C,EAAI,UACJ,EAAI,MAAM,SAAS,EAAI,QAAO,GAC5B,EAAI,QACJ,EAAI,UAAU,OAAO,EAAI,QAG1B,QACC,KAAK,UAAU,GAAK,MAAM,EAAE,QAC5B,EAAI,UAAU,CACrB;KAGG,IAAO,EAGV,KAAK,EAEF,IAAQ,QAAe,EAAK,OAAO,MAAM,EACzC,IAAU,QAAe,EAAe,EAAM,MAAM,CAAC;EAE3D,SAAS,IAAQ;AACf,KAAK,QAAQ;;EAGf,IAAM,IAAa,EAA8C,KAAK;SAEtE,QAAqB;AAGnB,GAAI,EAAK,UAAU,QAAQ,EAAW,SACpC,GAAO;IAET,EAEF,GAAiB,GAAK,OACpB,EAAK,QAAQ;GACX,OAAO,GAAU,GAAG,MAAM,QAAQ,KAAA;GAClC,OAAO;GACR,EAEM,IACP,EAEF,EAAa;GAAE;GAAO;GAAO,CAAC,8BAI5B,EAAQ,EAAA,QAAA,UAAA,EAEA,EAAA,SAAA,GAAA,EADR,EAME,EAAA,EAAA,EAAA;;YAJI;GAAJ,KAAI;GACJ,eAAY;GACX,SAAS,EAAA;GACT,OAAO,EAAA,OAAM"}
@@ -1 +1 @@
1
- {"version":3,"file":"Local.js","names":[],"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(() =>\n props.multi ? \"Drag & Drop files here or click to add\" : \"Drag & Drop file here or click to add\",\n);\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error(\n \"API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available\",\n );\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()\n ?.lsDriver.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()\n ?.lsDriver.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\"\n >Supported formats: {{ extensions.join(\", \") }}</span\n >\n <span v-if=\"data.error\" class=\"alert-error\">{{ data.error }}</span>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"Local.js","names":[],"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(() =>\n props.multi ? \"Drag & Drop files here or click to add\" : \"Drag & Drop file here or click to add\",\n);\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error(\n \"API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available\",\n );\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()\n ?.lsDriver.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()\n ?.lsDriver.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\n :class=\"style.local\"\n data-testid=\"pl-file-dialog-local\"\n @drop=\"onDrop\"\n @dragover.prevent\n @click=\"openNativeDialog\"\n >\n <PlIcon24 name=\"cloud-upload\" />\n <span data-testid=\"pl-file-dialog-local-label\">{{ label }}</span>\n <span v-if=\"extensions\" :class=\"style.supported\" data-testid=\"pl-file-dialog-local-formats\"\n >Supported formats: {{ extensions.join(\", \") }}</span\n >\n <span v-if=\"data.error\" class=\"alert-error\" data-testid=\"pl-file-dialog-local-error\">{{\n data.error\n }}</span>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"Local.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/Local.vue"],"names":[],"mappings":"AAyGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAyIF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"Local.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/Local.vue"],"names":[],"mappings":"AAiHA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAMjD,KAAK,WAAW,GAAG;IACjB,WAAW,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AA+IF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -5,10 +5,11 @@ import { normalizeExtensions as n } from "./utils.js";
5
5
  import { computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createVNode as s, defineComponent as c, normalizeClass as l, openBlock as u, reactive as d, toDisplayString as f, unref as p, withModifiers as m } from "vue";
6
6
  import { getRawPlatformaInstance as h } from "@platforma-sdk/model";
7
7
  //#region src/components/PlFileDialog/Local.vue?vue&type=script&setup=true&lang.ts
8
- var g = {
8
+ var g = { "data-testid": "pl-file-dialog-local-label" }, _ = {
9
9
  key: 1,
10
- class: "alert-error"
11
- }, _ = /* @__PURE__ */ c({
10
+ class: "alert-error",
11
+ "data-testid": "pl-file-dialog-local-error"
12
+ }, v = /* @__PURE__ */ c({
12
13
  __name: "Local",
13
14
  props: {
14
15
  importFiles: { type: Function },
@@ -16,45 +17,47 @@ var g = {
16
17
  extensions: {}
17
18
  },
18
19
  setup(c) {
19
- let _ = c, v = d({ error: void 0 }), y = r(() => _.multi ? "Drag & Drop files here or click to add" : "Drag & Drop file here or click to add"), b = async (e) => {
20
+ let v = c, y = d({ error: void 0 }), b = r(() => v.multi ? "Drag & Drop files here or click to add" : "Drag & Drop file here or click to add"), x = async (e) => {
20
21
  let t = h()?.lsDriver?.fileToImportHandle;
21
22
  if (!t) return console.error("API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available");
22
- let r = n(_.extensions), i = await Promise.all([...e.dataTransfer?.files ?? []].filter((e) => !!e).filter((e) => r ? r.some((t) => e.name.endsWith(t)) : !0).map((e) => t(e)));
23
- i.length && _.importFiles({ files: i });
24
- }, x = async () => {
25
- let e = _.extensions ? [{
23
+ let r = n(v.extensions), i = await Promise.all([...e.dataTransfer?.files ?? []].filter((e) => !!e).filter((e) => r ? r.some((t) => e.name.endsWith(t)) : !0).map((e) => t(e)));
24
+ i.length && v.importFiles({ files: i });
25
+ }, S = async () => {
26
+ let e = v.extensions ? [{
26
27
  name: "All Files",
27
- extensions: [..._.extensions]
28
+ extensions: [...v.extensions]
28
29
  }] : [];
29
- _.multi ? h()?.lsDriver.showOpenMultipleFilesDialog({
30
+ v.multi ? h()?.lsDriver.showOpenMultipleFilesDialog({
30
31
  title: "Select files to import",
31
32
  filters: e
32
33
  }).then(({ files: e }) => {
33
- e && _.importFiles({ files: e });
34
- }).catch((e) => v.error = e) : h()?.lsDriver.showOpenSingleFileDialog({
34
+ e && v.importFiles({ files: e });
35
+ }).catch((e) => y.error = e) : h()?.lsDriver.showOpenSingleFileDialog({
35
36
  title: "Select file to import",
36
37
  filters: e
37
38
  }).then(({ file: e }) => {
38
- e && _.importFiles({ files: [e] });
39
- }).catch((e) => v.error = e);
39
+ e && v.importFiles({ files: [e] });
40
+ }).catch((e) => y.error = e);
40
41
  };
41
42
  return (n, r) => (u(), a("div", {
42
43
  class: l(p(t).local),
43
- onDrop: b,
44
+ "data-testid": "pl-file-dialog-local",
45
+ onDrop: x,
44
46
  onDragover: r[0] ||= m(() => {}, ["prevent"]),
45
- onClick: x
47
+ onClick: S
46
48
  }, [
47
49
  s(p(e), { name: "cloud-upload" }),
48
- o("span", null, f(y.value), 1),
50
+ o("span", g, f(b.value), 1),
49
51
  c.extensions ? (u(), a("span", {
50
52
  key: 0,
51
- class: l(p(t).supported)
53
+ class: l(p(t).supported),
54
+ "data-testid": "pl-file-dialog-local-formats"
52
55
  }, "Supported formats: " + f(c.extensions.join(", ")), 3)) : i("", !0),
53
- v.error ? (u(), a("span", g, f(v.error), 1)) : i("", !0)
56
+ y.error ? (u(), a("span", _, f(y.error), 1)) : i("", !0)
54
57
  ], 34));
55
58
  }
56
59
  });
57
60
  //#endregion
58
- export { _ as default };
61
+ export { v as default };
59
62
 
60
63
  //# sourceMappingURL=Local.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Local.vue_vue_type_script_setup_true_lang.js","names":[],"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(() =>\n props.multi ? \"Drag & Drop files here or click to add\" : \"Drag & Drop file here or click to add\",\n);\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error(\n \"API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available\",\n );\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()\n ?.lsDriver.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()\n ?.lsDriver.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\"\n >Supported formats: {{ extensions.join(\", \") }}</span\n >\n <span v-if=\"data.error\" class=\"alert-error\">{{ data.error }}</span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAQA,IAAM,IAAQ,GAMR,IAAO,EAAS,EACpB,OAAO,KAAA,GACR,CAAC,EAEI,IAAQ,QACZ,EAAM,QAAQ,2CAA2C,wCAC1D,EAEK,IAAS,OAAO,MAAkB;GACtC,IAAM,IAAqB,GAAyB,EAAE,UAAU;AAEhE,OAAI,CAAC,EACH,QAAO,QAAQ,MACb,6EACD;GAGH,IAAM,IAAa,EAAoB,EAAM,WAAW,EAElD,IAAQ,MAAM,QAAQ,IAC1B,CAAC,GAAI,EAAG,cAAc,SAAS,EAAE,CAAC,CAC/B,QAAQ,MAAM,CAAC,CAAC,EAAC,CACjB,QAAQ,MAAO,IAAa,EAAW,MAAM,MAAQ,EAAE,KAAK,SAAS,EAAI,CAAC,GAAG,GAAK,CAClF,KAAK,MACG,EAAmB,EAAK,CAC/B,CACL;AAED,GAAI,EAAM,UACR,EAAM,YAAY,EAChB,UACD,CAAC;KAIA,IAAmB,YAAY;GACnC,IAAM,IAA8B,EAAM,aACtC,CACE;IACE,MAAM;IACN,YAAY,CAAC,GAAG,EAAM,WAAW;IAClC,CACH,GACA,EAAE;AAEN,GAAI,EAAM,QACR,GAAwB,EACpB,SAAS,4BAA4B;IACrC,OAAO;IACP;IACD,CAAA,CACA,MAAM,EAAE,eAAY;AACnB,IAAI,KACF,EAAM,YAAY,EAChB,UACD,CAAC;KAEL,CACA,OAAO,MAAS,EAAK,QAAQ,EAAK,GAErC,GAAwB,EACpB,SAAS,yBAAyB;IAClC,OAAO;IACP;IACD,CAAA,CACA,MAAM,EAAE,cAAW;AAClB,IAAI,KACF,EAAM,YAAY,EAChB,OAAO,CAAC,EAAK,EACd,CAAC;KAEL,CACA,OAAO,MAAS,EAAK,QAAQ,EAAK;;yBAMvC,EAOM,OAAA;GAPA,OAAK,EAAE,EAAA,EAAK,CAAC,MAAK;GAAS;GAAS,YAAQ,AAAA,EAAA,OAAA,QAAT,IAAiB,CAAA,UAAA,CAAA;GAAE,SAAO;;GACjE,EAAgC,EAAA,EAAA,EAAA,EAAtB,MAAK,gBAAc,CAAA;GAC7B,EAAwB,QAAA,MAAA,EAAf,EAAA,MAAK,EAAA,EAAA;GACF,EAAA,cAAA,GAAA,EAAZ,EAEC,QAAA;;IAFwB,OAAK,EAAE,EAAA,EAAK,CAAC,UAAS;MAC5C,wBAAmB,EAAG,EAAA,WAAW,KAAI,KAAA,CAAA,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;GAE5B,EAAK,SAAA,GAAA,EAAjB,EAAmE,QAAnE,GAAmE,EAApB,EAAK,MAAK,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA"}
1
+ {"version":3,"file":"Local.vue_vue_type_script_setup_true_lang.js","names":[],"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(() =>\n props.multi ? \"Drag & Drop files here or click to add\" : \"Drag & Drop file here or click to add\",\n);\n\nconst onDrop = async (ev: DragEvent) => {\n const fileToImportHandle = getRawPlatformaInstance()?.lsDriver?.fileToImportHandle;\n\n if (!fileToImportHandle) {\n return console.error(\n \"API getPlatformaRawInstance().lsDriver.fileToImportHandle is not available\",\n );\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()\n ?.lsDriver.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()\n ?.lsDriver.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\n :class=\"style.local\"\n data-testid=\"pl-file-dialog-local\"\n @drop=\"onDrop\"\n @dragover.prevent\n @click=\"openNativeDialog\"\n >\n <PlIcon24 name=\"cloud-upload\" />\n <span data-testid=\"pl-file-dialog-local-label\">{{ label }}</span>\n <span v-if=\"extensions\" :class=\"style.supported\" data-testid=\"pl-file-dialog-local-formats\"\n >Supported formats: {{ extensions.join(\", \") }}</span\n >\n <span v-if=\"data.error\" class=\"alert-error\" data-testid=\"pl-file-dialog-local-error\">{{\n data.error\n }}</span>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAQA,IAAM,IAAQ,GAMR,IAAO,EAAS,EACpB,OAAO,KAAA,GACR,CAAC,EAEI,IAAQ,QACZ,EAAM,QAAQ,2CAA2C,wCAC1D,EAEK,IAAS,OAAO,MAAkB;GACtC,IAAM,IAAqB,GAAyB,EAAE,UAAU;AAEhE,OAAI,CAAC,EACH,QAAO,QAAQ,MACb,6EACD;GAGH,IAAM,IAAa,EAAoB,EAAM,WAAW,EAElD,IAAQ,MAAM,QAAQ,IAC1B,CAAC,GAAI,EAAG,cAAc,SAAS,EAAE,CAAC,CAC/B,QAAQ,MAAM,CAAC,CAAC,EAAC,CACjB,QAAQ,MAAO,IAAa,EAAW,MAAM,MAAQ,EAAE,KAAK,SAAS,EAAI,CAAC,GAAG,GAAK,CAClF,KAAK,MACG,EAAmB,EAAK,CAC/B,CACL;AAED,GAAI,EAAM,UACR,EAAM,YAAY,EAChB,UACD,CAAC;KAIA,IAAmB,YAAY;GACnC,IAAM,IAA8B,EAAM,aACtC,CACE;IACE,MAAM;IACN,YAAY,CAAC,GAAG,EAAM,WAAW;IAClC,CACH,GACA,EAAE;AAEN,GAAI,EAAM,QACR,GAAwB,EACpB,SAAS,4BAA4B;IACrC,OAAO;IACP;IACD,CAAA,CACA,MAAM,EAAE,eAAY;AACnB,IAAI,KACF,EAAM,YAAY,EAChB,UACD,CAAC;KAEL,CACA,OAAO,MAAS,EAAK,QAAQ,EAAK,GAErC,GAAwB,EACpB,SAAS,yBAAyB;IAClC,OAAO;IACP;IACD,CAAA,CACA,MAAM,EAAE,cAAW;AAClB,IAAI,KACF,EAAM,YAAY,EAChB,OAAO,CAAC,EAAK,EACd,CAAC;KAEL,CACA,OAAO,MAAS,EAAK,QAAQ,EAAK;;yBAMvC,EAeM,OAAA;GAdH,OAAK,EAAE,EAAA,EAAK,CAAC,MAAK;GACnB,eAAY;GACL;GACN,YAAQ,AAAA,EAAA,OAAA,QAAT,IAAiB,CAAA,UAAA,CAAA;GAChB,SAAO;;GAER,EAAgC,EAAA,EAAA,EAAA,EAAtB,MAAK,gBAAc,CAAA;GAC7B,EAAiE,QAAjE,GAAiE,EAAf,EAAA,MAAK,EAAA,EAAA;GAC3C,EAAA,cAAA,GAAA,EAAZ,EAEC,QAAA;;IAFwB,OAAK,EAAE,EAAA,EAAK,CAAC,UAAS;IAAE,eAAY;MAC1D,wBAAmB,EAAG,EAAA,WAAW,KAAI,KAAA,CAAA,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA;GAE5B,EAAK,SAAA,GAAA,EAAjB,EAES,QAFT,GAES,EADP,EAAK,MAAK,EAAA,EAAA,IAAA,EAAA,IAAA,GAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlFileDialog.js","names":[],"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(() =>\n props.multi ? \"Select Files to Import\" : \"Select File to Import\",\n);\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\"\n >Import</PlBtnPrimary\n >\n <PlBtnGhost :justify-center=\"false\" @click.stop=\"closeModal\">Cancel</PlBtnGhost>\n </template>\n </PlDialogModal>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlFileDialog.js","names":[],"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(() =>\n props.multi ? \"Select Files to Import\" : \"Select File to Import\",\n);\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 data-testid=\"pl-file-dialog\"\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\" data-testid=\"pl-file-dialog-mode\" />\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\n style=\"min-width: 160px\"\n :disabled=\"!remoteRef?.isReady\"\n data-testid=\"pl-file-dialog-import\"\n @click.stop=\"submit\"\n >Import</PlBtnPrimary\n >\n <PlBtnGhost\n :justify-center=\"false\"\n data-testid=\"pl-file-dialog-cancel\"\n @click.stop=\"closeModal\"\n >Cancel</PlBtnGhost\n >\n </template>\n </PlDialogModal>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlFileDialog.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/PlFileDialog.vue"],"names":[],"mappings":"AA+HA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAc/D,KAAK,WAAW,GAAG;IACf;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAuOJ,QAAA,MAAM,YAAY;;;;;;;WAjPN,MAAM;yBASQ,OAAO;gBApBhB,MAAM,EAAE;uBAgBD,OAAO;6EAgP7B,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"PlFileDialog.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlFileDialog/PlFileDialog.vue"],"names":[],"mappings":"AAyIA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,aAAa,CAAC;AAc/D,KAAK,WAAW,GAAG;IACf;;;;OAIG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AA+OJ,QAAA,MAAM,YAAY;;;;;;;WAzPN,MAAM;yBASQ,OAAO;gBApBhB,MAAM,EAAE;uBAgBD,OAAO;6EAwP7B,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -45,6 +45,7 @@ var T = { style: { margin: "0 24px" } }, E = /* @__PURE__ */ m({
45
45
  "no-content-gutters": !0,
46
46
  "close-on-outside-click": m.closeOnOutsideClick,
47
47
  class: g(["pl-dialog-modal", b(i).component]),
48
+ "data-testid": "pl-file-dialog",
48
49
  "model-value": m.modelValue,
49
50
  width: "688px",
50
51
  height: "720px",
@@ -56,7 +57,8 @@ var T = { style: { margin: "0 24px" } }, E = /* @__PURE__ */ m({
56
57
  u("div", T, [p(b(t), {
57
58
  modelValue: k.value,
58
59
  "onUpdate:modelValue": v[0] ||= (e) => k.value = e,
59
- options: j
60
+ options: j,
61
+ "data-testid": "pl-file-dialog-mode"
60
62
  }, null, 8, ["modelValue"])]),
61
63
  k.value === "remote" ? (_(), c(a, h({
62
64
  key: 0,
@@ -73,12 +75,14 @@ var T = { style: { margin: "0 24px" } }, E = /* @__PURE__ */ m({
73
75
  fn: S(() => [p(b(n), {
74
76
  style: { "min-width": "160px" },
75
77
  disabled: !N.value?.isReady,
78
+ "data-testid": "pl-file-dialog-import",
76
79
  onClick: C(P, ["stop"])
77
80
  }, {
78
81
  default: S(() => [...v[2] ||= [f("Import", -1)]]),
79
82
  _: 1
80
83
  }, 8, ["disabled"]), p(b(e), {
81
84
  "justify-center": !1,
85
+ "data-testid": "pl-file-dialog-cancel",
82
86
  onClick: C(M, ["stop"])
83
87
  }, {
84
88
  default: S(() => [...v[3] ||= [f("Cancel", -1)]]),
@@ -1 +1 @@
1
- {"version":3,"file":"PlFileDialog.vue_vue_type_script_setup_true_lang.js","names":["$props"],"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(() =>\n props.multi ? \"Select Files to Import\" : \"Select File to Import\",\n);\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\"\n >Import</PlBtnPrimary\n >\n <PlBtnGhost :justify-center=\"false\" @click.stop=\"closeModal\">Cancel</PlBtnGhost>\n </template>\n </PlDialogModal>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA,IAAM,IAAO,GAKP,IAAQ,GA4CR,IAAO,EAAwB,QAAQ,EAEvC,IAAe,QACnB,EAAM,QAAQ,2BAA2B,wBAC1C,EAEK,IAAc,CAClB;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF,EAEK,UAAmB,EAAK,qBAAqB,GAAM,EAEnD,IAAY,EAAe,SAAS,EAEpC,UAAe;AACnB,GAAI,EAAU,OAAO,YACnB,EAAK,gBAAgB,EAAS,EAAU,OAAO,kBAAkB,CAAC,CAAC,EACnE,GAAY;KAIV,KAAe,MAAiC;AAEpD,GADA,EAAK,gBAAgB,EAAc,EACnC,GAAY;;yBAKZ,EAuBgB,EAAA,EAAA,EAAA;GAtBb,sBAAoB;GACpB,0BAAwB,EAAA;GACzB,OAAK,EAAA,CAAC,mBACE,EAAA,EAAK,CAAC,UAAS,CAAA;GACtB,eAAa,EAAA;GACd,OAAM;GACN,QAAO;GACN,uBAAoB;GACpB,SAAK,AAAA,EAAA,OAAA,QAAN,IAAW,CAAA,OAAA,CAAA;;GAEA,OAAK,QAA4B,CAAA,EAAA,EAAxB,EAAA,SAAS,EAAA,MAAY,EAAA,EAAA,CAAA,CAAA;oBAGnC;IAFN,EAEM,OAFN,GAEM,CADJ,EAAoD,EAAA,EAAA,EAAA;iBAA/B,EAAA;8CAAI,QAAA;KAAG,SAAS;;IAEzB,EAAA,UAAI,YAAA,GAAA,EAAlB,EAAiF,GAAjF,EAAiF;;KAAhD,KAAI;OAAiBA,EAAAA,QAAM,EAAW,WAAM,CAAA,EAAA,MAAA,GAAA,IAAA,EAAA,IAAA,GAAA;IAChE,EAAA,UAAI,WAAA,GAAA,EAAjB,EAA6E,GAA7E,EAA6E;;KAA7C,gBAAc;OAAqBA,EAAAA,OAAM,EAAA,MAAA,GAAA,IAAA,EAAA,IAAA,GAAA;;;MACzD,EAAA,UAAI,WAAA;SAAgB;eAGjC,CAFD,EAEC,EAAA,EAAA,EAAA;IAFa,OAAA,EAAA,aAAA,SAAwB;IAAE,UAAQ,CAAG,EAAA,OAAW;IAAU,SAAK,EAAO,GAAM,CAAA,OAAA,CAAA;;qBACjF,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAN,UAAM,GAAA,CAAA,CAAA,CAAA;;wBAET,EAAgF,EAAA,EAAA,EAAA;IAAnE,kBAAgB;IAAQ,SAAK,EAAO,GAAU,CAAA,OAAA,CAAA;;qBAAQ,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAN,UAAM,GAAA,CAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PlFileDialog.vue_vue_type_script_setup_true_lang.js","names":["$props"],"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(() =>\n props.multi ? \"Select Files to Import\" : \"Select File to Import\",\n);\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 data-testid=\"pl-file-dialog\"\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\" data-testid=\"pl-file-dialog-mode\" />\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\n style=\"min-width: 160px\"\n :disabled=\"!remoteRef?.isReady\"\n data-testid=\"pl-file-dialog-import\"\n @click.stop=\"submit\"\n >Import</PlBtnPrimary\n >\n <PlBtnGhost\n :justify-center=\"false\"\n data-testid=\"pl-file-dialog-cancel\"\n @click.stop=\"closeModal\"\n >Cancel</PlBtnGhost\n >\n </template>\n </PlDialogModal>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYA,IAAM,IAAO,GAKP,IAAQ,GA4CR,IAAO,EAAwB,QAAQ,EAEvC,IAAe,QACnB,EAAM,QAAQ,2BAA2B,wBAC1C,EAEK,IAAc,CAClB;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF,EAEK,UAAmB,EAAK,qBAAqB,GAAM,EAEnD,IAAY,EAAe,SAAS,EAEpC,UAAe;AACnB,GAAI,EAAU,OAAO,YACnB,EAAK,gBAAgB,EAAS,EAAU,OAAO,kBAAkB,CAAC,CAAC,EACnE,GAAY;KAIV,KAAe,MAAiC;AAEpD,GADA,EAAK,gBAAgB,EAAc,EACnC,GAAY;;yBAKZ,EAiCgB,EAAA,EAAA,EAAA;GAhCb,sBAAoB;GACpB,0BAAwB,EAAA;GACzB,OAAK,EAAA,CAAC,mBAEE,EAAA,EAAK,CAAC,UAAS,CAAA;GADvB,eAAY;GAEX,eAAa,EAAA;GACd,OAAM;GACN,QAAO;GACN,uBAAoB;GACpB,SAAK,AAAA,EAAA,OAAA,QAAN,IAAW,CAAA,OAAA,CAAA;;GAEA,OAAK,QAA4B,CAAA,EAAA,EAAxB,EAAA,SAAS,EAAA,MAAY,EAAA,EAAA,CAAA,CAAA;oBAGnC;IAFN,EAEM,OAFN,GAEM,CADJ,EAAsF,EAAA,EAAA,EAAA;iBAAjE,EAAA;8CAAI,QAAA;KAAG,SAAS;KAAa,eAAY;;IAElD,EAAA,UAAI,YAAA,GAAA,EAAlB,EAAiF,GAAjF,EAAiF;;KAAhD,KAAI;OAAiBA,EAAAA,QAAM,EAAW,WAAM,CAAA,EAAA,MAAA,GAAA,IAAA,EAAA,IAAA,GAAA;IAChE,EAAA,UAAI,WAAA,GAAA,EAAjB,EAA6E,GAA7E,EAA6E;;KAA7C,gBAAc;OAAqBA,EAAAA,OAAM,EAAA,MAAA,GAAA,IAAA,EAAA,IAAA,GAAA;;;MACzD,EAAA,UAAI,WAAA;SAAgB;eAOjC,CAND,EAMC,EAAA,EAAA,EAAA;IALC,OAAA,EAAA,aAAA,SAAwB;IACvB,UAAQ,CAAG,EAAA,OAAW;IACvB,eAAY;IACX,SAAK,EAAO,GAAM,CAAA,OAAA,CAAA;;qBACZ,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAN,UAAM,GAAA,CAAA,CAAA,CAAA;;wBAET,EAKC,EAAA,EAAA,EAAA;IAJE,kBAAgB;IACjB,eAAY;IACX,SAAK,EAAO,GAAU,CAAA,OAAA,CAAA;;qBAChB,CAAA,GAAA,AAAA,EAAA,OAAA,CAAA,EAAN,UAAM,GAAA,CAAA,CAAA,CAAA"}