@milaboratories/uikit 2.10.15 → 2.10.17

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 (755) hide show
  1. package/.oxfmtrc.json +4 -0
  2. package/.oxlintrc.json +3 -0
  3. package/.prettierrc +1 -1
  4. package/.turbo/turbo-build.log +191 -191
  5. package/.turbo/turbo-formatter$colon$check.log +12 -0
  6. package/.turbo/turbo-linter$colon$check.log +10 -0
  7. package/.turbo/{turbo-type-check.log → turbo-types$colon$check.log} +2 -2
  8. package/CHANGELOG.md +18 -0
  9. package/build.browser-lib.config.js +6 -6
  10. package/dist/base/BtnBase.vue.js.map +1 -1
  11. package/dist/colors/color.d.ts.map +1 -1
  12. package/dist/colors/color.js.map +1 -1
  13. package/dist/colors/gradient.d.ts.map +1 -1
  14. package/dist/colors/gradient.js.map +1 -1
  15. package/dist/colors/palette.js.map +1 -1
  16. package/dist/components/ContextProvider.vue.js.map +1 -1
  17. package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
  18. package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
  19. package/dist/components/DataTable/ColumnsCommandMenu.vue.d.ts.map +1 -1
  20. package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
  21. package/dist/components/DataTable/RowsCommandMenu.vue.d.ts.map +1 -1
  22. package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
  23. package/dist/components/DataTable/TScroll.vue.d.ts.map +1 -1
  24. package/dist/components/DataTable/TScroll.vue.js +6 -1
  25. package/dist/components/DataTable/TScroll.vue.js.map +1 -1
  26. package/dist/components/DataTable/TableComponent.vue.d.ts.map +1 -1
  27. package/dist/components/DataTable/TableComponent.vue.js +1 -1
  28. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  29. package/dist/components/DataTable/TdCell.vue.d.ts.map +1 -1
  30. package/dist/components/DataTable/TdCell.vue.js +3 -1
  31. package/dist/components/DataTable/TdCell.vue.js.map +1 -1
  32. package/dist/components/DataTable/ThCell.vue.d.ts.map +1 -1
  33. package/dist/components/DataTable/ThCell.vue.js.map +1 -1
  34. package/dist/components/DataTable/TrBody.vue.d.ts.map +1 -1
  35. package/dist/components/DataTable/TrBody.vue.js.map +1 -1
  36. package/dist/components/DataTable/adapters/AsyncData.d.ts +1 -1
  37. package/dist/components/DataTable/adapters/AsyncData.js.map +1 -1
  38. package/dist/components/DataTable/adapters/RawData.d.ts +1 -1
  39. package/dist/components/DataTable/adapters/RawData.js.map +1 -1
  40. package/dist/components/DataTable/assets/TableIcon.vue.d.ts.map +1 -1
  41. package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
  42. package/dist/components/DataTable/composition/useColumn.d.ts.map +1 -1
  43. package/dist/components/DataTable/composition/useColumn.js.map +1 -1
  44. package/dist/components/DataTable/composition/useMouseUp.js.map +1 -1
  45. package/dist/components/DataTable/composition/useResize.js.map +1 -1
  46. package/dist/components/DataTable/composition/useTableColumns.js.map +1 -1
  47. package/dist/components/DataTable/composition/useTableRows.js.map +1 -1
  48. package/dist/components/DataTable/domain.d.ts +1 -1
  49. package/dist/components/DataTable/domain.d.ts.map +1 -1
  50. package/dist/components/DataTable/domain.js.map +1 -1
  51. package/dist/components/DataTable/index.d.ts +1 -1
  52. package/dist/components/DataTable/index.d.ts.map +1 -1
  53. package/dist/components/DataTable/index.js +5 -1
  54. package/dist/components/DataTable/index.js.map +1 -1
  55. package/dist/components/DataTable/keys.js.map +1 -1
  56. package/dist/components/DataTable/state.d.ts.map +1 -1
  57. package/dist/components/DataTable/state.js +10 -4
  58. package/dist/components/DataTable/state.js.map +1 -1
  59. package/dist/components/DataTable/types.d.ts +3 -3
  60. package/dist/components/DropdownListItem.vue.d.ts +1 -1
  61. package/dist/components/DropdownListItem.vue.d.ts.map +1 -1
  62. package/dist/components/DropdownListItem.vue.js.map +1 -1
  63. package/dist/components/GridTable/domain.d.ts +1 -1
  64. package/dist/components/GridTable/domain.d.ts.map +1 -1
  65. package/dist/components/GridTable/types.d.ts +4 -4
  66. package/dist/components/GridTable/types.d.ts.map +1 -1
  67. package/dist/components/GridTable/useColumn.d.ts.map +1 -1
  68. package/dist/components/HScroll.vue.js.map +1 -1
  69. package/dist/components/InputRange.vue.d.ts.map +1 -1
  70. package/dist/components/InputRange.vue.js +3 -1
  71. package/dist/components/InputRange.vue.js.map +1 -1
  72. package/dist/components/LongText.vue.d.ts.map +1 -1
  73. package/dist/components/LongText.vue.js +9 -7
  74. package/dist/components/LongText.vue.js.map +1 -1
  75. package/dist/components/PlAccordion/ExpandTransition.vue.d.ts.map +1 -1
  76. package/dist/components/PlAccordion/ExpandTransition.vue.js +27 -0
  77. package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
  78. package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -1
  79. package/dist/components/PlAccordion/ExpandTransition.vue3.js +2 -2
  80. package/dist/components/PlAccordion/PlAccordion.vue.js.map +1 -1
  81. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +2 -2
  82. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  83. package/dist/components/PlAlert/PlAlert.vue.d.ts.map +1 -1
  84. package/dist/components/PlAlert/PlAlert.vue.js.map +1 -1
  85. package/dist/components/PlAutocomplete/PlAutocomplete.vue.d.ts.map +1 -1
  86. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +40 -19
  87. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  88. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.d.ts +2 -2
  89. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.d.ts.map +1 -1
  90. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +22 -12
  91. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
  92. package/dist/components/PlAutocompleteMulti/index.d.ts +1 -1
  93. package/dist/components/PlAutocompleteMulti/index.d.ts.map +1 -1
  94. package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
  95. package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
  96. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
  97. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
  98. package/dist/components/PlBtnLink/PlBtnLink.vue.d.ts.map +1 -1
  99. package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
  100. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
  101. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
  102. package/dist/components/PlBtnSplit/PlBtnSplit.vue.d.ts.map +1 -1
  103. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +6 -4
  104. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
  105. package/dist/components/PlChartHistogram/PlChartHistogram.vue.d.ts.map +1 -1
  106. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +8 -1
  107. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  108. package/dist/components/PlChartHistogram/PlChartHistogram.vue3.js +4 -4
  109. package/dist/components/PlChartHistogram/createGridlines.d.ts.map +1 -1
  110. package/dist/components/PlChartHistogram/createGridlines.js +5 -1
  111. package/dist/components/PlChartHistogram/createGridlines.js.map +1 -1
  112. package/dist/components/PlChartHistogram/createLabels.d.ts.map +1 -1
  113. package/dist/components/PlChartHistogram/createLabels.js.map +1 -1
  114. package/dist/components/PlChartHistogram/createSvgContainer.js.map +1 -1
  115. package/dist/components/PlChartHistogram/drawBins.d.ts.map +1 -1
  116. package/dist/components/PlChartHistogram/drawBins.js.map +1 -1
  117. package/dist/components/PlChartHistogram/drawThreshold.js.map +1 -1
  118. package/dist/components/PlChartHistogram/histogram.d.ts.map +1 -1
  119. package/dist/components/PlChartHistogram/histogram.js +6 -2
  120. package/dist/components/PlChartHistogram/histogram.js.map +1 -1
  121. package/dist/components/PlChartHistogram/normalizeBins.js.map +1 -1
  122. package/dist/components/PlChartHistogram/types.d.ts +2 -2
  123. package/dist/components/PlChartHistogram/types.d.ts.map +1 -1
  124. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  125. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue.d.ts.map +1 -1
  126. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +6 -4
  127. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  128. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  129. package/dist/components/PlChartStackedBar/StackedRow.vue.d.ts.map +1 -1
  130. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  131. package/dist/components/PlChartStackedBar/StackedRowCompact.vue.d.ts.map +1 -1
  132. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  133. package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
  134. package/dist/components/PlCheckbox/PlCheckboxBase.vue.d.ts.map +1 -1
  135. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
  136. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.d.ts.map +1 -1
  137. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +8 -2
  138. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
  139. package/dist/components/PlChip/PlChip.vue.d.ts.map +1 -1
  140. package/dist/components/PlChip/PlChip.vue.js.map +1 -1
  141. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  142. package/dist/components/PlConfirmDialog.vue.d.ts.map +1 -1
  143. package/dist/components/PlConfirmDialog.vue.js.map +1 -1
  144. package/dist/components/PlDialogModal/PlDialogModal.vue.d.ts.map +1 -1
  145. package/dist/components/PlDialogModal/PlDialogModal.vue.js +4 -1
  146. package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  147. package/dist/components/PlDropdown/OptionList.vue.d.ts +1 -1
  148. package/dist/components/PlDropdown/OptionList.vue.d.ts.map +1 -1
  149. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
  150. package/dist/components/PlDropdown/PlDropdown.vue.d.ts.map +1 -1
  151. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  152. package/dist/components/PlDropdown/types.d.ts.map +1 -1
  153. package/dist/components/PlDropdown/useGroupBy.d.ts.map +1 -1
  154. package/dist/components/PlDropdown/useGroupBy.js.map +1 -1
  155. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.d.ts.map +1 -1
  156. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
  157. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
  158. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts.map +1 -1
  159. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +5 -3
  160. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
  161. package/dist/components/PlDropdownLine/ResizableInput.vue.d.ts.map +1 -1
  162. package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
  163. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.d.ts.map +1 -1
  164. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
  165. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
  166. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  167. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts.map +1 -1
  168. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
  169. package/dist/components/PlElementList/PlElementList.vue.d.ts.map +1 -1
  170. package/dist/components/PlElementList/PlElementList.vue2.js +9 -2
  171. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  172. package/dist/components/PlElementList/PlElementList.vue3.js +4 -4
  173. package/dist/components/PlElementList/PlElementListItem.vue.d.ts.map +1 -1
  174. package/dist/components/PlElementList/PlElementListItem.vue2.js +25 -13
  175. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  176. package/dist/components/PlElementList/PlElementListItem.vue3.js +20 -20
  177. package/dist/components/PlElementList/utils.d.ts.map +1 -1
  178. package/dist/components/PlElementList/utils.js +3 -1
  179. package/dist/components/PlElementList/utils.js.map +1 -1
  180. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  181. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.d.ts.map +1 -1
  182. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js +4 -1
  183. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
  184. package/dist/components/PlFileDialog/Local.vue.d.ts.map +1 -1
  185. package/dist/components/PlFileDialog/Local.vue.js +6 -2
  186. package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
  187. package/dist/components/PlFileDialog/PlFileDialog.vue.d.ts.map +1 -1
  188. package/dist/components/PlFileDialog/PlFileDialog.vue.js +3 -1
  189. package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
  190. package/dist/components/PlFileDialog/Remote.vue.d.ts.map +1 -1
  191. package/dist/components/PlFileDialog/Remote.vue.js +6 -2
  192. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  193. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  194. package/dist/components/PlFileDialog/Shortcuts.vue3.js +4 -4
  195. package/dist/components/PlFileDialog/pl-file-dialog.module.scss.js +21 -21
  196. package/dist/components/PlFileDialog/remote.js.map +1 -1
  197. package/dist/components/PlFileDialog/utils.js.map +1 -1
  198. package/dist/components/PlFileInput/PlFileInput.vue.d.ts.map +1 -1
  199. package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  200. package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
  201. package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
  202. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.d.ts +1 -1
  203. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.d.ts.map +1 -1
  204. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +5 -1
  205. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
  206. package/dist/components/PlLoaderLogo.vue.d.ts.map +1 -1
  207. package/dist/components/PlLoaderLogo.vue2.js +8 -8
  208. package/dist/components/PlLoaderLogo.vue2.js.map +1 -1
  209. package/dist/components/PlLogView/PlLogView.vue.d.ts.map +1 -1
  210. package/dist/components/PlLogView/PlLogView.vue.js +11 -7
  211. package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  212. package/dist/components/PlLogView/useLogHandle.d.ts.map +1 -1
  213. package/dist/components/PlLogView/useLogHandle.js +16 -3
  214. package/dist/components/PlLogView/useLogHandle.js.map +1 -1
  215. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.d.ts +1 -1
  216. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.d.ts.map +1 -1
  217. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
  218. package/dist/components/PlNumberField/PlNumberField.vue.d.ts.map +1 -1
  219. package/dist/components/PlNumberField/PlNumberField.vue.js +4 -6
  220. package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
  221. package/dist/components/PlNumberField/parseNumber.d.ts.map +1 -1
  222. package/dist/components/PlNumberField/parseNumber.js.map +1 -1
  223. package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
  224. package/dist/components/PlProgressCell/PlProgressCell.vue.d.ts.map +1 -1
  225. package/dist/components/PlProgressCell/PlProgressCell.vue.js +11 -2
  226. package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
  227. package/dist/components/PlProgressCell/types.d.ts +1 -1
  228. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  229. package/dist/components/PlRadio/PlRadio.vue3.js +3 -3
  230. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  231. package/dist/components/PlRadio/PlRadioGroup.vue3.js +6 -6
  232. package/dist/components/PlRadio/keys.js.map +1 -1
  233. package/dist/components/PlSearchField/PlSearchField.vue.d.ts.map +1 -1
  234. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  235. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  236. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue3.js +1 -1
  237. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  238. package/dist/components/PlSidebar/PlSidebarGroup.vue3.js +6 -6
  239. package/dist/components/PlSidebar/PlSidebarItem.vue.d.ts +6 -6
  240. package/dist/components/PlSidebar/PlSidebarItem.vue.d.ts.map +1 -1
  241. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  242. package/dist/components/PlSidebar/PlSidebarItem.vue3.js +8 -8
  243. package/dist/components/PlSlideModal/PlPureSlideModal.vue.d.ts.map +1 -1
  244. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +1 -1
  245. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  246. package/dist/components/PlSlideModal/PlSlideModal.vue.d.ts.map +1 -1
  247. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  248. package/dist/components/PlSlideModal/props.d.ts +8 -8
  249. package/dist/components/PlSlideModal/props.d.ts.map +1 -1
  250. package/dist/components/PlSlideModal/props.js.map +1 -1
  251. package/dist/components/PlSplash/PlSplash.vue.d.ts +1 -1
  252. package/dist/components/PlSplash/PlSplash.vue.d.ts.map +1 -1
  253. package/dist/components/PlSplash/PlSplash.vue.js +4 -1
  254. package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
  255. package/dist/components/PlStatusTag/PlStatusTag.vue.d.ts.map +1 -1
  256. package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
  257. package/dist/components/PlStatusTag/types.d.ts +1 -1
  258. package/dist/components/PlSvg/PlSvg.vue.d.ts.map +1 -1
  259. package/dist/components/PlSvg/PlSvg.vue2.js +7 -2
  260. package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
  261. package/dist/components/PlSvg/registry.d.ts.map +1 -1
  262. package/dist/components/PlSvg/registry.js.map +1 -1
  263. package/dist/components/PlTabs/PlTabs.vue.d.ts.map +1 -1
  264. package/dist/components/PlTabs/PlTabs.vue.js +4 -1
  265. package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
  266. package/dist/components/PlTabs/Tab.vue.js.map +1 -1
  267. package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
  268. package/dist/components/PlTextField/PlTextField.vue.d.ts.map +1 -1
  269. package/dist/components/PlTextField/PlTextField.vue.js +3 -1
  270. package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
  271. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
  272. package/dist/components/PlTooltip/Beak.vue.d.ts.map +1 -1
  273. package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
  274. package/dist/components/PlTooltip/PlTooltip.vue.d.ts.map +1 -1
  275. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  276. package/dist/components/PlTooltip/useTooltipPosition.d.ts +1 -1
  277. package/dist/components/PlTooltip/useTooltipPosition.js.map +1 -1
  278. package/dist/components/Scrollable.vue.d.ts.map +1 -1
  279. package/dist/components/Scrollable.vue.js +10 -1
  280. package/dist/components/Scrollable.vue.js.map +1 -1
  281. package/dist/components/Slider.vue.d.ts.map +1 -1
  282. package/dist/components/Slider.vue.js +3 -1
  283. package/dist/components/Slider.vue.js.map +1 -1
  284. package/dist/components/SliderRange.vue.d.ts.map +1 -1
  285. package/dist/components/SliderRange.vue.js +15 -3
  286. package/dist/components/SliderRange.vue.js.map +1 -1
  287. package/dist/components/SliderRangeTriple.vue.d.ts.map +1 -1
  288. package/dist/components/SliderRangeTriple.vue.js +7 -1
  289. package/dist/components/SliderRangeTriple.vue.js.map +1 -1
  290. package/dist/components/TabItem.vue.js.map +1 -1
  291. package/dist/components/ThemeSwitcher.vue.js.map +1 -1
  292. package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
  293. package/dist/components/VScroll.vue.js.map +1 -1
  294. package/dist/components/contextMenu/Menu.vue.js +1 -1
  295. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  296. package/dist/components/contextMenu/index.js.map +1 -1
  297. package/dist/composition/computedCached.js.map +1 -1
  298. package/dist/composition/filters/metadata.d.ts.map +1 -1
  299. package/dist/composition/filters/metadata.js.map +1 -1
  300. package/dist/composition/filters/types.d.ts +1 -19
  301. package/dist/composition/filters/types.d.ts.map +1 -1
  302. package/dist/composition/useClickOutside.js.map +1 -1
  303. package/dist/composition/useComponentProp.d.ts.map +1 -1
  304. package/dist/composition/useComponentProp.js.map +1 -1
  305. package/dist/composition/useConfirm.js.map +1 -1
  306. package/dist/composition/useDraggable.d.ts.map +1 -1
  307. package/dist/composition/useDraggable.js.map +1 -1
  308. package/dist/composition/useEventListener.d.ts.map +1 -1
  309. package/dist/composition/useEventListener.js +11 -7
  310. package/dist/composition/useEventListener.js.map +1 -1
  311. package/dist/composition/useFilteredList.d.ts.map +1 -1
  312. package/dist/composition/useFilteredList.js.map +1 -1
  313. package/dist/composition/useFormState.js.map +1 -1
  314. package/dist/composition/useHover.d.ts.map +1 -1
  315. package/dist/composition/useHover.js.map +1 -1
  316. package/dist/composition/useInterval.js.map +1 -1
  317. package/dist/composition/useLocalStorage.js.map +1 -1
  318. package/dist/composition/useMouse.js.map +1 -1
  319. package/dist/composition/useMouseCapture.d.ts.map +1 -1
  320. package/dist/composition/useMouseCapture.js.map +1 -1
  321. package/dist/composition/usePollingQuery.d.ts.map +1 -1
  322. package/dist/composition/usePollingQuery.js +4 -1
  323. package/dist/composition/usePollingQuery.js.map +1 -1
  324. package/dist/composition/usePosition.d.ts.map +1 -1
  325. package/dist/composition/usePosition.js.map +1 -1
  326. package/dist/composition/useQuery.js.map +1 -1
  327. package/dist/composition/useResizeObserver.d.ts.map +1 -1
  328. package/dist/composition/useResizeObserver.js.map +1 -1
  329. package/dist/composition/useRipple.js.map +1 -1
  330. package/dist/composition/useScroll.d.ts.map +1 -1
  331. package/dist/composition/useScroll.js.map +1 -1
  332. package/dist/composition/useSliderBreakpoints.d.ts.map +1 -1
  333. package/dist/composition/useSliderBreakpoints.js.map +1 -1
  334. package/dist/composition/useSortable.js.map +1 -1
  335. package/dist/composition/useSortable2.d.ts.map +1 -1
  336. package/dist/composition/useSortable2.js +8 -5
  337. package/dist/composition/useSortable2.js.map +1 -1
  338. package/dist/composition/useTheme.d.ts +1 -1
  339. package/dist/composition/useTheme.d.ts.map +1 -1
  340. package/dist/composition/useTheme.js.map +1 -1
  341. package/dist/composition/useTransformedModel.d.ts.map +1 -1
  342. package/dist/composition/useTransformedModel.js.map +1 -1
  343. package/dist/composition/useWatchFetch.js.map +1 -1
  344. package/dist/composition/utils.js.map +1 -1
  345. package/dist/composition/watchCached.d.ts.map +1 -1
  346. package/dist/composition/watchCached.js.map +1 -1
  347. package/dist/demo-site-data/all-css-variables.d.ts.map +1 -1
  348. package/dist/demo-site-data/all-css-variables.js +52 -13
  349. package/dist/demo-site-data/all-css-variables.js.map +1 -1
  350. package/dist/generated/icons-16.js.map +1 -1
  351. package/dist/generated/icons-24.js.map +1 -1
  352. package/dist/global/resizeObserver.js.map +1 -1
  353. package/dist/helpers/dom.d.ts.map +1 -1
  354. package/dist/helpers/dom.js.map +1 -1
  355. package/dist/helpers/downloadContent.d.ts +1 -1
  356. package/dist/helpers/downloadContent.d.ts.map +1 -1
  357. package/dist/helpers/downloadContent.js +3 -1
  358. package/dist/helpers/downloadContent.js.map +1 -1
  359. package/dist/helpers/error.js +4 -1
  360. package/dist/helpers/error.js.map +1 -1
  361. package/dist/helpers/functions.d.ts.map +1 -1
  362. package/dist/helpers/functions.js.map +1 -1
  363. package/dist/helpers/objects.js.map +1 -1
  364. package/dist/helpers/utils.d.ts.map +1 -1
  365. package/dist/helpers/utils.js.map +1 -1
  366. package/dist/index.d.ts +1 -1
  367. package/dist/index.js +1 -1
  368. package/dist/index.js.map +1 -1
  369. package/dist/layout/PlBlockPage/PlBlockPage.vue.d.ts.map +1 -1
  370. package/dist/layout/PlBlockPage/PlBlockPage.vue2.js.map +1 -1
  371. package/dist/layout/PlBlockPage/PlBlockPage.vue3.js +4 -4
  372. package/dist/layout/PlBlockPage/PlBlockPageTitleTeleportTarget.js.map +1 -1
  373. package/dist/layout/PlBlockPage/usePlBlockPageTitleTeleportTarget.js.map +1 -1
  374. package/dist/layout/PlContainer/PlContainer.vue.d.ts.map +1 -1
  375. package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
  376. package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
  377. package/dist/layout/PlPlaceholder/PlPlaceholder.vue.d.ts +1 -1
  378. package/dist/layout/PlPlaceholder/PlPlaceholder.vue.d.ts.map +1 -1
  379. package/dist/layout/PlPlaceholder/PlPlaceholder.vue2.js +8 -8
  380. package/dist/layout/PlPlaceholder/PlPlaceholder.vue2.js.map +1 -1
  381. package/dist/layout/PlPlaceholder/PlPlaceholder.vue3.js +15 -15
  382. package/dist/layout/PlPlaceholder/index.d.ts +1 -1
  383. package/dist/layout/PlPlaceholder/index.d.ts.map +1 -1
  384. package/dist/layout/PlPlaceholder/index.js.map +1 -1
  385. package/dist/layout/PlPlaceholder/paint-worklet.js +6 -6
  386. package/dist/layout/PlPlaceholder/paint-worklet.js.map +1 -1
  387. package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
  388. package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
  389. package/dist/types.d.ts +5 -5
  390. package/dist/types.d.ts.map +1 -1
  391. package/dist/utils/DoubleContour.vue.d.ts.map +1 -1
  392. package/dist/utils/DoubleContour.vue.js.map +1 -1
  393. package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
  394. package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
  395. package/dist/utils/TextLabel.vue.js.map +1 -1
  396. package/dist/utils/useLabelNotch.d.ts.map +1 -1
  397. package/dist/utils/useLabelNotch.js.map +1 -1
  398. package/dist/utils/useValidation.js.map +1 -1
  399. package/package.json +23 -24
  400. package/scripts/parse-icons.js +20 -14
  401. package/src/__tests__/compositions/usePollingQuery.spec.ts +163 -165
  402. package/src/__tests__/compositions/useValidation.spec.ts +41 -28
  403. package/src/__tests__/setup.ts +1 -1
  404. package/src/__tests__/use-debounce-fn.test.ts +15 -11
  405. package/src/assets/animations.scss +5 -5
  406. package/src/assets/base-btn.scss +4 -3
  407. package/src/assets/base.scss +11 -8
  408. package/src/assets/common.scss +43 -43
  409. package/src/assets/dropdown-list-item.scss +53 -53
  410. package/src/assets/dropdown-tab-item.scss +4 -4
  411. package/src/assets/icons.scss +1 -1
  412. package/src/assets/input-range.scss +26 -27
  413. package/src/assets/layout.scss +1 -1
  414. package/src/assets/masks.scss +1 -1
  415. package/src/assets/mixins.scss +9 -17
  416. package/src/assets/scroll.scss +6 -6
  417. package/src/assets/slider.scss +6 -5
  418. package/src/assets/sortable.scss +1 -1
  419. package/src/assets/theme-switcher.scss +2 -2
  420. package/src/assets/typography.scss +16 -13
  421. package/src/assets/ui.scss +19 -19
  422. package/src/assets/utils.scss +19 -19
  423. package/src/assets/variables.scss +9 -10
  424. package/src/base/BtnBase.vue +6 -6
  425. package/src/colors/__tests__/colors.spec.ts +12 -10
  426. package/src/colors/color.ts +17 -12
  427. package/src/colors/gradient.ts +20 -17
  428. package/src/colors/index.ts +3 -3
  429. package/src/colors/palette.ts +194 -194
  430. package/src/components/ContextProvider.vue +1 -1
  431. package/src/components/DataTable/BaseCellComponent.vue +8 -8
  432. package/src/components/DataTable/ColumnCaret.vue +3 -3
  433. package/src/components/DataTable/ColumnsCommandMenu.vue +5 -3
  434. package/src/components/DataTable/RowsCommandMenu.vue +5 -3
  435. package/src/components/DataTable/TScroll.vue +11 -6
  436. package/src/components/DataTable/TableComponent.vue +41 -24
  437. package/src/components/DataTable/TdCell.vue +28 -15
  438. package/src/components/DataTable/ThCell.vue +14 -9
  439. package/src/components/DataTable/TrBody.vue +11 -4
  440. package/src/components/DataTable/adapters/AsyncData.ts +4 -4
  441. package/src/components/DataTable/adapters/RawData.ts +5 -5
  442. package/src/components/DataTable/assets/TableIcon.vue +6 -1
  443. package/src/components/DataTable/assets/data-table-style.scss +12 -10
  444. package/src/components/DataTable/composition/useColumn.ts +8 -5
  445. package/src/components/DataTable/composition/useMouseUp.ts +3 -3
  446. package/src/components/DataTable/composition/useResize.ts +16 -16
  447. package/src/components/DataTable/composition/useTableColumns.ts +8 -8
  448. package/src/components/DataTable/composition/useTableRows.ts +5 -5
  449. package/src/components/DataTable/domain.ts +8 -4
  450. package/src/components/DataTable/index.ts +26 -13
  451. package/src/components/DataTable/keys.ts +3 -3
  452. package/src/components/DataTable/state.ts +38 -18
  453. package/src/components/DataTable/types.ts +10 -10
  454. package/src/components/DropdownListItem.vue +18 -15
  455. package/src/components/GridTable/TdCell.vue +7 -7
  456. package/src/components/GridTable/ThCell.vue +14 -9
  457. package/src/components/GridTable/assets/TableIcon.vue +6 -1
  458. package/src/components/GridTable/assets/style.scss +6 -6
  459. package/src/components/GridTable/constants.ts +10 -10
  460. package/src/components/GridTable/domain.ts +8 -4
  461. package/src/components/GridTable/getColumnPositions.ts +4 -4
  462. package/src/components/GridTable/index.vue +41 -32
  463. package/src/components/GridTable/types.ts +14 -11
  464. package/src/components/GridTable/useColumn.ts +8 -5
  465. package/src/components/GridTable/useMouseUp.ts +3 -3
  466. package/src/components/GridTable/useResize.ts +13 -13
  467. package/src/components/HScroll.vue +10 -10
  468. package/src/components/InputRange.vue +9 -7
  469. package/src/components/LongText.vue +7 -5
  470. package/src/components/PlAccordion/ExpandTransition.vue +12 -6
  471. package/src/components/PlAccordion/PlAccordion.vue +3 -3
  472. package/src/components/PlAccordion/PlAccordionSection.vue +9 -9
  473. package/src/components/PlAccordion/index.ts +2 -2
  474. package/src/components/PlAlert/PlAlert.vue +21 -10
  475. package/src/components/PlAlert/index.ts +1 -1
  476. package/src/components/PlAlert/pl-alert.scss +1 -1
  477. package/src/components/PlAutocomplete/PlAutocomplete.vue +142 -82
  478. package/src/components/PlAutocomplete/__tests__/PlAutocomplete.spec.ts +19 -17
  479. package/src/components/PlAutocomplete/index.ts +1 -1
  480. package/src/components/PlAutocomplete/pl-autocomplete.scss +9 -7
  481. package/src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue +92 -62
  482. package/src/components/PlAutocompleteMulti/__tests__/PlAutocompleteMulti.spec.ts +17 -16
  483. package/src/components/PlAutocompleteMulti/index.ts +4 -1
  484. package/src/components/PlAutocompleteMulti/pl-autocomplete-multi.scss +8 -6
  485. package/src/components/PlBtnAccent/PlBtnAccent.vue +4 -4
  486. package/src/components/PlBtnAccent/index.ts +1 -1
  487. package/src/components/PlBtnDanger/PlBtnDanger.vue +4 -4
  488. package/src/components/PlBtnDanger/index.ts +1 -1
  489. package/src/components/PlBtnDanger/pl-btn-danger.scss +1 -1
  490. package/src/components/PlBtnGhost/PlBtnGhost.vue +8 -8
  491. package/src/components/PlBtnGhost/index.ts +1 -1
  492. package/src/components/PlBtnGroup/PlBtnGroup.vue +10 -10
  493. package/src/components/PlBtnGroup/index.ts +1 -1
  494. package/src/components/PlBtnGroup/pl-btn-group.scss +4 -4
  495. package/src/components/PlBtnLink/PlBtnLink.vue +10 -5
  496. package/src/components/PlBtnLink/index.ts +1 -1
  497. package/src/components/PlBtnLink/pl-btn-link.scss +2 -1
  498. package/src/components/PlBtnPrimary/PlBtnPrimary.vue +4 -4
  499. package/src/components/PlBtnPrimary/__tests__/BtnPrimary.spec.ts +7 -7
  500. package/src/components/PlBtnPrimary/index.ts +1 -1
  501. package/src/components/PlBtnPrimary/pl-btn-primary.scss +2 -2
  502. package/src/components/PlBtnSecondary/PlBtnSecondary.vue +4 -4
  503. package/src/components/PlBtnSecondary/index.ts +1 -1
  504. package/src/components/PlBtnSecondary/pl-btn-secondary.scss +1 -1
  505. package/src/components/PlBtnSplit/PlBtnSplit.vue +42 -28
  506. package/src/components/PlBtnSplit/__tests__/PlBtnSplit.spec.ts +66 -66
  507. package/src/components/PlBtnSplit/index.ts +1 -1
  508. package/src/components/PlBtnSplit/pl-btn-split.scss +72 -75
  509. package/src/components/PlChartHistogram/PlChartHistogram.vue +29 -20
  510. package/src/components/PlChartHistogram/createGridlines.ts +28 -22
  511. package/src/components/PlChartHistogram/createLabels.ts +19 -17
  512. package/src/components/PlChartHistogram/createSvgContainer.ts +9 -9
  513. package/src/components/PlChartHistogram/drawBins.ts +27 -34
  514. package/src/components/PlChartHistogram/drawThreshold.ts +9 -9
  515. package/src/components/PlChartHistogram/histogram.ts +31 -34
  516. package/src/components/PlChartHistogram/index.ts +1 -1
  517. package/src/components/PlChartHistogram/normalizeBins.ts +3 -3
  518. package/src/components/PlChartHistogram/scales.spec.ts +5 -5
  519. package/src/components/PlChartHistogram/types.ts +6 -6
  520. package/src/components/PlChartStackedBar/Legends.vue +2 -2
  521. package/src/components/PlChartStackedBar/PlChartStackedBar.vue +16 -10
  522. package/src/components/PlChartStackedBar/PlChartStackedBarCompact.vue +4 -4
  523. package/src/components/PlChartStackedBar/StackedRow.vue +7 -9
  524. package/src/components/PlChartStackedBar/StackedRowCompact.vue +6 -8
  525. package/src/components/PlChartStackedBar/index.ts +3 -3
  526. package/src/components/PlChartStackedBar/types.ts +1 -1
  527. package/src/components/PlCheckbox/PlCheckbox.vue +5 -5
  528. package/src/components/PlCheckbox/PlCheckboxBase.vue +3 -5
  529. package/src/components/PlCheckbox/__tests__/PlCheckbox.spec.ts +15 -15
  530. package/src/components/PlCheckbox/index.ts +1 -1
  531. package/src/components/PlCheckbox/pl-checkbox-base.scss +13 -13
  532. package/src/components/PlCheckbox/pl-checkbox.scss +2 -2
  533. package/src/components/PlCheckboxGroup/PlCheckboxGroup.vue +24 -10
  534. package/src/components/PlCheckboxGroup/index.ts +1 -1
  535. package/src/components/PlCheckboxGroup/pl-checkbox-group.scss +1 -1
  536. package/src/components/PlChip/PlChip.vue +11 -5
  537. package/src/components/PlChip/index.ts +1 -1
  538. package/src/components/PlChip/pl-chip.scss +2 -2
  539. package/src/components/PlClipboard/PlClipboard.vue +7 -7
  540. package/src/components/PlClipboard/index.ts +1 -1
  541. package/src/components/PlConfirmDialog.vue +7 -6
  542. package/src/components/PlDialogModal/PlDialogModal.vue +52 -33
  543. package/src/components/PlDialogModal/index.ts +1 -1
  544. package/src/components/PlDialogModal/pl-dialog-modal.scss +2 -2
  545. package/src/components/PlDropdown/OptionList.vue +21 -10
  546. package/src/components/PlDropdown/PlDropdown.vue +65 -46
  547. package/src/components/PlDropdown/__tests__/PlDropdown.spec.ts +15 -15
  548. package/src/components/PlDropdown/index.ts +1 -1
  549. package/src/components/PlDropdown/pl-dropdown.scss +4 -2
  550. package/src/components/PlDropdown/types.ts +6 -2
  551. package/src/components/PlDropdown/useGroupBy.ts +7 -10
  552. package/src/components/PlDropdownLegacy/PlDropdownLegacy.vue +60 -43
  553. package/src/components/PlDropdownLegacy/__tests__/PlDropdownLegacy.spec.ts +16 -16
  554. package/src/components/PlDropdownLegacy/index.ts +1 -1
  555. package/src/components/PlDropdownLegacy/pl-dropdown-legacy.scss +6 -6
  556. package/src/components/PlDropdownLine/PlDropdownLine.vue +76 -54
  557. package/src/components/PlDropdownLine/ResizableInput.vue +15 -8
  558. package/src/components/PlDropdownLine/index.ts +1 -1
  559. package/src/components/PlDropdownLine/pl-dropdown-line.scss +132 -132
  560. package/src/components/PlDropdownLine/resizable-input.scss +38 -38
  561. package/src/components/PlDropdownMulti/PlDropdownMulti.vue +79 -45
  562. package/src/components/PlDropdownMulti/__tests__/PlDropdownMulti.spec.ts +15 -14
  563. package/src/components/PlDropdownMulti/index.ts +1 -1
  564. package/src/components/PlDropdownMulti/pl-dropdown-multi.scss +8 -6
  565. package/src/components/PlDropdownMultiRef/PlDropdownMultiRef.vue +5 -5
  566. package/src/components/PlDropdownMultiRef/__tests__/PlDropdownMultiRef.spec.ts +25 -24
  567. package/src/components/PlDropdownMultiRef/index.ts +1 -1
  568. package/src/components/PlDropdownRef/PlDropdownRef.vue +12 -12
  569. package/src/components/PlDropdownRef/__tests__/PlDropdownRef.spec.ts +23 -23
  570. package/src/components/PlDropdownRef/index.ts +1 -1
  571. package/src/components/PlEditableTitle/PlEditableTitle.vue +9 -10
  572. package/src/components/PlEditableTitle/index.ts +1 -1
  573. package/src/components/PlEditableTitle/pl-editable-title.module.scss +4 -4
  574. package/src/components/PlElementList/PlElementList.vue +60 -37
  575. package/src/components/PlElementList/PlElementListItem.vue +45 -29
  576. package/src/components/PlElementList/README.md +102 -119
  577. package/src/components/PlElementList/index.ts +1 -1
  578. package/src/components/PlElementList/utils.ts +3 -1
  579. package/src/components/PlErrorAlert/PlErrorAlert.vue +5 -5
  580. package/src/components/PlErrorAlert/index.ts +1 -1
  581. package/src/components/PlErrorBoundary/PlErrorBoundary.vue +8 -5
  582. package/src/components/PlErrorBoundary/index.ts +1 -1
  583. package/src/components/PlFileDialog/Local.vue +22 -16
  584. package/src/components/PlFileDialog/PlFileDialog.vue +27 -23
  585. package/src/components/PlFileDialog/Remote.vue +44 -34
  586. package/src/components/PlFileDialog/Shortcuts.vue +4 -4
  587. package/src/components/PlFileDialog/index.ts +1 -1
  588. package/src/components/PlFileDialog/pl-file-dialog.module.scss +15 -12
  589. package/src/components/PlFileDialog/remote.ts +9 -9
  590. package/src/components/PlFileDialog/utils.test.ts +20 -24
  591. package/src/components/PlFileDialog/utils.ts +8 -8
  592. package/src/components/PlFileInput/PlFileInput.vue +37 -26
  593. package/src/components/PlFileInput/index.ts +1 -1
  594. package/src/components/PlFileInput/pl-file-input.scss +3 -3
  595. package/src/components/PlFileInput/utils.ts +6 -6
  596. package/src/components/PlIcon16/PlIcon16.vue +7 -7
  597. package/src/components/PlIcon16/index.ts +1 -1
  598. package/src/components/PlIcon24/PlIcon24.vue +7 -7
  599. package/src/components/PlIcon24/index.ts +1 -1
  600. package/src/components/PlLoaderCircular/PlLoaderCircular.vue +24 -6
  601. package/src/components/PlLoaderCircular/index.ts +1 -1
  602. package/src/components/PlLoaderCircular/pl-loader-circular.scss +54 -50
  603. package/src/components/PlLoaderLogo.vue +8 -10
  604. package/src/components/PlLogView/PlLogView.vue +28 -22
  605. package/src/components/PlLogView/index.ts +1 -1
  606. package/src/components/PlLogView/pl-log-view.scss +10 -4
  607. package/src/components/PlLogView/useLogHandle.ts +32 -12
  608. package/src/components/PlMaskIcon16/index.ts +1 -1
  609. package/src/components/PlMaskIcon24/index.ts +1 -1
  610. package/src/components/PlNotificationAlert/PlNotificationAlert.vue +10 -5
  611. package/src/components/PlNotificationAlert/index.ts +1 -1
  612. package/src/components/PlNotificationAlert/pl-notification-alert.scss +43 -44
  613. package/src/components/PlNumberField/PlNumberField.vue +95 -68
  614. package/src/components/PlNumberField/__tests__/PlNumberField.spec.ts +71 -69
  615. package/src/components/PlNumberField/index.ts +1 -1
  616. package/src/components/PlNumberField/parseNumber.ts +20 -17
  617. package/src/components/PlProgressBar/PlProgressBar.vue +5 -5
  618. package/src/components/PlProgressBar/index.ts +1 -1
  619. package/src/components/PlProgressCell/PlProgressCell.vue +33 -14
  620. package/src/components/PlProgressCell/index.ts +2 -2
  621. package/src/components/PlProgressCell/pl-progress-cell.scss +70 -70
  622. package/src/components/PlProgressCell/types.ts +1 -1
  623. package/src/components/PlRadio/PlRadio.vue +54 -54
  624. package/src/components/PlRadio/PlRadioGroup.vue +16 -16
  625. package/src/components/PlRadio/__tests__/PlRadioGroup.spec.ts +50 -50
  626. package/src/components/PlRadio/index.ts +2 -2
  627. package/src/components/PlRadio/keys.ts +1 -1
  628. package/src/components/PlSearchField/PlSearchField.vue +21 -9
  629. package/src/components/PlSearchField/index.ts +1 -1
  630. package/src/components/PlSectionSeparator/PlSectionSeparator.vue +1 -1
  631. package/src/components/PlSectionSeparator/index.ts +1 -1
  632. package/src/components/PlSidebar/PlSidebarGroup.vue +2 -2
  633. package/src/components/PlSidebar/PlSidebarItem.vue +7 -7
  634. package/src/components/PlSidebar/index.ts +2 -2
  635. package/src/components/PlSlideModal/PlPureSlideModal.vue +18 -17
  636. package/src/components/PlSlideModal/PlSlideModal.vue +8 -12
  637. package/src/components/PlSlideModal/index.ts +2 -2
  638. package/src/components/PlSlideModal/pl-slide-modal.scss +2 -2
  639. package/src/components/PlSlideModal/props.ts +9 -9
  640. package/src/components/PlSpacer/PlSpacer.vue +1 -1
  641. package/src/components/PlSpacer/index.ts +1 -1
  642. package/src/components/PlSplash/PlSplash.vue +25 -17
  643. package/src/components/PlSplash/index.ts +1 -1
  644. package/src/components/PlSplash/pl-splash.module.scss +1 -1
  645. package/src/components/PlStatusTag/PlStatusTag.vue +13 -8
  646. package/src/components/PlStatusTag/index.ts +2 -2
  647. package/src/components/PlStatusTag/pl-status-tag.scss +18 -18
  648. package/src/components/PlStatusTag/types.ts +1 -1
  649. package/src/components/PlSvg/PlSvg.vue +24 -16
  650. package/src/components/PlSvg/index.ts +1 -1
  651. package/src/components/PlSvg/registry.ts +17 -21
  652. package/src/components/PlTabs/PlTabs.vue +10 -7
  653. package/src/components/PlTabs/Tab.vue +4 -4
  654. package/src/components/PlTabs/index.ts +2 -2
  655. package/src/components/PlTabs/pl-tabs.module.scss +3 -3
  656. package/src/components/PlTextArea/PlTextArea.vue +15 -15
  657. package/src/components/PlTextArea/__tests__/PlTextArea.spec.ts +12 -12
  658. package/src/components/PlTextArea/index.ts +1 -1
  659. package/src/components/PlTextArea/pl-textarea.scss +1 -1
  660. package/src/components/PlTextField/PlTextField.vue +48 -27
  661. package/src/components/PlTextField/__tests__/TextField.spec.ts +19 -19
  662. package/src/components/PlTextField/index.ts +1 -1
  663. package/src/components/PlToggleSwitch/PlToggleSwitch.vue +3 -3
  664. package/src/components/PlToggleSwitch/index.ts +1 -1
  665. package/src/components/PlToggleSwitch/pl-toggle-switch.scss +3 -2
  666. package/src/components/PlTooltip/Beak.vue +8 -1
  667. package/src/components/PlTooltip/PlTooltip.vue +33 -19
  668. package/src/components/PlTooltip/index.ts +1 -1
  669. package/src/components/PlTooltip/pl-tooltip.scss +4 -2
  670. package/src/components/PlTooltip/useTooltipPosition.ts +12 -12
  671. package/src/components/Scrollable.vue +17 -8
  672. package/src/components/Slider.vue +47 -23
  673. package/src/components/SliderRange.vue +72 -32
  674. package/src/components/SliderRangeTriple.vue +49 -31
  675. package/src/components/TabItem.vue +5 -5
  676. package/src/components/ThemeSwitcher.vue +1 -1
  677. package/src/components/TransitionSlidePanel.vue +2 -2
  678. package/src/components/VScroll.vue +10 -10
  679. package/src/components/contextMenu/Menu.vue +4 -4
  680. package/src/components/contextMenu/index.ts +6 -6
  681. package/src/composition/computedCached.ts +11 -7
  682. package/src/composition/filters/index.ts +2 -2
  683. package/src/composition/filters/metadata.ts +227 -220
  684. package/src/composition/filters/types.ts +44 -21
  685. package/src/composition/useClickOutside.ts +4 -4
  686. package/src/composition/useComponentProp.ts +5 -3
  687. package/src/composition/useConfirm.ts +5 -5
  688. package/src/composition/useDraggable.ts +16 -13
  689. package/src/composition/useEventListener.ts +13 -5
  690. package/src/composition/useFilteredList.ts +9 -6
  691. package/src/composition/useFormState.ts +3 -3
  692. package/src/composition/useHover.ts +10 -7
  693. package/src/composition/useInterval.ts +1 -1
  694. package/src/composition/useLocalStorage.ts +4 -4
  695. package/src/composition/useMouse.ts +3 -3
  696. package/src/composition/useMouseCapture.ts +10 -7
  697. package/src/composition/useNotificationPosition.ts +4 -4
  698. package/src/composition/usePollingQuery.ts +22 -20
  699. package/src/composition/usePosition.ts +13 -9
  700. package/src/composition/useQuery.ts +2 -2
  701. package/src/composition/useResizeObserver.ts +9 -6
  702. package/src/composition/useRipple.ts +6 -6
  703. package/src/composition/useScroll.ts +18 -12
  704. package/src/composition/useSliderBreakpoints.ts +6 -4
  705. package/src/composition/useSortable.ts +17 -17
  706. package/src/composition/useSortable2.ts +27 -24
  707. package/src/composition/useTheme.ts +11 -9
  708. package/src/composition/useTransformedModel.ts +6 -3
  709. package/src/composition/useWatchFetch.ts +3 -3
  710. package/src/composition/utils.ts +1 -1
  711. package/src/composition/watchCached.ts +2 -8
  712. package/src/demo-site-data/all-css-variables.ts +208 -169
  713. package/src/drafts/FileBaseInput.vue +35 -18
  714. package/src/generated/icons-16.ts +68 -68
  715. package/src/generated/icons-24.ts +211 -211
  716. package/src/global/resizeObserver.ts +1 -1
  717. package/src/helpers/dom.ts +12 -8
  718. package/src/helpers/downloadContent.ts +23 -21
  719. package/src/helpers/error.ts +6 -3
  720. package/src/helpers/functions.ts +5 -1
  721. package/src/helpers/objects.ts +1 -1
  722. package/src/helpers/utils.ts +23 -9
  723. package/src/index.ts +110 -110
  724. package/src/layout/PlBlockPage/PlBlockPage.vue +14 -19
  725. package/src/layout/PlBlockPage/PlBlockPageTitleTeleportTarget.ts +1 -1
  726. package/src/layout/PlBlockPage/index.ts +2 -2
  727. package/src/layout/PlBlockPage/pl-block-page.scss +1 -1
  728. package/src/layout/PlBlockPage/usePlBlockPageTitleTeleportTarget.ts +2 -2
  729. package/src/layout/PlContainer/PlContainer.vue +10 -5
  730. package/src/layout/PlContainer/index.ts +1 -1
  731. package/src/layout/PlContainer/pl-container.scss +1 -1
  732. package/src/layout/PlGrid/PlGrid.vue +3 -3
  733. package/src/layout/PlGrid/index.ts +1 -1
  734. package/src/layout/PlGrid/pl-grid.scss +1 -1
  735. package/src/layout/PlPlaceholder/PlPlaceholder.vue +19 -18
  736. package/src/layout/PlPlaceholder/index.ts +11 -14
  737. package/src/layout/PlPlaceholder/paint-worklet.js +6 -6
  738. package/src/layout/PlRow/PlRow.vue +2 -2
  739. package/src/layout/PlRow/index.ts +1 -1
  740. package/src/layout/PlRow/pl-row.scss +1 -1
  741. package/src/layout/PlSpacer/PlSpacer.vue +1 -1
  742. package/src/layout/PlSpacer/index.ts +1 -1
  743. package/src/types.ts +23 -17
  744. package/src/utils/DoubleContour.vue +18 -7
  745. package/src/utils/DropdownOverlay/DropdownOverlay.vue +13 -13
  746. package/src/utils/DropdownOverlay/index.ts +1 -1
  747. package/src/utils/PlCloseModalBtn.vue +1 -1
  748. package/src/utils/TextLabel.vue +1 -1
  749. package/src/utils/WebStopWatchElement.ts +5 -5
  750. package/src/utils/useLabelNotch.ts +12 -9
  751. package/src/utils/useValidation.ts +2 -2
  752. package/tsconfig.json +2 -7
  753. package/vitest.config.mts +9 -9
  754. package/.turbo/turbo-lint.log +0 -5
  755. package/eslint.config.mjs +0 -4
@@ -1,5 +1,5 @@
1
- import o from "./ExpandTransition.vue2.js";
2
- /* empty css */
1
+ import o from "./ExpandTransition.vue.js";
2
+ /* empty css */
3
3
  export {
4
4
  o as default
5
5
  };
@@ -1 +1 @@
1
- {"version":3,"file":"PlAccordion.vue.js","sources":["../../../src/components/PlAccordion/PlAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, toRef } from 'vue';\n\nconst model = defineModel<string>();\n\nconst props = defineProps<{\n /**\n * Allow multiple accordion sections to be opened at the same time\n */\n multiple?: boolean;\n}>();\n\nprovide('pl-accordion-model', model);\nprovide('pl-accordion-props', toRef(props));\n</script>\n\n<template>\n <slot name=\"header\" />\n <slot />\n</template>\n"],"names":["model","_useModel","__props","props","provide","toRef","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;AAGA,UAAMA,IAAQC,EAAmBC,GAAA,YAAC,GAE5BC,IAAQD;AAOd,WAAAE,EAAQ,sBAAsBJ,CAAK,GACnCI,EAAQ,sBAAsBC,EAAMF,CAAK,CAAC;MAIxCG,EAAsBC,EAAA,QAAA,QAAA;AAAA,MACtBD,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}
1
+ {"version":3,"file":"PlAccordion.vue.js","sources":["../../../src/components/PlAccordion/PlAccordion.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, toRef } from \"vue\";\n\nconst model = defineModel<string>();\n\nconst props = defineProps<{\n /**\n * Allow multiple accordion sections to be opened at the same time\n */\n multiple?: boolean;\n}>();\n\nprovide(\"pl-accordion-model\", model);\nprovide(\"pl-accordion-props\", toRef(props));\n</script>\n\n<template>\n <slot name=\"header\" />\n <slot />\n</template>\n"],"names":["model","_useModel","__props","props","provide","toRef","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;AAGA,UAAMA,IAAQC,EAAmBC,GAAA,YAAC,GAE5BC,IAAQD;AAOd,WAAAE,EAAQ,sBAAsBJ,CAAK,GACnCI,EAAQ,sBAAsBC,EAAMF,CAAK,CAAC;MAIxCG,EAAsBC,EAAA,QAAA,QAAA;AAAA,MACtBD,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}
@@ -2,8 +2,8 @@ import { defineComponent as V, mergeModels as k, inject as m, toRef as d, useMod
2
2
  import { uniqueId as B } from "@milaboratories/helpers";
3
3
  import N from "../PlIcon16/PlIcon16.vue.js";
4
4
  import P from "../PlSectionSeparator/PlSectionSeparator.vue.js";
5
- import b from "./ExpandTransition.vue2.js";
6
- /* empty css */
5
+ import b from "./ExpandTransition.vue.js";
6
+ /* empty css */
7
7
  const w = { class: "pl-accordion-section" }, R = /* @__PURE__ */ V({
8
8
  __name: "PlAccordionSection",
9
9
  props: /* @__PURE__ */ k({
@@ -1 +1 @@
1
- {"version":3,"file":"PlAccordionSection.vue2.js","sources":["../../../src/components/PlAccordion/PlAccordionSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { uniqueId } from '@milaboratories/helpers';\nimport { PlMaskIcon16 } from '../PlMaskIcon16';\nimport { PlSectionSeparator } from '../PlSectionSeparator';\nimport ExpandTransition from './ExpandTransition.vue';\nimport type { Ref } from 'vue';\nimport { computed, inject, toRef } from 'vue';\n\nconst $m = inject<Ref<string>>('pl-accordion-model', () => toRef(''), true);\n\nconst $p = inject<\n Ref<{\n multiple?: boolean;\n }>\n>('pl-accordion-props', () => toRef({ multiple: false }), true);\n\nconst model = defineModel<boolean>();\n\nconst id = uniqueId();\n\nconst isMulti = computed(() => !$p || $p.value.multiple);\n\nconst open = computed({\n get() {\n if (isMulti.value) {\n return model.value;\n }\n\n return $m ? $m.value === id : model.value;\n },\n set(on) {\n if (isMulti.value) {\n model.value = on;\n } else if ($m) {\n $m.value = $m.value === id ? '' : id;\n }\n },\n});\n\ndefineProps<{\n /**\n * The label text (optional)\n */\n label?: string;\n /**\n * If `true`, remove top padding\n */\n compact?: boolean;\n}>();\n</script>\n\n<template>\n <div class=\"pl-accordion-section\">\n <PlSectionSeparator :class=\"$style.separator\" :compact=\"compact\" @click=\"open = !open\">\n <PlMaskIcon16 name=\"chevron-right\" :class=\"[{ [$style.down]: open }, $style.chevron]\" />\n {{ label }}\n </PlSectionSeparator>\n <ExpandTransition>\n <div v-if=\"open\" :class=\"$style.content\">\n <slot />\n </div>\n </ExpandTransition>\n </div>\n</template>\n\n<style module>\n.content {\n display: flex;\n flex-direction: column;\n gap: var(--gap-v);\n will-change: height, opacity;\n /* transform: translateZ(0);\n backface-visibility: hidden; */\n}\n\n.content > *:first-child {\n margin-top: 24px;\n}\n\n.content > *:last-child {\n margin-bottom: 4px;\n}\n\n.separator {\n cursor: pointer;\n &:hover {\n --pl-separator-txt-color: var(--txt-01);\n --mask-icon-bg-color: var(--ic-01);\n }\n}\n\n.chevron {\n transition-duration: 50ms;\n}\n\n.down {\n transform: rotate(90deg);\n}\n</style>\n"],"names":["$m","inject","toRef","$p","model","_useModel","__props","id","uniqueId","isMulti","computed","open","on","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","PlSectionSeparator","_normalizeClass","$style","_cache","$event","PlMaskIcon16","_createTextVNode","ExpandTransition","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAKC,EAAoB,sBAAsB,MAAMC,EAAM,EAAE,GAAG,EAAI,GAEpEC,IAAKF,EAIT,sBAAsB,MAAMC,EAAM,EAAE,UAAU,IAAO,GAAG,EAAI,GAExDE,IAAQC,EAAoBC,GAAA,YAAC,GAE7BC,IAAKC,EAAA,GAELC,IAAUC,EAAS,MAAM,CAACP,KAAMA,EAAG,MAAM,QAAQ,GAEjDQ,IAAOD,EAAS;AAAA,MACpB,MAAM;AACJ,eAAID,EAAQ,QACHL,EAAM,QAGRJ,IAAKA,EAAG,UAAUO,IAAKH,EAAM;AAAA,MACtC;AAAA,MACA,IAAIQ,GAAI;AACN,QAAIH,EAAQ,QACVL,EAAM,QAAQQ,IACLZ,MACTA,EAAG,QAAQA,EAAG,UAAUO,IAAK,KAAKA;AAAA,MAEtC;AAAA,IAAA,CACD;sBAeCM,EAAA,GAAAC,EAUM,OAVNC,GAUM;AAAA,MATJC,EAGqBC,EAAAC,CAAA,GAAA;AAAA,QAHA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,QAAG,SAASd,EAAA;AAAA,QAAU,SAAKe,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEX,EAAA,QAAI,CAAIA,EAAA;AAAA,MAAA;mBAC/E,MAAwF;AAAA,UAAxFK,EAAwFC,EAAAM,CAAA,GAAA;AAAA,YAA1E,MAAK;AAAA,YAAiB,OAAKJ,EAAA,CAAA,EAAA,CAAMC,SAAO,IAAI,GAAGT,EAAA,MAAA,GAAQS,EAAAA,OAAO,OAAO,CAAA;AAAA,UAAA;UAAKI,EAAA,QACrFlB,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;MAEVU,EAImBS,GAAA,MAAA;AAAA,mBAHjB,MAEM;AAAA,UAFKd,EAAA,cAAXG,EAEM,OAAA;AAAA;YAFY,OAAKK,EAAEC,EAAAA,OAAO,OAAO;AAAA,UAAA;YACrCM,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;;;;;;;"}
1
+ {"version":3,"file":"PlAccordionSection.vue2.js","sources":["../../../src/components/PlAccordion/PlAccordionSection.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { uniqueId } from \"@milaboratories/helpers\";\nimport { PlMaskIcon16 } from \"../PlMaskIcon16\";\nimport { PlSectionSeparator } from \"../PlSectionSeparator\";\nimport ExpandTransition from \"./ExpandTransition.vue\";\nimport type { Ref } from \"vue\";\nimport { computed, inject, toRef } from \"vue\";\n\nconst $m = inject<Ref<string>>(\"pl-accordion-model\", () => toRef(\"\"), true);\n\nconst $p = inject<\n Ref<{\n multiple?: boolean;\n }>\n>(\"pl-accordion-props\", () => toRef({ multiple: false }), true);\n\nconst model = defineModel<boolean>();\n\nconst id = uniqueId();\n\nconst isMulti = computed(() => !$p || $p.value.multiple);\n\nconst open = computed({\n get() {\n if (isMulti.value) {\n return model.value;\n }\n\n return $m ? $m.value === id : model.value;\n },\n set(on) {\n if (isMulti.value) {\n model.value = on;\n } else if ($m) {\n $m.value = $m.value === id ? \"\" : id;\n }\n },\n});\n\ndefineProps<{\n /**\n * The label text (optional)\n */\n label?: string;\n /**\n * If `true`, remove top padding\n */\n compact?: boolean;\n}>();\n</script>\n\n<template>\n <div class=\"pl-accordion-section\">\n <PlSectionSeparator :class=\"$style.separator\" :compact=\"compact\" @click=\"open = !open\">\n <PlMaskIcon16 name=\"chevron-right\" :class=\"[{ [$style.down]: open }, $style.chevron]\" />\n {{ label }}\n </PlSectionSeparator>\n <ExpandTransition>\n <div v-if=\"open\" :class=\"$style.content\">\n <slot />\n </div>\n </ExpandTransition>\n </div>\n</template>\n\n<style module>\n.content {\n display: flex;\n flex-direction: column;\n gap: var(--gap-v);\n will-change: height, opacity;\n /* transform: translateZ(0);\n backface-visibility: hidden; */\n}\n\n.content > *:first-child {\n margin-top: 24px;\n}\n\n.content > *:last-child {\n margin-bottom: 4px;\n}\n\n.separator {\n cursor: pointer;\n &:hover {\n --pl-separator-txt-color: var(--txt-01);\n --mask-icon-bg-color: var(--ic-01);\n }\n}\n\n.chevron {\n transition-duration: 50ms;\n}\n\n.down {\n transform: rotate(90deg);\n}\n</style>\n"],"names":["$m","inject","toRef","$p","model","_useModel","__props","id","uniqueId","isMulti","computed","open","on","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","PlSectionSeparator","_normalizeClass","$style","_cache","$event","PlMaskIcon16","_createTextVNode","ExpandTransition","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;;;;AAQA,UAAMA,IAAKC,EAAoB,sBAAsB,MAAMC,EAAM,EAAE,GAAG,EAAI,GAEpEC,IAAKF,EAIT,sBAAsB,MAAMC,EAAM,EAAE,UAAU,IAAO,GAAG,EAAI,GAExDE,IAAQC,EAAoBC,GAAA,YAAC,GAE7BC,IAAKC,EAAA,GAELC,IAAUC,EAAS,MAAM,CAACP,KAAMA,EAAG,MAAM,QAAQ,GAEjDQ,IAAOD,EAAS;AAAA,MACpB,MAAM;AACJ,eAAID,EAAQ,QACHL,EAAM,QAGRJ,IAAKA,EAAG,UAAUO,IAAKH,EAAM;AAAA,MACtC;AAAA,MACA,IAAIQ,GAAI;AACN,QAAIH,EAAQ,QACVL,EAAM,QAAQQ,IACLZ,MACTA,EAAG,QAAQA,EAAG,UAAUO,IAAK,KAAKA;AAAA,MAEtC;AAAA,IAAA,CACD;sBAeCM,EAAA,GAAAC,EAUM,OAVNC,GAUM;AAAA,MATJC,EAGqBC,EAAAC,CAAA,GAAA;AAAA,QAHA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,QAAG,SAASd,EAAA;AAAA,QAAU,SAAKe,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEX,EAAA,QAAI,CAAIA,EAAA;AAAA,MAAA;mBAC/E,MAAwF;AAAA,UAAxFK,EAAwFC,EAAAM,CAAA,GAAA;AAAA,YAA1E,MAAK;AAAA,YAAiB,OAAKJ,EAAA,CAAA,EAAA,CAAMC,SAAO,IAAI,GAAGT,EAAA,MAAA,GAAQS,EAAAA,OAAO,OAAO,CAAA;AAAA,UAAA;UAAKI,EAAA,QACrFlB,EAAA,KAAK,GAAA,CAAA;AAAA,QAAA;;;MAEVU,EAImBS,GAAA,MAAA;AAAA,mBAHjB,MAEM;AAAA,UAFKd,EAAA,cAAXG,EAEM,OAAA;AAAA;YAFY,OAAKK,EAAEC,EAAAA,OAAO,OAAO;AAAA,UAAA;YACrCM,EAAQC,EAAA,QAAA,SAAA;AAAA,UAAA;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAlert.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAlert/PlAlert.vue"],"names":[],"mappings":"AA2FA,OAAO,iBAAiB,CAAC;;IAerB;;;;OAIG;iBACU,OAAO;IACpB;;;OAGG;WACI,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;IAC5C;;OAEG;YACK,MAAM;IACd;;OAEG;WACI,OAAO;IACd;;OAEG;gBACS,OAAO;IACnB;;OAEG;gBACS,OAAO;IACnB;;OAEG;oBACa,OAAO;IAEvB;;OAEG;gBACS,MAAM;;;;IAnClB;;;;OAIG;iBACU,OAAO;IACpB;;;OAGG;WACI,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;IAC5C;;OAEG;YACK,MAAM;IACd;;OAEG;WACI,OAAO;IACd;;OAEG;gBACS,OAAO;IACnB;;OAEG;gBACS,OAAO;IACnB;;OAEG;oBACa,OAAO;IAEvB;;OAEG;gBACS,MAAM;;;;WArBV,MAAM;gBATD,OAAO;UAKb,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;UAQrC,OAAO;eAiBF,MAAM;eAbN,OAAO;eAIP,OAAO;mBAIH,OAAO;;qBAyFE,GAAG;;AAnIhC,wBA4KK;AAcL,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlAlert.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAlert/PlAlert.vue"],"names":[],"mappings":"AAsGA,OAAO,iBAAiB,CAAC;;IAerB;;;;OAIG;iBACU,OAAO;IACpB;;;OAGG;WACI,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;IAC5C;;OAEG;YACK,MAAM;IACd;;OAEG;WACI,OAAO;IACd;;OAEG;gBACS,OAAO;IACnB;;OAEG;gBACS,OAAO;IACnB;;OAEG;oBACa,OAAO;IAEvB;;OAEG;gBACS,MAAM;;;;IAnClB;;;;OAIG;iBACU,OAAO;IACpB;;;OAGG;WACI,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;IAC5C;;OAEG;YACK,MAAM;IACd;;OAEG;WACI,OAAO;IACd;;OAEG;gBACS,OAAO;IACnB;;OAEG;gBACS,OAAO;IACnB;;OAEG;oBACa,OAAO;IAEvB;;OAEG;gBACS,MAAM;;;;WArBV,MAAM;gBATD,OAAO;UAKb,SAAS,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;UAQrC,OAAO;eAiBF,MAAM;eAbN,OAAO;eAIP,OAAO;mBAIH,OAAO;;qBAyFE,GAAG;;AAnIhC,wBA4KK;AAcL,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAlert.vue.js","sources":["../../../src/components/PlAlert/PlAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: 'PlAlert',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-alert.scss';\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated, typically when the close button is clicked.\n *\n * @param value - The new value of the model, generally `false` when the alert is closed.\n */\n (e: 'update:modelValue', value: boolean): void;\n}>();\n\nwithDefaults(\n defineProps<{\n /**\n * Controls the visibility of the alert component. If `true`, the alert is visible.\n *\n * @default true\n */\n modelValue?: boolean;\n /**\n * The type of alert, which determines the alert's style and icon.\n * Can be one of `'success' | 'info' | 'warn' | 'error'`.\n */\n type?: 'success' | 'info' | 'warn' | 'error';\n /**\n * An optional label that appears at the top of the alert.\n */\n label?: string;\n /**\n * If `true`, an icon corresponding to the alert type is displayed.\n */\n icon?: boolean;\n /**\n * If `true`, a close button is displayed in the alert, allowing the user to close it.\n */\n closeable?: boolean;\n /**\n * If `true`, the alert text is displayed in a monospace font.\n */\n monospace?: boolean;\n /**\n * If `true`, the alert content will preserve whitespace and line breaks.\n */\n whiteSpacePre?: boolean;\n\n /**\n * Max height (css value like '120px or 30%')\n */\n maxHeight?: string;\n }>(),\n {\n modelValue: true,\n type: undefined,\n label: undefined,\n icon: undefined,\n closeable: undefined,\n monospace: undefined,\n whiteSpacePre: undefined,\n maxHeight: undefined,\n },\n);\n\nconst iconMap = {\n success: 'success',\n warn: 'warning',\n info: 'edit',\n error: 'error',\n};\n</script>\n\n<template>\n <div v-if=\"modelValue\" class=\"pl-alert\" :style=\"{ maxHeight }\" :class=\"[{ monospace, whiteSpacePre }, type ? `pl-alert__${type}` : '']\">\n <div v-if=\"icon && type\" class=\"pl-alert__icon\">\n <div :class=\"`icon-24 icon-${iconMap[type]}`\" />\n </div>\n <div class=\"pl-alert__main\">\n <label v-if=\"label\">{{ label }}</label>\n <div class=\"pl-alert__main__text\"><slot /></div>\n </div>\n <div v-if=\"closeable\" class=\"pl-alert__close-btn\" aria-label=\"Close alert\" role=\"button\" @click=\"$emit('update:modelValue', false)\" />\n </div>\n</template>\n"],"names":["__default__","iconMap","__props","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_4","_renderSlot","_ctx","$emit"],"mappings":";;;;;2FACAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;;AAkEA,UAAMC,IAAU;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;qBAKIC,EAAA,mBAAXC,EASM,OAAA;AAAA;MATiB,OAAKC,EAAA,CAAC,YAAU,CAAA,EAAA,WAAmCF,EAAA,0BAAWA,EAAA,cAAA,GAAiBA,EAAA,OAAI,aAAgBA,EAAA,IAAI,KAAA,EAAA,CAAA,CAAA;AAAA,MAArF,sBAASA,EAAA,WAAS;AAAA,IAAA;MAC9CA,EAAA,QAAQA,EAAA,QAAnBG,KAAAF,EAEM,OAFNG,GAEM;AAAA,QADJC,EAAgD,OAAA;AAAA,UAA1C,OAAKH,EAAA,gBAAkBH,EAAQC,EAAA,IAAI,CAAA,EAAA;AAAA,QAAA;;MAE3CK,EAGM,OAHNC,GAGM;AAAA,QAFSN,EAAA,SAAbG,EAAA,GAAAF,EAAuC,cAAhBD,EAAA,KAAK,GAAA,CAAA;QAC5BK,EAAgD,OAAhDE,GAAgD;AAAA,UAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAEjCT,EAAA,kBAAXC,EAAsI,OAAA;AAAA;QAAhH,OAAM;AAAA,QAAsB,cAAW;AAAA,QAAc,MAAK;AAAA,QAAU,gCAAOS,EAAAA,MAAK,qBAAA,EAAA;AAAA,MAAA;;;;"}
1
+ {"version":3,"file":"PlAlert.vue.js","sources":["../../../src/components/PlAlert/PlAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: \"PlAlert\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport \"./pl-alert.scss\";\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated, typically when the close button is clicked.\n *\n * @param value - The new value of the model, generally `false` when the alert is closed.\n */\n (e: \"update:modelValue\", value: boolean): void;\n}>();\n\nwithDefaults(\n defineProps<{\n /**\n * Controls the visibility of the alert component. If `true`, the alert is visible.\n *\n * @default true\n */\n modelValue?: boolean;\n /**\n * The type of alert, which determines the alert's style and icon.\n * Can be one of `'success' | 'info' | 'warn' | 'error'`.\n */\n type?: \"success\" | \"info\" | \"warn\" | \"error\";\n /**\n * An optional label that appears at the top of the alert.\n */\n label?: string;\n /**\n * If `true`, an icon corresponding to the alert type is displayed.\n */\n icon?: boolean;\n /**\n * If `true`, a close button is displayed in the alert, allowing the user to close it.\n */\n closeable?: boolean;\n /**\n * If `true`, the alert text is displayed in a monospace font.\n */\n monospace?: boolean;\n /**\n * If `true`, the alert content will preserve whitespace and line breaks.\n */\n whiteSpacePre?: boolean;\n\n /**\n * Max height (css value like '120px or 30%')\n */\n maxHeight?: string;\n }>(),\n {\n modelValue: true,\n type: undefined,\n label: undefined,\n icon: undefined,\n closeable: undefined,\n monospace: undefined,\n whiteSpacePre: undefined,\n maxHeight: undefined,\n },\n);\n\nconst iconMap = {\n success: \"success\",\n warn: \"warning\",\n info: \"edit\",\n error: \"error\",\n};\n</script>\n\n<template>\n <div\n v-if=\"modelValue\"\n class=\"pl-alert\"\n :style=\"{ maxHeight }\"\n :class=\"[{ monospace, whiteSpacePre }, type ? `pl-alert__${type}` : '']\"\n >\n <div v-if=\"icon && type\" class=\"pl-alert__icon\">\n <div :class=\"`icon-24 icon-${iconMap[type]}`\" />\n </div>\n <div class=\"pl-alert__main\">\n <label v-if=\"label\">{{ label }}</label>\n <div class=\"pl-alert__main__text\"><slot /></div>\n </div>\n <div\n v-if=\"closeable\"\n class=\"pl-alert__close-btn\"\n aria-label=\"Close alert\"\n role=\"button\"\n @click=\"$emit('update:modelValue', false)\"\n />\n </div>\n</template>\n"],"names":["__default__","iconMap","__props","_createElementBlock","_normalizeClass","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_4","_renderSlot","_ctx","$emit"],"mappings":";;;;;2FACAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;;AAkEA,UAAMC,IAAU;AAAA,MACd,SAAS;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IAAA;qBAMCC,EAAA,mBADRC,EAoBM,OAAA;AAAA;MAlBJ,OAAKC,EAAA,CAAC,YAAU,CAAA,EAAA,WAELF,EAAA,0BAAWA,EAAA,cAAA,GAAiBA,EAAA,OAAI,aAAgBA,EAAA,IAAI,KAAA,EAAA,CAAA,CAAA;AAAA,MAD9D,sBAASA,EAAA,WAAS;AAAA,IAAA;MAGRA,EAAA,QAAQA,EAAA,QAAnBG,KAAAF,EAEM,OAFNG,GAEM;AAAA,QADJC,EAAgD,OAAA;AAAA,UAA1C,OAAKH,EAAA,gBAAkBH,EAAQC,EAAA,IAAI,CAAA,EAAA;AAAA,QAAA;;MAE3CK,EAGM,OAHNC,GAGM;AAAA,QAFSN,EAAA,SAAbG,EAAA,GAAAF,EAAuC,cAAhBD,EAAA,KAAK,GAAA,CAAA;QAC5BK,EAAgD,OAAhDE,GAAgD;AAAA,UAAdC,EAAQC,EAAA,QAAA,SAAA;AAAA,QAAA;;MAGpCT,EAAA,kBADRC,EAME,OAAA;AAAA;QAJA,OAAM;AAAA,QACN,cAAW;AAAA,QACX,MAAK;AAAA,QACJ,gCAAOS,EAAAA,MAAK,qBAAA,EAAA;AAAA,MAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlAutocomplete.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocomplete/PlAutocomplete.vue"],"names":[],"mappings":"AAuZA,OAAO,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAgBpE;;GAEG;yBACc,CAAC,SAAS,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,2CAC/C,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAClD,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,iBAC5F,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;WA8nB1D,mBAAmB,CAAC;;;oBAjThB,CAAC;;QArUT;;WAEG;uBACY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF;;WAEG;gBACK,MAAM;QACd;;WAEG;iBACM,MAAM;QACf;;WAEG;+BACoB,MAAM;QAC7B;;WAEG;gBACK,OAAO;QACf;;WAEG;sBACW,MAAM;QACpB;;WAEG;oBACS,OAAO;QACnB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;oBACS,MAAM;QAClB;;WAEG;yBACc,MAAM;QACvB;;WAEG;qBACU,OAAO,GAAG,QAAQ;QAC/B;;WAEG;sBACW,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM;QAClC;;aAEK;wBACW,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ;oBA+jBhC,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;;;;;;;;;YAKiC,OAAO,CAAC,OAAO,WAAW,CAAC;;AAxoBvE,wBAwoB4E;AAG5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"PlAutocomplete.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocomplete/PlAutocomplete.vue"],"names":[],"mappings":"AAmdA,OAAO,wBAAwB,CAAC;AAMhC,OAAO,KAAK,EAAE,UAAU,EAAwB,MAAM,aAAa,CAAC;AAgBpE;;GAEG;yBACc,CAAC,SAAS,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,2CAC/C,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAClD,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,iBAC5F,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;WAoqB1D,mBAAmB,CAAC;;;oBAjThB,CAAC;;QA3WT;;WAEG;uBACY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF;;WAEG;gBACK,MAAM;QACd;;WAEG;iBACM,MAAM;QACf;;WAEG;+BACoB,MAAM;QAC7B;;WAEG;gBACK,OAAO;QACf;;WAEG;sBACW,MAAM;QACpB;;WAEG;oBACS,OAAO;QACnB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;oBACS,MAAM;QAClB;;WAEG;yBACc,MAAM;QACvB;;WAEG;qBACU,OAAO,GAAG,QAAQ;QAC/B;;WAEG;sBACW,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM;QAClC;;aAEK;wBAED,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,GACd,QAAQ;oBA4lB8E,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;;;;;;;;;YAKiC,OAAO,CAAC,OAAO,WAAW,CAAC;;AA9qBvE,wBA8qB4E;AAG5E,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -93,9 +93,12 @@ const De = ["tabindex"], Me = { class: "pl-autocomplete__container" }, Re = { cl
93
93
  }, Z = () => {
94
94
  t.open = !t.open;
95
95
  };
96
- g(() => t.open, (e) => {
97
- s.value = e ? "" : null;
98
- });
96
+ g(
97
+ () => t.open,
98
+ (e) => {
99
+ s.value = e ? "" : null;
100
+ }
101
+ );
99
102
  const ee = () => {
100
103
  t.open = !0;
101
104
  }, oe = (e) => {
@@ -131,22 +134,40 @@ const De = ["tabindex"], Me = { class: "pl-autocomplete__container" }, Re = { cl
131
134
  var e;
132
135
  s.value, t.activeIndex >= 0 && t.open && ((e = B.value) == null || e.scrollIntoActive());
133
136
  });
134
- const le = Ve(s, 300, { maxWait: 1e3 }), C = H(() => le.value, async (e) => {
135
- if (e !== null)
136
- return f.optionsSearch(e, "label");
137
- }), P = H(() => r.value, async (e) => {
138
- var o, l;
139
- return e != null && !I((o = y.value) == null ? void 0 : o.value, e) ? (l = await f.optionsSearch(String(e), "value")) == null ? void 0 : l[0] : y.value;
140
- });
141
- return g(() => C.value, (e) => {
142
- e && (E.value = e, s.value !== null && (V.value = !1));
143
- }), g(() => P.value, (e) => {
144
- e && (y.value = T([e])[0]);
145
- }), g(() => C.error, (e) => {
146
- e && (V.value = !!e);
147
- }), g(() => C.loading || P.loading, (e) => {
148
- b.value = e;
149
- }), (e, o) => (n(), u("div", {
137
+ const le = Ve(s, 300, { maxWait: 1e3 }), C = H(
138
+ () => le.value,
139
+ async (e) => {
140
+ if (e !== null)
141
+ return f.optionsSearch(e, "label");
142
+ }
143
+ ), P = H(
144
+ () => r.value,
145
+ async (e) => {
146
+ var o, l;
147
+ return e != null && !I((o = y.value) == null ? void 0 : o.value, e) ? (l = await f.optionsSearch(String(e), "value")) == null ? void 0 : l[0] : y.value;
148
+ }
149
+ );
150
+ return g(
151
+ () => C.value,
152
+ (e) => {
153
+ e && (E.value = e, s.value !== null && (V.value = !1));
154
+ }
155
+ ), g(
156
+ () => P.value,
157
+ (e) => {
158
+ e && (y.value = T([e])[0]);
159
+ }
160
+ ), g(
161
+ () => C.error,
162
+ (e) => {
163
+ e && (V.value = !!e);
164
+ }
165
+ ), g(
166
+ () => C.loading || P.loading,
167
+ (e) => {
168
+ b.value = e;
169
+ }
170
+ ), (e, o) => (n(), u("div", {
150
171
  class: "pl-autocomplete__envelope",
151
172
  onClick: S(Y, ["stop"])
152
173
  }, [
@@ -1 +1 @@
1
- {"version":3,"file":"PlAutocomplete.vue.js","sources":["../../../src/components/PlAutocomplete/PlAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a big list of options using string search request\n */\nexport default {\n name: 'PlAutocomplete',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M extends null | undefined | string | number = null | undefined | string\">\nimport './pl-autocomplete.scss';\nimport { computed, reactive, ref, unref, useTemplateRef, watch, watchPostEffect } from 'vue';\nimport { tap } from '../../helpers/functions';\nimport { PlTooltip } from '../PlTooltip';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport type { ListOption, ListOptionNormalized } from '../../types';\nimport { deepEqual } from '../../helpers/objects';\nimport DropdownListItem from '../DropdownListItem.vue';\nimport LongText from '../LongText.vue';\nimport { normalizeListOptions } from '../../helpers/utils';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { DropdownOverlay } from '../../utils/DropdownOverlay';\nimport { refDebounced } from '@vueuse/core';\nimport { useWatchFetch } from '../../composition/useWatchFetch.ts';\nimport { getErrorMessage } from '../../helpers/error.ts';\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport { PlSvg } from '../PlSvg';\nimport SvgRequired from '../../assets/images/required.svg?raw';\n\n/**\n * The current selected value.\n */\nconst model = defineModel<M>({ required: true });\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Lambda for requesting of available options for the dropdown by search string.\n */\n optionsSearch: (string: string, type: 'value' | 'label') => Promise<ListOption<M>[]>;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Custom icon (16px) class for the dropdown arrow (optional)\n */\n arrowIcon?: string;\n /**\n * Custom icon (24px) class for the dropdown arrow (optional)\n */\n arrowIconLarge?: string;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n /**\n * Formatter for the selected value if its label is absent\n */\n formatValue?: (value: M) => string;\n /**\n * Makes some of corners not rounded\n * */\n groupPosition?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'middle';\n }>(),\n {\n modelSearch: undefined,\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n arrowIconLarge: undefined,\n optionSize: 'small',\n formatValue: (v: M) => String(v),\n groupPosition: undefined,\n },\n);\n\nconst slots = defineSlots<{\n [key: string]: unknown;\n}>();\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst overlayRef = useTemplateRef('overlay');\n\nconst search = ref<string | null>(null);\nconst data = reactive({\n activeIndex: -1,\n open: false,\n});\n\nconst findActiveIndex = () =>\n tap(\n renderedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value)),\n (v) => (v < 0 ? 0 : v),\n );\n\nconst updateActive = () => (data.activeIndex = findActiveIndex());\n\nconst loadedOptionsRef = ref<ListOption<M>[]>([]);\nconst modelOptionRef = ref<ListOptionNormalized<M> | undefined>(); // list of 1 option that is selected or empty, to keep selected label\n\nconst renderedOptionsRef = computed(() => {\n return normalizeListOptions(loadedOptionsRef.value).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n })) as (ListOptionBase<M> & { index: number; isSelected: boolean; isActive: boolean })[];\n});\nconst isLoadingOptions = ref<boolean>(true);\nconst isLoadingError = ref<boolean>(false);\n\nconst isDisabled = computed(() => {\n return props.disabled;\n});\n\nconst selectedIndex = computed(() => {\n return loadedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value));\n});\n\nconst computedError = computed(() => {\n if (isLoadingOptions.value) {\n return undefined;\n }\n\n if (props.error) {\n return getErrorMessage(props.error);\n }\n\n if (isLoadingError.value) {\n return 'Data loading error';\n }\n\n return undefined;\n});\n\nconst textValue = computed(() => {\n const modelOption = unref(modelOptionRef);\n const options = unref(renderedOptionsRef);\n\n const item: ListOptionNormalized | undefined = modelOption ?? options.find((o) => deepEqual(o.value, model.value)) ?? options.find((o) => deepEqual(o.value, model.value));\n\n return item?.label || (model.value ? props.formatValue(model.value) : '');\n});\n\nconst computedPlaceholder = computed(() => {\n if (!data.open && model.value) {\n return '';\n }\n\n return model.value ? String(textValue.value) : props.placeholder;\n});\n\nconst hasValue = computed(() => {\n return model.value !== undefined && model.value !== null;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst selectOption = (v: ListOptionBase<M> & { index: number } | undefined) => {\n model.value = v?.value as M;\n modelOptionRef.value = v;\n search.value = null;\n data.open = false;\n rootRef?.value?.focus();\n};\n\nconst clear = () => {\n model.value = undefined as M;\n modelOptionRef.value = undefined;\n};\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleOpen = () => {\n data.open = !data.open;\n};\n\nwatch(() => data.open, (v) => {\n search.value = v ? '' : null;\n});\n\nconst onInputFocus = () => {\n data.open = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlayRef.value?.listRef?.contains(relatedTarget)) {\n search.value = null;\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n if (!['ArrowDown', 'ArrowUp', 'Enter', 'Escape'].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n const { open, activeIndex } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n search.value = '';\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n search.value = null;\n rootRef.value?.focus();\n }\n\n const options = unref(renderedOptionsRef);\n\n const { length } = options;\n\n if (!length) {\n return;\n }\n\n if (e.code === 'Enter') {\n selectOption(options.find((it) => it.index === activeIndex));\n }\n\n const localIndex = options.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = renderedOptionsRef.value[newIndex].index ?? -1;\n};\n\nuseLabelNotch(rootRef);\n\nwatch(() => model.value, updateActive, { immediate: true });\n\nwatch(\n () => data.open,\n (open) => (open ? input.value?.focus() : ''),\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n search.value; // to watch\n\n if (data.activeIndex >= 0 && data.open) {\n overlayRef.value?.scrollIntoActive();\n }\n});\n\nconst searchDebounced = refDebounced(search, 300, { maxWait: 1000 });\n\nconst optionsRequest = useWatchFetch(() => searchDebounced.value, async (v) => {\n if (v !== null) { // search is null when dropdown is closed;\n return props.optionsSearch(v, 'label');\n }\n return undefined;\n});\n\nconst modelOptionRequest = useWatchFetch(() => model.value, async (v) => {\n if (v != null && !deepEqual(modelOptionRef.value?.value, v)) { // load label for selected value if it was updated from outside the component\n return (await props.optionsSearch(String(v), 'value'))?.[0];\n }\n return modelOptionRef.value;\n});\n\nwatch(() => optionsRequest.value, (result) => {\n if (result) {\n loadedOptionsRef.value = result;\n if (search.value !== null) {\n isLoadingError.value = false;\n }\n }\n});\n\nwatch(() => modelOptionRequest.value, (result) => {\n if (result) {\n modelOptionRef.value = normalizeListOptions([result])[0];\n }\n});\n\nwatch(() => optionsRequest.error, (err) => {\n if (err) {\n isLoadingError.value = Boolean(err);\n }\n});\n\nwatch(() => optionsRequest.loading || modelOptionRequest.loading, (loading) => {\n isLoadingOptions.value = loading;\n});\n</script>\n\n<template>\n <div class=\"pl-autocomplete__envelope\" @click.stop=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-autocomplete\"\n :class=\"{ open: data.open, error: Boolean(computedError), disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete__container\">\n <div class=\"pl-autocomplete__field\">\n <input\n ref=\"input\"\n v-model=\"search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"computedPlaceholder\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"onInputFocus\"\n />\n\n <div v-if=\"!data.open\" class=\"input-value\">\n <LongText> {{ textValue }} </LongText>\n </div>\n\n <div class=\"pl-autocomplete__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <PlIcon16 v-if=\"clearable && hasValue\" class=\"clear\" name=\"delete-clear\" @click.stop=\"clear\" />\n <slot name=\"append\" />\n <div class=\"pl-autocomplete__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div v-if=\"arrowIconLarge\" class=\"arrow-icon\" :class=\"[`icon-24 ${arrowIconLarge}`]\" />\n <div v-else-if=\"arrowIcon\" class=\"arrow-icon\" :class=\"[`icon-16 ${arrowIcon}`]\" />\n <div v-else class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\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 <DropdownOverlay v-if=\"data.open\" ref=\"overlay\" :root=\"rootRef\" class=\"pl-autocomplete__options\" tabindex=\"-1\" :gap=\"3\">\n <DropdownListItem\n v-for=\"(item, index) in renderedOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"optionSize\"\n @click.stop=\"selectOption(item)\"\n />\n <div v-if=\"!renderedOptionsRef.length\" class=\"nothing-found\">Nothing found</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-autocomplete__contour\" :group-position=\"groupPosition\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-autocomplete__error\">{{ computedError }}</div>\n <div v-else-if=\"isLoadingOptions && loadingOptionsHelper\" class=\"pl-autocomplete__helper\">{{ loadingOptionsHelper }}</div>\n <div v-else-if=\"helper\" class=\"pl-autocomplete__helper\">{{ helper }}</div>\n </div>\n</template>\n"],"names":["__default__","model","_useModel","props","__props","slots","_useSlots","rootRef","ref","input","overlayRef","useTemplateRef","search","data","reactive","findActiveIndex","tap","renderedOptionsRef","o","deepEqual","v","updateActive","loadedOptionsRef","modelOptionRef","computed","normalizeListOptions","opt","index","selectedIndex","isLoadingOptions","isLoadingError","isDisabled","computedError","getErrorMessage","textValue","modelOption","unref","options","item","computedPlaceholder","hasValue","tabindex","selectOption","_a","clear","setFocusOnInput","toggleOpen","watch","onInputFocus","onFocusOut","event","relatedTarget","_c","_b","handleKeydown","open","activeIndex","length","it","localIndex","delta","newIndex","useLabelNotch","watchPostEffect","searchDebounced","refDebounced","optionsRequest","useWatchFetch","modelOptionRequest","result","err","loading","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_2","_hoisted_3","$event","_openBlock","_hoisted_5","_createVNode","LongText","_hoisted_6","_createBlock","_unref","PlMaskIcon24","PlIcon16","_renderSlot","_ctx","_hoisted_7","_hoisted_8","PlSvg","SvgRequired","PlTooltip","DropdownOverlay","_Fragment","_renderList","DropdownListItem","_withModifiers","_hoisted_9","DoubleContour","_hoisted_10","_toDisplayString","_hoisted_11","_hoisted_12"],"mappings":"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"}
1
+ {"version":3,"file":"PlAutocomplete.vue.js","sources":["../../../src/components/PlAutocomplete/PlAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a big list of options using string search request\n */\nexport default {\n name: \"PlAutocomplete\",\n};\n</script>\n\n<script\n lang=\"ts\"\n setup\n generic=\"M extends null | undefined | string | number = null | undefined | string\"\n>\nimport \"./pl-autocomplete.scss\";\nimport { computed, reactive, ref, unref, useTemplateRef, watch, watchPostEffect } from \"vue\";\nimport { tap } from \"../../helpers/functions\";\nimport { PlTooltip } from \"../PlTooltip\";\nimport DoubleContour from \"../../utils/DoubleContour.vue\";\nimport { useLabelNotch } from \"../../utils/useLabelNotch\";\nimport type { ListOption, ListOptionNormalized } from \"../../types\";\nimport { deepEqual } from \"../../helpers/objects\";\nimport DropdownListItem from \"../DropdownListItem.vue\";\nimport LongText from \"../LongText.vue\";\nimport { normalizeListOptions } from \"../../helpers/utils\";\nimport { PlIcon16 } from \"../PlIcon16\";\nimport { PlMaskIcon24 } from \"../PlMaskIcon24\";\nimport { DropdownOverlay } from \"../../utils/DropdownOverlay\";\nimport { refDebounced } from \"@vueuse/core\";\nimport { useWatchFetch } from \"../../composition/useWatchFetch.ts\";\nimport { getErrorMessage } from \"../../helpers/error.ts\";\nimport type { ListOptionBase } from \"@platforma-sdk/model\";\nimport { PlSvg } from \"../PlSvg\";\nimport SvgRequired from \"../../assets/images/required.svg?raw\";\n\n/**\n * The current selected value.\n */\nconst model = defineModel<M>({ required: true });\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Lambda for requesting of available options for the dropdown by search string.\n */\n optionsSearch: (string: string, type: \"value\" | \"label\") => Promise<ListOption<M>[]>;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Custom icon (16px) class for the dropdown arrow (optional)\n */\n arrowIcon?: string;\n /**\n * Custom icon (24px) class for the dropdown arrow (optional)\n */\n arrowIconLarge?: string;\n /**\n * Option list item size\n */\n optionSize?: \"small\" | \"medium\";\n /**\n * Formatter for the selected value if its label is absent\n */\n formatValue?: (value: M) => string;\n /**\n * Makes some of corners not rounded\n * */\n groupPosition?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"middle\";\n }>(),\n {\n modelSearch: undefined,\n label: \"\",\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: \"...\",\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n arrowIconLarge: undefined,\n optionSize: \"small\",\n formatValue: (v: M) => String(v),\n groupPosition: undefined,\n },\n);\n\nconst slots = defineSlots<{\n [key: string]: unknown;\n}>();\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst input = ref<HTMLInputElement | undefined>();\n\nconst overlayRef = useTemplateRef(\"overlay\");\n\nconst search = ref<string | null>(null);\nconst data = reactive({\n activeIndex: -1,\n open: false,\n});\n\nconst findActiveIndex = () =>\n tap(\n renderedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value)),\n (v) => (v < 0 ? 0 : v),\n );\n\nconst updateActive = () => (data.activeIndex = findActiveIndex());\n\nconst loadedOptionsRef = ref<ListOption<M>[]>([]);\nconst modelOptionRef = ref<ListOptionNormalized<M> | undefined>(); // list of 1 option that is selected or empty, to keep selected label\n\nconst renderedOptionsRef = computed(() => {\n return normalizeListOptions(loadedOptionsRef.value).map((opt, index) => ({\n ...opt,\n index,\n isSelected: index === selectedIndex.value,\n isActive: index === data.activeIndex,\n })) as (ListOptionBase<M> & { index: number; isSelected: boolean; isActive: boolean })[];\n});\nconst isLoadingOptions = ref<boolean>(true);\nconst isLoadingError = ref<boolean>(false);\n\nconst isDisabled = computed(() => {\n return props.disabled;\n});\n\nconst selectedIndex = computed(() => {\n return loadedOptionsRef.value.findIndex((o) => deepEqual(o.value, model.value));\n});\n\nconst computedError = computed(() => {\n if (isLoadingOptions.value) {\n return undefined;\n }\n\n if (props.error) {\n return getErrorMessage(props.error);\n }\n\n if (isLoadingError.value) {\n return \"Data loading error\";\n }\n\n return undefined;\n});\n\nconst textValue = computed(() => {\n const modelOption = unref(modelOptionRef);\n const options = unref(renderedOptionsRef);\n\n const item: ListOptionNormalized | undefined =\n modelOption ??\n options.find((o) => deepEqual(o.value, model.value)) ??\n options.find((o) => deepEqual(o.value, model.value));\n\n return item?.label || (model.value ? props.formatValue(model.value) : \"\");\n});\n\nconst computedPlaceholder = computed(() => {\n if (!data.open && model.value) {\n return \"\";\n }\n\n return model.value ? String(textValue.value) : props.placeholder;\n});\n\nconst hasValue = computed(() => {\n return model.value !== undefined && model.value !== null;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : \"0\"));\n\nconst selectOption = (v: (ListOptionBase<M> & { index: number }) | undefined) => {\n model.value = v?.value as M;\n modelOptionRef.value = v;\n search.value = null;\n data.open = false;\n rootRef?.value?.focus();\n};\n\nconst clear = () => {\n model.value = undefined as M;\n modelOptionRef.value = undefined;\n};\n\nconst setFocusOnInput = () => input.value?.focus();\n\nconst toggleOpen = () => {\n data.open = !data.open;\n};\n\nwatch(\n () => data.open,\n (v) => {\n search.value = v ? \"\" : null;\n },\n);\n\nconst onInputFocus = () => {\n data.open = true;\n};\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (\n !rootRef.value?.contains(relatedTarget) &&\n !overlayRef.value?.listRef?.contains(relatedTarget)\n ) {\n search.value = null;\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n if (![\"ArrowDown\", \"ArrowUp\", \"Enter\", \"Escape\"].includes(e.code)) {\n return;\n } else {\n e.preventDefault();\n }\n\n const { open, activeIndex } = data;\n\n if (!open) {\n if (e.code === \"Enter\") {\n data.open = true;\n search.value = \"\";\n }\n return;\n }\n\n if (e.code === \"Escape\") {\n data.open = false;\n search.value = null;\n rootRef.value?.focus();\n }\n\n const options = unref(renderedOptionsRef);\n\n const { length } = options;\n\n if (!length) {\n return;\n }\n\n if (e.code === \"Enter\") {\n selectOption(options.find((it) => it.index === activeIndex));\n }\n\n const localIndex = options.findIndex((it) => it.index === activeIndex) ?? -1;\n\n const delta = e.code === \"ArrowDown\" ? 1 : e.code === \"ArrowUp\" ? -1 : 0;\n\n const newIndex = Math.abs(localIndex + delta + length) % length;\n\n data.activeIndex = renderedOptionsRef.value[newIndex].index ?? -1;\n};\n\nuseLabelNotch(rootRef);\n\nwatch(() => model.value, updateActive, { immediate: true });\n\nwatch(\n () => data.open,\n (open) => (open ? input.value?.focus() : \"\"),\n);\n\nwatchPostEffect(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n search.value; // to watch\n\n if (data.activeIndex >= 0 && data.open) {\n overlayRef.value?.scrollIntoActive();\n }\n});\n\nconst searchDebounced = refDebounced(search, 300, { maxWait: 1000 });\n\nconst optionsRequest = useWatchFetch(\n () => searchDebounced.value,\n async (v) => {\n if (v !== null) {\n // search is null when dropdown is closed;\n return props.optionsSearch(v, \"label\");\n }\n return undefined;\n },\n);\n\nconst modelOptionRequest = useWatchFetch(\n () => model.value,\n async (v) => {\n if (v != null && !deepEqual(modelOptionRef.value?.value, v)) {\n // load label for selected value if it was updated from outside the component\n return (await props.optionsSearch(String(v), \"value\"))?.[0];\n }\n return modelOptionRef.value;\n },\n);\n\nwatch(\n () => optionsRequest.value,\n (result) => {\n if (result) {\n loadedOptionsRef.value = result;\n if (search.value !== null) {\n isLoadingError.value = false;\n }\n }\n },\n);\n\nwatch(\n () => modelOptionRequest.value,\n (result) => {\n if (result) {\n modelOptionRef.value = normalizeListOptions([result])[0];\n }\n },\n);\n\nwatch(\n () => optionsRequest.error,\n (err) => {\n if (err) {\n isLoadingError.value = Boolean(err);\n }\n },\n);\n\nwatch(\n () => optionsRequest.loading || modelOptionRequest.loading,\n (loading) => {\n isLoadingOptions.value = loading;\n },\n);\n</script>\n\n<template>\n <div class=\"pl-autocomplete__envelope\" @click.stop=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-autocomplete\"\n :class=\"{ open: data.open, error: Boolean(computedError), disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete__container\">\n <div class=\"pl-autocomplete__field\">\n <input\n ref=\"input\"\n v-model=\"search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"computedPlaceholder\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"onInputFocus\"\n />\n\n <div v-if=\"!data.open\" class=\"input-value\">\n <LongText> {{ textValue }} </LongText>\n </div>\n\n <div class=\"pl-autocomplete__controls\">\n <PlMaskIcon24 v-if=\"isLoadingOptions\" name=\"loading\" />\n <PlIcon16\n v-if=\"clearable && hasValue\"\n class=\"clear\"\n name=\"delete-clear\"\n @click.stop=\"clear\"\n />\n <slot name=\"append\" />\n <div class=\"pl-autocomplete__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div\n v-if=\"arrowIconLarge\"\n class=\"arrow-icon\"\n :class=\"[`icon-24 ${arrowIconLarge}`]\"\n />\n <div v-else-if=\"arrowIcon\" class=\"arrow-icon\" :class=\"[`icon-16 ${arrowIcon}`]\" />\n <div v-else class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\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 <DropdownOverlay\n v-if=\"data.open\"\n ref=\"overlay\"\n :root=\"rootRef\"\n class=\"pl-autocomplete__options\"\n tabindex=\"-1\"\n :gap=\"3\"\n >\n <DropdownListItem\n v-for=\"(item, index) in renderedOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :is-selected=\"item.isSelected\"\n :is-hovered=\"item.isActive\"\n :size=\"optionSize\"\n @click.stop=\"selectOption(item)\"\n />\n <div v-if=\"!renderedOptionsRef.length\" class=\"nothing-found\">Nothing found</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-autocomplete__contour\" :group-position=\"groupPosition\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-autocomplete__error\">{{ computedError }}</div>\n <div v-else-if=\"isLoadingOptions && loadingOptionsHelper\" class=\"pl-autocomplete__helper\">\n {{ loadingOptionsHelper }}\n </div>\n <div v-else-if=\"helper\" class=\"pl-autocomplete__helper\">{{ helper }}</div>\n </div>\n</template>\n"],"names":["__default__","model","_useModel","props","__props","slots","_useSlots","rootRef","ref","input","overlayRef","useTemplateRef","search","data","reactive","findActiveIndex","tap","renderedOptionsRef","o","deepEqual","v","updateActive","loadedOptionsRef","modelOptionRef","computed","normalizeListOptions","opt","index","selectedIndex","isLoadingOptions","isLoadingError","isDisabled","computedError","getErrorMessage","textValue","modelOption","unref","options","item","computedPlaceholder","hasValue","tabindex","selectOption","_a","clear","setFocusOnInput","toggleOpen","watch","onInputFocus","onFocusOut","event","relatedTarget","_c","_b","handleKeydown","open","activeIndex","length","it","localIndex","delta","newIndex","useLabelNotch","watchPostEffect","searchDebounced","refDebounced","optionsRequest","useWatchFetch","modelOptionRequest","result","err","loading","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_2","_hoisted_3","$event","_openBlock","_hoisted_5","_createVNode","LongText","_hoisted_6","_createBlock","_unref","PlMaskIcon24","PlIcon16","_renderSlot","_ctx","_hoisted_7","_hoisted_8","PlSvg","SvgRequired","PlTooltip","DropdownOverlay","_Fragment","_renderList","DropdownListItem","_withModifiers","_hoisted_9","DoubleContour","_hoisted_10","_toDisplayString","_hoisted_11","_hoisted_12"],"mappings":"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"}
@@ -103,8 +103,8 @@ declare const _default: <M extends string | number = string>(__VLS_props: NonNul
103
103
  };
104
104
  export default _default;
105
105
  export interface OptionsSearch<T> {
106
- (s: string, type: 'label'): Promise<Readonly<ListOptionBase<T>[]>>;
107
- (s: T[], type: 'value'): Promise<Readonly<ListOptionBase<T>[]>>;
106
+ (s: string, type: "label"): Promise<Readonly<ListOptionBase<T>[]>>;
107
+ (s: T[], type: "value"): Promise<Readonly<ListOptionBase<T>[]>>;
108
108
  }
109
109
  type __VLS_PrettifyLocal<T> = {
110
110
  [K in keyof T]: T[K];
@@ -1 +1 @@
1
- {"version":3,"file":"PlAutocompleteMulti.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue"],"names":[],"mappings":"AAwaA,OAAO,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkB3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;yBACc,CAAC,SAAS,MAAM,GAAG,MAAM,wBAC5B,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAClD,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,iBAC5F,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;WA+mB1D,mBAAmB,CAAC;;;QAnmBxB;;WAEG;oBACS,CAAC,EAAE;QACf;;WAEG;uBACY,aAAa,CAAC,CAAC,CAAC;QAC/B;;WAEG;mBACQ,MAAM;QACjB;;WAEG;gBACK,MAAM;QACd;;WAEG;iBACM,MAAM;QACf;;WAEG;gBACK,OAAO;QACf;;WAEG;sBACW,MAAM;QACpB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,MAAM;QACjB;;WAEG;8BACmB,OAAO;QAC7B;;WAEG;2BACgB,MAAM;QACzB;;aAEK;wBACW,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,WAAW,GAAG,aAAa,GAAG,cAAc,GAAG,QAAQ;mBAgjBhC,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;wBA5DkB,GAAG;yBACF,GAAG;;cAnjB3B,mBAAmB,KAAK,CAAC,EAAE,KAAG,IAAI;;;;YAmnBI,OAAO,CAAC,OAAO,WAAW,CAAC;;AAznBvE,wBAynB4E;AAE5E,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjE;AAID,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
1
+ {"version":3,"file":"PlAutocompleteMulti.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue"],"names":[],"mappings":"AAscA,OAAO,8BAA8B,CAAC;AAEtC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAkB3D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;yBACc,CAAC,SAAS,MAAM,GAAG,MAAM,wBAC5B,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAClD,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,iBAC5F,WAAW,CAAC,OAAO,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;WAqoB1D,mBAAmB,CAAC;;;QAznBxB;;WAEG;oBACS,CAAC,EAAE;QACf;;WAEG;uBACY,aAAa,CAAC,CAAC,CAAC;QAC/B;;WAEG;mBACQ,MAAM;QACjB;;WAEG;gBACK,MAAM;QACd;;WAEG;iBACM,MAAM;QACf;;WAEG;gBACK,OAAO;QACf;;WAEG;sBACW,MAAM;QACpB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,OAAO;QAClB;;WAEG;mBACQ,MAAM;QACjB;;WAEG;8BACmB,OAAO;QAC7B;;WAEG;2BACgB,MAAM;QACzB;;aAEK;wBAED,KAAK,GACL,QAAQ,GACR,MAAM,GACN,OAAO,GACP,UAAU,GACV,WAAW,GACX,aAAa,GACb,cAAc,GACd,QAAQ;mBA6jB8E,CAAC,4BAA2B;oBACzG,OAAO,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC,GAAG,IAAI;WAClD,GAAG;;wBA5DkB,GAAG;yBACF,GAAG;;cAzkB3B,mBAAmB,KAAK,CAAC,EAAE,KAAG,IAAI;;;;YAyoBI,OAAO,CAAC,OAAO,WAAW,CAAC;;AA/oBvE,wBA+oB4E;AAE5E,MAAM,WAAW,aAAa,CAAC,CAAC;IAC9B,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjE;AAGD,KAAK,mBAAmB,CAAC,CAAC,IAAI;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAAG,GAAG,EAAE,CAAC"}
@@ -53,15 +53,27 @@ const Oe = ["tabindex"], Ve = { class: "pl-autocomplete-multi__container" }, we
53
53
  open: !1,
54
54
  optionsHeight: 0
55
55
  });
56
- L(() => l.open, (e) => {
57
- e || (l.search = "");
58
- }, { flush: "sync" });
59
- const O = u(() => Array.isArray(n.modelValue) ? n.modelValue : []), X = u(() => l.open && n.modelValue.length > 0 ? n.placeholder : n.modelValue.length > 0 ? "" : n.placeholder), D = ie(n, "debounce"), h = W(() => [l.search, l.open, n.sourceId], async ([e, t]) => n.optionsSearch(e, "label"), {
60
- filterWatchResult: ([e, t]) => t,
61
- debounce: D
62
- }), _ = W(() => [n.modelValue, n.sourceId], async ([e]) => n.optionsSearch(e, "value"), {
63
- debounce: D
64
- }), Y = u(() => {
56
+ L(
57
+ () => l.open,
58
+ (e) => {
59
+ e || (l.search = "");
60
+ },
61
+ { flush: "sync" }
62
+ );
63
+ const O = u(() => Array.isArray(n.modelValue) ? n.modelValue : []), X = u(() => l.open && n.modelValue.length > 0 ? n.placeholder : n.modelValue.length > 0 ? "" : n.placeholder), D = ie(n, "debounce"), h = W(
64
+ () => [l.search, l.open, n.sourceId],
65
+ async ([e, t]) => n.optionsSearch(e, "label"),
66
+ {
67
+ filterWatchResult: ([e, t]) => t,
68
+ debounce: D
69
+ }
70
+ ), _ = W(
71
+ () => [n.modelValue, n.sourceId],
72
+ async ([e]) => n.optionsSearch(e, "value"),
73
+ {
74
+ debounce: D
75
+ }
76
+ ), Y = u(() => {
65
77
  const e = _.value ?? [], t = h.value ?? [], o = /* @__PURE__ */ new Set(), r = [], a = (A) => {
66
78
  for (const y of A) {
67
79
  const g = fe(y.value);
@@ -69,9 +81,7 @@ const Oe = ["tabindex"], Ve = { class: "pl-autocomplete-multi__container" }, we
69
81
  }
70
82
  };
71
83
  return a(e), a(t), r;
72
- }), R = u(() => O.value.map((e) => Y.value.find((t) => I(t.value, e))).filter(
73
- (e) => e !== void 0
74
- )), x = u(() => {
84
+ }), R = u(() => O.value.map((e) => Y.value.find((t) => I(t.value, e))).filter((e) => e !== void 0)), x = u(() => {
75
85
  const e = i(O);
76
86
  return [...h.value ?? []].map((o) => ({
77
87
  ...o,
@@ -1 +1 @@
1
- {"version":3,"file":"PlAutocompleteMulti.vue.js","sources":["../../../src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A multi-select autocomplete component that allows users to search and select multiple values from a list of options.\n * Supports async data fetching, keyboard navigation, and displays selected items as removable chips.\n *\n * @example\n * Basic usage:\n * <PlAutocompleteMulti\n * v-model=\"selectedUsers\"\n * :options-search=\"searchUsers\"\n * :model-search=\"getUsersByIds\"\n * label=\"Select Users\"\n * placeholder=\"Search for users...\"\n * required\n * :debounce=\"300\"\n * helper=\"Choose one or more users from the list\"\n * />\n *\n * With async functions:\n * const selectedUsers = ref([])\n *\n * const searchUsers = async (searchTerm) => {\n * const response = await fetch('/api/users/search?q=' + searchTerm)\n * const users = await response.json()\n * return users.map(user => ({ value: user.id, label: user.name }))\n * }\n *\n * const getUsersByIds = async (userIds) => {\n * if (!userIds.length) return []\n * const response = await fetch('/api/users?ids=' + userIds.join(','))\n * const users = await response.json()\n * return users.map(user => ({ value: user.id, label: user.name }))\n * }\n */\nexport default {\n name: 'PlAutocompleteMulti',\n};\n\nexport interface OptionsSearch<T> {\n (s: string, type: 'label'): Promise<Readonly<ListOptionBase<T>[]>>;\n (s: T[], type: 'value'): Promise<Readonly<ListOptionBase<T>[]>>;\n}\n\n</script>\n\n<script lang=\"ts\" setup generic=\"M extends string | number = string\">\nimport './pl-autocomplete-multi.scss';\n\nimport type { ListOptionBase } from '@platforma-sdk/model';\nimport canonicalize from 'canonicalize';\nimport { computed, reactive, ref, toRef, unref, useSlots, useTemplateRef, watch } from 'vue';\nimport { useWatchFetch } from '../../composition/useWatchFetch.ts';\nimport { getErrorMessage } from '../../helpers/error.ts';\nimport { deepEqual, deepIncludes } from '../../helpers/objects';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport DropdownOverlay from '../../utils/DropdownOverlay/DropdownOverlay.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport DropdownListItem from '../DropdownListItem.vue';\nimport { PlChip } from '../PlChip';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { PlTooltip } from '../PlTooltip';\n\nimport SvgRequired from '../../assets/images/required.svg?raw';\nimport { PlSvg } from '../PlSvg';\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: M[]): void;\n}>();\n\nconst emitModel = (v: M[]) => emit('update:modelValue', v);\n\nconst slots = useSlots();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected values.\n */\n modelValue: M[];\n /**\n * Lambda for requesting of available options for the dropdown by search string.\n */\n optionsSearch: OptionsSearch<M>;\n /**\n * Unique identifier for the source of the options, changing it will invalidate the options cache.\n */\n sourceId?: string;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Debounce time in ms for the options search.\n */\n debounce?: number;\n /**\n * If `true`, the search input is reset and focus is set on it when the new option is selected.\n */\n resetSearchOnSelect?: boolean;\n /**\n * The text to display when no options are found.\n */\n emptyOptionsText?: string;\n /**\n * Makes some of corners not rounded\n * */\n groupPosition?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'middle';\n }>(),\n {\n modelValue: () => [],\n label: undefined,\n helper: undefined,\n error: undefined,\n placeholder: '...',\n required: false,\n disabled: false,\n debounce: 300,\n emptyOptionsText: 'Nothing found',\n sourceId: undefined,\n groupPosition: undefined,\n },\n);\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst inputRef = ref<HTMLInputElement | undefined>();\n\nconst overlay = useTemplateRef('overlay');\n\nconst data = reactive({\n search: '',\n activeOption: -1,\n open: false,\n optionsHeight: 0,\n});\n\nwatch(() => data.open, (v) => {\n if (!v) {\n data.search = '';\n }\n}, { flush: 'sync' });\n\nconst selectedValuesRef = computed(() => (Array.isArray(props.modelValue) ? props.modelValue : []));\n\nconst placeholderRef = computed(() => {\n if (data.open && props.modelValue.length > 0) {\n return props.placeholder;\n }\n\n return props.modelValue.length > 0 ? '' : props.placeholder;\n});\n\nconst debounce = toRef(props, 'debounce');\n\nconst searchOptionsRef = useWatchFetch(() => [data.search, data.open, props.sourceId] as const, async ([search, _open]) => {\n return props.optionsSearch(search, 'label');\n}, {\n filterWatchResult: ([_search, open]) => open,\n debounce,\n});\n\nconst modelOptionsRef = useWatchFetch(() => [props.modelValue, props.sourceId] as const, async ([v]) => {\n return props.optionsSearch(v, 'value');\n}, {\n debounce,\n});\n\nconst allOptionsRef = computed(() => {\n const modelOptions = modelOptionsRef.value ?? [];\n const searchOptions = searchOptionsRef.value ?? [];\n\n const seenValues = new Set<string | undefined>();\n const result = [] as ListOptionBase<M>[];\n\n const addOptions = (options: Readonly<ListOptionBase<M>[]>) => {\n for (const option of options) {\n const canonicalValue = canonicalize(option.value);\n if (!seenValues.has(canonicalValue)) {\n seenValues.add(canonicalValue);\n result.push(option);\n }\n }\n };\n\n addOptions(modelOptions);\n addOptions(searchOptions);\n\n return result;\n});\n\nconst selectedOptionsRef = computed(() => {\n return selectedValuesRef.value.map((v) =>\n allOptionsRef.value.find((opt) => deepEqual(opt.value, v))).filter((v) => v !== undefined,\n );\n});\n\nconst filteredOptionsRef = computed(() => {\n const selectedValues = unref(selectedValuesRef);\n\n const options = searchOptionsRef.value ?? [];\n\n return [...options].map((opt) => ({\n ...opt,\n selected: deepIncludes(selectedValues, opt.value),\n }));\n});\n\nconst isOptionsLoading = computed(() => searchOptionsRef.loading || modelOptionsRef.loading);\n\nconst isDisabled = computed(() => {\n if (modelOptionsRef.value === undefined) {\n return true;\n }\n\n return props.disabled;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : '0'));\n\nconst updateActiveOption = () => {\n data.activeOption = 0;\n};\n\nconst selectOption = (v: M) => {\n const values = unref(selectedValuesRef);\n emitModel(deepIncludes(values, v) ? values.filter((it) => !deepEqual(it, v)) : [...values, v]);\n if (props.resetSearchOnSelect) {\n data.search = '';\n }\n inputRef.value?.focus();\n};\n\nconst unselectOption = (d: M) => emitModel(unref(selectedValuesRef).filter((v) => !deepEqual(v, d)));\n\nconst setFocusOnInput = () => inputRef.value?.focus();\n\nconst toggleOpen = () => data.open = !data.open;\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlay.value?.listRef?.contains(relatedTarget)) {\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n const { open, activeOption } = data;\n\n if (!open) {\n if (e.code === 'Enter') {\n data.open = true;\n }\n return;\n }\n\n if (e.code === 'Escape') {\n data.open = false;\n inputRef.value?.focus();\n }\n\n const filteredOptions = unref(filteredOptionsRef);\n\n const { length } = filteredOptions;\n\n if (!length) {\n return;\n }\n\n if (['ArrowDown', 'ArrowUp', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.code === 'Enter') {\n selectOption(filteredOptions[activeOption].value);\n }\n\n const d = e.code === 'ArrowDown' ? 1 : e.code === 'ArrowUp' ? -1 : 0;\n\n data.activeOption = Math.abs(activeOption + d + length) % length;\n\n requestAnimationFrame(() => overlay.value?.scrollIntoActive());\n};\n\nuseLabelNotch(rootRef);\n\nwatch(\n () => props.modelValue,\n () => updateActiveOption(),\n { immediate: true },\n);\n\nconst computedError = computed(() => {\n if (isOptionsLoading.value) {\n return undefined;\n }\n\n if (searchOptionsRef.error) {\n return getErrorMessage(searchOptionsRef.error);\n }\n\n if (modelOptionsRef.error) {\n return getErrorMessage(modelOptionsRef.error);\n }\n\n if (props.error) {\n return getErrorMessage(props.error);\n }\n\n if (props.modelValue.length && selectedOptionsRef.value.length !== props.modelValue.length) {\n return 'The selected values are not one of the options';\n }\n\n return undefined;\n});\n</script>\n\n<template>\n <div class=\"pl-autocomplete-multi__envelope\" @click=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-autocomplete-multi\"\n :class=\"{ open: data.open, error: Boolean(computedError), disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete-multi__container\">\n <div class=\"pl-autocomplete-multi__field\">\n <input\n ref=\"inputRef\"\n v-model=\"data.search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"placeholderRef\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"data.open = true\"\n />\n <div v-if=\"!data.open\" class=\"chips-container\">\n <PlChip v-for=\"(opt, i) in selectedOptionsRef\" :key=\"i\" closeable small @click.stop=\"data.open = true\" @close=\"unselectOption(opt.value)\">\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n\n <div class=\"pl-autocomplete-multi__controls\">\n <PlMaskIcon24 v-if=\"isOptionsLoading\" name=\"loading\" />\n <slot name=\"append\" />\n <div class=\"pl-autocomplete-multi__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\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 <DropdownOverlay\n v-if=\"data.open\"\n ref=\"overlay\"\n :root=\"rootRef\"\n class=\"pl-autocomplete-multi__options\"\n :gap=\"5\"\n tabindex=\"-1\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete-multi__open-chips-container\">\n <PlChip\n v-for=\"(opt, i) in selectedOptionsRef\"\n :key=\"i\"\n closeable\n small\n @close=\"unselectOption(opt.value)\"\n >\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n <DropdownListItem\n v-for=\"(item, index) in filteredOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :text-item=\"'text'\"\n :is-selected=\"item.selected\"\n :is-hovered=\"data.activeOption == index\"\n size=\"medium\"\n use-checkbox\n @click.stop=\"selectOption(item.value)\"\n />\n <div v-if=\"!filteredOptionsRef.length && !isOptionsLoading\" class=\"nothing-found\">{{ emptyOptionsText }}</div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-autocomplete-multi__contour\" :group-position=\"groupPosition\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-autocomplete-multi__error\">{{ computedError }}</div>\n <div v-else-if=\"helper\" class=\"pl-autocomplete-multi__helper\">{{ helper }}</div>\n </div>\n</template>\n"],"names":["__default__","emit","__emit","emitModel","v","slots","useSlots","props","__props","rootRef","ref","inputRef","overlay","useTemplateRef","data","reactive","watch","selectedValuesRef","computed","placeholderRef","debounce","toRef","searchOptionsRef","useWatchFetch","search","_open","_search","open","modelOptionsRef","allOptionsRef","modelOptions","searchOptions","seenValues","result","addOptions","options","option","canonicalValue","canonicalize","selectedOptionsRef","opt","deepEqual","filteredOptionsRef","selectedValues","unref","deepIncludes","isOptionsLoading","isDisabled","tabindex","updateActiveOption","selectOption","values","it","_a","unselectOption","d","setFocusOnInput","toggleOpen","onFocusOut","event","relatedTarget","_c","_b","handleKeydown","activeOption","filteredOptions","length","useLabelNotch","computedError","getErrorMessage","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_2","_hoisted_3","_cache","$event","_vModelText","_openBlock","_hoisted_5","_Fragment","_renderList","i","_createBlock","_unref","PlChip","_withModifiers","_createTextVNode","_toDisplayString","_hoisted_6","PlMaskIcon24","_renderSlot","_ctx","_hoisted_7","PlSvg","SvgRequired","PlTooltip","DropdownOverlay","_hoisted_8","item","index","DropdownListItem","_hoisted_9","_createVNode","DoubleContour","_hoisted_10","_hoisted_11"],"mappings":"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"}
1
+ {"version":3,"file":"PlAutocompleteMulti.vue.js","sources":["../../../src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A multi-select autocomplete component that allows users to search and select multiple values from a list of options.\n * Supports async data fetching, keyboard navigation, and displays selected items as removable chips.\n *\n * @example\n * Basic usage:\n * <PlAutocompleteMulti\n * v-model=\"selectedUsers\"\n * :options-search=\"searchUsers\"\n * :model-search=\"getUsersByIds\"\n * label=\"Select Users\"\n * placeholder=\"Search for users...\"\n * required\n * :debounce=\"300\"\n * helper=\"Choose one or more users from the list\"\n * />\n *\n * With async functions:\n * const selectedUsers = ref([])\n *\n * const searchUsers = async (searchTerm) => {\n * const response = await fetch('/api/users/search?q=' + searchTerm)\n * const users = await response.json()\n * return users.map(user => ({ value: user.id, label: user.name }))\n * }\n *\n * const getUsersByIds = async (userIds) => {\n * if (!userIds.length) return []\n * const response = await fetch('/api/users?ids=' + userIds.join(','))\n * const users = await response.json()\n * return users.map(user => ({ value: user.id, label: user.name }))\n * }\n */\nexport default {\n name: \"PlAutocompleteMulti\",\n};\n\nexport interface OptionsSearch<T> {\n (s: string, type: \"label\"): Promise<Readonly<ListOptionBase<T>[]>>;\n (s: T[], type: \"value\"): Promise<Readonly<ListOptionBase<T>[]>>;\n}\n</script>\n\n<script lang=\"ts\" setup generic=\"M extends string | number = string\">\nimport \"./pl-autocomplete-multi.scss\";\n\nimport type { ListOptionBase } from \"@platforma-sdk/model\";\nimport canonicalize from \"canonicalize\";\nimport { computed, reactive, ref, toRef, unref, useSlots, useTemplateRef, watch } from \"vue\";\nimport { useWatchFetch } from \"../../composition/useWatchFetch.ts\";\nimport { getErrorMessage } from \"../../helpers/error.ts\";\nimport { deepEqual, deepIncludes } from \"../../helpers/objects\";\nimport DoubleContour from \"../../utils/DoubleContour.vue\";\nimport DropdownOverlay from \"../../utils/DropdownOverlay/DropdownOverlay.vue\";\nimport { useLabelNotch } from \"../../utils/useLabelNotch\";\nimport DropdownListItem from \"../DropdownListItem.vue\";\nimport { PlChip } from \"../PlChip\";\nimport { PlMaskIcon24 } from \"../PlMaskIcon24\";\nimport { PlTooltip } from \"../PlTooltip\";\n\nimport SvgRequired from \"../../assets/images/required.svg?raw\";\nimport { PlSvg } from \"../PlSvg\";\n\nconst emit = defineEmits<{\n (e: \"update:modelValue\", v: M[]): void;\n}>();\n\nconst emitModel = (v: M[]) => emit(\"update:modelValue\", v);\n\nconst slots = useSlots();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected values.\n */\n modelValue: M[];\n /**\n * Lambda for requesting of available options for the dropdown by search string.\n */\n optionsSearch: OptionsSearch<M>;\n /**\n * Unique identifier for the source of the options, changing it will invalidate the options cache.\n */\n sourceId?: string;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Debounce time in ms for the options search.\n */\n debounce?: number;\n /**\n * If `true`, the search input is reset and focus is set on it when the new option is selected.\n */\n resetSearchOnSelect?: boolean;\n /**\n * The text to display when no options are found.\n */\n emptyOptionsText?: string;\n /**\n * Makes some of corners not rounded\n * */\n groupPosition?:\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-left\"\n | \"top-right\"\n | \"bottom-left\"\n | \"bottom-right\"\n | \"middle\";\n }>(),\n {\n modelValue: () => [],\n label: undefined,\n helper: undefined,\n error: undefined,\n placeholder: \"...\",\n required: false,\n disabled: false,\n debounce: 300,\n emptyOptionsText: \"Nothing found\",\n sourceId: undefined,\n groupPosition: undefined,\n },\n);\n\nconst rootRef = ref<HTMLElement | undefined>();\nconst inputRef = ref<HTMLInputElement | undefined>();\n\nconst overlay = useTemplateRef(\"overlay\");\n\nconst data = reactive({\n search: \"\",\n activeOption: -1,\n open: false,\n optionsHeight: 0,\n});\n\nwatch(\n () => data.open,\n (v) => {\n if (!v) {\n data.search = \"\";\n }\n },\n { flush: \"sync\" },\n);\n\nconst selectedValuesRef = computed(() => (Array.isArray(props.modelValue) ? props.modelValue : []));\n\nconst placeholderRef = computed(() => {\n if (data.open && props.modelValue.length > 0) {\n return props.placeholder;\n }\n\n return props.modelValue.length > 0 ? \"\" : props.placeholder;\n});\n\nconst debounce = toRef(props, \"debounce\");\n\nconst searchOptionsRef = useWatchFetch(\n () => [data.search, data.open, props.sourceId] as const,\n async ([search, _open]) => {\n return props.optionsSearch(search, \"label\");\n },\n {\n filterWatchResult: ([_search, open]) => open,\n debounce,\n },\n);\n\nconst modelOptionsRef = useWatchFetch(\n () => [props.modelValue, props.sourceId] as const,\n async ([v]) => {\n return props.optionsSearch(v, \"value\");\n },\n {\n debounce,\n },\n);\n\nconst allOptionsRef = computed(() => {\n const modelOptions = modelOptionsRef.value ?? [];\n const searchOptions = searchOptionsRef.value ?? [];\n\n const seenValues = new Set<string | undefined>();\n const result = [] as ListOptionBase<M>[];\n\n const addOptions = (options: Readonly<ListOptionBase<M>[]>) => {\n for (const option of options) {\n const canonicalValue = canonicalize(option.value);\n if (!seenValues.has(canonicalValue)) {\n seenValues.add(canonicalValue);\n result.push(option);\n }\n }\n };\n\n addOptions(modelOptions);\n addOptions(searchOptions);\n\n return result;\n});\n\nconst selectedOptionsRef = computed(() => {\n return selectedValuesRef.value\n .map((v) => allOptionsRef.value.find((opt) => deepEqual(opt.value, v)))\n .filter((v) => v !== undefined);\n});\n\nconst filteredOptionsRef = computed(() => {\n const selectedValues = unref(selectedValuesRef);\n\n const options = searchOptionsRef.value ?? [];\n\n return [...options].map((opt) => ({\n ...opt,\n selected: deepIncludes(selectedValues, opt.value),\n }));\n});\n\nconst isOptionsLoading = computed(() => searchOptionsRef.loading || modelOptionsRef.loading);\n\nconst isDisabled = computed(() => {\n if (modelOptionsRef.value === undefined) {\n return true;\n }\n\n return props.disabled;\n});\n\nconst tabindex = computed(() => (isDisabled.value ? undefined : \"0\"));\n\nconst updateActiveOption = () => {\n data.activeOption = 0;\n};\n\nconst selectOption = (v: M) => {\n const values = unref(selectedValuesRef);\n emitModel(deepIncludes(values, v) ? values.filter((it) => !deepEqual(it, v)) : [...values, v]);\n if (props.resetSearchOnSelect) {\n data.search = \"\";\n }\n inputRef.value?.focus();\n};\n\nconst unselectOption = (d: M) =>\n emitModel(unref(selectedValuesRef).filter((v) => !deepEqual(v, d)));\n\nconst setFocusOnInput = () => inputRef.value?.focus();\n\nconst toggleOpen = () => (data.open = !data.open);\n\nconst onFocusOut = (event: FocusEvent) => {\n const relatedTarget = event.relatedTarget as Node | null;\n\n if (!rootRef.value?.contains(relatedTarget) && !overlay.value?.listRef?.contains(relatedTarget)) {\n data.open = false;\n }\n};\n\nconst handleKeydown = (e: { code: string; preventDefault(): void }) => {\n const { open, activeOption } = data;\n\n if (!open) {\n if (e.code === \"Enter\") {\n data.open = true;\n }\n return;\n }\n\n if (e.code === \"Escape\") {\n data.open = false;\n inputRef.value?.focus();\n }\n\n const filteredOptions = unref(filteredOptionsRef);\n\n const { length } = filteredOptions;\n\n if (!length) {\n return;\n }\n\n if ([\"ArrowDown\", \"ArrowUp\", \"Enter\"].includes(e.code)) {\n e.preventDefault();\n }\n\n if (e.code === \"Enter\") {\n selectOption(filteredOptions[activeOption].value);\n }\n\n const d = e.code === \"ArrowDown\" ? 1 : e.code === \"ArrowUp\" ? -1 : 0;\n\n data.activeOption = Math.abs(activeOption + d + length) % length;\n\n requestAnimationFrame(() => overlay.value?.scrollIntoActive());\n};\n\nuseLabelNotch(rootRef);\n\nwatch(\n () => props.modelValue,\n () => updateActiveOption(),\n { immediate: true },\n);\n\nconst computedError = computed(() => {\n if (isOptionsLoading.value) {\n return undefined;\n }\n\n if (searchOptionsRef.error) {\n return getErrorMessage(searchOptionsRef.error);\n }\n\n if (modelOptionsRef.error) {\n return getErrorMessage(modelOptionsRef.error);\n }\n\n if (props.error) {\n return getErrorMessage(props.error);\n }\n\n if (props.modelValue.length && selectedOptionsRef.value.length !== props.modelValue.length) {\n return \"The selected values are not one of the options\";\n }\n\n return undefined;\n});\n</script>\n\n<template>\n <div class=\"pl-autocomplete-multi__envelope\" @click=\"setFocusOnInput\">\n <div\n ref=\"rootRef\"\n :tabindex=\"tabindex\"\n class=\"pl-autocomplete-multi\"\n :class=\"{ open: data.open, error: Boolean(computedError), disabled: isDisabled }\"\n @keydown=\"handleKeydown\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete-multi__container\">\n <div class=\"pl-autocomplete-multi__field\">\n <input\n ref=\"inputRef\"\n v-model=\"data.search\"\n type=\"text\"\n tabindex=\"-1\"\n :disabled=\"isDisabled\"\n :placeholder=\"placeholderRef\"\n spellcheck=\"false\"\n autocomplete=\"chrome-off\"\n @focus=\"data.open = true\"\n />\n <div v-if=\"!data.open\" class=\"chips-container\">\n <PlChip\n v-for=\"(opt, i) in selectedOptionsRef\"\n :key=\"i\"\n closeable\n small\n @click.stop=\"data.open = true\"\n @close=\"unselectOption(opt.value)\"\n >\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n\n <div class=\"pl-autocomplete-multi__controls\">\n <PlMaskIcon24 v-if=\"isOptionsLoading\" name=\"loading\" />\n <slot name=\"append\" />\n <div class=\"pl-autocomplete-multi__arrow-wrapper\" @click.stop=\"toggleOpen\">\n <div class=\"arrow-icon arrow-icon-default\" />\n </div>\n </div>\n </div>\n <label v-if=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\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 <DropdownOverlay\n v-if=\"data.open\"\n ref=\"overlay\"\n :root=\"rootRef\"\n class=\"pl-autocomplete-multi__options\"\n :gap=\"5\"\n tabindex=\"-1\"\n @focusout=\"onFocusOut\"\n >\n <div class=\"pl-autocomplete-multi__open-chips-container\">\n <PlChip\n v-for=\"(opt, i) in selectedOptionsRef\"\n :key=\"i\"\n closeable\n small\n @close=\"unselectOption(opt.value)\"\n >\n {{ opt.label || opt.value }}\n </PlChip>\n </div>\n <DropdownListItem\n v-for=\"(item, index) in filteredOptionsRef\"\n :key=\"index\"\n :option=\"item\"\n :text-item=\"'text'\"\n :is-selected=\"item.selected\"\n :is-hovered=\"data.activeOption == index\"\n size=\"medium\"\n use-checkbox\n @click.stop=\"selectOption(item.value)\"\n />\n <div v-if=\"!filteredOptionsRef.length && !isOptionsLoading\" class=\"nothing-found\">\n {{ emptyOptionsText }}\n </div>\n </DropdownOverlay>\n <DoubleContour class=\"pl-autocomplete-multi__contour\" :group-position=\"groupPosition\" />\n </div>\n </div>\n <div v-if=\"computedError\" class=\"pl-autocomplete-multi__error\">{{ computedError }}</div>\n <div v-else-if=\"helper\" class=\"pl-autocomplete-multi__helper\">{{ helper }}</div>\n </div>\n</template>\n"],"names":["__default__","emit","__emit","emitModel","v","slots","useSlots","props","__props","rootRef","ref","inputRef","overlay","useTemplateRef","data","reactive","watch","selectedValuesRef","computed","placeholderRef","debounce","toRef","searchOptionsRef","useWatchFetch","search","_open","_search","open","modelOptionsRef","allOptionsRef","modelOptions","searchOptions","seenValues","result","addOptions","options","option","canonicalValue","canonicalize","selectedOptionsRef","opt","deepEqual","filteredOptionsRef","selectedValues","unref","deepIncludes","isOptionsLoading","isDisabled","tabindex","updateActiveOption","selectOption","values","it","_a","unselectOption","d","setFocusOnInput","toggleOpen","onFocusOut","event","relatedTarget","_c","_b","handleKeydown","activeOption","filteredOptions","length","useLabelNotch","computedError","getErrorMessage","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_2","_hoisted_3","_cache","$event","_vModelText","_openBlock","_hoisted_5","_Fragment","_renderList","i","_createBlock","_unref","PlChip","_withModifiers","_createTextVNode","_toDisplayString","_hoisted_6","PlMaskIcon24","_renderSlot","_ctx","_hoisted_7","PlSvg","SvgRequired","PlTooltip","DropdownOverlay","_hoisted_8","item","index","DropdownListItem","_hoisted_9","_createVNode","DoubleContour","_hoisted_10","_hoisted_11"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { default as PlAutocompleteMulti, type OptionsSearch as PlAutocompleteMultiOptionsSearch } from './PlAutocompleteMulti.vue';
1
+ export { default as PlAutocompleteMulti, type OptionsSearch as PlAutocompleteMultiOptionsSearch, } from './PlAutocompleteMulti.vue';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocompleteMulti/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,KAAK,aAAa,IAAI,gCAAgC,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/PlAutocompleteMulti/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,IAAI,mBAAmB,EAC9B,KAAK,aAAa,IAAI,gCAAgC,GACvD,MAAM,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnAccent.vue.js","sources":["../../../src/components/PlBtnAccent/PlBtnAccent.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Accent button\n */\nexport default {\n name: 'PlBtnAccent',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-accent.scss';\nimport type { MaskIconName16, Size } from '../../types';\nimport BtnBase from '../../base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-accent\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n"],"names":["__default__","props","__props","_openBlock","_createBlock","BtnBase","_mergeProps","_renderSlot","_ctx"],"mappings":";;;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAQA,UAAMC,IAAQC;sBA6BZC,EAAA,GAAAC,EAEUC,GAFVC,EAEU,EAFD,OAAM,mBAAwBL,CAAK,GAAA;AAAA,iBAC1C,MAAQ;AAAA,QAARM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"PlBtnAccent.vue.js","sources":["../../../src/components/PlBtnAccent/PlBtnAccent.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Accent button\n */\nexport default {\n name: \"PlBtnAccent\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport \"./pl-btn-accent.scss\";\nimport type { MaskIconName16, Size } from \"../../types\";\nimport BtnBase from \"../../base/BtnBase.vue\";\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-accent\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n"],"names":["__default__","props","__props","_openBlock","_createBlock","BtnBase","_mergeProps","_renderSlot","_ctx"],"mappings":";;;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAQA,UAAMC,IAAQC;sBA6BZC,EAAA,GAAAC,EAEUC,GAFVC,EAEU,EAFD,OAAM,mBAAwBL,CAAK,GAAA;AAAA,iBAC1C,MAAQ;AAAA,QAARM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnDanger.vue.js","sources":["../../../src/components/PlBtnDanger/PlBtnDanger.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Danger button\n */\nexport default {\n name: 'PlBtnDanger',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-danger.scss';\nimport type { MaskIconName16, Size } from '../../types';\nimport BtnBase from '../../base/BtnBase.vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-danger\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n"],"names":["__default__","props","__props","_openBlock","_createBlock","BtnBase","_mergeProps","_renderSlot","_ctx"],"mappings":";;;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAQA,UAAMC,IAAQC;sBA6BZC,EAAA,GAAAC,EAEUC,GAFVC,EAEU,EAFD,OAAM,mBAAwBL,CAAK,GAAA;AAAA,iBAC1C,MAAQ;AAAA,QAARM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
1
+ {"version":3,"file":"PlBtnDanger.vue.js","sources":["../../../src/components/PlBtnDanger/PlBtnDanger.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Danger button\n */\nexport default {\n name: \"PlBtnDanger\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport \"./pl-btn-danger.scss\";\nimport type { MaskIconName16, Size } from \"../../types\";\nimport BtnBase from \"../../base/BtnBase.vue\";\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center\n */\n justifyCenter?: boolean;\n}>();\n</script>\n\n<template>\n <BtnBase class=\"pl-btn-danger\" v-bind=\"props\">\n <slot />\n </BtnBase>\n</template>\n"],"names":["__default__","props","__props","_openBlock","_createBlock","BtnBase","_mergeProps","_renderSlot","_ctx"],"mappings":";;;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAQA,UAAMC,IAAQC;sBA6BZC,EAAA,GAAAC,EAEUC,GAFVC,EAEU,EAFD,OAAM,mBAAwBL,CAAK,GAAA;AAAA,iBAC1C,MAAQ;AAAA,QAARM,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnGhost.vue.js","sources":["../../../src/components/PlBtnGhost/PlBtnGhost.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Ghost button\n */\nexport default {\n name: 'PlBtnGhost',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport './pl-btn-ghost.scss';\nimport type { MaskIconName24, Size } from '../../types';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { computed, ref, useSlots } from 'vue';\nimport { useRipple } from '../../composition/useRipple';\n\nconst props = withDefaults(\n defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName24;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `false` by default)\n */\n justifyCenter?: boolean;\n }>(),\n {\n size: undefined,\n icon: undefined,\n justifyCenter: false,\n },\n);\n\nconst small = computed(() => props.size === 'small');\nconst large = computed(() => props.size === 'large');\n\nconst btnRef = ref();\n\nconst slots = useSlots();\n\nuseRipple(btnRef);\n</script>\n\n<template>\n <button\n ref=\"btnRef\"\n tabindex=\"0\"\n class=\"pl-btn-ghost\"\n :class=\"{ loading, small, large, round, reverse, justifyCenter, [$attrs.class + '']: true }\"\n v-bind=\"{ ...$attrs, disabled: Boolean($attrs.disabled) || loading }\"\n >\n <span v-if=\"slots.default && !round\">\n <slot />\n </span>\n <slot name=\"icon\">\n <PlMaskIcon24 v-if=\"loading\" name=\"loading\" :size=\"size\" />\n <PlMaskIcon24 v-else-if=\"icon\" :name=\"icon\" :size=\"size\" />\n </slot>\n <slot name=\"append\" />\n </button>\n</template>\n"],"names":["__default__","props","__props","small","computed","large","btnRef","ref","slots","useSlots","useRipple","_openBlock","_createElementBlock","_mergeProps","$attrs","_unref","_hoisted_1","_renderSlot","_ctx","_createBlock","PlMaskIcon24"],"mappings":";;;;sBAIAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAUA,UAAMC,IAAQC,GAkCRC,IAAQC,EAAS,MAAMH,EAAM,SAAS,OAAO,GAC7CI,IAAQD,EAAS,MAAMH,EAAM,SAAS,OAAO,GAE7CK,IAASC,EAAA,GAETC,IAAQC,EAAA;AAEd,WAAAC,EAAUJ,CAAM,cAIdK,EAAA,GAAAC,EAeS,UAfTC,EAeS;AAAA,eAdH;AAAA,MAAJ,KAAIP;AAAA,MACJ,UAAS;AAAA,MACT,QAAM,gBAAc,EAAA,SACVJ,EAAA,SAAO,OAAEC,SAAK,OAAEE,EAAA,OAAK,OAAEH,EAAA,gBAAOA,EAAA,SAAO,eAAEA,iBAAa,CAAGY,EAAAA,OAAO,QAAK,EAAA,GAAA,IAAA;AAAA,IAAA,GAChEA,EAAAA,GAAAA,EAAAA,kBAAkB,EAAQA,SAAO,YAAaZ,EAAA,QAAA,CAAO,GAAA;AAAA,MAEtDa,EAAAP,CAAA,EAAM,WAAO,CAAKN,EAAA,cAA9BU,EAEO,QAAAI,GAAA;AAAA,QADLC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAEVD,EAGOC,sBAHP,MAGO;AAAA,QAFehB,EAAA,gBAApBiB,EAA2DJ,EAAAK,CAAA,GAAA;AAAA;UAA9B,MAAK;AAAA,UAAW,MAAMlB,EAAA;AAAA,QAAA,yBAC1BA,EAAA,aAAzBiB,EAA2DJ,EAAAK,CAAA,GAAA;AAAA;UAA3B,MAAMlB,EAAA;AAAA,UAAO,MAAMA,EAAA;AAAA,QAAA;;MAErDe,EAAsBC,EAAA,QAAA,QAAA;AAAA,IAAA;;;"}
1
+ {"version":3,"file":"PlBtnGhost.vue.js","sources":["../../../src/components/PlBtnGhost/PlBtnGhost.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Ghost button\n */\nexport default {\n name: \"PlBtnGhost\",\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport \"./pl-btn-ghost.scss\";\nimport type { MaskIconName24, Size } from \"../../types\";\nimport { PlMaskIcon24 } from \"../PlMaskIcon24\";\nimport { computed, ref, useSlots } from \"vue\";\nimport { useRipple } from \"../../composition/useRipple\";\n\nconst props = withDefaults(\n defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * If `true` the shape is round.\n */\n round?: boolean;\n /**\n * Icon to display\n */\n icon?: MaskIconName24;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `false` by default)\n */\n justifyCenter?: boolean;\n }>(),\n {\n size: undefined,\n icon: undefined,\n justifyCenter: false,\n },\n);\n\nconst small = computed(() => props.size === \"small\");\nconst large = computed(() => props.size === \"large\");\n\nconst btnRef = ref();\n\nconst slots = useSlots();\n\nuseRipple(btnRef);\n</script>\n\n<template>\n <button\n ref=\"btnRef\"\n tabindex=\"0\"\n class=\"pl-btn-ghost\"\n :class=\"{ loading, small, large, round, reverse, justifyCenter, [$attrs.class + '']: true }\"\n v-bind=\"{ ...$attrs, disabled: Boolean($attrs.disabled) || loading }\"\n >\n <span v-if=\"slots.default && !round\">\n <slot />\n </span>\n <slot name=\"icon\">\n <PlMaskIcon24 v-if=\"loading\" name=\"loading\" :size=\"size\" />\n <PlMaskIcon24 v-else-if=\"icon\" :name=\"icon\" :size=\"size\" />\n </slot>\n <slot name=\"append\" />\n </button>\n</template>\n"],"names":["__default__","props","__props","small","computed","large","btnRef","ref","slots","useSlots","useRipple","_openBlock","_createElementBlock","_mergeProps","$attrs","_unref","_hoisted_1","_renderSlot","_ctx","_createBlock","PlMaskIcon24"],"mappings":";;;;sBAIAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;AAUA,UAAMC,IAAQC,GAkCRC,IAAQC,EAAS,MAAMH,EAAM,SAAS,OAAO,GAC7CI,IAAQD,EAAS,MAAMH,EAAM,SAAS,OAAO,GAE7CK,IAASC,EAAA,GAETC,IAAQC,EAAA;AAEd,WAAAC,EAAUJ,CAAM,cAIdK,EAAA,GAAAC,EAeS,UAfTC,EAeS;AAAA,eAdH;AAAA,MAAJ,KAAIP;AAAA,MACJ,UAAS;AAAA,MACT,QAAM,gBAAc,EAAA,SACVJ,EAAA,SAAO,OAAEC,SAAK,OAAEE,EAAA,OAAK,OAAEH,EAAA,gBAAOA,EAAA,SAAO,eAAEA,iBAAa,CAAGY,EAAAA,OAAO,QAAK,EAAA,GAAA,IAAA;AAAA,IAAA,GAChEA,EAAAA,GAAAA,EAAAA,kBAAkB,EAAQA,SAAO,YAAaZ,EAAA,QAAA,CAAO,GAAA;AAAA,MAEtDa,EAAAP,CAAA,EAAM,WAAO,CAAKN,EAAA,cAA9BU,EAEO,QAAAI,GAAA;AAAA,QADLC,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;MAEVD,EAGOC,sBAHP,MAGO;AAAA,QAFehB,EAAA,gBAApBiB,EAA2DJ,EAAAK,CAAA,GAAA;AAAA;UAA9B,MAAK;AAAA,UAAW,MAAMlB,EAAA;AAAA,QAAA,yBAC1BA,EAAA,aAAzBiB,EAA2DJ,EAAAK,CAAA,GAAA;AAAA;UAA3B,MAAMlB,EAAA;AAAA,UAAO,MAAMA,EAAA;AAAA,QAAA;;MAErDe,EAAsBC,EAAA,QAAA,QAAA;AAAA,IAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnGroup.vue.js","sources":["../../../src/components/PlBtnGroup/PlBtnGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlBtnGroup',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport './pl-btn-group.scss';\nimport { computed, useSlots } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\nimport InnerBorder from '../../utils/InnerBorder.vue';\nimport type { SimpleOption } from '../../types';\nimport { getErrorMessage } from '../../helpers/error.ts';\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M): void;\n}>();\n\nconst emitModel = (v: M) => emit('update:modelValue', v);\n\nconst props = defineProps<{\n /**\n * The current selected value.\n */\n modelValue?: M;\n /**\n * The label text for the component (optional)\n */\n label?: string;\n /**\n * List of available options for the component\n */\n options: Readonly<SimpleOption<M>[]>;\n /**\n * If `true`, the component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the height of the component is 32px\n */\n compact?: boolean;\n /**\n * A helper text displayed below the component when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the component (optional)\n */\n error?: unknown;\n}>();\n\nconst normalizedOptions = computed(() =>\n props.options.map((it) => ({\n label: 'label' in it ? it.label : it.text,\n value: it.value,\n })),\n);\n</script>\n\n<template>\n <div class=\"pl-btn-group\" :class=\"{ disabled, compact }\">\n <label v-if=\"label\">\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 <InnerBorder class=\"pl-btn-group__container\">\n <div\n v-for=\"(opt, i) in normalizedOptions\"\n :key=\"i\"\n class=\"pl-btn-group__option text-s\"\n :tabindex=\"modelValue === opt.value || disabled ? undefined : 0\"\n :class=\"{ active: modelValue === opt.value }\"\n @keydown.enter=\"emitModel(opt.value)\"\n @click=\"emitModel(opt.value)\"\n >\n {{ opt.label }}\n </div>\n </InnerBorder>\n <div v-if=\"helper\" class=\"pl-btn-group__helper\">{{ helper }}</div>\n <div v-else-if=\"error\" class=\"pl-btn-group__error\">{{ getErrorMessage(error) }}</div>\n </div>\n</template>\n"],"names":["__default__","slots","useSlots","emit","__emit","emitModel","v","props","__props","normalizedOptions","computed","it","_createElementBlock","_normalizeClass","_hoisted_1","_createElementVNode","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_createVNode","InnerBorder","_openBlock","_Fragment","_renderList","opt","i","_withKeys","$event","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","getErrorMessage"],"mappings":";;;;;;;;;;;GAIAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;AAWA,UAAMC,IAAQC,EAAA,GAERC,IAAOC,GAOPC,IAAY,CAACC,MAASH,EAAK,qBAAqBG,CAAC,GAEjDC,IAAQC,GA+BRC,IAAoBC;AAAA,MAAS,MACjCH,EAAM,QAAQ,IAAI,CAACI,OAAQ;AAAA,QACzB,OAAO,WAAWA,IAAKA,EAAG,QAAQA,EAAG;AAAA,QACrC,OAAOA,EAAG;AAAA,MAAA,EACV;AAAA,IAAA;2BAKFC,EAwBM,OAAA;AAAA,MAxBD,OAAKC,EAAA,CAAC,gBAAc,EAAA,UAAWL,EAAA,mBAAUA,EAAA,SAAO,CAAA;AAAA,IAAA;MACtCA,EAAA,cAAbI,EAOQ,SAAAE,GAAA;AAAA,QANNC,EAAwB,gBAAfP,EAAA,KAAK,GAAA,CAAA;AAAA,QACGQ,EAAAf,CAAA,EAAM,gBAAvBgB,EAIYD,EAAAE,CAAA,GAAA;AAAA;UAJoB,OAAM;AAAA,UAAO,UAAS;AAAA,QAAA;UACzC,WACT,MAAuB;AAAA,YAAvBC,EAAuBC,EAAA,QAAA,SAAA;AAAA,UAAA;;;;MAI7BC,EAYcC,GAAA,EAZD,OAAM,6BAAyB;AAAA,mBAExC,MAAqC;AAAA,WADvCC,EAAA,EAAA,GAAAX,EAUMY,GAAA,MAAAC,EATehB,EAAA,OAAiB,CAA5BiB,GAAKC,YADff,EAUM,OAAA;AAAA,YARH,KAAKe;AAAA,YACN,UAAM,+BAA6B,EAAA,QAEjBnB,iBAAekB,EAAI,MAAA,CAAK,CAAA;AAAA,YADzC,UAAUlB,iBAAekB,EAAI,SAASlB,EAAA,WAAW,SAAS;AAAA,YAE1D,WAAOoB,EAAA,CAAAC,MAAQxB,EAAUqB,EAAI,KAAK,GAAA,CAAA,OAAA,CAAA;AAAA,YAClC,SAAK,CAAAG,MAAExB,EAAUqB,EAAI,KAAK;AAAA,UAAA,GAExBI,EAAAJ,EAAI,KAAK,GAAA,IAAAK,CAAA;;;;MAGLvB,EAAA,eAAXI,EAAkE,OAAlEoB,GAAkEF,EAAftB,EAAA,MAAM,GAAA,CAAA,KACzCA,EAAA,SAAhBe,KAAAX,EAAqF,OAArFqB,GAAqFH,EAA/Bd,EAAAkB,CAAA,EAAgB1B,EAAA,KAAK,CAAA,GAAA,CAAA;;;;"}
1
+ {"version":3,"file":"PlBtnGroup.vue.js","sources":["../../../src/components/PlBtnGroup/PlBtnGroup.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: \"PlBtnGroup\",\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = unknown\">\nimport \"./pl-btn-group.scss\";\nimport { computed, useSlots } from \"vue\";\nimport { PlTooltip } from \"../PlTooltip\";\nimport InnerBorder from \"../../utils/InnerBorder.vue\";\nimport type { SimpleOption } from \"../../types\";\nimport { getErrorMessage } from \"../../helpers/error.ts\";\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: \"update:modelValue\", value: M): void;\n}>();\n\nconst emitModel = (v: M) => emit(\"update:modelValue\", v);\n\nconst props = defineProps<{\n /**\n * The current selected value.\n */\n modelValue?: M;\n /**\n * The label text for the component (optional)\n */\n label?: string;\n /**\n * List of available options for the component\n */\n options: Readonly<SimpleOption<M>[]>;\n /**\n * If `true`, the component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * If `true`, the height of the component is 32px\n */\n compact?: boolean;\n /**\n * A helper text displayed below the component when there are no errors (optional).\n */\n helper?: string;\n /**\n * Error message displayed below the component (optional)\n */\n error?: unknown;\n}>();\n\nconst normalizedOptions = computed(() =>\n props.options.map((it) => ({\n label: \"label\" in it ? it.label : it.text,\n value: it.value,\n })),\n);\n</script>\n\n<template>\n <div class=\"pl-btn-group\" :class=\"{ disabled, compact }\">\n <label v-if=\"label\">\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 <InnerBorder class=\"pl-btn-group__container\">\n <div\n v-for=\"(opt, i) in normalizedOptions\"\n :key=\"i\"\n class=\"pl-btn-group__option text-s\"\n :tabindex=\"modelValue === opt.value || disabled ? undefined : 0\"\n :class=\"{ active: modelValue === opt.value }\"\n @keydown.enter=\"emitModel(opt.value)\"\n @click=\"emitModel(opt.value)\"\n >\n {{ opt.label }}\n </div>\n </InnerBorder>\n <div v-if=\"helper\" class=\"pl-btn-group__helper\">{{ helper }}</div>\n <div v-else-if=\"error\" class=\"pl-btn-group__error\">{{ getErrorMessage(error) }}</div>\n </div>\n</template>\n"],"names":["__default__","slots","useSlots","emit","__emit","emitModel","v","props","__props","normalizedOptions","computed","it","_createElementBlock","_normalizeClass","_hoisted_1","_createElementVNode","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_createVNode","InnerBorder","_openBlock","_Fragment","_renderList","opt","i","_withKeys","$event","_toDisplayString","_hoisted_2","_hoisted_3","_hoisted_4","getErrorMessage"],"mappings":";;;;;;;;;;;GAIAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;AAWA,UAAMC,IAAQC,EAAA,GAERC,IAAOC,GAOPC,IAAY,CAACC,MAASH,EAAK,qBAAqBG,CAAC,GAEjDC,IAAQC,GA+BRC,IAAoBC;AAAA,MAAS,MACjCH,EAAM,QAAQ,IAAI,CAACI,OAAQ;AAAA,QACzB,OAAO,WAAWA,IAAKA,EAAG,QAAQA,EAAG;AAAA,QACrC,OAAOA,EAAG;AAAA,MAAA,EACV;AAAA,IAAA;2BAKFC,EAwBM,OAAA;AAAA,MAxBD,OAAKC,EAAA,CAAC,gBAAc,EAAA,UAAWL,EAAA,mBAAUA,EAAA,SAAO,CAAA;AAAA,IAAA;MACtCA,EAAA,cAAbI,EAOQ,SAAAE,GAAA;AAAA,QANNC,EAAwB,gBAAfP,EAAA,KAAK,GAAA,CAAA;AAAA,QACGQ,EAAAf,CAAA,EAAM,gBAAvBgB,EAIYD,EAAAE,CAAA,GAAA;AAAA;UAJoB,OAAM;AAAA,UAAO,UAAS;AAAA,QAAA;UACzC,WACT,MAAuB;AAAA,YAAvBC,EAAuBC,EAAA,QAAA,SAAA;AAAA,UAAA;;;;MAI7BC,EAYcC,GAAA,EAZD,OAAM,6BAAyB;AAAA,mBAExC,MAAqC;AAAA,WADvCC,EAAA,EAAA,GAAAX,EAUMY,GAAA,MAAAC,EATehB,EAAA,OAAiB,CAA5BiB,GAAKC,YADff,EAUM,OAAA;AAAA,YARH,KAAKe;AAAA,YACN,UAAM,+BAA6B,EAAA,QAEjBnB,iBAAekB,EAAI,MAAA,CAAK,CAAA;AAAA,YADzC,UAAUlB,iBAAekB,EAAI,SAASlB,EAAA,WAAW,SAAS;AAAA,YAE1D,WAAOoB,EAAA,CAAAC,MAAQxB,EAAUqB,EAAI,KAAK,GAAA,CAAA,OAAA,CAAA;AAAA,YAClC,SAAK,CAAAG,MAAExB,EAAUqB,EAAI,KAAK;AAAA,UAAA,GAExBI,EAAAJ,EAAI,KAAK,GAAA,IAAAK,CAAA;;;;MAGLvB,EAAA,eAAXI,EAAkE,OAAlEoB,GAAkEF,EAAftB,EAAA,MAAM,GAAA,CAAA,KACzCA,EAAA,SAAhBe,KAAAX,EAAqF,OAArFqB,GAAqFH,EAA/Bd,EAAAkB,CAAA,EAAgB1B,EAAA,KAAK,CAAA,GAAA,CAAA;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnLink.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlBtnLink/PlBtnLink.vue"],"names":[],"mappings":"AA4CA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAIxD,KAAK,WAAW,GAAG;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,iBAAS,cAAc;WA4CT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAUD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe,6SAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"PlBtnLink.vue.d.ts","sourceRoot":"","sources":["../../../src/components/PlBtnLink/PlBtnLink.vue"],"names":[],"mappings":"AAiDA,OAAO,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAIxD,KAAK,WAAW,GAAG;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;IACZ;;OAEG;IACH,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;OAEG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAOF,iBAAS,cAAc;WA4CT,OAAO,IAA6B;;yBAVrB,GAAG;;;;EAe/B;AAUD,KAAK,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC;AAC9D,QAAA,MAAM,eAAe,6SAOnB,CAAC;wBACkB,uBAAuB,CAAC,OAAO,eAAe,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAAnG,wBAAoG;AAQpG,KAAK,uBAAuB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IACxC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KAEV,CAAA;CACD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlBtnLink.vue.js","sources":["../../../src/components/PlBtnLink/PlBtnLink.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport './pl-btn-link.scss';\nimport type { MaskIconName16, Size } from '../../types';\nimport BtnSecondary from '../PlBtnSecondary/PlBtnSecondary.vue';\nimport { ref } from 'vue';\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `true` by default)\n */\n justifyCenter?: boolean;\n /**\n * If `true`, the button is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n}>();\n\nconst hover = ref(false);\n</script>\n\n<template>\n <div class=\"ui-btn-link\" :class=\"{ disabled, loading, hover }\" @mouseover=\"hover = true\" @mouseleave=\"hover = false\">\n <BtnSecondary round :hover=\"hover\" v-bind=\"props\" />\n <slot />\n </div>\n</template>\n"],"names":["props","__props","hover","ref","_createElementBlock","_createVNode","BtnSecondary","_mergeProps","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GA2BRC,IAAQC,EAAI,EAAK;2BAIrBC,EAGM,OAAA;AAAA,MAHD,UAAM,eAAa,EAAA,UAAWH,YAAQ,SAAEA,EAAA,gBAASC,EAAA,MAAA,CAAK,CAAA;AAAA,MAAK,oCAAWA,EAAA,QAAK;AAAA,MAAU,qCAAYA,EAAA,QAAK;AAAA,IAAA;MACzGG,EAAoDC,GAApDC,EAAoD;AAAA,QAAtC,OAAA;AAAA,QAAO,OAAOL,EAAA;AAAA,MAAA,GAAeF,CAAK,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA;AAAA,MAChDQ,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}
1
+ {"version":3,"file":"PlBtnLink.vue.js","sources":["../../../src/components/PlBtnLink/PlBtnLink.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport \"./pl-btn-link.scss\";\nimport type { MaskIconName16, Size } from \"../../types\";\nimport BtnSecondary from \"../PlBtnSecondary/PlBtnSecondary.vue\";\nimport { ref } from \"vue\";\n\nconst props = defineProps<{\n /**\n * If `true,` the button is disabled, cannot be interacted with, and shows a special 'loading' icon.\n */\n loading?: boolean;\n /**\n * Size of the button, the default value is 'medium'\n */\n size?: Size;\n /**\n * Icon to display\n */\n icon?: MaskIconName16;\n /**\n * If `true`, an icon is displayed before the text.\n */\n reverse?: boolean;\n /**\n * Justify text at the center (is `true` by default)\n */\n justifyCenter?: boolean;\n /**\n * If `true`, the button is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n}>();\n\nconst hover = ref(false);\n</script>\n\n<template>\n <div\n class=\"ui-btn-link\"\n :class=\"{ disabled, loading, hover }\"\n @mouseover=\"hover = true\"\n @mouseleave=\"hover = false\"\n >\n <BtnSecondary round :hover=\"hover\" v-bind=\"props\" />\n <slot />\n </div>\n</template>\n"],"names":["props","__props","hover","ref","_createElementBlock","_createVNode","BtnSecondary","_mergeProps","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAQC,GA2BRC,IAAQC,EAAI,EAAK;2BAIrBC,EAQM,OAAA;AAAA,MAPJ,UAAM,eAAa,EAAA,UACTH,YAAQ,SAAEA,EAAA,gBAASC,EAAA,MAAA,CAAK,CAAA;AAAA,MACjC,oCAAWA,EAAA,QAAK;AAAA,MAChB,qCAAYA,EAAA,QAAK;AAAA,IAAA;MAElBG,EAAoDC,GAApDC,EAAoD;AAAA,QAAtC,OAAA;AAAA,QAAO,OAAOL,EAAA;AAAA,MAAA,GAAeF,CAAK,GAAA,MAAA,IAAA,CAAA,OAAA,CAAA;AAAA,MAChDQ,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}