@milaboratories/uikit 2.6.1 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/.turbo/turbo-build.log +143 -143
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +14 -0
  4. package/dist/base/BtnBase.vue.js +18 -18
  5. package/dist/base/BtnBase.vue.js.map +1 -1
  6. package/dist/components/ContextProvider.vue.js.map +1 -1
  7. package/dist/components/DataTable/BaseCellComponent.vue.js +20 -20
  8. package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
  9. package/dist/components/DataTable/ColumnCaret.vue.js +6 -6
  10. package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
  11. package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
  12. package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
  13. package/dist/components/DataTable/TScroll.vue.js +12 -12
  14. package/dist/components/DataTable/TScroll.vue.js.map +1 -1
  15. package/dist/components/DataTable/TableComponent.vue.js +5 -3
  16. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  17. package/dist/components/DataTable/TdCell.vue.js +36 -36
  18. package/dist/components/DataTable/TdCell.vue.js.map +1 -1
  19. package/dist/components/DataTable/ThCell.vue.js +27 -27
  20. package/dist/components/DataTable/ThCell.vue.js.map +1 -1
  21. package/dist/components/DataTable/TrBody.vue.js +12 -12
  22. package/dist/components/DataTable/TrBody.vue.js.map +1 -1
  23. package/dist/components/DataTable/TrHead.vue.js.map +1 -1
  24. package/dist/components/DataTable/assets/TableIcon.vue.js +2 -2
  25. package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
  26. package/dist/components/DropdownListItem.vue.js +18 -18
  27. package/dist/components/DropdownListItem.vue.js.map +1 -1
  28. package/dist/components/HScroll.vue.js.map +1 -1
  29. package/dist/components/InputRange.vue.js.map +1 -1
  30. package/dist/components/LongText.vue.js +1 -1
  31. package/dist/components/LongText.vue.js.map +1 -1
  32. package/dist/components/LongText.vue3.js +1 -1
  33. package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -1
  34. package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -1
  35. package/dist/components/PlAccordion/ExpandTransition.vue3.js +1 -1
  36. package/dist/components/PlAccordion/PlAccordion.vue.js.map +1 -1
  37. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
  38. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  39. package/dist/components/PlAlert/PlAlert.vue.js +23 -23
  40. package/dist/components/PlAlert/PlAlert.vue.js.map +1 -1
  41. package/dist/components/PlAutocomplete/PlAutocomplete.vue.d.ts +4 -0
  42. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +112 -106
  43. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  44. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.d.ts +4 -0
  45. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +100 -94
  46. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
  47. package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
  48. package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
  49. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js +21 -21
  50. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
  51. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +34 -34
  52. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
  53. package/dist/components/PlBtnLink/PlBtnLink.vue.js +12 -12
  54. package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
  55. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
  56. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
  57. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +31 -31
  58. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
  59. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +18 -18
  60. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  61. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  62. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +15 -15
  63. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  64. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  65. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  66. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  67. package/dist/components/PlCheckbox/PlCheckbox.vue.js +13 -13
  68. package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
  69. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js +6 -6
  70. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
  71. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +28 -28
  72. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
  73. package/dist/components/PlChip/PlChip.vue.js +20 -20
  74. package/dist/components/PlChip/PlChip.vue.js.map +1 -1
  75. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  76. package/dist/components/PlConfirmDialog.vue.js +14 -14
  77. package/dist/components/PlConfirmDialog.vue.js.map +1 -1
  78. package/dist/components/PlDialogModal/PlDialogModal.vue.js +30 -30
  79. package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  80. package/dist/components/PlDropdown/OptionList.vue.js +40 -40
  81. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
  82. package/dist/components/PlDropdown/PlDropdown.vue.d.ts +8 -0
  83. package/dist/components/PlDropdown/PlDropdown.vue.js +102 -95
  84. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  85. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +95 -93
  86. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
  87. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
  88. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +4 -4
  89. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
  90. package/dist/components/PlDropdownLine/ResizableInput.vue.js +12 -12
  91. package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
  92. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.d.ts +4 -0
  93. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +88 -82
  94. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
  95. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts +1 -1
  96. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
  97. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -11
  98. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  99. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts +1 -1
  100. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js +36 -36
  101. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
  102. package/dist/components/PlElementList/PlElementList.vue.d.ts +20 -0
  103. package/dist/components/PlElementList/PlElementList.vue2.js +180 -135
  104. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  105. package/dist/components/PlElementList/PlElementListItem.vue.d.ts +20 -0
  106. package/dist/components/PlElementList/PlElementListItem.vue2.js +101 -76
  107. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  108. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  109. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
  110. package/dist/components/PlFileDialog/Local.vue.js +24 -24
  111. package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
  112. package/dist/components/PlFileDialog/PlFileDialog.vue.js +38 -38
  113. package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
  114. package/dist/components/PlFileDialog/Remote.vue.js +2 -2
  115. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  116. package/dist/components/PlFileDialog/Shortcuts.vue2.js +4 -4
  117. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  118. package/dist/components/PlFileInput/PlFileInput.vue.d.ts +1 -1
  119. package/dist/components/PlFileInput/PlFileInput.vue.js +78 -76
  120. package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  121. package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
  122. package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
  123. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +11 -11
  124. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
  125. package/dist/components/PlLogView/PlLogView.vue.js +62 -60
  126. package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  127. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js +22 -22
  128. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
  129. package/dist/components/PlNumberField/PlNumberField.vue.d.ts +6 -1
  130. package/dist/components/PlNumberField/PlNumberField.vue.js +66 -60
  131. package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
  132. package/dist/components/PlProgressBar/PlProgressBar.vue.js +12 -12
  133. package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
  134. package/dist/components/PlProgressCell/PlProgressCell.vue.js +20 -20
  135. package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
  136. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  137. package/dist/components/PlRadio/PlRadioGroup.vue2.js +8 -8
  138. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  139. package/dist/components/PlSearchField/PlSearchField.vue2.js +19 -19
  140. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  141. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +8 -8
  142. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  143. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  144. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  145. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +5 -3
  146. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  147. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  148. package/dist/components/PlSplash/PlSplash.vue.js +16 -16
  149. package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
  150. package/dist/components/PlStatusTag/PlStatusTag.vue.js +7 -7
  151. package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
  152. package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
  153. package/dist/components/PlTabs/PlTabs.vue.js +18 -18
  154. package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
  155. package/dist/components/PlTabs/Tab.vue.js +9 -9
  156. package/dist/components/PlTabs/Tab.vue.js.map +1 -1
  157. package/dist/components/PlTextArea/PlTextArea.vue.js +55 -53
  158. package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
  159. package/dist/components/PlTextField/PlTextField.vue.d.ts +4 -0
  160. package/dist/components/PlTextField/PlTextField.vue.js +66 -60
  161. package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
  162. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js +14 -14
  163. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
  164. package/dist/components/PlTooltip/Beak.vue.js +2 -2
  165. package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
  166. package/dist/components/PlTooltip/PlTooltip.vue.js +50 -50
  167. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  168. package/dist/components/Scrollable.vue.js.map +1 -1
  169. package/dist/components/Slider.vue.js +35 -35
  170. package/dist/components/Slider.vue.js.map +1 -1
  171. package/dist/components/SliderRange.vue.js +47 -47
  172. package/dist/components/SliderRange.vue.js.map +1 -1
  173. package/dist/components/SliderRangeTriple.vue.js +47 -47
  174. package/dist/components/SliderRangeTriple.vue.js.map +1 -1
  175. package/dist/components/TabItem.vue.js.map +1 -1
  176. package/dist/components/ThemeSwitcher.vue.js +2 -2
  177. package/dist/components/ThemeSwitcher.vue.js.map +1 -1
  178. package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
  179. package/dist/components/VScroll.vue.js.map +1 -1
  180. package/dist/components/contextMenu/Menu.vue2.js +12 -12
  181. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  182. package/dist/composition/filters/metadata.d.ts +205 -0
  183. package/dist/composition/filters/metadata.js +129 -19
  184. package/dist/composition/filters/metadata.js.map +1 -1
  185. package/dist/index.js +1 -1
  186. package/dist/layout/PlBlockPage/PlBlockPage.vue.js +27 -27
  187. package/dist/layout/PlBlockPage/PlBlockPage.vue.js.map +1 -1
  188. package/dist/layout/PlContainer/PlContainer.vue.js +10 -10
  189. package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
  190. package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
  191. package/dist/layout/PlRow/PlRow.vue.js +8 -8
  192. package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
  193. package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
  194. package/dist/utils/DoubleContour.vue.d.ts +7 -1
  195. package/dist/utils/DoubleContour.vue.js +20 -13
  196. package/dist/utils/DoubleContour.vue.js.map +1 -1
  197. package/dist/utils/DoubleContour.vue3.js +7 -0
  198. package/dist/utils/DoubleContour.vue3.js.map +1 -0
  199. package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
  200. package/dist/utils/PlCloseModalBtn.vue.js +2 -2
  201. package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
  202. package/dist/utils/TextLabel.vue.js.map +1 -1
  203. package/package.json +5 -5
  204. package/src/components/PlAutocomplete/PlAutocomplete.vue +6 -1
  205. package/src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue +6 -1
  206. package/src/components/PlDropdown/PlDropdown.vue +12 -2
  207. package/src/components/PlDropdownMulti/PlDropdownMulti.vue +6 -1
  208. package/src/components/PlElementList/PlElementList.vue +40 -6
  209. package/src/components/PlElementList/PlElementListItem.vue +64 -47
  210. package/src/components/PlNumberField/PlNumberField.vue +4 -1
  211. package/src/components/PlTextField/PlTextField.vue +5 -1
  212. package/src/composition/filters/metadata.ts +105 -0
  213. package/src/utils/DoubleContour.vue +68 -2
  214. package/dist/utils/DoubleContour.vue2.js +0 -7
  215. package/dist/utils/DoubleContour.vue2.js.map +0 -1
@@ -1,10 +1,12 @@
1
- (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode(".pl-number-field{--contour-color: var(--txt-01);--contour-border-width: 1px;--options-bg: #fff;--option-hover-bg: var(--btn-sec-hover-grey);--label-offset-left-x: 8px;--label-offset-right-x: 8px;--label-color: var(--txt-01);--color-hint: #9d9eae}.pl-number-field ::placeholder{color:#cfd1db;opacity:1}.pl-number-field__main-wrapper{height:40px;position:relative}.pl-number-field__wrapper{padding-left:12px;border-radius:6px}.pl-number-field__wrapper.withoutArrows{padding-right:12px}.pl-number-field__icons{width:40px;border-radius:0 6px 6px 0;border-left:1px solid var(--contour-color)}.pl-number-field__icon{line-height:0}.pl-number-field__icon.disabled{cursor:not-allowed;position:relative;z-index:1}.pl-number-field__icon.disabled svg path{fill:#cfd1db}.pl-number-field__icon:hover{background-color:#9babcc29}.pl-number-field__icon:first-child{border-bottom:1px solid var(--contour-color)}.pl-number-field__hint{margin-top:3px;color:var(--color-hint)}.pl-number-field__error{margin-top:3px;color:var(--txt-error);font-size:12px;font-weight:500;line-height:16px}.pl-number-field input{outline:none;border:none;width:100%;background:unset;text-overflow:ellipsis}.pl-number-field__contour{border-radius:var(--border-radius-control);border:var(--contour-border-width) solid var(--contour-color);box-shadow:var(--contour-box-shadow);z-index:0;pointer-events:none;transition:all .3s}.pl-number-field:focus-within:not(.error){--label-color: var(--txt-focus);--contour-color: var(--border-color-focus);--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--border-color-focus-shadow)}.pl-number-field:focus-within.error{--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--color-error-shadow)}.pl-number-field.error{--contour-color: var(--txt-error);--label-color: var(--txt-error);--color-hint: var(--txt-error)}.pl-number-field.disabled{--contour-color: var(--color-dis-01);--control-mask-fill: var(--color-dis-01);cursor:not-allowed}.pl-number-field.disabled label,.pl-number-field.disabled .mi-number-field__hint,.pl-number-field.disabled input{color:var(--contour-color)}.pl-number-field.disabled svg path{fill:var(--contour-color)}.pl-number-field.disabled .mi-number-field__icons{pointer-events:none}.pl-number-field label{position:absolute;top:0;transform:translateY(-60%);left:var(--label-offset-left-x);display:flex;align-items:center;padding:0 4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;cursor:inherit;color:var(--label-color);transition:color .3s}.pl-number-field label .required{display:inline-block;font-weight:500;font-size:12px;line-height:16px;color:var(--txt-error);margin-right:4px}")),document.head.appendChild(r)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
2
- import { defineComponent as S, mergeModels as A, useModel as R, useSlots as F, ref as f, computed as i, watch as $, createElementBlock as c, openBlock as d, normalizeClass as p, createElementVNode as r, createCommentVNode as m, createVNode as j, withDirectives as T, createTextVNode as U, createBlock as K, toDisplayString as _, unref as C, withCtx as P, renderSlot as Z, vModelText as q } from "vue";
1
+ (function(){"use strict";try{if(typeof document<"u"){var r=document.createElement("style");r.appendChild(document.createTextNode(`.pl-number-field{--contour-color: var(--txt-01);--contour-border-width: 1px;--options-bg: #fff;--option-hover-bg: var(--btn-sec-hover-grey);--label-offset-left-x: 8px;--label-offset-right-x: 8px;--label-color: var(--txt-01);--color-hint: #9d9eae}.pl-number-field ::placeholder{color:#cfd1db;opacity:1}.pl-number-field__main-wrapper{height:40px;position:relative}.pl-number-field__wrapper{padding-left:12px;border-radius:6px}.pl-number-field__wrapper.withoutArrows{padding-right:12px}.pl-number-field__icons{width:40px;border-radius:0 6px 6px 0;border-left:1px solid var(--contour-color)}.pl-number-field__icon{line-height:0}.pl-number-field__icon.disabled{cursor:not-allowed;position:relative;z-index:1}.pl-number-field__icon.disabled svg path{fill:#cfd1db}.pl-number-field__icon:hover{background-color:#9babcc29}.pl-number-field__icon:first-child{border-bottom:1px solid var(--contour-color)}.pl-number-field__hint{margin-top:3px;color:var(--color-hint)}.pl-number-field__error{margin-top:3px;color:var(--txt-error);font-size:12px;font-weight:500;line-height:16px}.pl-number-field input{outline:none;border:none;width:100%;background:unset;text-overflow:ellipsis}.pl-number-field__contour{border-radius:var(--border-radius-control);border:var(--contour-border-width) solid var(--contour-color);box-shadow:var(--contour-box-shadow);z-index:0;pointer-events:none;transition:all .3s}.pl-number-field:focus-within:not(.error){--label-color: var(--txt-focus);--contour-color: var(--border-color-focus);--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--border-color-focus-shadow)}.pl-number-field:focus-within.error{--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--color-error-shadow)}.pl-number-field.error{--contour-color: var(--txt-error);--label-color: var(--txt-error);--color-hint: var(--txt-error)}.pl-number-field.disabled{--contour-color: var(--color-dis-01);--control-mask-fill: var(--color-dis-01);cursor:not-allowed}.pl-number-field.disabled label,.pl-number-field.disabled .mi-number-field__hint,.pl-number-field.disabled input{color:var(--contour-color)}.pl-number-field.disabled svg path{fill:var(--contour-color)}.pl-number-field.disabled .mi-number-field__icons{pointer-events:none}.pl-number-field label{position:absolute;top:0;transform:translateY(-60%);left:var(--label-offset-left-x);display:flex;align-items:center;padding:0 4px;overflow:hidden;white-space:pre;text-overflow:ellipsis;cursor:inherit;color:var(--label-color);transition:color .3s}.pl-number-field label .required{display:inline-block;font-weight:500;font-size:12px;line-height:16px;color:var(--txt-error);margin-right:4px}
2
+ .double-contour.top>div{border-bottom-right-radius:0;border-bottom-left-radius:0}.double-contour.bottom>div{border-top-right-radius:0;border-top-left-radius:0}.double-contour.left>div{border-top-right-radius:0;border-bottom-right-radius:0}.double-contour.right>div{border-top-left-radius:0;border-bottom-left-radius:0}.double-contour.top-left>div{border-top-right-radius:0;border-bottom-left-radius:0;border-bottom-right-radius:0}.double-contour.top-right>div{border-bottom-right-radius:0;border-top-left-radius:0;border-top-right-radius:0}.double-contour.bottom-left>div{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:0}.double-contour.bottom-right>div{border-top-right-radius:0;border-bottom-left-radius:0;border-top-left-radius:0}.double-contour.middle>div{border-radius:0}`)),document.head.appendChild(r)}}catch(o){console.error("vite-plugin-css-injected-by-js",o)}})();
3
+ import { defineComponent as _, mergeModels as A, useModel as R, useSlots as $, ref as c, computed as s, watch as F, createElementBlock as m, openBlock as v, normalizeClass as p, createElementVNode as r, createCommentVNode as g, createVNode as P, withDirectives as j, createTextVNode as T, createBlock as U, toDisplayString as M, unref as C, withCtx as K, renderSlot as Z, vModelText as q } from "vue";
3
4
 
4
5
  import z from "../../utils/DoubleContour.vue.js";
6
+
5
7
  import { useLabelNotch as G } from "../../utils/useLabelNotch.js";
6
8
  import H from "../PlTooltip/PlTooltip.vue.js";
7
- import { parseNumber as M } from "./parseNumber.js";
9
+ import { parseNumber as D } from "./parseNumber.js";
8
10
  const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
9
11
  key: 0,
10
12
  class: "text-description"
@@ -13,7 +15,7 @@ const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
13
15
  class: "pl-number-field__error"
14
16
  }, Y = {
15
17
  name: "PlNumberField"
16
- }, ue = /* @__PURE__ */ S({
18
+ }, ie = /* @__PURE__ */ _({
17
19
  ...Y,
18
20
  props: /* @__PURE__ */ A({
19
21
  disabled: { type: Boolean },
@@ -25,39 +27,40 @@ const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
25
27
  useIncrementButtons: { type: Boolean, default: !0 },
26
28
  updateOnEnterOrClickOutside: { type: Boolean },
27
29
  errorMessage: { default: void 0 },
28
- validate: { type: Function, default: void 0 }
30
+ validate: { type: Function, default: void 0 },
31
+ groupPosition: { default: void 0 }
29
32
  }, {
30
33
  modelValue: { required: !0 },
31
34
  modelModifiers: {}
32
35
  }),
33
36
  emits: ["update:modelValue"],
34
- setup(g) {
35
- const t = g, n = R(g, "modelValue"), D = F(), V = f(), v = f();
37
+ setup(n) {
38
+ const t = n, u = R(n, "modelValue"), O = $(), V = c(), f = c();
36
39
  G(V);
37
- function x(e) {
40
+ function b(e) {
38
41
  return e === void 0 ? "" : String(+e);
39
42
  }
40
- const u = i(() => M(t, s.value)), w = f(void 0), O = () => w.value = void 0;
41
- $(n, (e) => {
42
- const l = u.value;
43
- (l.error || e !== l.value) && O();
43
+ const i = s(() => D(t, d.value)), w = c(void 0), E = () => w.value = void 0;
44
+ F(u, (e) => {
45
+ const l = i.value;
46
+ (l.error || e !== l.value) && E();
44
47
  });
45
- const s = i({
48
+ const d = s({
46
49
  get() {
47
- return w.value ?? x(n.value);
50
+ return w.value ?? b(u.value);
48
51
  },
49
52
  set(e) {
50
- const l = M(t, e);
51
- w.value = l.cleanInput, l.error || t.updateOnEnterOrClickOutside ? v.value.value = l.cleanInput : n.value = l.value;
53
+ const l = D(t, e);
54
+ w.value = l.cleanInput, l.error || t.updateOnEnterOrClickOutside ? f.value.value = l.cleanInput : u.value = l.value;
52
55
  }
53
- }), h = f(!1);
54
- function E() {
55
- u.value.error === void 0 && (n.value = u.value.value);
56
+ }), h = c(!1);
57
+ function I() {
58
+ i.value.error === void 0 && (u.value = i.value.value);
56
59
  }
57
- const b = i(() => {
60
+ const x = s(() => {
58
61
  let e = [];
59
62
  t.errorMessage && e.push(t.errorMessage);
60
- const l = u.value;
63
+ const l = i.value;
61
64
  if (l.error)
62
65
  e.push(l.error.message);
63
66
  else if (t.validate && l.value !== void 0) {
@@ -65,87 +68,90 @@ const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
65
68
  o && e.push(o);
66
69
  }
67
70
  return e = [...e], e.join(" ");
68
- }), y = i(() => {
69
- const e = u.value;
71
+ }), y = s(() => {
72
+ const e = i.value;
70
73
  return t.maxValue !== void 0 && e.value !== void 0 ? e.value >= t.maxValue : !1;
71
- }), k = i(() => {
72
- const e = u.value;
74
+ }), k = s(() => {
75
+ const e = i.value;
73
76
  return t.minValue !== void 0 && e.value !== void 0 ? e.value <= t.minValue : !1;
74
- }), a = i(
77
+ }), a = s(
75
78
  () => {
76
79
  var e;
77
80
  return 10 ** (((e = t.step.toString().split(".").at(1)) == null ? void 0 : e.length) ?? 0);
78
81
  }
79
82
  );
80
83
  function B() {
81
- const l = u.value.value;
84
+ const l = i.value.value;
82
85
  if (!y.value) {
83
86
  let o;
84
- l === void 0 ? o = t.minValue ? t.minValue : 0 : o = ((l || 0) * a.value + t.step * a.value) / a.value, n.value = t.maxValue !== void 0 ? Math.min(t.maxValue, o) : o;
87
+ l === void 0 ? o = t.minValue ? t.minValue : 0 : o = ((l || 0) * a.value + t.step * a.value) / a.value, u.value = t.maxValue !== void 0 ? Math.min(t.maxValue, o) : o;
85
88
  }
86
89
  }
87
90
  function L() {
88
- const l = u.value.value;
91
+ const l = i.value.value;
89
92
  if (!k.value) {
90
93
  let o;
91
- l === void 0 ? o = 0 : o = ((l || 0) * a.value - t.step * a.value) / a.value, n.value = t.minValue !== void 0 ? Math.max(t.minValue, o) : o;
94
+ l === void 0 ? o = 0 : o = ((l || 0) * a.value - t.step * a.value) / a.value, u.value = t.minValue !== void 0 ? Math.max(t.minValue, o) : o;
92
95
  }
93
96
  }
94
- function I(e) {
97
+ function N(e) {
95
98
  var l, o;
96
- t.updateOnEnterOrClickOutside && (e.code === "Escape" && (s.value = x(n.value), (l = v.value) == null || l.blur()), e.code === "Enter" && ((o = v.value) == null || o.blur())), e.code === "Enter" && (s.value = String(n.value)), ["ArrowDown", "ArrowUp"].includes(e.code) && e.preventDefault(), t.useIncrementButtons && e.code === "ArrowUp" && B(), t.useIncrementButtons && e.code === "ArrowDown" && L();
99
+ t.updateOnEnterOrClickOutside && (e.code === "Escape" && (d.value = b(u.value), (l = f.value) == null || l.blur()), e.code === "Enter" && ((o = f.value) == null || o.blur())), e.code === "Enter" && (d.value = String(u.value)), ["ArrowDown", "ArrowUp"].includes(e.code) && e.preventDefault(), t.useIncrementButtons && e.code === "ArrowUp" && B(), t.useIncrementButtons && e.code === "ArrowDown" && L();
97
100
  }
98
- const N = (e) => {
101
+ const S = (e) => {
99
102
  e.detail > 1 && e.preventDefault();
100
103
  };
101
- return (e, l) => (d(), c("div", {
104
+ return (e, l) => (v(), m("div", {
102
105
  ref_key: "rootRef",
103
106
  ref: V,
104
- class: p([{ error: !!b.value.trim(), disabled: e.disabled }, "pl-number-field d-flex-column"]),
105
- onKeydown: l[3] || (l[3] = (o) => I(o))
107
+ class: p([{ error: !!x.value.trim(), disabled: n.disabled }, "pl-number-field d-flex-column"]),
108
+ onKeydown: l[3] || (l[3] = (o) => N(o))
106
109
  }, [
107
110
  r("div", J, [
108
- j(z, { class: "pl-number-field__contour" }),
111
+ P(z, {
112
+ class: "pl-number-field__contour",
113
+ "group-position": n.groupPosition
114
+ }, null, 8, ["group-position"]),
109
115
  r("div", {
110
- class: p(["pl-number-field__wrapper flex-grow d-flex flex-align-center", { withoutArrows: !e.useIncrementButtons }])
116
+ class: p(["pl-number-field__wrapper flex-grow d-flex flex-align-center", { withoutArrows: !n.useIncrementButtons }])
111
117
  }, [
112
- e.label ? (d(), c("label", Q, [
113
- U(_(e.label) + " ", 1),
114
- C(D).tooltip ? (d(), K(C(H), {
118
+ n.label ? (v(), m("label", Q, [
119
+ T(M(n.label) + " ", 1),
120
+ C(O).tooltip ? (v(), U(C(H), {
115
121
  key: 0,
116
122
  class: "info",
117
123
  position: "top"
118
124
  }, {
119
- tooltip: P(() => [
125
+ tooltip: K(() => [
120
126
  Z(e.$slots, "tooltip")
121
127
  ]),
122
128
  _: 3
123
- })) : m("", !0)
124
- ])) : m("", !0),
125
- T(r("input", {
129
+ })) : g("", !0)
130
+ ])) : g("", !0),
131
+ j(r("input", {
126
132
  ref_key: "inputRef",
127
- ref: v,
128
- "onUpdate:modelValue": l[0] || (l[0] = (o) => s.value = o),
129
- disabled: e.disabled,
130
- placeholder: e.placeholder,
133
+ ref: f,
134
+ "onUpdate:modelValue": l[0] || (l[0] = (o) => d.value = o),
135
+ disabled: n.disabled,
136
+ placeholder: n.placeholder,
131
137
  class: "text-s flex-grow",
132
138
  onFocusin: l[1] || (l[1] = (o) => h.value = !0),
133
139
  onFocusout: l[2] || (l[2] = (o) => {
134
- h.value = !1, E();
140
+ h.value = !1, I();
135
141
  })
136
142
  }, null, 40, W), [
137
- [q, s.value]
143
+ [q, d.value]
138
144
  ])
139
145
  ], 2),
140
- e.useIncrementButtons ? (d(), c("div", {
146
+ n.useIncrementButtons ? (v(), m("div", {
141
147
  key: 0,
142
148
  class: "pl-number-field__icons d-flex-column",
143
- onMousedown: N
149
+ onMousedown: S
144
150
  }, [
145
151
  r("div", {
146
152
  class: p([{ disabled: y.value }, "pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
147
153
  onClick: B
148
- }, l[4] || (l[4] = [
154
+ }, [...l[4] || (l[4] = [
149
155
  r("svg", {
150
156
  xmlns: "http://www.w3.org/2000/svg",
151
157
  width: "16",
@@ -160,11 +166,11 @@ const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
160
166
  fill: "#110529"
161
167
  })
162
168
  ], -1)
163
- ]), 2),
169
+ ])], 2),
164
170
  r("div", {
165
171
  class: p([{ disabled: k.value }, "pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center"]),
166
172
  onClick: L
167
- }, l[5] || (l[5] = [
173
+ }, [...l[5] || (l[5] = [
168
174
  r("svg", {
169
175
  xmlns: "http://www.w3.org/2000/svg",
170
176
  width: "16",
@@ -179,14 +185,14 @@ const J = { class: "pl-number-field__main-wrapper d-flex" }, Q = {
179
185
  fill: "#110529"
180
186
  })
181
187
  ], -1)
182
- ]), 2)
183
- ], 32)) : m("", !0)
188
+ ])], 2)
189
+ ], 32)) : g("", !0)
184
190
  ]),
185
- b.value.trim() ? (d(), c("div", X, _(b.value), 1)) : m("", !0)
191
+ x.value.trim() ? (v(), m("div", X, M(x.value), 1)) : g("", !0)
186
192
  ], 34));
187
193
  }
188
194
  });
189
195
  export {
190
- ue as default
196
+ ie as default
191
197
  };
192
198
  //# sourceMappingURL=PlNumberField.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlNumberField.vue.js","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Number input field with increment/decrement buttons, validation, and min/max constraints.\n *\n * @example\n * <PlNumberField v-model=\"price\" :step=\"0.01\" :min-value=\"0\" label=\"Price\" />\n *\n * @example\n * <PlNumberField\n * v-model=\"evenNumber\"\n * :validate=\"(v) => v % 2 !== 0 ? 'Number must be even' : undefined\"\n * :update-on-enter-or-click-outside=\"true\"\n * label=\"Even Number\"\n * />\n */\nexport default {\n name: 'PlNumberField',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport './pl-number-field.scss';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\nimport { parseNumber } from './parseNumber';\n\nconst props = withDefaults(defineProps<{\n /** Input is disabled if true */\n disabled?: boolean;\n /** Label on the top border of the field, empty by default */\n label?: string;\n /** Input placeholder, empty by default */\n placeholder?: string;\n /** Step for increment/decrement buttons, 1 by default */\n step?: number;\n /** If defined - show an error if value is lower */\n minValue?: number;\n /** If defined - show an error if value is higher */\n maxValue?: number;\n /** If false - remove buttons on the right */\n useIncrementButtons?: boolean;\n /** If true - changes do not apply immediately, they apply only by removing focus from the input (by click enter or by click outside) */\n updateOnEnterOrClickOutside?: boolean;\n /** Error message that shows always when it's provided, without other checks */\n errorMessage?: string;\n /** Additional validity check for input value that must return an error text if failed */\n validate?: (v: number) => string | undefined;\n}>(), {\n step: 1,\n label: undefined,\n placeholder: undefined,\n minValue: undefined,\n maxValue: undefined,\n useIncrementButtons: true,\n updateOnEnter: false,\n errorMessage: undefined,\n validate: undefined,\n});\n\nconst modelValue = defineModel<number | undefined>({ required: true });\n\nconst slots = useSlots();\n\nconst rootRef = ref<HTMLElement>();\nconst inputRef = ref<HTMLInputElement>();\n\nuseLabelNotch(rootRef);\n\nfunction modelToString(v: number | undefined) {\n return v === undefined ? '' : String(+v); // (+v) to avoid staying in input non-number values if they are provided in model\n}\n\nconst parsedResult = computed(() => parseNumber(props, inputValue.value));\n\nconst cachedValue = ref<string | undefined>(undefined);\n\nconst resetCachedValue = () => cachedValue.value = undefined;\n\nwatch(modelValue, (n) => {\n const r = parsedResult.value;\n if (r.error || n !== r.value) {\n resetCachedValue();\n }\n});\n\nconst inputValue = computed({\n get() {\n return cachedValue.value ?? modelToString(modelValue.value);\n },\n set(nextValue: string) {\n const r = parseNumber(props, nextValue);\n\n cachedValue.value = r.cleanInput;\n\n if (r.error || props.updateOnEnterOrClickOutside) {\n inputRef.value!.value = r.cleanInput;\n } else {\n modelValue.value = r.value;\n }\n },\n});\n\nconst focused = ref(false);\n\nfunction applyChanges() {\n if (parsedResult.value.error === undefined) {\n modelValue.value = parsedResult.value.value;\n }\n}\n\nconst errors = computed(() => {\n let ers: string[] = [];\n\n if (props.errorMessage) {\n ers.push(props.errorMessage);\n }\n\n const r = parsedResult.value;\n\n if (r.error) {\n ers.push(r.error.message);\n } else if (props.validate && r.value !== undefined) {\n const error = props.validate(r.value);\n if (error) {\n ers.push(error);\n }\n }\n\n ers = [...ers];\n\n return ers.join(' ');\n});\n\nconst isIncrementDisabled = computed(() => {\n const r = parsedResult.value;\n\n if (props.maxValue !== undefined && r.value !== undefined) {\n return r.value >= props.maxValue;\n }\n\n return false;\n});\n\nconst isDecrementDisabled = computed(() => {\n const r = parsedResult.value;\n\n if (props.minValue !== undefined && r.value !== undefined) {\n return r.value <= props.minValue;\n }\n\n return false;\n});\n\nconst multiplier = computed(() =>\n 10 ** (props.step.toString().split('.').at(1)?.length ?? 0),\n);\n\nfunction increment() {\n const r = parsedResult.value;\n\n const parsedValue = r.value;\n\n if (!isIncrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = props.minValue ? props.minValue : 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n + props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.maxValue !== undefined ? Math.min(props.maxValue, nV) : nV;\n }\n}\n\nfunction decrement() {\n const r = parsedResult.value;\n\n const parsedValue = r.value;\n\n if (!isDecrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n - props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.minValue !== undefined ? Math.max(props.minValue, nV) : nV;\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (props.updateOnEnterOrClickOutside) {\n if (e.code === 'Escape') {\n inputValue.value = modelToString(modelValue.value);\n inputRef.value?.blur();\n }\n if (e.code === 'Enter') {\n inputRef.value?.blur();\n }\n }\n\n if (e.code === 'Enter') {\n inputValue.value = String(modelValue.value); // to make .1 => 0.1, 10.00 => 10, remove leading zeros etc\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n e.preventDefault();\n }\n\n if (props.useIncrementButtons && e.code === 'ArrowUp') {\n increment();\n }\n\n if (props.useIncrementButtons && e.code === 'ArrowDown') {\n decrement();\n }\n}\n\n// https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click#:~:text=If%20you%20encounter%20a%20situation,none%3B%20to%20the%20summary%20element.\n// this prevents selecting of more than input content in some cases,\n// but also disable selecting input content by double-click (useful feature)\nconst onMousedown = (ev: MouseEvent) => {\n if (ev.detail > 1) {\n ev.preventDefault();\n }\n};\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"{ error: !!errors.trim(), disabled: disabled }\"\n class=\"pl-number-field d-flex-column\"\n @keydown=\"handleKeyPress($event)\"\n >\n <div class=\"pl-number-field__main-wrapper d-flex\">\n <DoubleContour class=\"pl-number-field__contour\"/>\n <div\n class=\"pl-number-field__wrapper flex-grow d-flex flex-align-center\"\n :class=\"{withoutArrows: !useIncrementButtons}\"\n >\n <label v-if=\"label\" class=\"text-description\">\n {{ label }}\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\"/>\n </template>\n </PlTooltip>\n </label>\n <input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n class=\"text-s flex-grow\"\n @focusin=\"focused = true\"\n @focusout=\"focused = false; applyChanges()\"\n />\n </div>\n <div v-if=\"useIncrementButtons\" class=\"pl-number-field__icons d-flex-column\" @mousedown=\"onMousedown\">\n <div\n :class=\"{ disabled: isIncrementDisabled }\"\n class=\"pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"increment\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 4.93933L13.5303 10.4697L12.4697 11.5303L8 7.06065L3.53033 11.5303L2.46967 10.4697L8 4.93933Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n <div\n :class=\"{ disabled: isDecrementDisabled }\"\n class=\"pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"decrement\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.46967 6.53033L3.53033 5.46967L8 9.93934L12.4697 5.46967L13.5303 6.53033L8 12.0607L2.46967 6.53033Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n </div>\n </div>\n <div v-if=\"errors.trim()\" class=\"pl-number-field__error\">\n {{ errors }}\n </div>\n </div>\n</template>\n"],"names":["__default__","props","__props","modelValue","_useModel","slots","useSlots","rootRef","ref","inputRef","useLabelNotch","modelToString","v","parsedResult","computed","parseNumber","inputValue","cachedValue","resetCachedValue","watch","n","r","nextValue","focused","applyChanges","errors","ers","error","isIncrementDisabled","isDecrementDisabled","multiplier","_a","increment","parsedValue","nV","decrement","handleKeyPress","_b","onMousedown","ev"],"mappings":"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"}
1
+ {"version":3,"file":"PlNumberField.vue.js","sources":["../../../src/components/PlNumberField/PlNumberField.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Number input field with increment/decrement buttons, validation, and min/max constraints.\n *\n * @example\n * <PlNumberField v-model=\"price\" :step=\"0.01\" :min-value=\"0\" label=\"Price\" />\n *\n * @example\n * <PlNumberField\n * v-model=\"evenNumber\"\n * :validate=\"(v) => v % 2 !== 0 ? 'Number must be even' : undefined\"\n * :update-on-enter-or-click-outside=\"true\"\n * label=\"Even Number\"\n * />\n */\nexport default {\n name: 'PlNumberField',\n};\n</script>\n\n<script setup lang=\"ts\">\nimport './pl-number-field.scss';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlTooltip } from '../PlTooltip';\nimport { parseNumber } from './parseNumber';\n\nconst props = withDefaults(defineProps<{\n /** Input is disabled if true */\n disabled?: boolean;\n /** Label on the top border of the field, empty by default */\n label?: string;\n /** Input placeholder, empty by default */\n placeholder?: string;\n /** Step for increment/decrement buttons, 1 by default */\n step?: number;\n /** If defined - show an error if value is lower */\n minValue?: number;\n /** If defined - show an error if value is higher */\n maxValue?: number;\n /** If false - remove buttons on the right */\n useIncrementButtons?: boolean;\n /** If true - changes do not apply immediately, they apply only by removing focus from the input (by click enter or by click outside) */\n updateOnEnterOrClickOutside?: boolean;\n /** Error message that shows always when it's provided, without other checks */\n errorMessage?: string;\n /** Additional validity check for input value that must return an error text if failed */\n validate?: (v: number) => string | undefined;\n /** Makes some of corners not rounded */\n groupPosition?: 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'middle';\n}>(), {\n step: 1,\n label: undefined,\n placeholder: undefined,\n minValue: undefined,\n maxValue: undefined,\n useIncrementButtons: true,\n updateOnEnter: false,\n errorMessage: undefined,\n validate: undefined,\n groupPosition: undefined,\n});\n\nconst modelValue = defineModel<number | undefined>({ required: true });\n\nconst slots = useSlots();\n\nconst rootRef = ref<HTMLElement>();\nconst inputRef = ref<HTMLInputElement>();\n\nuseLabelNotch(rootRef);\n\nfunction modelToString(v: number | undefined) {\n return v === undefined ? '' : String(+v); // (+v) to avoid staying in input non-number values if they are provided in model\n}\n\nconst parsedResult = computed(() => parseNumber(props, inputValue.value));\n\nconst cachedValue = ref<string | undefined>(undefined);\n\nconst resetCachedValue = () => cachedValue.value = undefined;\n\nwatch(modelValue, (n) => {\n const r = parsedResult.value;\n if (r.error || n !== r.value) {\n resetCachedValue();\n }\n});\n\nconst inputValue = computed({\n get() {\n return cachedValue.value ?? modelToString(modelValue.value);\n },\n set(nextValue: string) {\n const r = parseNumber(props, nextValue);\n\n cachedValue.value = r.cleanInput;\n\n if (r.error || props.updateOnEnterOrClickOutside) {\n inputRef.value!.value = r.cleanInput;\n } else {\n modelValue.value = r.value;\n }\n },\n});\n\nconst focused = ref(false);\n\nfunction applyChanges() {\n if (parsedResult.value.error === undefined) {\n modelValue.value = parsedResult.value.value;\n }\n}\n\nconst errors = computed(() => {\n let ers: string[] = [];\n\n if (props.errorMessage) {\n ers.push(props.errorMessage);\n }\n\n const r = parsedResult.value;\n\n if (r.error) {\n ers.push(r.error.message);\n } else if (props.validate && r.value !== undefined) {\n const error = props.validate(r.value);\n if (error) {\n ers.push(error);\n }\n }\n\n ers = [...ers];\n\n return ers.join(' ');\n});\n\nconst isIncrementDisabled = computed(() => {\n const r = parsedResult.value;\n\n if (props.maxValue !== undefined && r.value !== undefined) {\n return r.value >= props.maxValue;\n }\n\n return false;\n});\n\nconst isDecrementDisabled = computed(() => {\n const r = parsedResult.value;\n\n if (props.minValue !== undefined && r.value !== undefined) {\n return r.value <= props.minValue;\n }\n\n return false;\n});\n\nconst multiplier = computed(() =>\n 10 ** (props.step.toString().split('.').at(1)?.length ?? 0),\n);\n\nfunction increment() {\n const r = parsedResult.value;\n\n const parsedValue = r.value;\n\n if (!isIncrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = props.minValue ? props.minValue : 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n + props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.maxValue !== undefined ? Math.min(props.maxValue, nV) : nV;\n }\n}\n\nfunction decrement() {\n const r = parsedResult.value;\n\n const parsedValue = r.value;\n\n if (!isDecrementDisabled.value) {\n let nV;\n if (parsedValue === undefined) {\n nV = 0;\n } else {\n nV = ((parsedValue || 0) * multiplier.value\n - props.step * multiplier.value)\n / multiplier.value;\n }\n modelValue.value = props.minValue !== undefined ? Math.max(props.minValue, nV) : nV;\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }) {\n if (props.updateOnEnterOrClickOutside) {\n if (e.code === 'Escape') {\n inputValue.value = modelToString(modelValue.value);\n inputRef.value?.blur();\n }\n if (e.code === 'Enter') {\n inputRef.value?.blur();\n }\n }\n\n if (e.code === 'Enter') {\n inputValue.value = String(modelValue.value); // to make .1 => 0.1, 10.00 => 10, remove leading zeros etc\n }\n\n if (['ArrowDown', 'ArrowUp'].includes(e.code)) {\n e.preventDefault();\n }\n\n if (props.useIncrementButtons && e.code === 'ArrowUp') {\n increment();\n }\n\n if (props.useIncrementButtons && e.code === 'ArrowDown') {\n decrement();\n }\n}\n\n// https://stackoverflow.com/questions/880512/prevent-text-selection-after-double-click#:~:text=If%20you%20encounter%20a%20situation,none%3B%20to%20the%20summary%20element.\n// this prevents selecting of more than input content in some cases,\n// but also disable selecting input content by double-click (useful feature)\nconst onMousedown = (ev: MouseEvent) => {\n if (ev.detail > 1) {\n ev.preventDefault();\n }\n};\n</script>\n\n<template>\n <div\n ref=\"rootRef\"\n :class=\"{ error: !!errors.trim(), disabled: disabled }\"\n class=\"pl-number-field d-flex-column\"\n @keydown=\"handleKeyPress($event)\"\n >\n <div class=\"pl-number-field__main-wrapper d-flex\">\n <DoubleContour class=\"pl-number-field__contour\" :group-position=\"groupPosition\"/>\n <div\n class=\"pl-number-field__wrapper flex-grow d-flex flex-align-center\"\n :class=\"{withoutArrows: !useIncrementButtons}\"\n >\n <label v-if=\"label\" class=\"text-description\">\n {{ label }}\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\"/>\n </template>\n </PlTooltip>\n </label>\n <input\n ref=\"inputRef\"\n v-model=\"inputValue\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n class=\"text-s flex-grow\"\n @focusin=\"focused = true\"\n @focusout=\"focused = false; applyChanges()\"\n />\n </div>\n <div v-if=\"useIncrementButtons\" class=\"pl-number-field__icons d-flex-column\" @mousedown=\"onMousedown\">\n <div\n :class=\"{ disabled: isIncrementDisabled }\"\n class=\"pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"increment\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M8 4.93933L13.5303 10.4697L12.4697 11.5303L8 7.06065L3.53033 11.5303L2.46967 10.4697L8 4.93933Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n <div\n :class=\"{ disabled: isDecrementDisabled }\"\n class=\"pl-number-field__icon d-flex flex-justify-center uc-pointer flex-grow flex-align-center\"\n @click=\"decrement\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path\n fill-rule=\"evenodd\"\n clip-rule=\"evenodd\"\n d=\"M2.46967 6.53033L3.53033 5.46967L8 9.93934L12.4697 5.46967L13.5303 6.53033L8 12.0607L2.46967 6.53033Z\"\n fill=\"#110529\"\n />\n </svg>\n </div>\n </div>\n </div>\n <div v-if=\"errors.trim()\" class=\"pl-number-field__error\">\n {{ errors }}\n </div>\n </div>\n</template>\n"],"names":["__default__","props","__props","modelValue","_useModel","slots","useSlots","rootRef","ref","inputRef","useLabelNotch","modelToString","v","parsedResult","computed","parseNumber","inputValue","cachedValue","resetCachedValue","watch","n","r","nextValue","focused","applyChanges","errors","ers","error","isIncrementDisabled","isDecrementDisabled","multiplier","_a","increment","parsedValue","nV","decrement","handleKeyPress","_b","onMousedown","ev","_createElementBlock","_cache","$event","_createElementVNode","_hoisted_1","_createVNode","DoubleContour","_normalizeClass","_openBlock","_hoisted_2","_createTextVNode","_toDisplayString","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_hoisted_4"],"mappings":"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"}
@@ -1,26 +1,26 @@
1
- import { defineComponent as l, computed as n, createElementBlock as p, createCommentVNode as i, openBlock as c, createElementVNode as e, normalizeStyle as d, toDisplayString as o } from "vue";
2
- const g = {
1
+ import { defineComponent as a, computed as l, createElementBlock as n, createCommentVNode as c, openBlock as i, createElementVNode as s, normalizeStyle as d, toDisplayString as o } from "vue";
2
+ const p = {
3
3
  key: 0,
4
4
  class: "ui-progress-bar"
5
- }, _ = { class: "ui-progress-bar__messages d-flex align-center pl-6 pr-6" }, m = { class: "ui-progress-bar__message flex-grow-1" }, u = { class: "ui-progress-bar__percent" }, v = /* @__PURE__ */ l({
5
+ }, g = { class: "ui-progress-bar__messages d-flex align-center pl-6 pr-6" }, m = { class: "ui-progress-bar__message flex-grow-1" }, _ = { class: "ui-progress-bar__percent" }, v = /* @__PURE__ */ a({
6
6
  __name: "PlProgressBar",
7
7
  props: {
8
8
  loading: { type: Boolean },
9
9
  progress: { default: 0 },
10
10
  completeMessage: { default: "Completed" }
11
11
  },
12
- setup(t) {
13
- const r = t, a = n(() => r.progress === 100 ? r.completeMessage : "");
14
- return (s, f) => s.loading ? (c(), p("div", g, [
15
- e("div", {
12
+ setup(e) {
13
+ const r = e, t = l(() => r.progress === 100 ? r.completeMessage : "");
14
+ return (u, f) => e.loading ? (i(), n("div", p, [
15
+ s("div", {
16
16
  class: "ui-progress-bar__indicator",
17
- style: d({ width: s.progress + "%" })
17
+ style: d({ width: e.progress + "%" })
18
18
  }, null, 4),
19
- e("div", _, [
20
- e("div", m, o(a.value), 1),
21
- e("div", u, o(s.progress + "%"), 1)
19
+ s("div", g, [
20
+ s("div", m, o(t.value), 1),
21
+ s("div", _, o(e.progress + "%"), 1)
22
22
  ])
23
- ])) : i("", !0);
23
+ ])) : c("", !0);
24
24
  }
25
25
  });
26
26
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"PlProgressBar.vue.js","sources":["../../../src/components/PlProgressBar/PlProgressBar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n loading: boolean;\n progress: number;\n completeMessage: string;\n }>(),\n { progress: 0, completeMessage: 'Completed' },\n);\n\nconst readyMsg = computed(() => (props.progress === 100 ? props.completeMessage : ''));\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"ui-progress-bar\">\n <div class=\"ui-progress-bar__indicator\" :style=\"{ width: progress + '%' }\"/>\n <div class=\"ui-progress-bar__messages d-flex align-center pl-6 pr-6\">\n <div class=\"ui-progress-bar__message flex-grow-1\">{{ readyMsg }}</div>\n <div class=\"ui-progress-bar__percent\">{{ progress + '%' }}</div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","readyMsg","computed"],"mappings":";;;;;;;;;;;;AAGA,UAAMA,IAAQC,GASRC,IAAWC,EAAS,MAAOH,EAAM,aAAa,MAAMA,EAAM,kBAAkB,EAAG;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlProgressBar.vue.js","sources":["../../../src/components/PlProgressBar/PlProgressBar.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\n\nconst props = withDefaults(\n defineProps<{\n loading: boolean;\n progress: number;\n completeMessage: string;\n }>(),\n { progress: 0, completeMessage: 'Completed' },\n);\n\nconst readyMsg = computed(() => (props.progress === 100 ? props.completeMessage : ''));\n</script>\n\n<template>\n <div v-if=\"loading\" class=\"ui-progress-bar\">\n <div class=\"ui-progress-bar__indicator\" :style=\"{ width: progress + '%' }\"/>\n <div class=\"ui-progress-bar__messages d-flex align-center pl-6 pr-6\">\n <div class=\"ui-progress-bar__message flex-grow-1\">{{ readyMsg }}</div>\n <div class=\"ui-progress-bar__percent\">{{ progress + '%' }}</div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","readyMsg","computed","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_hoisted_4"],"mappings":";;;;;;;;;;;;AAGA,UAAMA,IAAQC,GASRC,IAAWC,EAAS,MAAOH,EAAM,aAAa,MAAMA,EAAM,kBAAkB,EAAG;qBAIxEC,EAAA,WAAXG,EAAA,GAAAC,EAMM,OANNC,GAMM;AAAA,MALJC,EAA4E,OAAA;AAAA,QAAvE,OAAM;AAAA,QAA8B,kBAAgBN,EAAA,WAAQ,KAAA;AAAA,MAAA;MACjEM,EAGM,OAHNC,GAGM;AAAA,QAFJD,EAAsE,OAAtEE,GAAsEC,EAAjBR,EAAA,KAAQ,GAAA,CAAA;AAAA,QAC7DK,EAAgE,OAAhEI,GAAgED,EAAvBT,EAAA,WAAQ,GAAA,GAAA,CAAA;AAAA,MAAA;;;;"}
@@ -1,12 +1,12 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".progress-cell{background-color:transparent;height:100%;position:relative;width:100%;overflow:hidden;border-radius:2px}.progress-cell .mask-error{--icon-color: var(--txt-error)}.progress-cell.not-started *{color:var(--txt-03)!important}.progress-cell.error *{color:var(--txt-error)!important}.progress-cell__white-bg{background-color:#fff}.progress-cell__indicator{position:absolute;height:100%;transition:width .4s ease-in-out;background:linear-gradient(90deg,#fff,#d8fac8);transition:width .2s ease-in-out}.progress-cell__body{padding:0 15px;display:flex;gap:12px;align-items:center;height:100%;width:100%;position:absolute;z-index:1}.progress-cell__stage{overflow:hidden;text-overflow:ellipsis;flex-shrink:1;text-wrap:nowrap}.progress-cell__percentage{flex-grow:1;flex-shrink:0;text-align:right}.progress-cell__stage--queued{color:var(--txt-03)}.progress-cell__infinity-loader{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;animation:move-gradient 2s linear infinite}.progress-cell__infinity-gradient{width:50%;height:100%;background:linear-gradient(90deg,#fff,#d8fac8,#fff)}@keyframes move-gradient{0%{transform:translate(-50%)}to{transform:translate(100%)}}")),document.head.appendChild(e)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
2
- import { defineComponent as _, computed as n, createElementBlock as t, openBlock as s, normalizeClass as m, createCommentVNode as o, createElementVNode as l, normalizeStyle as f, toDisplayString as d, unref as g, createBlock as v, Fragment as y, createTextVNode as h } from "vue";
2
+ import { defineComponent as m, computed as n, createElementBlock as s, openBlock as t, normalizeClass as f, createCommentVNode as o, createElementVNode as l, normalizeStyle as p, toDisplayString as c, unref as d, createBlock as v, Fragment as _, createTextVNode as y } from "vue";
3
3
 
4
- import k from "../PlIcon24/PlIcon24.vue.js";
5
- import { getErrorMessage as S } from "../../helpers/error.js";
6
- const w = {
4
+ import h from "../PlIcon24/PlIcon24.vue.js";
5
+ import { getErrorMessage as k } from "../../helpers/error.js";
6
+ const x = {
7
7
  key: 0,
8
8
  class: "progress-cell__infinity-loader"
9
- }, B = { class: "progress-cell__body" }, C = { class: "progress-cell__stage text-s" }, P = { class: "progress-cell__percentage text-s d-flex align-center justify-end" }, b = /* @__PURE__ */ _({
9
+ }, S = { class: "progress-cell__body" }, w = { class: "progress-cell__stage text-s" }, B = { class: "progress-cell__percentage text-s d-flex align-center justify-end" }, V = /* @__PURE__ */ m({
10
10
  __name: "PlProgressCell",
11
11
  props: {
12
12
  stage: { default: "not_started" },
@@ -15,28 +15,28 @@ const w = {
15
15
  progress: { default: void 0 },
16
16
  error: { default: void 0 }
17
17
  },
18
- setup(c) {
19
- const e = c, p = n(() => e.stage !== "not_started"), u = n(() => e.stage === "done" ? 100 : Math.min(100, e.progress || 0)), a = n(() => e.progress === void 0 && e.stage !== "done" && e.stage !== "not_started" && !e.error);
20
- return (r, i) => (s(), t("div", {
21
- class: m({ "progress-cell": !0, "progress-cell__white-bg": p.value, error: r.error, "not-started": e.stage === "not_started" })
18
+ setup(e) {
19
+ const r = e, g = n(() => r.stage !== "not_started"), u = n(() => r.stage === "done" ? 100 : Math.min(100, r.progress || 0)), a = n(() => r.progress === void 0 && r.stage !== "done" && r.stage !== "not_started" && !r.error);
20
+ return (C, i) => (t(), s("div", {
21
+ class: f({ "progress-cell": !0, "progress-cell__white-bg": g.value, error: e.error, "not-started": r.stage === "not_started" })
22
22
  }, [
23
- a.value ? (s(), t("div", w, i[0] || (i[0] = [
23
+ a.value ? (t(), s("div", x, [...i[0] || (i[0] = [
24
24
  l("div", { class: "progress-cell__infinity-gradient" }, null, -1)
25
- ]))) : o("", !0),
26
- !a.value && !r.error ? (s(), t("div", {
25
+ ])])) : o("", !0),
26
+ !a.value && !e.error ? (t(), s("div", {
27
27
  key: 1,
28
28
  class: "progress-cell__indicator",
29
- style: f({ width: u.value + "%" })
29
+ style: p({ width: u.value + "%" })
30
30
  }, null, 4)) : o("", !0),
31
- l("div", B, [
32
- l("div", C, d(r.error ? g(S)(r.error) : r.step), 1),
33
- l("div", P, [
34
- r.error ? (s(), v(g(k), {
31
+ l("div", S, [
32
+ l("div", w, c(e.error ? d(k)(e.error) : e.step), 1),
33
+ l("div", B, [
34
+ e.error ? (t(), v(d(h), {
35
35
  key: 0,
36
36
  name: "error"
37
37
  })) : o("", !0),
38
- r.error ? o("", !0) : (s(), t(y, { key: 1 }, [
39
- h(d(r.progressString), 1)
38
+ e.error ? o("", !0) : (t(), s(_, { key: 1 }, [
39
+ y(c(e.progressString), 1)
40
40
  ], 64))
41
41
  ])
42
42
  ])
@@ -44,6 +44,6 @@ const w = {
44
44
  }
45
45
  });
46
46
  export {
47
- b as default
47
+ V as default
48
48
  };
49
49
  //# sourceMappingURL=PlProgressCell.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlProgressCell.vue.js","sources":["../../../src/components/PlProgressCell/PlProgressCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport './pl-progress-cell.scss';\nimport { computed } from 'vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport type { PlProgressCellProps } from './types';\nimport { getErrorMessage } from '../../helpers/error.ts';\n\nconst props = withDefaults(defineProps<PlProgressCellProps>(), {\n stage: 'not_started',\n step: '', // main text (left)\n progressString: '', // appended text on the right side (right)\n progress: undefined,\n error: undefined,\n});\n\nconst canShowWhiteBg = computed(() => props.stage !== 'not_started');\n\nconst currentProgress = computed(() => props.stage === 'done' ? 100 : Math.min(100, props.progress || 0));\n\nconst canShowInfinityLoader = computed(() => props.progress === undefined && props.stage !== 'done' && props.stage !== 'not_started' && !props.error);\n</script>\n\n<template>\n <div :class=\"{'progress-cell':true, 'progress-cell__white-bg': canShowWhiteBg, error, 'not-started': props.stage === 'not_started' }\">\n <div v-if=\"canShowInfinityLoader\" class=\"progress-cell__infinity-loader\">\n <div class=\"progress-cell__infinity-gradient\"/>\n </div>\n <div v-if=\"!canShowInfinityLoader && !error\" class=\"progress-cell__indicator\" :style=\"{ width: currentProgress + '%' }\"/>\n <div class=\"progress-cell__body\">\n <div class=\"progress-cell__stage text-s\">\n {{ error ? getErrorMessage(error) : step }}\n </div>\n <div class=\"progress-cell__percentage text-s d-flex align-center justify-end\">\n <PlMaskIcon24 v-if=\"error\" name=\"error\" />\n <template v-if=\"!error\">\n {{ progressString }}\n </template>\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","canShowWhiteBg","computed","currentProgress","canShowInfinityLoader"],"mappings":";;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAQRC,IAAiBC,EAAS,MAAMH,EAAM,UAAU,aAAa,GAE7DI,IAAkBD,EAAS,MAAMH,EAAM,UAAU,SAAS,MAAM,KAAK,IAAI,KAAKA,EAAM,YAAY,CAAC,CAAC,GAElGK,IAAwBF,EAAS,MAAMH,EAAM,aAAa,UAAaA,EAAM,UAAU,UAAUA,EAAM,UAAU,iBAAiB,CAACA,EAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlProgressCell.vue.js","sources":["../../../src/components/PlProgressCell/PlProgressCell.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport './pl-progress-cell.scss';\nimport { computed } from 'vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport type { PlProgressCellProps } from './types';\nimport { getErrorMessage } from '../../helpers/error.ts';\n\nconst props = withDefaults(defineProps<PlProgressCellProps>(), {\n stage: 'not_started',\n step: '', // main text (left)\n progressString: '', // appended text on the right side (right)\n progress: undefined,\n error: undefined,\n});\n\nconst canShowWhiteBg = computed(() => props.stage !== 'not_started');\n\nconst currentProgress = computed(() => props.stage === 'done' ? 100 : Math.min(100, props.progress || 0));\n\nconst canShowInfinityLoader = computed(() => props.progress === undefined && props.stage !== 'done' && props.stage !== 'not_started' && !props.error);\n</script>\n\n<template>\n <div :class=\"{'progress-cell':true, 'progress-cell__white-bg': canShowWhiteBg, error, 'not-started': props.stage === 'not_started' }\">\n <div v-if=\"canShowInfinityLoader\" class=\"progress-cell__infinity-loader\">\n <div class=\"progress-cell__infinity-gradient\"/>\n </div>\n <div v-if=\"!canShowInfinityLoader && !error\" class=\"progress-cell__indicator\" :style=\"{ width: currentProgress + '%' }\"/>\n <div class=\"progress-cell__body\">\n <div class=\"progress-cell__stage text-s\">\n {{ error ? getErrorMessage(error) : step }}\n </div>\n <div class=\"progress-cell__percentage text-s d-flex align-center justify-end\">\n <PlMaskIcon24 v-if=\"error\" name=\"error\" />\n <template v-if=\"!error\">\n {{ progressString }}\n </template>\n </div>\n </div>\n </div>\n</template>\n"],"names":["props","__props","canShowWhiteBg","computed","currentProgress","canShowInfinityLoader","_createElementBlock","_openBlock","_hoisted_1","_cache","_createElementVNode","_hoisted_2","_hoisted_3","_toDisplayString","_unref","getErrorMessage","_hoisted_4","_createBlock","PlMaskIcon24","_Fragment"],"mappings":";;;;;;;;;;;;;;;;;AAOA,UAAMA,IAAQC,GAQRC,IAAiBC,EAAS,MAAMH,EAAM,UAAU,aAAa,GAE7DI,IAAkBD,EAAS,MAAMH,EAAM,UAAU,SAAS,MAAM,KAAK,IAAI,KAAKA,EAAM,YAAY,CAAC,CAAC,GAElGK,IAAwBF,EAAS,MAAMH,EAAM,aAAa,UAAaA,EAAM,UAAU,UAAUA,EAAM,UAAU,iBAAiB,CAACA,EAAM,KAAK;2BAIlJM,EAgBM,OAAA;AAAA,MAhBA,2DAAyDJ,EAAA,OAAc,OAAED,SAAK,eAAiBD,EAAM,UAAK,eAAA;AAAA,IAAA;MACnGK,EAAA,SAAXE,KAAAD,EAEM,OAFNE,GAEM,CAAA,GAAAC,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA;AAAA,QADJC,EAA+C,OAAA,EAA1C,OAAM,mCAAA,GAAkC,MAAA,EAAA;AAAA,MAAA;MAEnC,CAAAL,EAAA,UAA0BJ,EAAA,cAAtCK,EAAyH,OAAA;AAAA;QAA5E,OAAM;AAAA,QAA4B,kBAAgBF,EAAA,QAAe,KAAA;AAAA,MAAA;MAC9GM,EAUM,OAVNC,GAUM;AAAA,QATJD,EAEM,OAFNE,GAEMC,EADDZ,EAAA,QAAQa,EAAAC,CAAA,EAAgBd,EAAA,KAAK,IAAIA,EAAA,IAAI,GAAA,CAAA;AAAA,QAE1CS,EAKM,OALNM,GAKM;AAAA,UAJgBf,EAAA,cAApBgB,EAA0CH,EAAAI,CAAA,GAAA;AAAA;YAAf,MAAK;AAAA,UAAA;UACfjB,EAAA,0BAAjBK,EAEWa,GAAA,EAAA,KAAA,KAAA;AAAA,gBADNlB,EAAA,cAAc,GAAA,CAAA;AAAA,UAAA;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlRadio.vue2.js","sources":["../../../src/components/PlRadio/PlRadio.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"M\">\nimport { inject } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nimport type PlRadioGroup from './PlRadioGroup.vue';\n\nconst standaloneModel = defineModel<M>();\n\nconst { name: standaloneName, ...props } = defineProps<{\n /** Used to group multiple radio controls. Will be ignored if this component is a descendant of a {@link PlRadioGroup}. */\n name?: string;\n /** Value that goes into `v-model`. */\n value?: M;\n /** Whether the radio control is disabled. */\n disabled?: boolean;\n}>();\n\ndefineSlots<{\n /** Label of the radio control. */\n default?(): unknown;\n}>();\n\nconst name = inject(radioGroupNameKey, standaloneName);\nconst model = inject<typeof standaloneModel>(radioGroupModelKey, standaloneModel);\n</script>\n\n<template>\n <label :class=\"$style.container\">\n <input v-model=\"model\" :class=\"$style.input\" type=\"radio\" :name v-bind=\"props\" />\n <span :class=\"$style.label\"><slot /></span>\n </label>\n</template>\n\n<style module>\n .container {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px;\n border-radius: 6px;\n transition: all 200ms ease-in-out;\n color: var(--txt-01);\n user-select: none;\n &:hover:not(:has(:disabled)) {\n background: var(--btn-sec-hover-grey);\n }\n &:has(:disabled) {\n color: var(--dis-01);\n }\n }\n\n .input {\n appearance: none;\n position: relative;\n block-size: 24px;\n aspect-ratio: 1;\n margin: 0;\n border-radius: 50%;\n outline: 2px solid transparent;\n color: inherit;\n transition: inherit;\n &:focus {\n outline-color: var(--border-color-focus);\n }\n &::before {\n content: \"\";\n position: absolute;\n inset: 2px;\n border-radius: 50%;\n border: 2px solid;\n }\n &::after {\n content: \"\";\n position: absolute;\n inset: 7.5px;\n border-radius: 50%;\n background-color: currentColor;\n scale: 0;\n transition: inherit;\n }\n &:checked::after {\n scale: 1;\n }\n }\n\n .label {\n padding-inline: 4px;\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n"],"names":["standaloneModel","_useModel","__props","props","_createPropsRestProxy","name","inject","radioGroupNameKey","model","radioGroupModelKey"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAkBC,EAAcC,GAAA,YAAC,GAEjCC,IAAqCC,EAAAF,GAAA,CAAA,MAAA,CAAA,GAcrCG,IAAOC,EAAOC,GAAmBL,MAAc,GAC/CM,IAAQF,EAA+BG,GAAoBT,CAAe;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlRadio.vue2.js","sources":["../../../src/components/PlRadio/PlRadio.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"M\">\nimport { inject } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nimport type PlRadioGroup from './PlRadioGroup.vue';\n\nconst standaloneModel = defineModel<M>();\n\nconst { name: standaloneName, ...props } = defineProps<{\n /** Used to group multiple radio controls. Will be ignored if this component is a descendant of a {@link PlRadioGroup}. */\n name?: string;\n /** Value that goes into `v-model`. */\n value?: M;\n /** Whether the radio control is disabled. */\n disabled?: boolean;\n}>();\n\ndefineSlots<{\n /** Label of the radio control. */\n default?(): unknown;\n}>();\n\nconst name = inject(radioGroupNameKey, standaloneName);\nconst model = inject<typeof standaloneModel>(radioGroupModelKey, standaloneModel);\n</script>\n\n<template>\n <label :class=\"$style.container\">\n <input v-model=\"model\" :class=\"$style.input\" type=\"radio\" :name v-bind=\"props\" />\n <span :class=\"$style.label\"><slot /></span>\n </label>\n</template>\n\n<style module>\n .container {\n display: flex;\n align-items: center;\n gap: 4px;\n padding: 4px;\n border-radius: 6px;\n transition: all 200ms ease-in-out;\n color: var(--txt-01);\n user-select: none;\n &:hover:not(:has(:disabled)) {\n background: var(--btn-sec-hover-grey);\n }\n &:has(:disabled) {\n color: var(--dis-01);\n }\n }\n\n .input {\n appearance: none;\n position: relative;\n block-size: 24px;\n aspect-ratio: 1;\n margin: 0;\n border-radius: 50%;\n outline: 2px solid transparent;\n color: inherit;\n transition: inherit;\n &:focus {\n outline-color: var(--border-color-focus);\n }\n &::before {\n content: \"\";\n position: absolute;\n inset: 2px;\n border-radius: 50%;\n border: 2px solid;\n }\n &::after {\n content: \"\";\n position: absolute;\n inset: 7.5px;\n border-radius: 50%;\n background-color: currentColor;\n scale: 0;\n transition: inherit;\n }\n &:checked::after {\n scale: 1;\n }\n }\n\n .label {\n padding-inline: 4px;\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n"],"names":["standaloneModel","_useModel","__props","props","_createPropsRestProxy","name","inject","radioGroupNameKey","model","radioGroupModelKey","_createElementBlock","_normalizeClass","$style","_withDirectives","_createElementVNode","_mergeProps","$event","_unref","_hoisted_1","_renderSlot","_ctx"],"mappings":";;;;;;;;;;;;;;AAMA,UAAMA,IAAkBC,EAAcC,GAAA,YAAC,GAEjCC,IAAqCC,EAAAF,GAAA,CAAA,MAAA,CAAA,GAcrCG,IAAOC,EAAOC,GAAmBL,MAAc,GAC/CM,IAAQF,EAA+BG,GAAoBT,CAAe;2BAI9EU,EAGQ,SAAA;AAAA,MAHA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,IAAA;MAC7BC,EAAAC,EAAiF,SAAjFC,EAAiF;AAAA,6DAAjEP,EAAK,QAAAQ,IAAA;AAAA,QAAG,OAAOJ,EAAAA,OAAO;AAAA,QAAO,MAAK;AAAA,QAAS,MAAAK,EAAAZ,CAAA;AAAA,MAAA,GAAaF,CAAK,GAAA,MAAA,IAAAe,CAAA,GAAA;AAAA,YAA7DD,EAAAT,CAAA,CAAK;AAAA,MAAA;MACrBM,EAA2C,QAAA;AAAA,QAApC,OAAKH,EAAEC,EAAAA,OAAO,KAAK;AAAA,MAAA;QAAEO,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;"}
@@ -1,6 +1,6 @@
1
- import { defineComponent as p, mergeModels as f, useModel as y, useSlots as k, provide as s, createElementBlock as d, openBlock as o, normalizeClass as n, createElementVNode as b, renderSlot as u, Fragment as v, renderList as E, createBlock as V, unref as g, withCtx as M, createTextVNode as $, toDisplayString as B } from "vue";
2
- import { radioGroupNameKey as C, radioGroupModelKey as G } from "./keys.js";
3
- import N from "./PlRadio.vue.js";
1
+ import { defineComponent as p, mergeModels as f, useModel as y, useSlots as k, provide as s, createElementBlock as d, openBlock as t, normalizeClass as n, createElementVNode as b, renderSlot as u, Fragment as v, renderList as E, createBlock as V, unref as g, withCtx as M, createTextVNode as $, toDisplayString as x } from "vue";
2
+ import { radioGroupNameKey as B, radioGroupModelKey as C } from "./keys.js";
3
+ import G from "./PlRadio.vue.js";
4
4
  const F = /* @__PURE__ */ p({
5
5
  __name: "PlRadioGroup",
6
6
  props: /* @__PURE__ */ f({
@@ -12,11 +12,11 @@ const F = /* @__PURE__ */ p({
12
12
  modelModifiers: {}
13
13
  }),
14
14
  emits: ["update:modelValue"],
15
- setup(t) {
16
- const i = y(t, "modelValue"), a = t;
15
+ setup(o) {
16
+ const i = y(o, "modelValue"), a = o;
17
17
  k();
18
18
  const m = a.keyExtractor ?? ((e, r) => r);
19
- return s(C, a.name), s(G, i), (e, r) => (o(), d("fieldset", {
19
+ return s(B, a.name), s(C, i), (e, r) => (t(), d("fieldset", {
20
20
  class: n(e.$style.container)
21
21
  }, [
22
22
  b("legend", {
@@ -24,13 +24,13 @@ const F = /* @__PURE__ */ p({
24
24
  }, [
25
25
  u(e.$slots, "label")
26
26
  ], 2),
27
- (o(!0), d(v, null, E(e.options, (l, c) => (o(), V(N, {
27
+ (t(!0), d(v, null, E(o.options, (l, c) => (t(), V(G, {
28
28
  key: g(m)(l.value, c),
29
29
  value: l.value,
30
30
  disabled: l.disabled
31
31
  }, {
32
32
  default: M(() => [
33
- $(B(l.label), 1)
33
+ $(x(l.label), 1)
34
34
  ]),
35
35
  _: 2
36
36
  }, 1032, ["value", "disabled"]))), 128)),
@@ -1 +1 @@
1
- {"version":3,"file":"PlRadioGroup.vue2.js","sources":["../../../src/components/PlRadio/PlRadioGroup.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"M\">\nimport { provide } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\nimport PlRadio from './PlRadio.vue';\n\ntype RadioGroupOption = {\n label: string;\n value: M;\n disabled?: boolean;\n};\n\nconst model = defineModel<M>();\n\nconst props = defineProps<{\n /** Name of the radio group. */\n name?: string;\n /**\n * List of available options.\n * Renders a list of {@link PlRadio} components before the {@link slots.default | default} slot.\n */\n options?: Readonly<RadioGroupOption[]>;\n /** Function to get option's unique key. Use if default mechanism (key = index) is unstable. */\n keyExtractor?: (value: M, index: number) => PropertyKey;\n}>();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nconst slots = defineSlots<{\n /**\n * Can be anything, but usually an array of {@link PlRadio} components.\n * If {@link props.options|options} are provided, they will be rendered before this slot.\n */\n default?(): unknown;\n /** Label of the radio group. */\n label?(): unknown;\n}>();\n\nconst keyExtractor = props.keyExtractor ?? ((_, i) => i);\n\nprovide(radioGroupNameKey, props.name);\nprovide(radioGroupModelKey, model);\n</script>\n\n<template>\n <fieldset :class=\"$style.container\">\n <legend :class=\"$style.label\">\n <slot name=\"label\" />\n </legend>\n <PlRadio\n v-for=\"(option, i) in options\"\n :key=\"keyExtractor(option.value, i)\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </PlRadio>\n <slot />\n </fieldset>\n</template>\n\n<style module>\n .container {\n margin: 0;\n padding: 0;\n border: none;\n }\n .label {\n margin-block-end: 12px;\n padding: 0;\n color: var(--txt-01);\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n"],"names":["model","_useModel","props","__props","_useSlots","keyExtractor","_","i","provide","radioGroupNameKey","radioGroupModelKey"],"mappings":";;;;;;;;;;;;;;;AAWA,UAAMA,IAAQC,iBAAe,GAEvBC,IAAQC;AAaAC,IAAAA,EAAA;AAUd,UAAMC,IAAeH,EAAM,iBAAiB,CAACI,GAAGC,MAAMA;AAEtD,WAAAC,EAAQC,GAAmBP,EAAM,IAAI,GACrCM,EAAQE,GAAoBV,CAAK;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlRadioGroup.vue2.js","sources":["../../../src/components/PlRadio/PlRadioGroup.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"M\">\nimport { provide } from 'vue';\nimport { radioGroupModelKey, radioGroupNameKey } from './keys';\nimport PlRadio from './PlRadio.vue';\n\ntype RadioGroupOption = {\n label: string;\n value: M;\n disabled?: boolean;\n};\n\nconst model = defineModel<M>();\n\nconst props = defineProps<{\n /** Name of the radio group. */\n name?: string;\n /**\n * List of available options.\n * Renders a list of {@link PlRadio} components before the {@link slots.default | default} slot.\n */\n options?: Readonly<RadioGroupOption[]>;\n /** Function to get option's unique key. Use if default mechanism (key = index) is unstable. */\n keyExtractor?: (value: M, index: number) => PropertyKey;\n}>();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- used by the props documentation\nconst slots = defineSlots<{\n /**\n * Can be anything, but usually an array of {@link PlRadio} components.\n * If {@link props.options|options} are provided, they will be rendered before this slot.\n */\n default?(): unknown;\n /** Label of the radio group. */\n label?(): unknown;\n}>();\n\nconst keyExtractor = props.keyExtractor ?? ((_, i) => i);\n\nprovide(radioGroupNameKey, props.name);\nprovide(radioGroupModelKey, model);\n</script>\n\n<template>\n <fieldset :class=\"$style.container\">\n <legend :class=\"$style.label\">\n <slot name=\"label\" />\n </legend>\n <PlRadio\n v-for=\"(option, i) in options\"\n :key=\"keyExtractor(option.value, i)\"\n :value=\"option.value\"\n :disabled=\"option.disabled\"\n >\n {{ option.label }}\n </PlRadio>\n <slot />\n </fieldset>\n</template>\n\n<style module>\n .container {\n margin: 0;\n padding: 0;\n border: none;\n }\n .label {\n margin-block-end: 12px;\n padding: 0;\n color: var(--txt-01);\n line-height: calc(20 / 14);\n font-weight: 500;\n text-box: trim-both cap alphabetic;\n }\n</style>\n"],"names":["model","_useModel","props","__props","_useSlots","keyExtractor","_","i","provide","radioGroupNameKey","radioGroupModelKey","_createElementBlock","_normalizeClass","$style","_createElementVNode","_renderSlot","_ctx","_openBlock","_Fragment","_renderList","option","_createBlock","PlRadio","_unref","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;;;;AAWA,UAAMA,IAAQC,iBAAe,GAEvBC,IAAQC;AAaAC,IAAAA,EAAA;AAUd,UAAMC,IAAeH,EAAM,iBAAiB,CAACI,GAAGC,MAAMA;AAEtD,WAAAC,EAAQC,GAAmBP,EAAM,IAAI,GACrCM,EAAQE,GAAoBV,CAAK,mBAI/BW,EAaW,YAAA;AAAA,MAbA,OAAKC,EAAEC,EAAAA,OAAO,SAAS;AAAA,IAAA;MAChCC,EAES,UAAA;AAAA,QAFA,OAAKF,EAAEC,EAAAA,OAAO,KAAK;AAAA,MAAA;QAC1BE,EAAqBC,EAAA,QAAA,OAAA;AAAA,MAAA;OAEvBC,EAAA,EAAA,GAAAN,EAOUO,GAAA,MAAAC,EANchB,EAAA,SAAO,CAArBiB,GAAQb,YADlBc,EAOUC,GAAA;AAAA,QALP,KAAKC,EAAAlB,CAAA,EAAae,EAAO,OAAOb,CAAC;AAAA,QACjC,OAAOa,EAAO;AAAA,QACd,UAAUA,EAAO;AAAA,MAAA;mBAElB,MAAkB;AAAA,UAAfI,EAAAC,EAAAL,EAAO,KAAK,GAAA,CAAA;AAAA,QAAA;;;MAEjBL,EAAQC,EAAA,QAAA,SAAA;AAAA,IAAA;;;"}
@@ -1,7 +1,7 @@
1
- import { defineComponent as V, ref as r, computed as n, createElementBlock as y, openBlock as s, normalizeClass as d, createVNode as v, withDirectives as b, createBlock as B, createCommentVNode as C, unref as c, createElementVNode as M, vModelText as E, withModifiers as N } from "vue";
1
+ import { defineComponent as V, ref as r, computed as c, createElementBlock as y, openBlock as d, normalizeClass as s, createVNode as v, withDirectives as b, createBlock as B, createCommentVNode as C, unref as i, createElementVNode as M, vModelText as E, withModifiers as N } from "vue";
2
2
  import P from "../PlIcon16/PlIcon16.vue.js";
3
- import _ from "../PlIcon24/PlIcon24.vue.js";
4
- const w = ["disabled", "placeholder"], g = /* @__PURE__ */ V({
3
+ import w from "../PlIcon24/PlIcon24.vue.js";
4
+ const x = ["disabled", "placeholder"], g = /* @__PURE__ */ V({
5
5
  __name: "PlSearchField",
6
6
  props: {
7
7
  modelValue: {},
@@ -10,35 +10,35 @@ const w = ["disabled", "placeholder"], g = /* @__PURE__ */ V({
10
10
  disabled: { type: Boolean }
11
11
  },
12
12
  emits: ["update:modelValue"],
13
- setup(p, { emit: i }) {
14
- const l = i, o = p, m = r(void 0), u = r(), t = n({
13
+ setup(e, { emit: m }) {
14
+ const o = m, t = e, u = r(void 0), p = r(), a = c({
15
15
  get() {
16
- return o.modelValue ?? "";
16
+ return t.modelValue ?? "";
17
17
  },
18
- set(e) {
19
- l("update:modelValue", e);
18
+ set(l) {
19
+ o("update:modelValue", l);
20
20
  }
21
- }), f = n(() => !!o.modelValue), h = () => l("update:modelValue", "");
22
- return (e, a) => (s(), y("div", {
21
+ }), f = c(() => !!t.modelValue), h = () => o("update:modelValue", "");
22
+ return (l, n) => (d(), y("div", {
23
23
  ref_key: "root",
24
- ref: m,
25
- class: d(["pl-search-field", [e.$style.component]])
24
+ ref: u,
25
+ class: s(["pl-search-field", [l.$style.component]])
26
26
  }, [
27
- v(c(_), { name: "search" }),
27
+ v(i(w), { name: "search" }),
28
28
  b(M("input", {
29
29
  ref_key: "input",
30
- ref: u,
31
- "onUpdate:modelValue": a[0] || (a[0] = (k) => t.value = k),
30
+ ref: p,
31
+ "onUpdate:modelValue": n[0] || (n[0] = (k) => a.value = k),
32
32
  disabled: e.disabled,
33
33
  type: "text",
34
34
  placeholder: e.placeholder || "Find...",
35
35
  spellcheck: "false"
36
- }, null, 8, w), [
37
- [E, t.value]
36
+ }, null, 8, x), [
37
+ [E, a.value]
38
38
  ]),
39
- e.clearable && f.value ? (s(), B(c(P), {
39
+ e.clearable && f.value ? (d(), B(i(P), {
40
40
  key: 0,
41
- class: d(e.$style.clear),
41
+ class: s(l.$style.clear),
42
42
  name: "delete-clear",
43
43
  onClick: N(h, ["stop"])
44
44
  }, null, 8, ["class"])) : C("", !0)