@milaboratories/uikit 2.15.37 → 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 +173 -173
  2. package/.turbo/turbo-formatter$colon$check.log +2 -2
  3. package/.turbo/turbo-linter$colon$check.log +2 -2
  4. package/.turbo/turbo-types$colon$check.log +1 -1
  5. package/CHANGELOG.md +6 -0
  6. package/dist/__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 +3 -3
  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":"SliderRangeTriple.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/SliderRangeTriple.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, unref, useSlots } from \"vue\";\nimport { useMouseCapture } from \"../composition/useMouseCapture\";\nimport { tapIf } from \"../helpers/functions\";\nimport { clamp } from \"../helpers/math\";\nimport { PlTooltip } from \"./PlTooltip\";\nimport type { SliderMode } from \"../types\";\nimport { useSliderBreakpoints } from \"../composition/useSliderBreakpoints\";\nimport { getErrorMessage } from \"../helpers/error.ts\";\n\ntype ModelType = [number, number, number];\nconst slots = useSlots();\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: ModelType;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: \"text\",\n measure: \"%\",\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n deltaValue3: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst thumbRef3 = ref<HTMLElement>();\n\nconst range = computed(() => props.max - props.min);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst localValue1 = computed(() =>\n clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max),\n);\nconst localValue2 = computed(() =>\n clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max),\n);\nconst localValue3 = computed(() =>\n clamp((props.modelValue[2] ?? 0) + data.deltaValue3, props.min, props.max),\n);\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 3 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return \"Expected model [number, number, number]\";\n }\n\n const errors: string[] = [];\n\n [...props.modelValue].forEach((v) => {\n if (v > props.max) {\n errors.push(`Max model value must be lower than max props ${props.max}.`);\n }\n if (v < props.min) {\n errors.push(\"Min model value must be greater than max props.\");\n }\n });\n\n if (errors.length > 0) {\n return errors.join(\" \");\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst position3 = computed(() => {\n return (localValue3.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + \"%\",\n left: 100 - leftRight.value[2] + \"%\",\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + \"%\",\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + \"%\",\n}));\n\nconst thumbStyle3 = computed(() => ({\n right: Math.ceil((1 - position3.value) * 100) + \"%\",\n}));\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n if (thumbRef1.value) {\n updateDatasetForThumb(thumbRef1.value, props.modelValue[0], data.deltaValue1);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n if (thumbRef2.value) {\n updateDatasetForThumb(thumbRef2.value, props.modelValue[1], data.deltaValue2);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef3, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue3 = (dx / rect.width) * range.value;\n\n if (thumbRef3.value) {\n updateDatasetForThumb(thumbRef3.value, props.modelValue[2], data.deltaValue3);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue3 = 0;\n }\n });\n});\n\nfunction updateDatasetForThumb(thumb: HTMLElement, modelVal: number, delta: number) {\n const value = round(clamp((modelVal ?? 0) + delta, props.min, props.max));\n thumb.dataset.percent = `${value}${props.measure}`;\n getHint();\n}\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n const point3 = Math.ceil((1 - position3.value) * 100);\n return [point1, point2, point3].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: ModelType) {\n emit(\"update:modelValue\", value);\n}\n\nfunction getHint() {\n const right1 = Number(thumbStyle1.value.right.substring(0, thumbStyle1.value.right.length - 1));\n const right2 = Number(thumbStyle2.value.right.substring(0, thumbStyle2.value.right.length - 1));\n const right3 = Number(thumbStyle3.value.right.substring(0, thumbStyle3.value.right.length - 1));\n\n const arr = [\n { r: right1, th: thumbRef1 },\n { r: right2, th: thumbRef2 },\n { r: right3, th: thumbRef3 },\n ].sort((a, b) => a.r - b.r);\n\n if (arr[0].th.value) {\n arr[0].th.value.dataset.hint = \"high\";\n }\n if (arr[1].th.value) {\n arr[1].th.value.dataset.hint = \"mid\";\n }\n\n if (arr[2].th.value) {\n arr[2].th.value.dataset.hint = \"low\";\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if ([\"ArrowDown\", \"ArrowUp\", \"ArrowRight\", \"ArrowLeft\", \"Enter\"].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep =\n e.code === \"ArrowUp\" || e.code === \"ArrowRight\"\n ? props.step * 1\n : e.code === \"ArrowDown\" || e.code === \"ArrowLeft\"\n ? props.step * -1\n : 0;\n\n const arr: ModelType = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n getHint();\n}\n\nonMounted(() => {\n getHint();\n});\n</script>\n\n<template>\n <div\n :class=\"props.disabled ? 'ui-slider__disabled' : undefined\"\n class=\"ui-slider__envelope ui-slider__triple\"\n >\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div\n v-for=\"(item, index) in breakpointsRef\"\n :key=\"index\"\n :style=\"{ right: `${item}%` }\"\n class=\"ui-slider__thumb-step\"\n />\n </template>\n <div\n ref=\"thumbRef1\"\n :style=\"thumbStyle1\"\n :data-percent=\"props.modelValue[0] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r1\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 0)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef2\"\n :style=\"thumbStyle2\"\n :data-percent=\"props.modelValue[1] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r2\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 1)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef3\"\n :style=\"thumbStyle3\"\n :data-percent=\"props.modelValue[2] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r3\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 2)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <!-- {{ props.modelValue }} -->\n <!-- <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" /> -->\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n\n<style></style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"SliderRangeTriple.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/SliderRangeTriple.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, unref, useSlots } from \"vue\";\nimport { useMouseCapture } from \"../composition/useMouseCapture\";\nimport { tapIf } from \"../helpers/functions\";\nimport { clamp } from \"../helpers/math\";\nimport { PlTooltip } from \"./PlTooltip\";\nimport type { SliderMode } from \"../types\";\nimport { useSliderBreakpoints } from \"../composition/useSliderBreakpoints\";\nimport { getErrorMessage } from \"../helpers/error.ts\";\n\ntype ModelType = [number, number, number];\nconst slots = useSlots();\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: ModelType;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: \"text\",\n measure: \"%\",\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n deltaValue3: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst thumbRef3 = ref<HTMLElement>();\n\nconst range = computed(() => props.max - props.min);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst localValue1 = computed(() =>\n clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max),\n);\nconst localValue2 = computed(() =>\n clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max),\n);\nconst localValue3 = computed(() =>\n clamp((props.modelValue[2] ?? 0) + data.deltaValue3, props.min, props.max),\n);\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 3 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return \"Expected model [number, number, number]\";\n }\n\n const errors: string[] = [];\n\n [...props.modelValue].forEach((v) => {\n if (v > props.max) {\n errors.push(`Max model value must be lower than max props ${props.max}.`);\n }\n if (v < props.min) {\n errors.push(\"Min model value must be greater than max props.\");\n }\n });\n\n if (errors.length > 0) {\n return errors.join(\" \");\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst position3 = computed(() => {\n return (localValue3.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + \"%\",\n left: 100 - leftRight.value[2] + \"%\",\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + \"%\",\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + \"%\",\n}));\n\nconst thumbStyle3 = computed(() => ({\n right: Math.ceil((1 - position3.value) * 100) + \"%\",\n}));\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n if (thumbRef1.value) {\n updateDatasetForThumb(thumbRef1.value, props.modelValue[0], data.deltaValue1);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n if (thumbRef2.value) {\n updateDatasetForThumb(thumbRef2.value, props.modelValue[1], data.deltaValue2);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef3, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue3 = (dx / rect.width) * range.value;\n\n if (thumbRef3.value) {\n updateDatasetForThumb(thumbRef3.value, props.modelValue[2], data.deltaValue3);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue3 = 0;\n }\n });\n});\n\nfunction updateDatasetForThumb(thumb: HTMLElement, modelVal: number, delta: number) {\n const value = round(clamp((modelVal ?? 0) + delta, props.min, props.max));\n thumb.dataset.percent = `${value}${props.measure}`;\n getHint();\n}\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n const point3 = Math.ceil((1 - position3.value) * 100);\n return [point1, point2, point3].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: ModelType) {\n emit(\"update:modelValue\", value);\n}\n\nfunction getHint() {\n const right1 = Number(thumbStyle1.value.right.substring(0, thumbStyle1.value.right.length - 1));\n const right2 = Number(thumbStyle2.value.right.substring(0, thumbStyle2.value.right.length - 1));\n const right3 = Number(thumbStyle3.value.right.substring(0, thumbStyle3.value.right.length - 1));\n\n const arr = [\n { r: right1, th: thumbRef1 },\n { r: right2, th: thumbRef2 },\n { r: right3, th: thumbRef3 },\n ].sort((a, b) => a.r - b.r);\n\n if (arr[0].th.value) {\n arr[0].th.value.dataset.hint = \"high\";\n }\n if (arr[1].th.value) {\n arr[1].th.value.dataset.hint = \"mid\";\n }\n\n if (arr[2].th.value) {\n arr[2].th.value.dataset.hint = \"low\";\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if ([\"ArrowDown\", \"ArrowUp\", \"ArrowRight\", \"ArrowLeft\", \"Enter\"].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep =\n e.code === \"ArrowUp\" || e.code === \"ArrowRight\"\n ? props.step * 1\n : e.code === \"ArrowDown\" || e.code === \"ArrowLeft\"\n ? props.step * -1\n : 0;\n\n const arr: ModelType = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n getHint();\n}\n\nonMounted(() => {\n getHint();\n});\n</script>\n\n<template>\n <div\n data-testid=\"pl-slider-range-triple\"\n :class=\"props.disabled ? 'ui-slider__disabled' : undefined\"\n class=\"ui-slider__envelope ui-slider__triple\"\n >\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" data-testid=\"pl-slider-range-triple-label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip\n v-if=\"slots.tooltip\"\n data-testid=\"pl-slider-range-triple-tooltip\"\n class=\"info\"\n position=\"top\"\n >\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" data-testid=\"pl-slider-range-triple-bar\" class=\"ui-slider__bar\">\n <div\n data-testid=\"pl-slider-range-triple-progress\"\n class=\"ui-slider__progress\"\n :style=\"progressStyle\"\n />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div\n v-for=\"(item, index) in breakpointsRef\"\n :key=\"index\"\n data-testid=\"pl-slider-range-triple-step\"\n :style=\"{ right: `${item}%` }\"\n class=\"ui-slider__thumb-step\"\n />\n </template>\n <div\n ref=\"thumbRef1\"\n data-testid=\"pl-slider-range-triple-thumb\"\n :style=\"thumbStyle1\"\n :data-percent=\"props.modelValue[0] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r1\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 0)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef2\"\n data-testid=\"pl-slider-range-triple-thumb\"\n :style=\"thumbStyle2\"\n :data-percent=\"props.modelValue[1] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r2\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 1)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef3\"\n data-testid=\"pl-slider-range-triple-thumb\"\n :style=\"thumbStyle3\"\n :data-percent=\"props.modelValue[2] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r3\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 2)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <!-- {{ props.modelValue }} -->\n <!-- <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" /> -->\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" data-testid=\"pl-slider-range-triple-error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n\n<style></style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabItem.js","names":[],"sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { ListOptionNormalized } from \"../types\";\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push(\"dropdown-tab-item__selected\");\n }\n if (props.isHovered) {\n classList.push(\"hovered-item\");\n }\n return classList.join(\" \");\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"dropdown-tab-item\">\n <div class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"TabItem.js","names":[],"sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { ListOptionNormalized } from \"../types\";\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push(\"dropdown-tab-item__selected\");\n }\n if (props.isHovered) {\n classList.push(\"hovered-item\");\n }\n return classList.join(\" \");\n});\n</script>\n<template>\n <div data-testid=\"pl-tab-item\" :class=\"classes\" class=\"dropdown-tab-item\">\n <div data-testid=\"pl-tab-item-title\" class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"TabItem.vue.d.ts","sourceRoot":"","sources":["../../src/components/TabItem.vue"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AA2DJ,QAAA,MAAM,YAAY;gBA7DF,OAAO;eACR,OAAO;6EA+DpB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"TabItem.vue.d.ts","sourceRoot":"","sources":["../../src/components/TabItem.vue"],"names":[],"mappings":"AAwCA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AAErD,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,oBAAoB,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AA6DJ,QAAA,MAAM,YAAY;gBA/DF,OAAO;eACR,OAAO;6EAiEpB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1,6 +1,9 @@
1
1
  import { computed as e, createElementBlock as t, createElementVNode as n, defineComponent as r, normalizeClass as i, openBlock as a, toDisplayString as o } from "vue";
2
2
  //#region src/components/TabItem.vue?vue&type=script&setup=true&lang.ts
3
- var s = { class: "dropdown-tab-item__title text-caps13" }, c = /* @__PURE__ */ r({
3
+ var s = {
4
+ "data-testid": "pl-tab-item-title",
5
+ class: "dropdown-tab-item__title text-caps13"
6
+ }, c = /* @__PURE__ */ r({
4
7
  __name: "TabItem",
5
8
  props: {
6
9
  option: {},
@@ -18,7 +21,10 @@ var s = { class: "dropdown-tab-item__title text-caps13" }, c = /* @__PURE__ */ r
18
21
  let e = [];
19
22
  return c.isSelected && e.push("dropdown-tab-item__selected"), c.isHovered && e.push("hovered-item"), e.join(" ");
20
23
  });
21
- return (e, r) => (a(), t("div", { class: i([u.value, "dropdown-tab-item"]) }, [n("div", s, o(l.value), 1)], 2));
24
+ return (e, r) => (a(), t("div", {
25
+ "data-testid": "pl-tab-item",
26
+ class: i([u.value, "dropdown-tab-item"])
27
+ }, [n("div", s, o(l.value), 1)], 2));
22
28
  }
23
29
  });
24
30
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"TabItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { ListOptionNormalized } from \"../types\";\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push(\"dropdown-tab-item__selected\");\n }\n if (props.isHovered) {\n classList.push(\"hovered-item\");\n }\n return classList.join(\" \");\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"dropdown-tab-item\">\n <div class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;EAIA,IAAM,IAAQ,GAYR,IAAQ,QAAe,EAAM,OAAO,MAAM,EAE1C,IAAU,QAAuB;GACrC,IAAM,IAAsB,EAAE;AAO9B,UANI,EAAM,cACR,EAAU,KAAK,8BAA8B,EAE3C,EAAM,aACR,EAAU,KAAK,eAAe,EAEzB,EAAU,KAAK,IAAI;IAC1B;yBAGA,EAIM,OAAA,EAJA,OAAK,EAAA,CAAE,EAAA,OAAe,oBAAmB,CAAA,EAAA,EAAA,CAC7C,EAEM,OAFN,GAEM,EADD,EAAA,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"TabItem.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from \"vue\";\nimport type { ListOptionNormalized } from \"../types\";\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push(\"dropdown-tab-item__selected\");\n }\n if (props.isHovered) {\n classList.push(\"hovered-item\");\n }\n return classList.join(\" \");\n});\n</script>\n<template>\n <div data-testid=\"pl-tab-item\" :class=\"classes\" class=\"dropdown-tab-item\">\n <div data-testid=\"pl-tab-item-title\" class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAIA,IAAM,IAAQ,GAYR,IAAQ,QAAe,EAAM,OAAO,MAAM,EAE1C,IAAU,QAAuB;GACrC,IAAM,IAAsB,EAAE;AAO9B,UANI,EAAM,cACR,EAAU,KAAK,8BAA8B,EAE3C,EAAM,aACR,EAAU,KAAK,eAAe,EAEzB,EAAU,KAAK,IAAI;IAC1B;yBAGA,EAIM,OAAA;GAJD,eAAY;GAAe,OAAK,EAAA,CAAE,EAAA,OAAe,oBAAmB,CAAA;MACvE,EAEM,OAFN,GAEM,EADD,EAAA,MAAK,EAAA,EAAA,CAAA,EAAA,EAAA"}
@@ -2,7 +2,7 @@ import e from "./Menu.vue2.js";
2
2
  import './Menu.style.css';/* empty css */
3
3
  import t from "../../_virtual/_plugin-vue_export-helper.js";
4
4
  //#region src/components/contextMenu/Menu.vue
5
- var n = /* @__PURE__ */ t(e, [["__scopeId", "data-v-1bb3001b"]]);
5
+ var n = /* @__PURE__ */ t(e, [["__scopeId", "data-v-a7698a57"]]);
6
6
  //#endregion
7
7
  export { n as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","names":[],"sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from \"./types\";\n\nconst emit = defineEmits([\"close\"]);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit(\"close\");\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <div v-for=\"(opt, i) in options\" :key=\"i\" @click.stop=\"onClickOption(opt)\">\n <span>{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: \"\";\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"Menu.js","names":[],"sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from \"./types\";\n\nconst emit = defineEmits([\"close\"]);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit(\"close\");\n};\n</script>\n\n<template>\n <div class=\"context-menu\" data-testid=\"pl-context-menu\">\n <div\n v-for=\"(opt, i) in options\"\n :key=\"i\"\n data-testid=\"pl-context-menu-item\"\n @click.stop=\"onClickOption(opt)\"\n >\n <span data-testid=\"pl-context-menu-item-text\">{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: \"\";\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- .context-menu[data-v-1bb3001b]{z-index:var(--z-context-menu);background:#fffffff2;border-radius:4px;margin:0;padding:3px 0 4px;font-family:Lucida Grande,sans-serif;font-size:14px;line-height:15px;display:block;position:absolute;top:50px;left:50px;box-shadow:0 8px 15px #00000059}.context-menu[data-v-1bb3001b]:before{content:"";z-index:-1;border:1px solid #00000020;border-radius:4px;display:block;position:absolute;inset:-1px}.context-menu hr[data-v-1bb3001b]{background:#0000001a;border:none;height:1px;margin:6px 1px 5px;padding:0}.context-menu>div[data-v-1bb3001b]{border-top:1px solid #0000;border-bottom:1px solid #0000;padding:0 20px;display:block}.context-menu>div span[data-v-1bb3001b]{vertical-align:2px;user-select:none}.context-menu>div[data-v-1bb3001b]:hover{background:linear-gradient(#648bf5 0%,#2866f2 100%);border-top:1px solid #5a82eb;border-bottom:1px solid #1758e7}.context-menu>div[data-v-1bb3001b]:hover:after{color:#fff}
1
+ .context-menu[data-v-a7698a57]{z-index:var(--z-context-menu);background:#fffffff2;border-radius:4px;margin:0;padding:3px 0 4px;font-family:Lucida Grande,sans-serif;font-size:14px;line-height:15px;display:block;position:absolute;top:50px;left:50px;box-shadow:0 8px 15px #00000059}.context-menu[data-v-a7698a57]:before{content:"";z-index:-1;border:1px solid #00000020;border-radius:4px;display:block;position:absolute;inset:-1px}.context-menu hr[data-v-a7698a57]{background:#0000001a;border:none;height:1px;margin:6px 1px 5px;padding:0}.context-menu>div[data-v-a7698a57]{border-top:1px solid #0000;border-bottom:1px solid #0000;padding:0 20px;display:block}.context-menu>div span[data-v-a7698a57]{vertical-align:2px;user-select:none}.context-menu>div[data-v-a7698a57]:hover{background:linear-gradient(#648bf5 0%,#2866f2 100%);border-top:1px solid #5a82eb;border-bottom:1px solid #1758e7}.context-menu>div[data-v-a7698a57]:hover:after{color:#fff}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.vue.d.ts","sourceRoot":"","sources":["../../../src/components/contextMenu/Menu.vue"],"names":[],"mappings":"AA6FA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;CACnC,CAAC;AAoDF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"Menu.vue.d.ts","sourceRoot":"","sources":["../../../src/components/contextMenu/Menu.vue"],"names":[],"mappings":"AAkGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;CACnC,CAAC;AAuDF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1,20 +1,24 @@
1
1
  import { Fragment as e, createElementBlock as t, createElementVNode as n, defineComponent as r, openBlock as i, renderList as a, toDisplayString as o, withModifiers as s } from "vue";
2
2
  //#region src/components/contextMenu/Menu.vue?vue&type=script&setup=true&lang.ts
3
- var c = { class: "context-menu" }, l = ["onClick"], u = /* @__PURE__ */ r({
3
+ var c = {
4
+ class: "context-menu",
5
+ "data-testid": "pl-context-menu"
6
+ }, l = ["onClick"], u = { "data-testid": "pl-context-menu-item-text" }, d = /* @__PURE__ */ r({
4
7
  __name: "Menu",
5
8
  props: { options: {} },
6
9
  emits: ["close"],
7
- setup(r, { emit: u }) {
8
- let d = u, f = (e) => {
9
- e.cb(), d("close");
10
+ setup(r, { emit: d }) {
11
+ let f = d, p = (e) => {
12
+ e.cb(), f("close");
10
13
  };
11
- return (u, d) => (i(), t("div", c, [(i(!0), t(e, null, a(r.options, (e, r) => (i(), t("div", {
14
+ return (d, f) => (i(), t("div", c, [(i(!0), t(e, null, a(r.options, (e, r) => (i(), t("div", {
12
15
  key: r,
13
- onClick: s((t) => f(e), ["stop"])
14
- }, [n("span", null, o(e.text), 1)], 8, l))), 128))]));
16
+ "data-testid": "pl-context-menu-item",
17
+ onClick: s((t) => p(e), ["stop"])
18
+ }, [n("span", u, o(e.text), 1)], 8, l))), 128))]));
15
19
  }
16
20
  });
17
21
  //#endregion
18
- export { u as default };
22
+ export { d as default };
19
23
 
20
24
  //# sourceMappingURL=Menu.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from \"./types\";\n\nconst emit = defineEmits([\"close\"]);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit(\"close\");\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <div v-for=\"(opt, i) in options\" :key=\"i\" @click.stop=\"onClickOption(opt)\">\n <span>{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: \"\";\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;EAGA,IAAM,IAAO,GAMP,KAAiB,MAAuB;AAE5C,GADA,EAAI,IAAI,EACR,EAAK,QAAQ;;yBAKb,EAIM,OAJN,GAIM,EAAA,EAAA,GAAA,EAHJ,EAEM,GAAA,MAAA,EAFkB,EAAA,UAAX,GAAK,YAAlB,EAEM,OAAA;GAF4B,KAAK;GAAI,SAAK,GAAA,MAAO,EAAc,EAAG,EAAA,CAAA,OAAA,CAAA;MACtE,EAA2B,QAAA,MAAA,EAAlB,EAAI,KAAI,EAAA,EAAA,CAAA,EAAA,GAAA,EAAA"}
1
+ {"version":3,"file":"Menu.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from \"./types\";\n\nconst emit = defineEmits([\"close\"]);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit(\"close\");\n};\n</script>\n\n<template>\n <div class=\"context-menu\" data-testid=\"pl-context-menu\">\n <div\n v-for=\"(opt, i) in options\"\n :key=\"i\"\n data-testid=\"pl-context-menu-item\"\n @click.stop=\"onClickOption(opt)\"\n >\n <span data-testid=\"pl-context-menu-item-text\">{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: \"\";\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;EAGA,IAAM,IAAO,GAMP,KAAiB,MAAuB;AAE5C,GADA,EAAI,IAAI,EACR,EAAK,QAAQ;;yBAKb,EASM,OATN,GASM,EAAA,EAAA,GAAA,EARJ,EAOM,GAAA,MAAA,EANe,EAAA,UAAX,GAAK,YADf,EAOM,OAAA;GALH,KAAK;GACN,eAAY;GACX,SAAK,GAAA,MAAO,EAAc,EAAG,EAAA,CAAA,OAAA,CAAA;MAE9B,EAAmE,QAAnE,GAAmE,EAAlB,EAAI,KAAI,EAAA,EAAA,CAAA,EAAA,GAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBlockPage.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-block-page\" :class=\"{ noBodyGutters: props.noBodyGutters }\">\n <div v-if=\"slots.title || props.title\" :class=\"styles.header\">\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\"><slot name=\"title\" /></span>\n <span v-else>{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\">\n <div ref=\"teleportTarget\" class=\"pl-block-page__title__append__teleport\" />\n <slot name=\"append\" />\n </div>\n </div>\n <div v-if=\"subtitle !== undefined\" :class=\"styles.subtitle\">\n <input v-model.lazy.trim=\"subtitle\" :placeholder=\"props.subtitlePlaceholder\" />\n <PlIcon24 :class=\"styles.editIcon\" name=\"edit\" color=\"var(--ic-02)\" />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\">\n <PlPlaceholder v-show=\"loadingPlaceholder\" v-bind=\"loadingPlaceholder\" />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlBlockPage.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div\n class=\"pl-layout-component pl-block-page\"\n data-testid=\"pl-block-page\"\n :class=\"{ noBodyGutters: props.noBodyGutters }\"\n >\n <div\n v-if=\"slots.title || props.title\"\n data-testid=\"pl-block-page-header\"\n :class=\"styles.header\"\n >\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\" data-testid=\"pl-block-page-title\"><slot name=\"title\" /></span>\n <span v-else data-testid=\"pl-block-page-title\">{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\" data-testid=\"pl-block-page-append\">\n <div\n ref=\"teleportTarget\"\n class=\"pl-block-page__title__append__teleport\"\n data-testid=\"pl-block-page-append-teleport\"\n />\n <slot name=\"append\" />\n </div>\n </div>\n <div\n v-if=\"subtitle !== undefined\"\n data-testid=\"pl-block-page-subtitle\"\n :class=\"styles.subtitle\"\n >\n <input\n v-model.lazy.trim=\"subtitle\"\n data-testid=\"pl-block-page-subtitle-input\"\n :placeholder=\"props.subtitlePlaceholder\"\n />\n <PlIcon24\n data-testid=\"pl-block-page-subtitle-edit-icon\"\n :class=\"styles.editIcon\"\n name=\"edit\"\n color=\"var(--ic-02)\"\n />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\" data-testid=\"pl-block-page-body\">\n <PlPlaceholder\n v-show=\"loadingPlaceholder\"\n data-testid=\"pl-block-page-loading-placeholder\"\n v-bind=\"loadingPlaceholder\"\n />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBlockPage.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-block-page\" :class=\"{ noBodyGutters: props.noBodyGutters }\">\n <div v-if=\"slots.title || props.title\" :class=\"styles.header\">\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\"><slot name=\"title\" /></span>\n <span v-else>{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\">\n <div ref=\"teleportTarget\" class=\"pl-block-page__title__append__teleport\" />\n <slot name=\"append\" />\n </div>\n </div>\n <div v-if=\"subtitle !== undefined\" :class=\"styles.subtitle\">\n <input v-model.lazy.trim=\"subtitle\" :placeholder=\"props.subtitlePlaceholder\" />\n <PlIcon24 :class=\"styles.editIcon\" name=\"edit\" color=\"var(--ic-02)\" />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\">\n <PlPlaceholder v-show=\"loadingPlaceholder\" v-bind=\"loadingPlaceholder\" />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlBlockPage.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div\n class=\"pl-layout-component pl-block-page\"\n data-testid=\"pl-block-page\"\n :class=\"{ noBodyGutters: props.noBodyGutters }\"\n >\n <div\n v-if=\"slots.title || props.title\"\n data-testid=\"pl-block-page-header\"\n :class=\"styles.header\"\n >\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\" data-testid=\"pl-block-page-title\"><slot name=\"title\" /></span>\n <span v-else data-testid=\"pl-block-page-title\">{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\" data-testid=\"pl-block-page-append\">\n <div\n ref=\"teleportTarget\"\n class=\"pl-block-page__title__append__teleport\"\n data-testid=\"pl-block-page-append-teleport\"\n />\n <slot name=\"append\" />\n </div>\n </div>\n <div\n v-if=\"subtitle !== undefined\"\n data-testid=\"pl-block-page-subtitle\"\n :class=\"styles.subtitle\"\n >\n <input\n v-model.lazy.trim=\"subtitle\"\n data-testid=\"pl-block-page-subtitle-input\"\n :placeholder=\"props.subtitlePlaceholder\"\n />\n <PlIcon24\n data-testid=\"pl-block-page-subtitle-edit-icon\"\n :class=\"styles.editIcon\"\n name=\"edit\"\n color=\"var(--ic-02)\"\n />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\" data-testid=\"pl-block-page-body\">\n <PlPlaceholder\n v-show=\"loadingPlaceholder\"\n data-testid=\"pl-block-page-loading-placeholder\"\n v-bind=\"loadingPlaceholder\"\n />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBlockPage.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"names":[],"mappings":"AA2IA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,kBAAkB,EAAuC,MAAM,kBAAkB,CAAC;AAGhG,gCAAgC;wBACX,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;IAIhB;;OAEG;YACK,MAAM;IACd;;OAEG;0BACmB,MAAM;IAC5B;;OAEG;oBACa,OAAO;IACvB;;OAEG;kBACW,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB;;IAwBlE,+BAA+B;eAClB,MAAM;;;;IAxCjB;;OAEG;YACK,MAAM;IACd;;OAEG;0BACmB,MAAM;IAC5B;;OAEG;oBACa,OAAO;IACvB;;OAEG;kBACW,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB;;IAwBlE,+BAA+B;eAClB,MAAM;;;;YAmIP,CAAC,KAAK,IAAgB,KAAK,GAAG;;oBACtB,CAAC,KAAK,IAAgB,KAAK,GAAG;;aACrC,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAiB,KAAK,GAAG;EAYzC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlBlockPage.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"names":[],"mappings":"AAwKA,OAAO,sBAAsB,CAAC;AAE9B,OAAO,EAAE,KAAK,kBAAkB,EAAuC,MAAM,kBAAkB,CAAC;AAGhG,gCAAgC;wBACX,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;IAIhB;;OAEG;YACK,MAAM;IACd;;OAEG;0BACmB,MAAM;IAC5B;;OAEG;oBACa,OAAO;IACvB;;OAEG;kBACW,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB;;IAwBlE,+BAA+B;eAClB,MAAM;;;;IAxCjB;;OAEG;YACK,MAAM;IACd;;OAEG;0BACmB,MAAM;IAC5B;;OAEG;oBACa,OAAO;IACvB;;OAEG;kBACW,kBAAkB,CAAC,SAAS,CAAC,GAAG,kBAAkB;;IAwBlE,+BAA+B;eAClB,MAAM;;;;YAgJP,CAAC,KAAK,IAAgB,KAAK,GAAG;;oBACtB,CAAC,KAAK,IAAgB,KAAK,GAAG;;aACrC,CAAC,KAAK,IAAgB,KAAK,GAAG;;cAC7B,CAAC,KAAK,IAAiB,KAAK,GAAG;EAYzC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -4,11 +4,23 @@ import t from "../../components/PlIcon24/PlIcon24.js";
4
4
  import "../../components/PlIcon24/index.js";
5
5
  import n from "../PlPlaceholder/PlPlaceholder.js";
6
6
  import { PL_PLACEHOLDER_TEXTS as r } from "../PlPlaceholder/index.js";
7
- import { computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, guardReactiveProps as u, mergeModels as d, normalizeClass as f, normalizeProps as p, normalizeStyle as m, openBlock as h, renderSlot as g, toDisplayString as _, unref as v, useCssModule as y, useModel as b, useSlots as x, useTemplateRef as S, vModelText as C, vShow as w, watchEffect as T, withDirectives as E } from "vue";
7
+ import { computed as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, mergeModels as u, mergeProps as d, normalizeClass as f, normalizeStyle as p, openBlock as m, renderSlot as h, toDisplayString as g, unref as _, useCssModule as v, useModel as y, useSlots as b, useTemplateRef as x, vModelText as S, vShow as C, watchEffect as w, withDirectives as T } from "vue";
8
8
  //#region src/layout/PlBlockPage/PlBlockPage.vue?vue&type=script&setup=true&lang.ts
9
- var D = { class: "pl-block-page__title" }, O = { class: "pl-block-page__title__default" }, k = { key: 0 }, A = { key: 1 }, j = { class: "pl-block-page__title__append" }, M = ["placeholder"], N = { key: 1 }, P = { class: "pl-block-page__body" }, F = /* @__PURE__ */ l({
9
+ var E = { class: "pl-block-page__title" }, D = { class: "pl-block-page__title__default" }, O = {
10
+ key: 0,
11
+ "data-testid": "pl-block-page-title"
12
+ }, k = {
13
+ key: 1,
14
+ "data-testid": "pl-block-page-title"
15
+ }, A = {
16
+ class: "pl-block-page__title__append",
17
+ "data-testid": "pl-block-page-append"
18
+ }, j = ["placeholder"], M = { key: 1 }, N = {
19
+ class: "pl-block-page__body",
20
+ "data-testid": "pl-block-page-body"
21
+ }, P = /* @__PURE__ */ l({
10
22
  name: "PlBlockPage",
11
- props: /* @__PURE__ */ d({
23
+ props: /* @__PURE__ */ u({
12
24
  title: {},
13
25
  subtitlePlaceholder: {},
14
26
  noBodyGutters: { type: Boolean },
@@ -19,41 +31,49 @@ var D = { class: "pl-block-page__title" }, O = { class: "pl-block-page__title__d
19
31
  }),
20
32
  emits: ["update:subtitle"],
21
33
  setup(l) {
22
- let d = x(), F = l, I = b(l, "subtitle"), L = y(), R = i(() => typeof F.bodyLoading == "string" ? {
23
- variant: F.bodyLoading,
34
+ let u = b(), P = l, F = y(l, "subtitle"), I = v(), L = i(() => typeof P.bodyLoading == "string" ? {
35
+ variant: P.bodyLoading,
24
36
  ...r.LOADING
25
- } : F.bodyLoading), z = S("teleportTarget");
26
- return T(() => {
27
- e.value = z.value;
28
- }), (e, r) => (h(), o("div", { class: f(["pl-layout-component pl-block-page", { noBodyGutters: F.noBodyGutters }]) }, [v(d).title || F.title ? (h(), o("div", {
37
+ } : P.bodyLoading), R = x("teleportTarget");
38
+ return w(() => {
39
+ e.value = R.value;
40
+ }), (e, r) => (m(), o("div", {
41
+ class: f(["pl-layout-component pl-block-page", { noBodyGutters: P.noBodyGutters }]),
42
+ "data-testid": "pl-block-page"
43
+ }, [_(u).title || P.title ? (m(), o("div", {
29
44
  key: 0,
30
- class: f(v(L).header)
31
- }, [s("div", D, [s("div", O, [v(d).title ? (h(), o("span", k, [g(e.$slots, "title")])) : (h(), o("span", A, _(F.title), 1)), g(e.$slots, "after-title")]), s("div", j, [s("div", {
45
+ "data-testid": "pl-block-page-header",
46
+ class: f(_(I).header)
47
+ }, [s("div", E, [s("div", D, [_(u).title ? (m(), o("span", O, [h(e.$slots, "title")])) : (m(), o("span", k, g(P.title), 1)), h(e.$slots, "after-title")]), s("div", A, [s("div", {
32
48
  ref_key: "teleportTarget",
33
- ref: z,
34
- class: "pl-block-page__title__append__teleport"
35
- }, null, 512), g(e.$slots, "append")])]), I.value === void 0 ? a("", !0) : (h(), o("div", {
49
+ ref: R,
50
+ class: "pl-block-page__title__append__teleport",
51
+ "data-testid": "pl-block-page-append-teleport"
52
+ }, null, 512), h(e.$slots, "append")])]), F.value === void 0 ? a("", !0) : (m(), o("div", {
36
53
  key: 0,
37
- class: f(v(L).subtitle)
38
- }, [E(s("input", {
39
- "onUpdate:modelValue": r[0] ||= (e) => I.value = e,
40
- placeholder: F.subtitlePlaceholder
41
- }, null, 8, M), [[
42
- C,
43
- I.value,
54
+ "data-testid": "pl-block-page-subtitle",
55
+ class: f(_(I).subtitle)
56
+ }, [T(s("input", {
57
+ "onUpdate:modelValue": r[0] ||= (e) => F.value = e,
58
+ "data-testid": "pl-block-page-subtitle-input",
59
+ placeholder: P.subtitlePlaceholder
60
+ }, null, 8, j), [[
61
+ S,
62
+ F.value,
44
63
  void 0,
45
64
  {
46
65
  lazy: !0,
47
66
  trim: !0
48
67
  }
49
- ]]), c(v(t), {
50
- class: f(v(L).editIcon),
68
+ ]]), c(_(t), {
69
+ "data-testid": "pl-block-page-subtitle-edit-icon",
70
+ class: f(_(I).editIcon),
51
71
  name: "edit",
52
72
  color: "var(--ic-02)"
53
- }, null, 8, ["class"])], 2))], 2)) : (h(), o("div", N)), s("div", P, [E(c(v(n), p(u(R.value)), null, 16), [[w, R.value]]), s("div", { style: m({ display: R.value ? "none" : "contents" }) }, [g(e.$slots, "default")], 4)])], 2));
73
+ }, null, 8, ["class"])], 2))], 2)) : (m(), o("div", M)), s("div", N, [T(c(_(n), d({ "data-testid": "pl-block-page-loading-placeholder" }, L.value), null, 16), [[C, L.value]]), s("div", { style: p({ display: L.value ? "none" : "contents" }) }, [h(e.$slots, "default")], 4)])], 2));
54
74
  }
55
75
  });
56
76
  //#endregion
57
- export { F as default };
77
+ export { P as default };
58
78
 
59
79
  //# sourceMappingURL=PlBlockPage.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlBlockPage.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-block-page\" :class=\"{ noBodyGutters: props.noBodyGutters }\">\n <div v-if=\"slots.title || props.title\" :class=\"styles.header\">\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\"><slot name=\"title\" /></span>\n <span v-else>{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\">\n <div ref=\"teleportTarget\" class=\"pl-block-page__title__append__teleport\" />\n <slot name=\"append\" />\n </div>\n </div>\n <div v-if=\"subtitle !== undefined\" :class=\"styles.subtitle\">\n <input v-model.lazy.trim=\"subtitle\" :placeholder=\"props.subtitlePlaceholder\" />\n <PlIcon24 :class=\"styles.editIcon\" name=\"edit\" color=\"var(--ic-02)\" />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\">\n <PlPlaceholder v-show=\"loadingPlaceholder\" v-bind=\"loadingPlaceholder\" />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;CAGE,MAAM;;;;;;;;;;;;EAWR,IAAM,IAAQ,GAAU,EAElB,IAAQ,GAoBR,IAAW,EAAmB,GAAC,WAAW,EAE1C,IAAS,GAAc,EAEvB,IAAqB,QACrB,OAAO,EAAM,eAAgB,WACxB;GAAE,SAAS,EAAM;GAAa,GAAG,EAAqB;GAAS,GAEjE,EAAM,YACb,EAEI,IAAiB,EAAe,iBAAiB;SAEvD,QAAkB;AAChB,KAA+B,QAAQ,EAAe;IACtD,kBAIA,EAyBM,OAAA,EAzBD,OAAK,EAAA,CAAC,qCAAmC,EAAA,eAA0B,EAAM,eAAa,CAAA,CAAA,EAAA,EAAA,CAC9E,EAAA,EAAK,CAAC,SAAS,EAAM,SAAA,GAAA,EAAhC,EAgBM,OAAA;;GAhBkC,OAAK,EAAE,EAAA,EAAM,CAAC,OAAM;MAC1D,EAUM,OAVN,GAUM,CATJ,EAIM,OAJN,GAIM,CAHQ,EAAA,EAAK,CAAC,SAAA,GAAA,EAAlB,EAAqD,QAAA,GAAA,CAA5B,EAAqB,EAAA,QAAA,QAAA,CAAA,CAAA,KAAA,GAAA,EAC9C,EAAqC,QAAA,GAAA,EAArB,EAAM,MAAK,EAAA,EAAA,GAC3B,EAA2B,EAAA,QAAA,cAAA,CAAA,CAAA,EAE7B,EAGM,OAHN,GAGM,CAFJ,EAA2E,OAAA;YAAlE;GAAJ,KAAI;GAAiB,OAAM;iBAChC,EAAsB,EAAA,QAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAGf,EAAA,UAAa,KAAA,iBAAA,GAAA,EAAxB,EAGM,OAAA;;GAH8B,OAAK,EAAE,EAAA,EAAM,CAAC,SAAQ;QACxD,EAA+E,SAAA;4CAA7C,QAAA;GAAG,aAAa,EAAM;;;GAA9B,EAAA;;;IAAX,MAAR;IAAa,MAAb;;OACP,EAAsE,EAAA,EAAA,EAAA;GAA3D,OAAK,EAAE,EAAA,EAAM,CAAC,SAAQ;GAAE,MAAK;GAAO,OAAM;6CAGzD,EAAc,OAAA,EAAA,GACd,EAKM,OALN,GAKM,CAAA,EAJJ,EAAyE,EAAA,EAAA,EAAA,EAAA,EAAtB,EAAA,MAAkB,CAAA,EAAA,MAAA,GAAA,EAAA,CAAA,CAAA,GAA9C,EAAA,MAAkB,CAAA,CAAA,EACzC,EAEM,OAAA,EAFA,OAAK,EAAA,EAAA,SAAa,EAAA,QAAkB,SAAA,YAAA,CAAA,EAAA,EAAA,CACxC,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"PlBlockPage.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlBlockPage/PlBlockPage.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Root block page component */\nexport default {\n name: \"PlBlockPage\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, useCssModule, useSlots, useTemplateRef, watchEffect } from \"vue\";\nimport { PlBlockPageTitleTeleportTarget } from \"./PlBlockPageTitleTeleportTarget\";\nimport \"./pl-block-page.scss\";\nimport { PlIcon24 } from \"../../components/PlIcon24\";\nimport { type PlPlaceholderProps, PL_PLACEHOLDER_TEXTS, PlPlaceholder } from \"../PlPlaceholder\";\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * Page title (won't be displayed if `title` slot is also provided)\n */\n title?: string;\n /**\n * Text to display when subtitle is empty\n */\n subtitlePlaceholder?: string;\n /**\n * If `true` body gutters are removed\n */\n noBodyGutters?: boolean;\n /**\n * If defined, a loading overlay is displayed on the page body (over all default slot content)\n */\n bodyLoading?: PlPlaceholderProps[\"variant\"] | PlPlaceholderProps;\n}>();\n\n/** Page subtitle (editable) */\nconst subtitle = defineModel<string>(\"subtitle\");\n\nconst styles = useCssModule();\n\nconst loadingPlaceholder = computed<PlPlaceholderProps | undefined>(() => {\n if (typeof props.bodyLoading === \"string\") {\n return { variant: props.bodyLoading, ...PL_PLACEHOLDER_TEXTS.LOADING };\n }\n return props.bodyLoading;\n});\n\nconst teleportTarget = useTemplateRef(\"teleportTarget\");\n\nwatchEffect(() => {\n PlBlockPageTitleTeleportTarget.value = teleportTarget.value;\n});\n</script>\n\n<template>\n <div\n class=\"pl-layout-component pl-block-page\"\n data-testid=\"pl-block-page\"\n :class=\"{ noBodyGutters: props.noBodyGutters }\"\n >\n <div\n v-if=\"slots.title || props.title\"\n data-testid=\"pl-block-page-header\"\n :class=\"styles.header\"\n >\n <div class=\"pl-block-page__title\">\n <div class=\"pl-block-page__title__default\">\n <span v-if=\"slots.title\" data-testid=\"pl-block-page-title\"><slot name=\"title\" /></span>\n <span v-else data-testid=\"pl-block-page-title\">{{ props.title }}</span>\n <slot name=\"after-title\" />\n </div>\n <div class=\"pl-block-page__title__append\" data-testid=\"pl-block-page-append\">\n <div\n ref=\"teleportTarget\"\n class=\"pl-block-page__title__append__teleport\"\n data-testid=\"pl-block-page-append-teleport\"\n />\n <slot name=\"append\" />\n </div>\n </div>\n <div\n v-if=\"subtitle !== undefined\"\n data-testid=\"pl-block-page-subtitle\"\n :class=\"styles.subtitle\"\n >\n <input\n v-model.lazy.trim=\"subtitle\"\n data-testid=\"pl-block-page-subtitle-input\"\n :placeholder=\"props.subtitlePlaceholder\"\n />\n <PlIcon24\n data-testid=\"pl-block-page-subtitle-edit-icon\"\n :class=\"styles.editIcon\"\n name=\"edit\"\n color=\"var(--ic-02)\"\n />\n </div>\n </div>\n <div v-else />\n <div class=\"pl-block-page__body\" data-testid=\"pl-block-page-body\">\n <PlPlaceholder\n v-show=\"loadingPlaceholder\"\n data-testid=\"pl-block-page-loading-placeholder\"\n v-bind=\"loadingPlaceholder\"\n />\n <div :style=\"{ display: loadingPlaceholder ? 'none' : 'contents' }\">\n <slot />\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.header {\n display: flex;\n flex-direction: column;\n padding: 12px 24px;\n margin-block-end: -8px;\n gap: 2px;\n overflow: hidden;\n}\n\n.subtitle {\n display: flex;\n padding-inline-end: 28px;\n\n input {\n anchor-name: --pl-block-page-subtitle;\n field-sizing: content;\n padding: 0;\n border: none;\n outline: none;\n caret-color: var(--border-color-focus);\n color: var(--txt-01);\n font-family: Manrope;\n font-size: 20px;\n font-weight: 500;\n line-height: 28px;\n letter-spacing: -0.2px;\n margin-block-end: -4px;\n max-inline-size: 100%;\n text-overflow: ellipsis;\n\n &::placeholder {\n color: var(--txt-03);\n }\n }\n\n .editIcon {\n visibility: hidden;\n position: fixed;\n position-anchor: --pl-block-page-subtitle;\n position-area: center inline-end;\n inset-inline-start: 4px;\n }\n &:hover,\n &:focus-within {\n .editIcon {\n visibility: visible;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;CAGE,MAAM;;;;;;;;;;;;EAWR,IAAM,IAAQ,GAAU,EAElB,IAAQ,GAoBR,IAAW,EAAmB,GAAC,WAAW,EAE1C,IAAS,GAAc,EAEvB,IAAqB,QACrB,OAAO,EAAM,eAAgB,WACxB;GAAE,SAAS,EAAM;GAAa,GAAG,EAAqB;GAAS,GAEjE,EAAM,YACb,EAEI,IAAiB,EAAe,iBAAiB;SAEvD,QAAkB;AAChB,KAA+B,QAAQ,EAAe;IACtD,kBAIA,EAsDM,OAAA;GArDJ,OAAK,EAAA,CAAC,qCAAmC,EAAA,eAEhB,EAAM,eAAa,CAAA,CAAA;GAD5C,eAAY;MAIJ,EAAA,EAAK,CAAC,SAAS,EAAM,SAAA,GAAA,EAD7B,EAqCM,OAAA;;GAnCJ,eAAY;GACX,OAAK,EAAE,EAAA,EAAM,CAAC,OAAM;MAErB,EAcM,OAdN,GAcM,CAbJ,EAIM,OAJN,GAIM,CAHQ,EAAA,EAAK,CAAC,SAAA,GAAA,EAAlB,EAAuF,QAAvF,GAAuF,CAA5B,EAAqB,EAAA,QAAA,QAAA,CAAA,CAAA,KAAA,GAAA,EAChF,EAAuE,QAAvE,GAAuE,EAArB,EAAM,MAAK,EAAA,EAAA,GAC7D,EAA2B,EAAA,QAAA,cAAA,CAAA,CAAA,EAE7B,EAOM,OAPN,GAOM,CANJ,EAIE,OAAA;YAHI;GAAJ,KAAI;GACJ,OAAM;GACN,eAAY;iBAEd,EAAsB,EAAA,QAAA,SAAA,CAAA,CAAA,CAAA,CAAA,EAIlB,EAAA,UAAa,KAAA,iBAAA,GAAA,EADrB,EAgBM,OAAA;;GAdJ,eAAY;GACX,OAAK,EAAE,EAAA,EAAM,CAAC,SAAQ;QAEvB,EAIE,SAAA;4CAH2B,QAAA;GAC3B,eAAY;GACX,aAAa,EAAM;;;GAFD,EAAA;;;IAAX,MAAR;IAAa,MAAb;;OAIF,EAKE,EAAA,EAAA,EAAA;GAJA,eAAY;GACX,OAAK,EAAE,EAAA,EAAM,CAAC,SAAQ;GACvB,MAAK;GACL,OAAM;6CAIZ,EAAc,OAAA,EAAA,GACd,EASM,OATN,GASM,CAAA,EARJ,EAIE,EAAA,EAAA,EAJF,EAIE,EAFA,eAAY,qCAAmC,EACvC,EAAA,MAAkB,EAAA,MAAA,GAAA,EAAA,CAAA,CAAA,GAFlB,EAAA,MAAkB,CAAA,CAAA,EAI5B,EAEM,OAAA,EAFA,OAAK,EAAA,EAAA,SAAa,EAAA,QAAkB,SAAA,YAAA,CAAA,EAAA,EAAA,CACxC,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA,CAAA,CAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlContainer.js","names":[],"sources":["../../../src/layout/PlContainer/PlContainer.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Container with vertical spacing */\nexport default {\n name: \"PlContainer\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-container.scss\";\nimport PlSplash from \"../../components/PlSplash/PlSplash.vue\";\n\nconst props = defineProps<{\n /**\n * CSS width value (px, %)\n */\n width?: string;\n /**\n * Shows loading overlay\n */\n loading?: boolean;\n /**\n * Optional loading text\n */\n loadingText?: string;\n}>();\n\nconst style = computed(() => ({\n width: props.width,\n}));\n</script>\n\n<template>\n <PlSplash\n :loading=\"loading\"\n :loading-text=\"loadingText\"\n class=\"pl-container pl-layout-component\"\n :style=\"style\"\n >\n <slot />\n </PlSplash>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlContainer.js","names":[],"sources":["../../../src/layout/PlContainer/PlContainer.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Container with vertical spacing */\nexport default {\n name: \"PlContainer\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-container.scss\";\nimport PlSplash from \"../../components/PlSplash/PlSplash.vue\";\n\nconst props = defineProps<{\n /**\n * CSS width value (px, %)\n */\n width?: string;\n /**\n * Shows loading overlay\n */\n loading?: boolean;\n /**\n * Optional loading text\n */\n loadingText?: string;\n}>();\n\nconst style = computed(() => ({\n width: props.width,\n}));\n</script>\n\n<template>\n <PlSplash\n :loading=\"loading\"\n :loading-text=\"loadingText\"\n class=\"pl-container pl-layout-component\"\n data-testid=\"pl-container\"\n :style=\"style\"\n >\n <slot />\n </PlSplash>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlContainer.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlContainer/PlContainer.vue"],"names":[],"mappings":"AA8CA,OAAO,qBAAqB,CAAC;AAI7B,sCAAsC;wBACjB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;IAEhB;;OAEG;YACK,MAAM;IACd;;OAEG;cACO,OAAO;IACjB;;OAEG;kBACW,MAAM;;IAXpB;;OAEG;YACK,MAAM;IACd;;OAEG;cACO,OAAO;IACjB;;OAEG;kBACW,MAAM;;cAmDR,CAAC,KAAK,IAAgB,KAAK,GAAG;EASxC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlContainer.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlContainer/PlContainer.vue"],"names":[],"mappings":"AA+CA,OAAO,qBAAqB,CAAC;AAI7B,sCAAsC;wBACjB,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;IAEhB;;OAEG;YACK,MAAM;IACd;;OAEG;cACO,OAAO;IACjB;;OAEG;kBACW,MAAM;;IAXpB;;OAEG;YACK,MAAM;IACd;;OAEG;cACO,OAAO;IACjB;;OAEG;kBACW,MAAM;;cAqDR,CAAC,KAAK,IAAgB,KAAK,GAAG;EASxC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -14,6 +14,7 @@ var c = /* @__PURE__ */ r({
14
14
  loading: r.loading,
15
15
  "loading-text": r.loadingText,
16
16
  class: "pl-container pl-layout-component",
17
+ "data-testid": "pl-container",
17
18
  style: i(l.value)
18
19
  }, {
19
20
  default: s(() => [o(t.$slots, "default")]),
@@ -1 +1 @@
1
- {"version":3,"file":"PlContainer.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlContainer/PlContainer.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Container with vertical spacing */\nexport default {\n name: \"PlContainer\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-container.scss\";\nimport PlSplash from \"../../components/PlSplash/PlSplash.vue\";\n\nconst props = defineProps<{\n /**\n * CSS width value (px, %)\n */\n width?: string;\n /**\n * Shows loading overlay\n */\n loading?: boolean;\n /**\n * Optional loading text\n */\n loadingText?: string;\n}>();\n\nconst style = computed(() => ({\n width: props.width,\n}));\n</script>\n\n<template>\n <PlSplash\n :loading=\"loading\"\n :loading-text=\"loadingText\"\n class=\"pl-container pl-layout-component\"\n :style=\"style\"\n >\n <slot />\n </PlSplash>\n</template>\n"],"mappings":";;;;CAGE,MAAM;;;;;;;EASR,IAAM,IAAQ,GAeR,IAAQ,SAAgB,EAC5B,OAAO,EAAM,OACd,EAAE;yBAID,EAOW,GAAA;GANR,SAAS,EAAA;GACT,gBAAc,EAAA;GACf,OAAM;GACL,OAAK,EAAE,EAAA,MAAK;;oBAEL,CAAR,EAAQ,EAAA,QAAA,UAAA,CAAA,CAAA"}
1
+ {"version":3,"file":"PlContainer.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlContainer/PlContainer.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Container with vertical spacing */\nexport default {\n name: \"PlContainer\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-container.scss\";\nimport PlSplash from \"../../components/PlSplash/PlSplash.vue\";\n\nconst props = defineProps<{\n /**\n * CSS width value (px, %)\n */\n width?: string;\n /**\n * Shows loading overlay\n */\n loading?: boolean;\n /**\n * Optional loading text\n */\n loadingText?: string;\n}>();\n\nconst style = computed(() => ({\n width: props.width,\n}));\n</script>\n\n<template>\n <PlSplash\n :loading=\"loading\"\n :loading-text=\"loadingText\"\n class=\"pl-container pl-layout-component\"\n data-testid=\"pl-container\"\n :style=\"style\"\n >\n <slot />\n </PlSplash>\n</template>\n"],"mappings":";;;;CAGE,MAAM;;;;;;;EASR,IAAM,IAAQ,GAeR,IAAQ,SAAgB,EAC5B,OAAO,EAAM,OACd,EAAE;yBAID,EAQW,GAAA;GAPR,SAAS,EAAA;GACT,gBAAc,EAAA;GACf,OAAM;GACN,eAAY;GACX,OAAK,EAAE,EAAA,MAAK;;oBAEL,CAAR,EAAQ,EAAA,QAAA,UAAA,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlGrid.js","names":[],"sources":["../../../src/layout/PlGrid/PlGrid.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Grid container */\nexport default {\n name: \"PlGrid\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-grid.scss\";\n\nconst props = defineProps<{\n columns: number;\n}>();\n\nconst style = computed(() => {\n return {\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n };\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-grid\" :style=\"style\">\n <slot />\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"PlGrid.js","names":[],"sources":["../../../src/layout/PlGrid/PlGrid.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Grid container */\nexport default {\n name: \"PlGrid\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-grid.scss\";\n\nconst props = defineProps<{\n columns: number;\n}>();\n\nconst style = computed(() => {\n return {\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n };\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-grid\" data-testid=\"pl-grid\" :style=\"style\">\n <slot />\n </div>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlGrid.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlGrid/PlGrid.vue"],"names":[],"mappings":"AA+BA,OAAO,gBAAgB,CAAC;AAGxB,qBAAqB;wBACA,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;aAEP,MAAM;;aAAN,MAAM;;cAsCH,CAAC,KAAK,IAAgB,KAAK,GAAG;EASxC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlGrid.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlGrid/PlGrid.vue"],"names":[],"mappings":"AA+BA,OAAO,gBAAgB,CAAC;AAGxB,qBAAqB;wBACA,OAAO,YAAY;AAAxC,wBAAyC;AAKzC,QAAA,MAAM,YAAY;aAEP,MAAM;;aAAN,MAAM;;cAuCH,CAAC,KAAK,IAAgB,KAAK,GAAG;EASxC,CAAC;AACL,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -7,6 +7,7 @@ var o = /* @__PURE__ */ n({
7
7
  let o = n, s = e(() => ({ gridTemplateColumns: `repeat(${o.columns}, minmax(0, 1fr))` }));
8
8
  return (e, n) => (i(), t("div", {
9
9
  class: "pl-layout-component pl-grid",
10
+ "data-testid": "pl-grid",
10
11
  style: r(s.value)
11
12
  }, [a(e.$slots, "default")], 4));
12
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"PlGrid.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlGrid/PlGrid.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Grid container */\nexport default {\n name: \"PlGrid\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-grid.scss\";\n\nconst props = defineProps<{\n columns: number;\n}>();\n\nconst style = computed(() => {\n return {\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n };\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-grid\" :style=\"style\">\n <slot />\n </div>\n</template>\n"],"mappings":";;;CAGE,MAAM;;;EAQR,IAAM,IAAQ,GAIR,IAAQ,SACL,EACL,qBAAqB,UAAU,EAAM,QAAQ,oBAC9C,EACD;yBAIA,EAEM,OAAA;GAFD,OAAM;GAA+B,OAAK,EAAE,EAAA,MAAK;MACpD,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
1
+ {"version":3,"file":"PlGrid.vue_vue_type_script_setup_true_lang.js","names":[],"sources":["../../../src/layout/PlGrid/PlGrid.vue"],"sourcesContent":["<script lang=\"ts\">\n/** Grid container */\nexport default {\n name: \"PlGrid\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\nimport \"./pl-grid.scss\";\n\nconst props = defineProps<{\n columns: number;\n}>();\n\nconst style = computed(() => {\n return {\n gridTemplateColumns: `repeat(${props.columns}, minmax(0, 1fr))`,\n };\n});\n</script>\n\n<template>\n <div class=\"pl-layout-component pl-grid\" data-testid=\"pl-grid\" :style=\"style\">\n <slot />\n </div>\n</template>\n"],"mappings":";;;CAGE,MAAM;;;EAQR,IAAM,IAAQ,GAIR,IAAQ,SACL,EACL,qBAAqB,UAAU,EAAM,QAAQ,oBAC9C,EACD;yBAIA,EAEM,OAAA;GAFD,OAAM;GAA8B,eAAY;GAAW,OAAK,EAAE,EAAA,MAAK;MAC1E,EAAQ,EAAA,QAAA,UAAA,CAAA,EAAA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlPlaceholder.js","names":[],"sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"sourcesContent":["<script lang=\"ts\">\nimport paintWorkletCode from \"./paint-worklet.js?raw\";\n\nexport interface PlPlaceholderProps {\n variant?: \"table\" | \"graph\";\n title?: string;\n subtitle?: string | string[];\n}\n\n// Register paint worklet once at module load (uses blob URL to comply with CSP)\nconst workletBlob = new Blob([paintWorkletCode], { type: \"application/javascript\" });\nconst workletUrl = URL.createObjectURL(workletBlob);\n(\n CSS as unknown as {\n paintWorklet: { addModule: (url: string) => void };\n }\n).paintWorklet.addModule(workletUrl);\n</script>\n\n<script setup lang=\"ts\">\nimport { useCssModule } from \"vue\";\nimport PlLoaderLogo from \"../../components/PlLoaderLogo.vue\";\n\nconst props = defineProps<PlPlaceholderProps>();\n\nconst styles = useCssModule();\n</script>\n\n<template>\n <div :class=\"styles.root\">\n <div\n :class=\"[\n styles.background,\n {\n [styles.table]: props.variant === 'table',\n [styles.graph]: props.variant === 'graph',\n },\n ]\"\n />\n <div :class=\"styles.content\">\n <PlLoaderLogo :size=\"64\" color=\"var(--color-div-grey)\" />\n <div v-if=\"props.title || props.subtitle\" :class=\"styles.text\">\n <div v-if=\"props.title\" :class=\"styles.title\">{{ props.title }}</div>\n <div v-if=\"props.subtitle\" :class=\"styles.subtitle\">\n <template v-if=\"Array.isArray(props.subtitle)\">\n <span v-for=\"(item, key) of props.subtitle\" :key>{{ item }}</span>\n </template>\n <span v-else>{{ props.subtitle }}</span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.root {\n block-size: 100%;\n inline-size: 100%;\n position: relative;\n user-select: none;\n background-color: var(--bg-elevated-01);\n}\n\n.background {\n position: absolute;\n inset: 0;\n pointer-events: none;\n mask: linear-gradient(transparent 35%, #000 40% 60%, transparent 65%);\n mask-size: 100% 300%;\n animation-duration: 5s;\n animation-iteration-count: infinite;\n animation-name: slide;\n &.table {\n background-image: paint(pl-placeholder-table-skeleton);\n }\n &.graph {\n background-image: paint(pl-placeholder-graph-skeleton);\n }\n}\n\n.content {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n -webkit-text-stroke-color: white;\n -webkit-text-stroke-width: 4px;\n paint-order: stroke;\n}\n\n.title {\n color: var(--txt-03);\n font-size: 20px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.2px;\n}\n\n.subtitle {\n color: var(--txt-03);\n font-weight: 500;\n line-height: 20px;\n display: grid;\n span {\n grid-area: 1 / 1;\n text-align: center;\n animation-name: active-subtitle;\n animation-duration: calc(6s * sibling-count());\n animation-iteration-count: infinite;\n animation-timing-function: steps(sibling-count(), jump-none);\n visibility: if(\n style(--pl-placeholder-active-subtitle: sibling-index()): visible; else: hidden;\n );\n }\n}\n\n@keyframes slide {\n from {\n mask-position: 0 100%;\n }\n}\n\n@keyframes active-subtitle {\n from {\n --pl-placeholder-active-subtitle: 1;\n }\n to {\n --pl-placeholder-active-subtitle: sibling-count();\n }\n}\n\n@property --pl-placeholder-active-subtitle {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 1;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlPlaceholder.js","names":[],"sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"sourcesContent":["<script lang=\"ts\">\nimport paintWorkletCode from \"./paint-worklet.js?raw\";\n\nexport interface PlPlaceholderProps {\n variant?: \"table\" | \"graph\";\n title?: string;\n subtitle?: string | string[];\n}\n\n// Register paint worklet once at module load (uses blob URL to comply with CSP)\nconst workletBlob = new Blob([paintWorkletCode], { type: \"application/javascript\" });\nconst workletUrl = URL.createObjectURL(workletBlob);\n(\n CSS as unknown as {\n paintWorklet: { addModule: (url: string) => void };\n }\n).paintWorklet.addModule(workletUrl);\n</script>\n\n<script setup lang=\"ts\">\nimport { useCssModule } from \"vue\";\nimport PlLoaderLogo from \"../../components/PlLoaderLogo.vue\";\n\nconst props = defineProps<PlPlaceholderProps>();\n\nconst styles = useCssModule();\n</script>\n\n<template>\n <div data-testid=\"pl-placeholder\" :class=\"styles.root\">\n <div\n data-testid=\"pl-placeholder-background\"\n :class=\"[\n styles.background,\n {\n [styles.table]: props.variant === 'table',\n [styles.graph]: props.variant === 'graph',\n },\n ]\"\n />\n <div data-testid=\"pl-placeholder-content\" :class=\"styles.content\">\n <PlLoaderLogo data-testid=\"pl-placeholder-loader\" :size=\"64\" color=\"var(--color-div-grey)\" />\n <div\n v-if=\"props.title || props.subtitle\"\n data-testid=\"pl-placeholder-text\"\n :class=\"styles.text\"\n >\n <div v-if=\"props.title\" data-testid=\"pl-placeholder-title\" :class=\"styles.title\">\n {{ props.title }}\n </div>\n <div v-if=\"props.subtitle\" data-testid=\"pl-placeholder-subtitle\" :class=\"styles.subtitle\">\n <template v-if=\"Array.isArray(props.subtitle)\">\n <span\n v-for=\"(item, key) of props.subtitle\"\n :key\n data-testid=\"pl-placeholder-subtitle-item\"\n >{{ item }}</span\n >\n </template>\n <span v-else data-testid=\"pl-placeholder-subtitle-item\">{{ props.subtitle }}</span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.root {\n block-size: 100%;\n inline-size: 100%;\n position: relative;\n user-select: none;\n background-color: var(--bg-elevated-01);\n}\n\n.background {\n position: absolute;\n inset: 0;\n pointer-events: none;\n mask: linear-gradient(transparent 35%, #000 40% 60%, transparent 65%);\n mask-size: 100% 300%;\n animation-duration: 5s;\n animation-iteration-count: infinite;\n animation-name: slide;\n &.table {\n background-image: paint(pl-placeholder-table-skeleton);\n }\n &.graph {\n background-image: paint(pl-placeholder-graph-skeleton);\n }\n}\n\n.content {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n -webkit-text-stroke-color: white;\n -webkit-text-stroke-width: 4px;\n paint-order: stroke;\n}\n\n.title {\n color: var(--txt-03);\n font-size: 20px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.2px;\n}\n\n.subtitle {\n color: var(--txt-03);\n font-weight: 500;\n line-height: 20px;\n display: grid;\n span {\n grid-area: 1 / 1;\n text-align: center;\n animation-name: active-subtitle;\n animation-duration: calc(6s * sibling-count());\n animation-iteration-count: infinite;\n animation-timing-function: steps(sibling-count(), jump-none);\n visibility: if(\n style(--pl-placeholder-active-subtitle: sibling-index()): visible; else: hidden;\n );\n }\n}\n\n@keyframes slide {\n from {\n mask-position: 0 100%;\n }\n}\n\n@keyframes active-subtitle {\n from {\n --pl-placeholder-active-subtitle: 1;\n }\n to {\n --pl-placeholder-active-subtitle: sibling-count();\n }\n}\n\n@property --pl-placeholder-active-subtitle {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 1;\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlPlaceholder.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"sourcesContent":["<script lang=\"ts\">\nimport paintWorkletCode from \"./paint-worklet.js?raw\";\n\nexport interface PlPlaceholderProps {\n variant?: \"table\" | \"graph\";\n title?: string;\n subtitle?: string | string[];\n}\n\n// Register paint worklet once at module load (uses blob URL to comply with CSP)\nconst workletBlob = new Blob([paintWorkletCode], { type: \"application/javascript\" });\nconst workletUrl = URL.createObjectURL(workletBlob);\n(\n CSS as unknown as {\n paintWorklet: { addModule: (url: string) => void };\n }\n).paintWorklet.addModule(workletUrl);\n</script>\n\n<script setup lang=\"ts\">\nimport { useCssModule } from \"vue\";\nimport PlLoaderLogo from \"../../components/PlLoaderLogo.vue\";\n\nconst props = defineProps<PlPlaceholderProps>();\n\nconst styles = useCssModule();\n</script>\n\n<template>\n <div :class=\"styles.root\">\n <div\n :class=\"[\n styles.background,\n {\n [styles.table]: props.variant === 'table',\n [styles.graph]: props.variant === 'graph',\n },\n ]\"\n />\n <div :class=\"styles.content\">\n <PlLoaderLogo :size=\"64\" color=\"var(--color-div-grey)\" />\n <div v-if=\"props.title || props.subtitle\" :class=\"styles.text\">\n <div v-if=\"props.title\" :class=\"styles.title\">{{ props.title }}</div>\n <div v-if=\"props.subtitle\" :class=\"styles.subtitle\">\n <template v-if=\"Array.isArray(props.subtitle)\">\n <span v-for=\"(item, key) of props.subtitle\" :key>{{ item }}</span>\n </template>\n <span v-else>{{ props.subtitle }}</span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.root {\n block-size: 100%;\n inline-size: 100%;\n position: relative;\n user-select: none;\n background-color: var(--bg-elevated-01);\n}\n\n.background {\n position: absolute;\n inset: 0;\n pointer-events: none;\n mask: linear-gradient(transparent 35%, #000 40% 60%, transparent 65%);\n mask-size: 100% 300%;\n animation-duration: 5s;\n animation-iteration-count: infinite;\n animation-name: slide;\n &.table {\n background-image: paint(pl-placeholder-table-skeleton);\n }\n &.graph {\n background-image: paint(pl-placeholder-graph-skeleton);\n }\n}\n\n.content {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n -webkit-text-stroke-color: white;\n -webkit-text-stroke-width: 4px;\n paint-order: stroke;\n}\n\n.title {\n color: var(--txt-03);\n font-size: 20px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.2px;\n}\n\n.subtitle {\n color: var(--txt-03);\n font-weight: 500;\n line-height: 20px;\n display: grid;\n span {\n grid-area: 1 / 1;\n text-align: center;\n animation-name: active-subtitle;\n animation-duration: calc(6s * sibling-count());\n animation-iteration-count: infinite;\n animation-timing-function: steps(sibling-count(), jump-none);\n visibility: if(\n style(--pl-placeholder-active-subtitle: sibling-index()): visible; else: hidden;\n );\n }\n}\n\n@keyframes slide {\n from {\n mask-position: 0 100%;\n }\n}\n\n@keyframes active-subtitle {\n from {\n --pl-placeholder-active-subtitle: 1;\n }\n to {\n --pl-placeholder-active-subtitle: sibling-count();\n }\n}\n\n@property --pl-placeholder-active-subtitle {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 1;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"PlPlaceholder.vue_vue_type_style_index_0_lang.module.js","names":[],"sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"sourcesContent":["<script lang=\"ts\">\nimport paintWorkletCode from \"./paint-worklet.js?raw\";\n\nexport interface PlPlaceholderProps {\n variant?: \"table\" | \"graph\";\n title?: string;\n subtitle?: string | string[];\n}\n\n// Register paint worklet once at module load (uses blob URL to comply with CSP)\nconst workletBlob = new Blob([paintWorkletCode], { type: \"application/javascript\" });\nconst workletUrl = URL.createObjectURL(workletBlob);\n(\n CSS as unknown as {\n paintWorklet: { addModule: (url: string) => void };\n }\n).paintWorklet.addModule(workletUrl);\n</script>\n\n<script setup lang=\"ts\">\nimport { useCssModule } from \"vue\";\nimport PlLoaderLogo from \"../../components/PlLoaderLogo.vue\";\n\nconst props = defineProps<PlPlaceholderProps>();\n\nconst styles = useCssModule();\n</script>\n\n<template>\n <div data-testid=\"pl-placeholder\" :class=\"styles.root\">\n <div\n data-testid=\"pl-placeholder-background\"\n :class=\"[\n styles.background,\n {\n [styles.table]: props.variant === 'table',\n [styles.graph]: props.variant === 'graph',\n },\n ]\"\n />\n <div data-testid=\"pl-placeholder-content\" :class=\"styles.content\">\n <PlLoaderLogo data-testid=\"pl-placeholder-loader\" :size=\"64\" color=\"var(--color-div-grey)\" />\n <div\n v-if=\"props.title || props.subtitle\"\n data-testid=\"pl-placeholder-text\"\n :class=\"styles.text\"\n >\n <div v-if=\"props.title\" data-testid=\"pl-placeholder-title\" :class=\"styles.title\">\n {{ props.title }}\n </div>\n <div v-if=\"props.subtitle\" data-testid=\"pl-placeholder-subtitle\" :class=\"styles.subtitle\">\n <template v-if=\"Array.isArray(props.subtitle)\">\n <span\n v-for=\"(item, key) of props.subtitle\"\n :key\n data-testid=\"pl-placeholder-subtitle-item\"\n >{{ item }}</span\n >\n </template>\n <span v-else data-testid=\"pl-placeholder-subtitle-item\">{{ props.subtitle }}</span>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<style module>\n.root {\n block-size: 100%;\n inline-size: 100%;\n position: relative;\n user-select: none;\n background-color: var(--bg-elevated-01);\n}\n\n.background {\n position: absolute;\n inset: 0;\n pointer-events: none;\n mask: linear-gradient(transparent 35%, #000 40% 60%, transparent 65%);\n mask-size: 100% 300%;\n animation-duration: 5s;\n animation-iteration-count: infinite;\n animation-name: slide;\n &.table {\n background-image: paint(pl-placeholder-table-skeleton);\n }\n &.graph {\n background-image: paint(pl-placeholder-graph-skeleton);\n }\n}\n\n.content {\n position: absolute;\n inset: 0;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n gap: 12px;\n}\n\n.text {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 4px;\n -webkit-text-stroke-color: white;\n -webkit-text-stroke-width: 4px;\n paint-order: stroke;\n}\n\n.title {\n color: var(--txt-03);\n font-size: 20px;\n font-weight: 500;\n line-height: 24px;\n letter-spacing: -0.2px;\n}\n\n.subtitle {\n color: var(--txt-03);\n font-weight: 500;\n line-height: 20px;\n display: grid;\n span {\n grid-area: 1 / 1;\n text-align: center;\n animation-name: active-subtitle;\n animation-duration: calc(6s * sibling-count());\n animation-iteration-count: infinite;\n animation-timing-function: steps(sibling-count(), jump-none);\n visibility: if(\n style(--pl-placeholder-active-subtitle: sibling-index()): visible; else: hidden;\n );\n }\n}\n\n@keyframes slide {\n from {\n mask-position: 0 100%;\n }\n}\n\n@keyframes active-subtitle {\n from {\n --pl-placeholder-active-subtitle: 1;\n }\n to {\n --pl-placeholder-active-subtitle: sibling-count();\n }\n}\n\n@property --pl-placeholder-active-subtitle {\n syntax: \"<number>\";\n inherits: false;\n initial-value: 1;\n}\n</style>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"PlPlaceholder.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"names":[],"mappings":"AA4JA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC9B;wBAUoB,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY,gTAkGd,CAAC"}
1
+ {"version":3,"file":"PlPlaceholder.vue.d.ts","sourceRoot":"","sources":["../../../src/layout/PlPlaceholder/PlPlaceholder.vue"],"names":[],"mappings":"AAwKA,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC9B;wBAUoB,OAAO,YAAY;AAAxC,wBAAyC;AACzC,QAAA,MAAM,YAAY,gTA4Gd,CAAC"}