@milaboratories/uikit 2.6.2 → 2.6.4

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 (192) hide show
  1. package/.turbo/turbo-build.log +129 -129
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +13 -0
  4. package/dist/base/BtnBase.vue.js +18 -18
  5. package/dist/base/BtnBase.vue.js.map +1 -1
  6. package/dist/components/ContextProvider.vue.js.map +1 -1
  7. package/dist/components/DataTable/BaseCellComponent.vue.js +20 -20
  8. package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
  9. package/dist/components/DataTable/ColumnCaret.vue.js +6 -6
  10. package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
  11. package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
  12. package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
  13. package/dist/components/DataTable/TScroll.vue.js +12 -12
  14. package/dist/components/DataTable/TScroll.vue.js.map +1 -1
  15. package/dist/components/DataTable/TableComponent.vue.js +1 -1
  16. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  17. package/dist/components/DataTable/TdCell.vue.js +36 -36
  18. package/dist/components/DataTable/TdCell.vue.js.map +1 -1
  19. package/dist/components/DataTable/ThCell.vue.js +27 -27
  20. package/dist/components/DataTable/ThCell.vue.js.map +1 -1
  21. package/dist/components/DataTable/TrBody.vue.js +12 -12
  22. package/dist/components/DataTable/TrBody.vue.js.map +1 -1
  23. package/dist/components/DataTable/TrHead.vue.js.map +1 -1
  24. package/dist/components/DataTable/assets/TableIcon.vue.js +2 -2
  25. package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
  26. package/dist/components/DropdownListItem.vue.js +18 -18
  27. package/dist/components/DropdownListItem.vue.js.map +1 -1
  28. package/dist/components/HScroll.vue.js.map +1 -1
  29. package/dist/components/InputRange.vue.js.map +1 -1
  30. package/dist/components/LongText.vue.js +1 -1
  31. package/dist/components/LongText.vue.js.map +1 -1
  32. package/dist/components/LongText.vue3.js +1 -1
  33. package/dist/components/PlAccordion/{ExpandTransition.vue2.js → ExpandTransition.vue.js} +1 -1
  34. package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
  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.js +86 -86
  42. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  43. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +83 -83
  44. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
  45. package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
  46. package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
  47. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js +21 -21
  48. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
  49. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +34 -34
  50. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
  51. package/dist/components/PlBtnLink/PlBtnLink.vue.js +12 -12
  52. package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
  53. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
  54. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
  55. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +31 -31
  56. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
  57. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +18 -18
  58. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  59. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  60. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +15 -15
  61. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  62. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  63. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  64. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  65. package/dist/components/PlCheckbox/PlCheckbox.vue.js +13 -13
  66. package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
  67. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js +6 -6
  68. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
  69. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +28 -28
  70. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
  71. package/dist/components/PlChip/PlChip.vue.js +20 -20
  72. package/dist/components/PlChip/PlChip.vue.js.map +1 -1
  73. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  74. package/dist/components/PlConfirmDialog.vue.js +14 -14
  75. package/dist/components/PlConfirmDialog.vue.js.map +1 -1
  76. package/dist/components/PlDialogModal/PlDialogModal.vue.js +30 -30
  77. package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  78. package/dist/components/PlDropdown/OptionList.vue.js +40 -40
  79. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
  80. package/dist/components/PlDropdown/PlDropdown.vue.js +89 -89
  81. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  82. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +92 -92
  83. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
  84. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
  85. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +4 -4
  86. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
  87. package/dist/components/PlDropdownLine/ResizableInput.vue.js +12 -12
  88. package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
  89. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +70 -70
  90. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
  91. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts +1 -1
  92. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
  93. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -11
  94. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  95. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts +1 -1
  96. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js +36 -36
  97. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
  98. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  99. package/dist/components/PlElementList/PlElementListItem.vue2.js +67 -67
  100. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  101. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  102. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
  103. package/dist/components/PlFileDialog/Local.vue.js +24 -24
  104. package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
  105. package/dist/components/PlFileDialog/PlFileDialog.vue.js +38 -38
  106. package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
  107. package/dist/components/PlFileDialog/Remote.vue.js +2 -2
  108. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  109. package/dist/components/PlFileDialog/Shortcuts.vue2.js +4 -4
  110. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  111. package/dist/components/PlFileInput/PlFileInput.vue.d.ts +1 -1
  112. package/dist/components/PlFileInput/PlFileInput.vue.js +75 -75
  113. package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  114. package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
  115. package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
  116. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +11 -11
  117. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
  118. package/dist/components/PlLogView/PlLogView.vue.js +58 -58
  119. package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  120. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js +22 -22
  121. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
  122. package/dist/components/PlNumberField/PlNumberField.vue.d.ts +1 -1
  123. package/dist/components/PlNumberField/PlNumberField.vue.js +75 -75
  124. package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
  125. package/dist/components/PlProgressBar/PlProgressBar.vue.js +12 -12
  126. package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
  127. package/dist/components/PlProgressCell/PlProgressCell.vue.js +20 -20
  128. package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
  129. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  130. package/dist/components/PlRadio/PlRadioGroup.vue2.js +8 -8
  131. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  132. package/dist/components/PlSearchField/PlSearchField.vue2.js +19 -19
  133. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  134. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +8 -8
  135. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  136. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  137. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  138. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +1 -1
  139. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  140. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  141. package/dist/components/PlSplash/PlSplash.vue.js +16 -16
  142. package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
  143. package/dist/components/PlStatusTag/PlStatusTag.vue.js +7 -7
  144. package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
  145. package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
  146. package/dist/components/PlTabs/PlTabs.vue.js +18 -18
  147. package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
  148. package/dist/components/PlTabs/Tab.vue.js +9 -9
  149. package/dist/components/PlTabs/Tab.vue.js.map +1 -1
  150. package/dist/components/PlTextArea/PlTextArea.vue.js +51 -51
  151. package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
  152. package/dist/components/PlTextField/PlTextField.vue.js +62 -62
  153. package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
  154. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js +14 -14
  155. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
  156. package/dist/components/PlTooltip/Beak.vue.js +2 -2
  157. package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
  158. package/dist/components/PlTooltip/PlTooltip.vue.js +50 -50
  159. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  160. package/dist/components/Scrollable.vue.js.map +1 -1
  161. package/dist/components/Slider.vue.js +35 -35
  162. package/dist/components/Slider.vue.js.map +1 -1
  163. package/dist/components/SliderRange.vue.js +47 -47
  164. package/dist/components/SliderRange.vue.js.map +1 -1
  165. package/dist/components/SliderRangeTriple.vue.js +47 -47
  166. package/dist/components/SliderRangeTriple.vue.js.map +1 -1
  167. package/dist/components/TabItem.vue.js.map +1 -1
  168. package/dist/components/ThemeSwitcher.vue.js +2 -2
  169. package/dist/components/ThemeSwitcher.vue.js.map +1 -1
  170. package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
  171. package/dist/components/VScroll.vue.js.map +1 -1
  172. package/dist/components/contextMenu/Menu.vue2.js +12 -12
  173. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  174. package/dist/index.js +1 -1
  175. package/dist/layout/PlBlockPage/PlBlockPage.vue.js +27 -27
  176. package/dist/layout/PlBlockPage/PlBlockPage.vue.js.map +1 -1
  177. package/dist/layout/PlContainer/PlContainer.vue.js +10 -10
  178. package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
  179. package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
  180. package/dist/layout/PlRow/PlRow.vue.js +8 -8
  181. package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
  182. package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
  183. package/dist/utils/DoubleContour.vue.js +9 -9
  184. package/dist/utils/DoubleContour.vue.js.map +1 -1
  185. package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
  186. package/dist/utils/PlCloseModalBtn.vue.js +2 -2
  187. package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
  188. package/dist/utils/TextLabel.vue.js.map +1 -1
  189. package/package.json +5 -5
  190. package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +0 -1
  191. package/dist/utils/DoubleContour.vue2.js +0 -23
  192. package/dist/utils/DoubleContour.vue2.js.map +0 -1
@@ -1,31 +1,31 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var o=document.createElement("style");o.appendChild(document.createTextNode(`.pl-file-input{--contour-color: var(--txt-01);--label-color: var(--txt-01);--text-color: var(--txt-01);--contour-border-width: 1px;--contour-box-shadow: none;--label-offset-left-x: 8px;--label-offset-right-x: 8px;--prefix-color: var(--color-placeholder);--contour-offset: 2px;--icon-color: #000;position:relative;z-index:0;width:100%;height:var(--control-height, 40px);border-radius:var(--border-radius-control);display:flex;flex-direction:row;align-items:center;outline:none;padding:0 8px;gap:8px;cursor:pointer}.pl-file-input__envelope{font-family:var(--font-family-base);display:flex;flex-direction:column;min-width:160px}.pl-file-input .mask-24{display:block;min-width:24px}.pl-file-input .mask-close{cursor:pointer}.pl-file-input__progress{position:absolute;z-index:-1;top:0;bottom:0;left:0;right:0;background:linear-gradient(90deg,#fff,#d8fac8);pointer-events:none;width:0}.pl-file-input__clear{--icon-color: var(--ic-02)}.pl-file-input__filename{width:100%;border:none;font-size:inherit;background-color:transparent;color:var(--text-color);caret-color:var(--border-color-focus);z-index:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:18px}.pl-file-input__filename:empty:before{color:var(--color-placeholder);content:attr(data-placeholder);color:var(--txt-03);font-size:14px;font-weight:500;line-height:20px}.pl-file-input__stats{white-space:nowrap;z-index:1;font-size:11px;font-weight:600;letter-spacing:.44px;text-transform:uppercase;color:var(--txt-03)}.pl-file-input label{display:flex;align-items:center;gap:4px;position:absolute;top:0;transform:translateY(-60%);left:var(--label-offset-left-x);padding:0 4px;max-width:calc(100% - 16px);overflow:hidden;white-space:pre;text-overflow:ellipsis;cursor:inherit;color:var(--label-color);font-size:12px;font-weight:500;border-bottom-right-radius:4px;border-bottom-left-radius:4px;background:var(--bg-elevated-01)}.pl-file-input label>span{overflow:hidden;white-space:pre;text-overflow:ellipsis}.pl-file-input__contour{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:var(--border-radius-control);border-width:var(--contour-border-width);border-color:var(--contour-color);border-style:solid;box-shadow:var(--contour-box-shadow);z-index:0;pointer-events:none}.pl-file-input__prefix{padding-left:12px;white-space:nowrap;margin-right:-12px;color:var(--prefix-color)}.pl-file-input__helper{font-size:12px;color:var(--txt-03);padding:2px 0 0;white-space:pre-wrap;text-overflow:ellipsis;font-weight:500;line-height:16px;margin-top:6px}.pl-file-input__error{font-size:12px;color:var(--txt-error);padding:2px 0 0;white-space:pre-wrap;text-overflow:ellipsis;font-weight:500;line-height:16px;margin-top:6px}.pl-file-input:hover{--contour-color: var(--control-hover-color)}.pl-file-input: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-file-input:focus-within.error{--contour-border-width: 2px;--contour-box-shadow: 0 0 0 4px var(--color-error-shadow)}.pl-file-input.dashed .pl-file-input__contour{border-style:dashed}.pl-file-input.nonEmpty{--prefix-color: var(--txt-01)}.pl-file-input.error{--contour-color: var(--txt-error);--label-color: var(--txt-error);--text-color: var(--txt-error);--icon-color: var(--txt-error)}.pl-file-input.error .pl-file-input__progress{display:none}.pl-file-input.disabled{--contour-color: var(--color-dis-01);cursor:not-allowed}.pl-file-input__cell-style{--border-radius-control: 0px;--input-active-color: var(--bg-base-light);--border-color: var(--border-color-div-grey);background-color:var(--input-active-color);padding:4px;height:100%;position:relative}.pl-file-input__cell-style .mask-paper-clip{display:none}.pl-file-input__cell-style .pl-file-input{height:100%!important;position:unset}.pl-file-input__cell-style .pl-file-input .double-contour{top:2px;right:2px;bottom:2px;left:2px}.pl-file-input__cell-style .pl-file-input__contour{border-width:1px;box-shadow:unset!important;border-color:var(--border-color);border-style:dashed}.pl-file-input__cell-style .pl-file-input__filename{text-align:center!important}.pl-file-input__cell-style .pl-file-input__error{margin-top:0;margin-right:8px}.pl-file-input__cell-style:hover{--border-color: var(--border-color-focus);background-color:#d9f8ca}.pl-file-input__cell-style:hover .pl-file-input__filename:before{color:#110529!important}.pl-file-input__cell-style.has-file:hover{background-color:var(--input-active-color)}.pl-file-input__cell-style.has-file{padding-left:0;padding-right:0}.pl-file-input__cell-style.has-file .pl-file-input__contour{border:unset}.pl-file-input__cell-style.has-file .pl-file-input__filename{text-align:left!important}.pl-file-input__cell-style.has-file .mask-paper-clip{display:block}
2
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(o)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
3
- import { defineComponent as $, reactive as q, useSlots as R, computed as s, watch as U, ref as z, createElementBlock as n, openBlock as l, Fragment as D, createElementVNode as c, createVNode as B, normalizeClass as O, createCommentVNode as p, withModifiers as F, withKeys as H, createBlock as i, normalizeStyle as K, unref as t, toDisplayString as u, withCtx as L, renderSlot as j, createTextVNode as A } from "vue";
3
+ import { defineComponent as I, reactive as $, useSlots as q, computed as s, watch as R, ref as U, createElementBlock as u, openBlock as t, Fragment as x, createElementVNode as f, createVNode as B, normalizeClass as O, createCommentVNode as d, withModifiers as F, withKeys as z, createBlock as a, normalizeStyle as H, unref as r, toDisplayString as c, withCtx as K, renderSlot as L, createTextVNode as j } from "vue";
4
4
 
5
- import { prettyBytes as y } from "@milaboratories/helpers";
6
- import { getFileNameFromHandle as G, getFilePathFromHandle as J } from "@platforma-sdk/model";
7
- import { getErrorMessage as Q } from "../../helpers/error.js";
8
- import W from "../../utils/DoubleContour.vue.js";
5
+ import { prettyBytes as g } from "@milaboratories/helpers";
6
+ import { getFileNameFromHandle as A, getFilePathFromHandle as G } from "@platforma-sdk/model";
7
+ import { getErrorMessage as J } from "../../helpers/error.js";
8
+ import Q from "../../utils/DoubleContour.vue.js";
9
9
 
10
- import { useLabelNotch as X } from "../../utils/useLabelNotch.js";
11
- import Y from "../PlFileDialog/PlFileDialog.vue.js";
12
- import f from "../PlIcon24/PlIcon24.vue.js";
13
- import Z from "../PlTooltip/PlTooltip.vue.js";
14
- import x from "../../assets/images/required.svg.js";
10
+ import { useLabelNotch as W } from "../../utils/useLabelNotch.js";
11
+ import X from "../PlFileDialog/PlFileDialog.vue.js";
12
+ import m from "../PlIcon24/PlIcon24.vue.js";
13
+ import Y from "../PlTooltip/PlTooltip.vue.js";
14
+ import Z from "../../assets/images/required.svg.js";
15
15
  import ee from "../PlSvg/PlSvg.vue.js";
16
16
  const le = {
17
17
  key: 0,
18
18
  ref: "label"
19
- }, oe = ["data-placeholder"], te = {
19
+ }, te = ["data-placeholder"], oe = {
20
20
  key: 5,
21
21
  class: "pl-file-input__stats"
22
22
  }, re = {
23
23
  key: 0,
24
24
  class: "pl-file-input__error"
25
- }, se = {
25
+ }, ie = {
26
26
  key: 1,
27
27
  class: "pl-file-input__helper"
28
- }, _e = /* @__PURE__ */ $({
28
+ }, ke = /* @__PURE__ */ I({
29
29
  __name: "PlFileInput",
30
30
  props: {
31
31
  modelValue: {},
@@ -42,112 +42,112 @@ const le = {
42
42
  fileDialogCloseOnOutsideClick: { type: Boolean, default: !0 }
43
43
  },
44
44
  emits: ["update:modelValue"],
45
- setup(N, { emit: P }) {
46
- const a = q({
45
+ setup(l, { emit: N }) {
46
+ const n = $({
47
47
  fileDialogOpen: !1,
48
48
  error: void 0
49
- }), g = R(), v = P, o = N, h = (e, r) => {
49
+ }), v = q(), h = N, o = l, k = (e, i) => {
50
50
  if (e)
51
51
  try {
52
- return r(e);
53
- } catch (d) {
54
- return a.error = d instanceof Error ? d.message : String(d), e;
52
+ return i(e);
53
+ } catch (p) {
54
+ return n.error = p instanceof Error ? p.message : String(p), e;
55
55
  }
56
- }, _ = s(() => h(o.modelValue, G)), k = s(() => h(o.modelValue, J)), E = s(() => o.progress && !o.progress.done), T = s(() => o.progress && o.progress.done), V = s(() => Q(a.error, o.error)), m = s(() => typeof V.value == "string"), S = s(() => {
57
- const { status: e, done: r } = o.progress ?? {};
58
- return !e || !e.bytesTotal ? "" : e.bytesProcessed && !r ? y(e.bytesProcessed, {}) + " / " + y(e.bytesTotal, {}) : y(e.bytesTotal, {});
59
- }), w = s(() => {
60
- var r;
56
+ }, V = s(() => k(o.modelValue, A)), S = s(() => k(o.modelValue, G)), P = s(() => o.progress && !o.progress.done), E = s(() => o.progress && o.progress.done), _ = s(() => J(n.error, o.error)), y = s(() => typeof _.value == "string"), b = s(() => {
57
+ const { status: e, done: i } = o.progress ?? {};
58
+ return !e || !e.bytesTotal ? "" : e.bytesProcessed && !i ? g(e.bytesProcessed, {}) + " / " + g(e.bytesTotal, {}) : g(e.bytesTotal, {});
59
+ }), T = s(() => {
60
+ var i;
61
61
  const { progress: e } = o;
62
62
  return e ? {
63
- width: e.done ? "100%" : Math.round((((r = e.status) == null ? void 0 : r.progress) ?? 0) * 100) + "%"
63
+ width: e.done ? "100%" : Math.round((((i = e.status) == null ? void 0 : i.progress) ?? 0) * 100) + "%"
64
64
  } : {};
65
- }), b = () => {
66
- a.fileDialogOpen = !0;
67
- }, M = (e) => {
68
- e.files.length && v("update:modelValue", e.files[0]);
69
- }, I = () => v("update:modelValue", void 0);
70
- U(
65
+ }), C = () => {
66
+ n.fileDialogOpen = !0;
67
+ }, w = (e) => {
68
+ e.files.length && h("update:modelValue", e.files[0]);
69
+ }, M = () => h("update:modelValue", void 0);
70
+ R(
71
71
  () => o.modelValue,
72
- () => a.error = void 0,
72
+ () => n.error = void 0,
73
73
  { immediate: !0 }
74
74
  );
75
- const C = z();
76
- return o.cellStyle || X(C), (e, r) => (l(), n(D, null, [
77
- c("div", {
78
- class: O([{ "pl-file-input__cell-style": !!e.cellStyle, "has-file": !!_.value }, "pl-file-input__envelope"])
75
+ const D = U();
76
+ return o.cellStyle || W(D), (e, i) => (t(), u(x, null, [
77
+ f("div", {
78
+ class: O([{ "pl-file-input__cell-style": !!l.cellStyle, "has-file": !!V.value }, "pl-file-input__envelope"])
79
79
  }, [
80
- c("div", {
80
+ f("div", {
81
81
  ref_key: "rootRef",
82
- ref: C,
83
- class: O([{ dashed: e.dashed, error: m.value }, "pl-file-input"]),
82
+ ref: D,
83
+ class: O([{ dashed: l.dashed, error: y.value }, "pl-file-input"]),
84
84
  tabindex: "0",
85
- onKeyup: H(b, ["enter"]),
86
- onClick: F(b, ["stop"])
85
+ onKeyup: z(C, ["enter"]),
86
+ onClick: F(C, ["stop"])
87
87
  }, [
88
- c("div", {
89
- style: K(w.value),
88
+ f("div", {
89
+ style: H(T.value),
90
90
  class: "pl-file-input__progress"
91
91
  }, null, 4),
92
- !e.cellStyle && e.label ? (l(), n("label", le, [
93
- e.required ? (l(), i(t(ee), {
92
+ !l.cellStyle && l.label ? (t(), u("label", le, [
93
+ l.required ? (t(), a(r(ee), {
94
94
  key: 0,
95
- uri: t(x)
96
- }, null, 8, ["uri"])) : p("", !0),
97
- c("span", null, u(e.label), 1),
98
- t(g).tooltip || k.value ? (l(), i(t(Z), {
95
+ uri: r(Z)
96
+ }, null, 8, ["uri"])) : d("", !0),
97
+ f("span", null, c(l.label), 1),
98
+ r(v).tooltip || S.value ? (t(), a(r(Y), {
99
99
  key: 1,
100
100
  class: "info",
101
101
  position: "top"
102
102
  }, {
103
- tooltip: L(() => [
104
- t(g).tooltip ? j(e.$slots, "tooltip", { key: 0 }) : (l(), n(D, { key: 1 }, [
105
- A(u(k.value), 1)
103
+ tooltip: K(() => [
104
+ r(v).tooltip ? L(e.$slots, "tooltip", { key: 0 }) : (t(), u(x, { key: 1 }, [
105
+ j(c(S.value), 1)
106
106
  ], 64))
107
107
  ]),
108
108
  _: 3
109
- })) : p("", !0)
110
- ], 512)) : p("", !0),
111
- m.value ? (l(), i(t(f), {
109
+ })) : d("", !0)
110
+ ], 512)) : d("", !0),
111
+ y.value ? (t(), a(r(m), {
112
112
  key: 1,
113
113
  name: "restart"
114
- })) : E.value ? (l(), i(t(f), {
114
+ })) : P.value ? (t(), a(r(m), {
115
115
  key: 2,
116
116
  name: "cloud-upload"
117
- })) : T.value ? (l(), i(t(f), {
117
+ })) : E.value ? (t(), a(r(m), {
118
118
  key: 3,
119
119
  name: "success"
120
- })) : (l(), i(t(f), {
120
+ })) : (t(), a(r(m), {
121
121
  key: 4,
122
122
  name: "paper-clip"
123
123
  })),
124
- c("div", {
125
- "data-placeholder": e.placeholder ?? "Choose file",
124
+ f("div", {
125
+ "data-placeholder": l.placeholder ?? "Choose file",
126
126
  class: "pl-file-input__filename"
127
- }, u(_.value), 9, oe),
128
- S.value ? (l(), n("div", te, u(S.value), 1)) : p("", !0),
129
- e.modelValue ? (l(), i(t(f), {
127
+ }, c(V.value), 9, te),
128
+ b.value ? (t(), u("div", oe, c(b.value), 1)) : d("", !0),
129
+ l.modelValue ? (t(), a(r(m), {
130
130
  key: 6,
131
131
  class: "pl-file-input__clear",
132
132
  name: "close",
133
- onClick: F(I, ["stop"])
134
- })) : p("", !0),
135
- B(W, { class: "pl-file-input__contour" })
133
+ onClick: F(M, ["stop"])
134
+ })) : d("", !0),
135
+ B(Q, { class: "pl-file-input__contour" })
136
136
  ], 34),
137
- m.value ? (l(), n("div", re, u(V.value), 1)) : e.helper ? (l(), n("div", se, u(e.helper), 1)) : p("", !0)
137
+ y.value ? (t(), u("div", re, c(_.value), 1)) : l.helper ? (t(), u("div", ie, c(l.helper), 1)) : d("", !0)
138
138
  ], 2),
139
- B(t(Y), {
140
- modelValue: a.fileDialogOpen,
141
- "onUpdate:modelValue": r[0] || (r[0] = (d) => a.fileDialogOpen = d),
142
- "close-on-outside-click": e.fileDialogCloseOnOutsideClick,
143
- extensions: e.extensions,
144
- title: e.fileDialogTitle,
145
- "onImport:files": M
139
+ B(r(X), {
140
+ modelValue: n.fileDialogOpen,
141
+ "onUpdate:modelValue": i[0] || (i[0] = (p) => n.fileDialogOpen = p),
142
+ "close-on-outside-click": l.fileDialogCloseOnOutsideClick,
143
+ extensions: l.extensions,
144
+ title: l.fileDialogTitle,
145
+ "onImport:files": w
146
146
  }, null, 8, ["modelValue", "close-on-outside-click", "extensions", "title"])
147
147
  ], 64));
148
148
  }
149
149
  });
150
150
  export {
151
- _e as default
151
+ ke as default
152
152
  };
153
153
  //# sourceMappingURL=PlFileInput.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlFileInput.vue.js","sources":["../../../src/components/PlFileInput/PlFileInput.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport './pl-file-input.scss';\n\nimport { prettyBytes } from '@milaboratories/helpers';\nimport type { ImportFileHandle, ImportProgress } from '@platforma-sdk/model';\nimport { getFileNameFromHandle, getFilePathFromHandle } from '@platforma-sdk/model';\nimport { computed, reactive, ref, useSlots, watch } from 'vue';\nimport { getErrorMessage } from '../../helpers/error.ts';\nimport type { ImportedFiles } from '../../types';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { PlFileDialog } from '../PlFileDialog';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { PlTooltip } from '../PlTooltip';\n\nimport SvgRequired from '../../assets/images/required.svg?raw';\nimport { PlSvg } from '../PlSvg';\n\nconst data = reactive({\n fileDialogOpen: false,\n error: undefined as undefined | string,\n});\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: ImportFileHandle | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current import file handle.\n */\n modelValue: ImportFileHandle | undefined;\n /**\n * The label to display above the input field.\n */\n label?: string;\n /**\n * If `true`, the input field is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the component border is dashed.\n */\n dashed?: boolean;\n /**\n * Allowed file extensions (should start with `.`)\n */\n extensions?: string[];\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Import/Upload progress\n */\n progress?: ImportProgress;\n /**\n * An error message to display below the input field.\n */\n error?: unknown;\n /**\n * A helper text to display below the input field when there are no errors.\n */\n helper?: string;\n /**\n * Remove rounded border and change styles\n */\n cellStyle?: boolean;\n /**\n * File dialog title\n */\n fileDialogTitle?: string;\n /**\n * If `true`, the file dialog window closes when clicking outside the modal area (default: `true`)\n */\n fileDialogCloseOnOutsideClick?: boolean;\n }>(),\n {\n label: undefined,\n extensions: undefined,\n fileDialogTitle: undefined,\n placeholder: undefined,\n progress: undefined,\n error: undefined,\n helper: undefined,\n cellStyle: false,\n fileDialogCloseOnOutsideClick: true,\n },\n);\n\nconst tryValue = <T extends ImportFileHandle>(v: T | undefined, cb: (v: T) => string | undefined) => {\n if (!v) {\n return undefined;\n }\n\n try {\n return cb(v);\n } catch (err) {\n data.error = err instanceof Error ? err.message : String(err);\n return v;\n }\n};\n\nconst fileName = computed(() => tryValue(props.modelValue, getFileNameFromHandle));\n\nconst filePath = computed(() => tryValue(props.modelValue, getFilePathFromHandle));\n\nconst isUploading = computed(() => props.progress && !props.progress.done);\n\nconst isUploaded = computed(() => props.progress && props.progress.done);\n\nconst computedErrorMessage = computed(() => getErrorMessage(data.error, props.error));\n\nconst hasErrors = computed(() => typeof computedErrorMessage.value === 'string');\n\nconst uploadStats = computed(() => {\n const { status, done } = props.progress ?? {};\n\n if (!status || !status.bytesTotal) {\n return '';\n }\n\n if (status.bytesProcessed && !done) {\n return prettyBytes(status.bytesProcessed, {}) + ' / ' + prettyBytes(status.bytesTotal, {});\n }\n\n return prettyBytes(status.bytesTotal, {});\n});\n\nconst progressStyle = computed(() => {\n const { progress } = props;\n\n if (!progress) {\n return {};\n }\n\n return {\n width: progress.done ? '100%' : Math.round((progress.status?.progress ?? 0) * 100) + '%',\n };\n});\n\nconst openFileDialog = () => {\n data.fileDialogOpen = true;\n};\n\nconst onImport = (v: ImportedFiles) => {\n if (v.files.length) {\n emit('update:modelValue', v.files[0]);\n }\n};\n\nconst clear = () => emit('update:modelValue', undefined);\n\nwatch(\n () => props.modelValue,\n () => (data.error = undefined),\n { immediate: true },\n);\n\nconst rootRef = ref();\n\nif (!props.cellStyle) {\n useLabelNotch(rootRef);\n}\n</script>\n\n<template>\n <div :class=\"{ 'pl-file-input__cell-style': !!cellStyle, 'has-file': !!fileName }\" class=\"pl-file-input__envelope\">\n <div\n ref=\"rootRef\"\n :class=\"{ dashed, error: hasErrors }\"\n class=\"pl-file-input\"\n tabindex=\"0\"\n @keyup.enter=\"openFileDialog\"\n @click.stop=\"openFileDialog\"\n >\n <div :style=\"progressStyle\" class=\"pl-file-input__progress\" />\n <label v-if=\"!cellStyle && label\" ref=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip || filePath\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot v-if=\"slots.tooltip\" name=\"tooltip\" />\n <template v-else>{{ filePath }}</template>\n </template>\n </PlTooltip>\n </label>\n <PlMaskIcon24 v-if=\"hasErrors\" name=\"restart\" />\n <PlMaskIcon24 v-else-if=\"isUploading\" name=\"cloud-upload\" />\n <PlMaskIcon24 v-else-if=\"isUploaded\" name=\"success\" />\n <PlMaskIcon24 v-else name=\"paper-clip\" />\n <div :data-placeholder=\"placeholder ?? 'Choose file'\" class=\"pl-file-input__filename\">\n {{ fileName }}\n </div>\n <div v-if=\"uploadStats\" class=\"pl-file-input__stats\">{{ uploadStats }}</div>\n <PlMaskIcon24 v-if=\"modelValue\" class=\"pl-file-input__clear\" name=\"close\" @click.stop=\"clear\" />\n <DoubleContour class=\"pl-file-input__contour\" />\n </div>\n <div v-if=\"hasErrors\" class=\"pl-file-input__error\">\n {{ computedErrorMessage }}\n </div>\n <div v-else-if=\"helper\" class=\"pl-file-input__helper\">{{ helper }}</div>\n </div>\n <PlFileDialog\n v-model=\"data.fileDialogOpen\"\n :close-on-outside-click=\"fileDialogCloseOnOutsideClick\"\n :extensions=\"extensions\"\n :title=\"fileDialogTitle\"\n @import:files=\"onImport\"\n />\n</template>\n"],"names":["data","reactive","slots","useSlots","emit","__emit","props","__props","tryValue","v","cb","err","fileName","computed","getFileNameFromHandle","filePath","getFilePathFromHandle","isUploading","isUploaded","computedErrorMessage","getErrorMessage","hasErrors","uploadStats","status","done","prettyBytes","progressStyle","progress","_a","openFileDialog","onImport","clear","watch","rootRef","ref","useLabelNotch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,UAAMA,IAAOC,EAAS;AAAA,MACpB,gBAAgB;AAAA,MAChB,OAAO;AAAA,IAAA,CACR,GAEKC,IAAQC,EAAA,GAERC,IAAOC,GAIPC,IAAQC,GAgERC,IAAW,CAA6BC,GAAkBC,MAAqC;AACnG,UAAKD;AAIL,YAAI;AACF,iBAAOC,EAAGD,CAAC;AAAA,QACb,SAASE,GAAK;AACZ,iBAAAX,EAAK,QAAQW,aAAe,QAAQA,EAAI,UAAU,OAAOA,CAAG,GACrDF;AAAA,QACT;AAAA,IACF,GAEMG,IAAWC,EAAS,MAAML,EAASF,EAAM,YAAYQ,CAAqB,CAAC,GAE3EC,IAAWF,EAAS,MAAML,EAASF,EAAM,YAAYU,CAAqB,CAAC,GAE3EC,IAAcJ,EAAS,MAAMP,EAAM,YAAY,CAACA,EAAM,SAAS,IAAI,GAEnEY,IAAaL,EAAS,MAAMP,EAAM,YAAYA,EAAM,SAAS,IAAI,GAEjEa,IAAuBN,EAAS,MAAMO,EAAgBpB,EAAK,OAAOM,EAAM,KAAK,CAAC,GAE9Ee,IAAYR,EAAS,MAAM,OAAOM,EAAqB,SAAU,QAAQ,GAEzEG,IAAcT,EAAS,MAAM;AACjC,YAAM,EAAE,QAAAU,GAAQ,MAAAC,EAAA,IAASlB,EAAM,YAAY,CAAA;AAE3C,aAAI,CAACiB,KAAU,CAACA,EAAO,aACd,KAGLA,EAAO,kBAAkB,CAACC,IACrBC,EAAYF,EAAO,gBAAgB,CAAA,CAAE,IAAI,QAAQE,EAAYF,EAAO,YAAY,EAAE,IAGpFE,EAAYF,EAAO,YAAY,EAAE;AAAA,IAC1C,CAAC,GAEKG,IAAgBb,EAAS,MAAM;;AACnC,YAAM,EAAE,UAAAc,MAAarB;AAErB,aAAKqB,IAIE;AAAA,QACL,OAAOA,EAAS,OAAO,SAAS,KAAK,SAAOC,IAAAD,EAAS,WAAT,gBAAAC,EAAiB,aAAY,KAAK,GAAG,IAAI;AAAA,MAAA,IAJ9E,CAAA;AAAA,IAMX,CAAC,GAEKC,IAAiB,MAAM;AAC3B,MAAA7B,EAAK,iBAAiB;AAAA,IACxB,GAEM8B,IAAW,CAACrB,MAAqB;AACrC,MAAIA,EAAE,MAAM,UACVL,EAAK,qBAAqBK,EAAE,MAAM,CAAC,CAAC;AAAA,IAExC,GAEMsB,IAAQ,MAAM3B,EAAK,qBAAqB,MAAS;AAEvD,IAAA4B;AAAA,MACE,MAAM1B,EAAM;AAAA,MACZ,MAAON,EAAK,QAAQ;AAAA,MACpB,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMiC,IAAUC,EAAA;AAEhB,WAAK5B,EAAM,aACT6B,EAAcF,CAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlFileInput.vue.js","sources":["../../../src/components/PlFileInput/PlFileInput.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport './pl-file-input.scss';\n\nimport { prettyBytes } from '@milaboratories/helpers';\nimport type { ImportFileHandle, ImportProgress } from '@platforma-sdk/model';\nimport { getFileNameFromHandle, getFilePathFromHandle } from '@platforma-sdk/model';\nimport { computed, reactive, ref, useSlots, watch } from 'vue';\nimport { getErrorMessage } from '../../helpers/error.ts';\nimport type { ImportedFiles } from '../../types';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport { PlFileDialog } from '../PlFileDialog';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport { PlTooltip } from '../PlTooltip';\n\nimport SvgRequired from '../../assets/images/required.svg?raw';\nimport { PlSvg } from '../PlSvg';\n\nconst data = reactive({\n fileDialogOpen: false,\n error: undefined as undefined | string,\n});\n\nconst slots = useSlots();\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: ImportFileHandle | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current import file handle.\n */\n modelValue: ImportFileHandle | undefined;\n /**\n * The label to display above the input field.\n */\n label?: string;\n /**\n * If `true`, the input field is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the component border is dashed.\n */\n dashed?: boolean;\n /**\n * Allowed file extensions (should start with `.`)\n */\n extensions?: string[];\n /**\n * Placeholder text\n */\n placeholder?: string;\n /**\n * Import/Upload progress\n */\n progress?: ImportProgress;\n /**\n * An error message to display below the input field.\n */\n error?: unknown;\n /**\n * A helper text to display below the input field when there are no errors.\n */\n helper?: string;\n /**\n * Remove rounded border and change styles\n */\n cellStyle?: boolean;\n /**\n * File dialog title\n */\n fileDialogTitle?: string;\n /**\n * If `true`, the file dialog window closes when clicking outside the modal area (default: `true`)\n */\n fileDialogCloseOnOutsideClick?: boolean;\n }>(),\n {\n label: undefined,\n extensions: undefined,\n fileDialogTitle: undefined,\n placeholder: undefined,\n progress: undefined,\n error: undefined,\n helper: undefined,\n cellStyle: false,\n fileDialogCloseOnOutsideClick: true,\n },\n);\n\nconst tryValue = <T extends ImportFileHandle>(v: T | undefined, cb: (v: T) => string | undefined) => {\n if (!v) {\n return undefined;\n }\n\n try {\n return cb(v);\n } catch (err) {\n data.error = err instanceof Error ? err.message : String(err);\n return v;\n }\n};\n\nconst fileName = computed(() => tryValue(props.modelValue, getFileNameFromHandle));\n\nconst filePath = computed(() => tryValue(props.modelValue, getFilePathFromHandle));\n\nconst isUploading = computed(() => props.progress && !props.progress.done);\n\nconst isUploaded = computed(() => props.progress && props.progress.done);\n\nconst computedErrorMessage = computed(() => getErrorMessage(data.error, props.error));\n\nconst hasErrors = computed(() => typeof computedErrorMessage.value === 'string');\n\nconst uploadStats = computed(() => {\n const { status, done } = props.progress ?? {};\n\n if (!status || !status.bytesTotal) {\n return '';\n }\n\n if (status.bytesProcessed && !done) {\n return prettyBytes(status.bytesProcessed, {}) + ' / ' + prettyBytes(status.bytesTotal, {});\n }\n\n return prettyBytes(status.bytesTotal, {});\n});\n\nconst progressStyle = computed(() => {\n const { progress } = props;\n\n if (!progress) {\n return {};\n }\n\n return {\n width: progress.done ? '100%' : Math.round((progress.status?.progress ?? 0) * 100) + '%',\n };\n});\n\nconst openFileDialog = () => {\n data.fileDialogOpen = true;\n};\n\nconst onImport = (v: ImportedFiles) => {\n if (v.files.length) {\n emit('update:modelValue', v.files[0]);\n }\n};\n\nconst clear = () => emit('update:modelValue', undefined);\n\nwatch(\n () => props.modelValue,\n () => (data.error = undefined),\n { immediate: true },\n);\n\nconst rootRef = ref();\n\nif (!props.cellStyle) {\n useLabelNotch(rootRef);\n}\n</script>\n\n<template>\n <div :class=\"{ 'pl-file-input__cell-style': !!cellStyle, 'has-file': !!fileName }\" class=\"pl-file-input__envelope\">\n <div\n ref=\"rootRef\"\n :class=\"{ dashed, error: hasErrors }\"\n class=\"pl-file-input\"\n tabindex=\"0\"\n @keyup.enter=\"openFileDialog\"\n @click.stop=\"openFileDialog\"\n >\n <div :style=\"progressStyle\" class=\"pl-file-input__progress\" />\n <label v-if=\"!cellStyle && label\" ref=\"label\">\n <PlSvg v-if=\"required\" :uri=\"SvgRequired\" />\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip || filePath\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot v-if=\"slots.tooltip\" name=\"tooltip\" />\n <template v-else>{{ filePath }}</template>\n </template>\n </PlTooltip>\n </label>\n <PlMaskIcon24 v-if=\"hasErrors\" name=\"restart\" />\n <PlMaskIcon24 v-else-if=\"isUploading\" name=\"cloud-upload\" />\n <PlMaskIcon24 v-else-if=\"isUploaded\" name=\"success\" />\n <PlMaskIcon24 v-else name=\"paper-clip\" />\n <div :data-placeholder=\"placeholder ?? 'Choose file'\" class=\"pl-file-input__filename\">\n {{ fileName }}\n </div>\n <div v-if=\"uploadStats\" class=\"pl-file-input__stats\">{{ uploadStats }}</div>\n <PlMaskIcon24 v-if=\"modelValue\" class=\"pl-file-input__clear\" name=\"close\" @click.stop=\"clear\" />\n <DoubleContour class=\"pl-file-input__contour\" />\n </div>\n <div v-if=\"hasErrors\" class=\"pl-file-input__error\">\n {{ computedErrorMessage }}\n </div>\n <div v-else-if=\"helper\" class=\"pl-file-input__helper\">{{ helper }}</div>\n </div>\n <PlFileDialog\n v-model=\"data.fileDialogOpen\"\n :close-on-outside-click=\"fileDialogCloseOnOutsideClick\"\n :extensions=\"extensions\"\n :title=\"fileDialogTitle\"\n @import:files=\"onImport\"\n />\n</template>\n"],"names":["data","reactive","slots","useSlots","emit","__emit","props","__props","tryValue","v","cb","err","fileName","computed","getFileNameFromHandle","filePath","getFilePathFromHandle","isUploading","isUploaded","computedErrorMessage","getErrorMessage","hasErrors","uploadStats","status","done","prettyBytes","progressStyle","progress","_a","openFileDialog","onImport","clear","watch","rootRef","ref","useLabelNotch","_createElementVNode","_normalizeClass","_openBlock","_createElementBlock","_hoisted_1","_createBlock","_unref","PlSvg","SvgRequired","PlTooltip","_renderSlot","_ctx","_Fragment","PlMaskIcon24","_hoisted_2","_hoisted_3","_toDisplayString","_createVNode","DoubleContour","_hoisted_4","_hoisted_5","PlFileDialog","_cache","$event"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlIcon16.vue2.js","sources":["../../../src/components/PlIcon16/PlIcon16.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { MaskIconName16, Size } from '../../types';\nimport { PlSvg } from '../PlSvg';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n name: MaskIconName16;\n size?: number | string | Size;\n color?: string | string[];\n stroke?: string | string[];\n}>();\n\nconst size = computed(() => {\n if (typeof props.size === 'string') {\n if (props.size === 'small') return 12;\n if (props.size === 'medium') return 16;\n if (props.size === 'large') return 24;\n }\n return props.size ?? 16;\n});\n</script>\n\n<template>\n <PlSvg\n :name=\"`16_${props.name}`\"\n :class=\"[$style.icon, 'icon-16', 'mask-16', `icon-${props.name}`, `mask-${props.name}`]\"\n :width=\"size\"\n :height=\"size\"\n :color=\"props.color\"\n :stroke=\"props.stroke\"\n />\n</template>\n\n<style module>\n.icon {\n /* pass color to svg variable */\n --svg-fill-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-2: var(--icon-color, var(--mask-icon-bg-color));\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","size","computed"],"mappings":";;;;;;;;;;;AAKA,UAAMA,IAAQC,GAORC,IAAOC,EAAS,MAAM;AAC1B,UAAI,OAAOH,EAAM,QAAS,UAAU;AAClC,YAAIA,EAAM,SAAS,QAAS,QAAO;AACnC,YAAIA,EAAM,SAAS,SAAU,QAAO;AACpC,YAAIA,EAAM,SAAS,QAAS,QAAO;AAAA,MACrC;AACA,aAAOA,EAAM,QAAQ;AAAA,IACvB,CAAC;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlIcon16.vue2.js","sources":["../../../src/components/PlIcon16/PlIcon16.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { MaskIconName16, Size } from '../../types';\nimport { PlSvg } from '../PlSvg';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n name: MaskIconName16;\n size?: number | string | Size;\n color?: string | string[];\n stroke?: string | string[];\n}>();\n\nconst size = computed(() => {\n if (typeof props.size === 'string') {\n if (props.size === 'small') return 12;\n if (props.size === 'medium') return 16;\n if (props.size === 'large') return 24;\n }\n return props.size ?? 16;\n});\n</script>\n\n<template>\n <PlSvg\n :name=\"`16_${props.name}`\"\n :class=\"[$style.icon, 'icon-16', 'mask-16', `icon-${props.name}`, `mask-${props.name}`]\"\n :width=\"size\"\n :height=\"size\"\n :color=\"props.color\"\n :stroke=\"props.stroke\"\n />\n</template>\n\n<style module>\n.icon {\n /* pass color to svg variable */\n --svg-fill-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-2: var(--icon-color, var(--mask-icon-bg-color));\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","size","computed","_createBlock","_unref","PlSvg","_normalizeClass","$style"],"mappings":";;;;;;;;;;;AAKA,UAAMA,IAAQC,GAORC,IAAOC,EAAS,MAAM;AAC1B,UAAI,OAAOH,EAAM,QAAS,UAAU;AAClC,YAAIA,EAAM,SAAS,QAAS,QAAO;AACnC,YAAIA,EAAM,SAAS,SAAU,QAAO;AACpC,YAAIA,EAAM,SAAS,QAAS,QAAO;AAAA,MACrC;AACA,aAAOA,EAAM,QAAQ;AAAA,IACvB,CAAC;2BAICI,EAOEC,EAAAC,CAAA,GAAA;AAAA,MANC,MAAI,MAAQN,EAAM,IAAI;AAAA,MACtB,OAAKO,EAAA,CAAGC,EAAAA,OAAO,MAAI,WAAA,WAAA,QAAgCR,EAAM,IAAI,IAAA,QAAYA,EAAM,IAAI,EAAA,CAAA;AAAA,MACnF,OAAOE,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,OAAOF,EAAM;AAAA,MACb,QAAQA,EAAM;AAAA,IAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PlIcon24.vue2.js","sources":["../../../src/components/PlIcon24/PlIcon24.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { MaskIconName24, Size } from '../../types';\nimport { PlSvg } from '../PlSvg';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n name: MaskIconName24;\n size?: number | string | Size;\n color?: string | string[];\n stroke?: string | string[];\n}>();\n\nconst size = computed(() => {\n if (typeof props.size === 'string') {\n if (props.size === 'small') return 16;\n if (props.size === 'medium') return 24;\n if (props.size === 'large') return 32;\n }\n return props.size ?? 24;\n});\n</script>\n\n<template>\n <PlSvg\n :name=\"`24_${props.name}`\"\n :class=\"['icon-24', 'mask-24', `icon-${props.name}`, `mask-${props.name}`, $style.icon]\"\n :width=\"size\"\n :height=\"size\"\n :color=\"props.color\"\n :stroke=\"props.stroke\"\n />\n</template>\n\n<style module>\n.icon {\n /* pass color to svg variable */\n --svg-fill-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-2: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-3: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-4: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-5: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-6: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-2: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-3: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-4: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-5: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-6: var(--icon-color, var(--mask-icon-bg-color));\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","size","computed"],"mappings":";;;;;;;;;;;AAKA,UAAMA,IAAQC,GAORC,IAAOC,EAAS,MAAM;AAC1B,UAAI,OAAOH,EAAM,QAAS,UAAU;AAClC,YAAIA,EAAM,SAAS,QAAS,QAAO;AACnC,YAAIA,EAAM,SAAS,SAAU,QAAO;AACpC,YAAIA,EAAM,SAAS,QAAS,QAAO;AAAA,MACrC;AACA,aAAOA,EAAM,QAAQ;AAAA,IACvB,CAAC;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlIcon24.vue2.js","sources":["../../../src/components/PlIcon24/PlIcon24.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { MaskIconName24, Size } from '../../types';\nimport { PlSvg } from '../PlSvg';\nimport { computed } from 'vue';\n\nconst props = defineProps<{\n name: MaskIconName24;\n size?: number | string | Size;\n color?: string | string[];\n stroke?: string | string[];\n}>();\n\nconst size = computed(() => {\n if (typeof props.size === 'string') {\n if (props.size === 'small') return 16;\n if (props.size === 'medium') return 24;\n if (props.size === 'large') return 32;\n }\n return props.size ?? 24;\n});\n</script>\n\n<template>\n <PlSvg\n :name=\"`24_${props.name}`\"\n :class=\"['icon-24', 'mask-24', `icon-${props.name}`, `mask-${props.name}`, $style.icon]\"\n :width=\"size\"\n :height=\"size\"\n :color=\"props.color\"\n :stroke=\"props.stroke\"\n />\n</template>\n\n<style module>\n.icon {\n /* pass color to svg variable */\n --svg-fill-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-2: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-3: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-4: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-5: var(--icon-color, var(--mask-icon-bg-color));\n --svg-fill-6: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-0: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-1: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-2: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-3: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-4: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-5: var(--icon-color, var(--mask-icon-bg-color));\n --svg-stroke-6: var(--icon-color, var(--mask-icon-bg-color));\n display: inline-block;\n}\n</style>\n"],"names":["props","__props","size","computed","_createBlock","_unref","PlSvg","_normalizeClass","$style"],"mappings":";;;;;;;;;;;AAKA,UAAMA,IAAQC,GAORC,IAAOC,EAAS,MAAM;AAC1B,UAAI,OAAOH,EAAM,QAAS,UAAU;AAClC,YAAIA,EAAM,SAAS,QAAS,QAAO;AACnC,YAAIA,EAAM,SAAS,SAAU,QAAO;AACpC,YAAIA,EAAM,SAAS,QAAS,QAAO;AAAA,MACrC;AACA,aAAOA,EAAM,QAAQ;AAAA,IACvB,CAAC;2BAICI,EAOEC,EAAAC,CAAA,GAAA;AAAA,MANC,MAAI,MAAQN,EAAM,IAAI;AAAA,MACtB,OAAKO,EAAA,CAAA,WAAA,WAAA,QAAiCP,EAAM,IAAI,IAAA,QAAYA,EAAM,IAAI,IAAIQ,EAAAA,OAAO,IAAI,CAAA;AAAA,MACrF,OAAON,EAAA;AAAA,MACP,QAAQA,EAAA;AAAA,MACR,OAAOF,EAAM;AAAA,MACb,QAAQA,EAAM;AAAA,IAAA;;;"}
@@ -1,22 +1,22 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var e=document.createElement("style");e.appendChild(document.createTextNode(".pl-loader-circular{position:relative;height:100%;display:flex;align-items:center;justify-content:center}.pl-loader-circular__svg{-webkit-animation:rotate 2s linear infinite;animation:rotate 2s linear infinite;height:100%;width:100%;-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center}.pl-loader-circular__svg-circle{stroke-dasharray:150,200;stroke-dashoffset:-10;-webkit-animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite;stroke-linecap:round}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:89,200;stroke-dashoffset:-35}to{stroke-dasharray:89,200;stroke-dashoffset:-124}}@keyframes color{0%{stroke:var(--ic-02)}40%{stroke:var(--ic-02)}66%{stroke:var(--ic-02)}80%,90%{stroke:var(--ic-02)}}")),document.head.appendChild(e)}}catch(t){console.error("vite-plugin-css-injected-by-js",t)}})();
2
- import { defineComponent as i, createElementBlock as r, openBlock as l, createElementVNode as c, normalizeStyle as o } from "vue";
2
+ import { defineComponent as i, createElementBlock as c, openBlock as r, createElementVNode as l, normalizeStyle as t } from "vue";
3
3
 
4
- const s = { class: "pl-loader-circular" }, a = {
4
+ const a = { class: "pl-loader-circular" }, o = {
5
5
  class: "pl-loader-circular__svg",
6
6
  viewBox: "25 25 50 50"
7
- }, t = ["stroke"], m = /* @__PURE__ */ i({
7
+ }, s = ["stroke"], p = /* @__PURE__ */ i({
8
8
  __name: "PlLoaderCircular",
9
9
  props: {
10
10
  size: { default: "16" }
11
11
  },
12
- setup(n) {
13
- return (e, p) => (l(), r("div", s, [
14
- c("div", {
15
- style: o({ height: `${e.size}px`, width: `${e.size}px`, "--main-color": `${+e.size < 48 ? "var(--ic-01)" : "var(--ic-02)"}` }),
12
+ setup(e) {
13
+ return (n, d) => (r(), c("div", a, [
14
+ l("div", {
15
+ style: t({ height: `${e.size}px`, width: `${e.size}px`, "--main-color": `${+e.size < 48 ? "var(--ic-01)" : "var(--ic-02)"}` }),
16
16
  class: "pl-circle-loader__wrapper"
17
17
  }, [
18
- (l(), r("svg", a, [
19
- c("circle", {
18
+ (r(), c("svg", o, [
19
+ l("circle", {
20
20
  class: "pl-loader-circular__svg-circle",
21
21
  cx: "50",
22
22
  cy: "50",
@@ -24,13 +24,13 @@ const s = { class: "pl-loader-circular" }, a = {
24
24
  fill: "none",
25
25
  stroke: `${+e.size < 48 ? "var(--ic-01)" : "var(--ic-02)"}`,
26
26
  "stroke-width": "2"
27
- }, null, 8, t)
27
+ }, null, 8, s)
28
28
  ]))
29
29
  ], 4)
30
30
  ]));
31
31
  }
32
32
  });
33
33
  export {
34
- m as default
34
+ p as default
35
35
  };
36
36
  //# sourceMappingURL=PlLoaderCircular.vue.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlLoaderCircular.vue.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlLoaderCircular.vue.js","sources":["../../../src/components/PlLoaderCircular/PlLoaderCircular.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport './pl-loader-circular.scss';\n\nwithDefaults(defineProps<{\n size?: '16' | '24' | '48' | string;\n}>(), { size: '16' });\n</script>\n<template>\n <div class=\"pl-loader-circular\">\n <div :style=\"{height: `${size}px`, width: `${size}px`, '--main-color': `${+size < 48 ? 'var(--ic-01)' :'var(--ic-02)' }`}\" class=\"pl-circle-loader__wrapper\">\n <svg class=\"pl-loader-circular__svg\" viewBox=\"25 25 50 50\">\n <circle class=\"pl-loader-circular__svg-circle\" cx=\"50\" cy=\"50\" r=\"20\" fill=\"none\" :stroke=\"`${+size < 48 ? 'var(--ic-01)' :'var(--ic-02)' }`\" stroke-width=\"2\" />\n </svg>\n </div>\n </div>\n</template>\n"],"names":["_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_normalizeStyle","__props","_hoisted_2"],"mappings":";;;;;;;;;;;sBAQEA,EAAA,GAAAC,EAMM,OANNC,GAMM;AAAA,MALJC,EAIM,OAAA;AAAA,QAJA,OAAKC,EAAA,EAAA,QAAA,GAAcC,EAAA,IAAI,MAAA,OAAA,GAAgBA,EAAA,IAAI,0BAA0BA,EAAA,OAAI,KAAA,iBAAA,cAAA,IAAA;AAAA,QAA4C,OAAM;AAAA,MAAA;SAC/HL,KAAAC,EAEM,OAFNK,GAEM;AAAA,UADJH,EAAiK,UAAA;AAAA,YAAzJ,OAAM;AAAA,YAAiC,IAAG;AAAA,YAAK,IAAG;AAAA,YAAK,GAAE;AAAA,YAAK,MAAK;AAAA,YAAQ,YAAYE,EAAA,OAAI,KAAA,iBAAA,cAAA;AAAA,YAA2C,gBAAa;AAAA,UAAA;;;;;;"}
@@ -1,21 +1,21 @@
1
1
  (function(){"use strict";try{if(typeof document<"u"){var o=document.createElement("style");o.appendChild(document.createTextNode(`.pl-log-view{--log-background: var(--bg-base-light);--contour-color: var(--txt-01);--contour-border-width: 1px;--label-offset-left-x: 8px;--label-offset-right-x: 8px;--border-color-log-view: var(--border-color-div-grey);height:100%;max-height:calc(100% - var(--contour-offset));max-width:calc(100% - var(--contour-offset));border-radius:6px;background:var(--log-background);display:flex;position:relative;min-height:44px;padding-right:40px}.pl-log-view__contour{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:var(--border-radius-control);border-width:var(--contour-border-width);border-color:var(--border-color-log-view);border-style:solid;box-shadow:none;z-index:0;pointer-events:none}.pl-log-view label{display:flex;align-items:center;gap:4px;position:absolute;top:0;transform:translateY(-60%);left:var(--label-offset-left-x);padding:0 4px;max-width:calc(100% - 16px);overflow:hidden;white-space:pre;text-overflow:ellipsis;cursor:inherit;color:var(--label-color);font-size:12px;font-weight:500;border-bottom-right-radius:4px;border-bottom-left-radius:4px;background:var(--bg-elevated-01)}.pl-log-view label>span{overflow:hidden;white-space:pre;text-overflow:ellipsis}.pl-log-view.has-error{--log-background: linear-gradient(90deg, #FFEBEB 0%, #FFFFFF 100%);--border-color-log-view: var(--border-color-error)}.pl-log-view__copy{position:absolute;top:12px;right:12px;cursor:pointer;--icon-color: var(--ic-02)}.pl-log-view__copy>*:hover{--icon-color: var(--txt-01)}.pl-log-view__content{margin:12px;max-height:100%;max-width:100%;flex:1;color:var(--txt-01);font-feature-settings:"ss11" on,"ss15" on,"ss17" on;font-family:var(--font-family-monospace);white-space:pre;font-size:14px;font-weight:400;line-height:20px;--thumb-color: var(--ic-02);overflow-y:auto;overflow-x:auto}.pl-log-view__content::-webkit-scrollbar{width:var(--scrollbar-width, 6px);height:5px;background-color:transparent;display:block}.pl-log-view__content::-webkit-scrollbar-thumb{background:var(--thumb-color);border-radius:5px}.pl-log-view__content::-webkit-scrollbar-thumb:hover{--thumb-color: var(--border-color-focus)}.pl-log-view__error{margin:12px;max-height:100%;max-width:100%;flex:1;color:var(--txt-01);font-feature-settings:"ss11" on,"ss15" on,"ss17" on;font-family:var(--font-family-monospace);white-space:pre;font-size:14px;font-weight:400;line-height:20px;--thumb-color: var(--ic-02);overflow-y:auto;overflow-x:auto}.pl-log-view__error::-webkit-scrollbar{width:var(--scrollbar-width, 6px);height:5px;background-color:transparent;display:block}.pl-log-view__error::-webkit-scrollbar-thumb{background:var(--thumb-color);border-radius:5px}.pl-log-view__error::-webkit-scrollbar-thumb:hover{--thumb-color: var(--border-color-focus)}
2
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(o)}}catch(r){console.error("vite-plugin-css-injected-by-js",r)}})();
3
- import { defineComponent as F, useSlots as L, ref as s, computed as c, watch as P, createElementBlock as p, openBlock as l, normalizeClass as x, createCommentVNode as f, createVNode as u, createElementVNode as C, createBlock as b, toDisplayString as d, unref as r, withCtx as a, renderSlot as R, createTextVNode as S } from "vue";
4
- import T from "../PlIcon24/PlIcon24.vue.js";
3
+ import { defineComponent as E, useSlots as F, ref as c, computed as u, watch as L, createElementBlock as p, openBlock as l, normalizeClass as P, createCommentVNode as v, createVNode as d, createElementVNode as b, createBlock as S, toDisplayString as m, unref as r, withCtx as i, renderSlot as R, createTextVNode as T } from "vue";
4
+ import h from "../PlIcon24/PlIcon24.vue.js";
5
5
 
6
6
  import { okOptional as $, tapIf as I } from "@milaboratories/helpers";
7
7
  import { useLogHandle as O } from "./useLogHandle.js";
8
8
  import { useLabelNotch as j } from "../../utils/useLabelNotch.js";
9
9
  import q from "../../utils/DoubleContour.vue.js";
10
10
 
11
- import v from "../PlTooltip/PlTooltip.vue.js";
11
+ import y from "../PlTooltip/PlTooltip.vue.js";
12
12
  import { downloadContent as z } from "../../helpers/downloadContent.js";
13
13
  const M = { key: 0 }, G = { class: "pl-log-view__copy" }, J = {
14
14
  key: 1,
15
15
  class: "pl-log-view__error"
16
16
  }, K = {
17
17
  name: "PlLogView"
18
- }, ro = /* @__PURE__ */ F({
18
+ }, ro = /* @__PURE__ */ E({
19
19
  ...K,
20
20
  props: {
21
21
  value: {},
@@ -30,111 +30,111 @@ const M = { key: 0 }, G = { class: "pl-log-view__copy" }, J = {
30
30
  disableAutoScroll: { type: Boolean },
31
31
  downloadFilename: {}
32
32
  },
33
- setup(h) {
34
- const V = (o) => {
33
+ setup(n) {
34
+ const x = (o) => {
35
35
  if (o && o.ok === !1)
36
36
  return o.errors.join(`
37
37
  `);
38
- }, N = L(), t = h, y = O(t), _ = s(!0), g = s(), k = s(), m = c(() => {
38
+ }, V = F(), t = n, g = O(t), k = c(!0), w = c(), _ = c(), f = u(() => {
39
39
  var o;
40
- return ((o = y.value) == null ? void 0 : o.error) ?? t.error ?? V(t.output);
41
- }), n = c(() => {
40
+ return ((o = g.value) == null ? void 0 : o.error) ?? t.error ?? x(t.output);
41
+ }), a = u(() => {
42
42
  var o;
43
- return ((o = y.value) == null ? void 0 : o.lines) ?? t.value ?? $(t.output);
44
- }), w = c(() => {
43
+ return ((o = g.value) == null ? void 0 : o.lines) ?? t.value ?? $(t.output);
44
+ }), C = u(() => {
45
45
  if (t.valueToCopy)
46
46
  return t.valueToCopy;
47
- if (n.value && typeof n.value == "string")
48
- return n.value;
49
- }), i = s(!1);
50
- j(k);
51
- const A = c(() => i.value ? "clipboard-copied" : "clipboard"), H = () => {
52
- i.value = !0, setTimeout(() => {
53
- i.value = !1;
47
+ if (a.value && typeof a.value == "string")
48
+ return a.value;
49
+ }), s = c(!1);
50
+ j(_);
51
+ const N = u(() => s.value ? "clipboard-copied" : "clipboard"), A = () => {
52
+ s.value = !0, setTimeout(() => {
53
+ s.value = !1;
54
54
  }, 1200);
55
- const o = w.value;
55
+ const o = C.value;
56
56
  o !== void 0 && navigator.clipboard.writeText(o);
57
- }, B = (o) => {
58
- const e = w.value;
57
+ }, H = (o) => {
58
+ const e = C.value;
59
59
  e !== void 0 && z([e, "text/plain"], o);
60
- }, D = () => {
61
- t.disableAutoScroll || I(g.value, (o) => {
62
- _.value && o.scrollTo(o.scrollLeft, o.scrollHeight);
60
+ }, B = () => {
61
+ t.disableAutoScroll || I(w.value, (o) => {
62
+ k.value && o.scrollTo(o.scrollLeft, o.scrollHeight);
63
63
  });
64
64
  };
65
- P(
66
- n,
65
+ L(
66
+ a,
67
67
  () => {
68
68
  requestAnimationFrame(() => {
69
- D();
69
+ B();
70
70
  });
71
71
  },
72
72
  { immediate: !0 }
73
73
  );
74
- const E = (o) => {
74
+ const D = (o) => {
75
75
  const e = o.target;
76
- _.value = e.scrollTop + 20 >= e.scrollHeight - e.offsetHeight;
76
+ k.value = e.scrollTop + 20 >= e.scrollHeight - e.offsetHeight;
77
77
  };
78
78
  return (o, e) => (l(), p("div", {
79
79
  ref_key: "root",
80
- ref: k,
81
- class: x(["pl-log-view", { "has-error": m.value }])
80
+ ref: _,
81
+ class: P(["pl-log-view", { "has-error": f.value }])
82
82
  }, [
83
- o.label ? (l(), p("label", M, [
84
- C("span", null, d(o.label), 1),
85
- r(N).tooltip ? (l(), b(r(v), {
83
+ n.label ? (l(), p("label", M, [
84
+ b("span", null, m(n.label), 1),
85
+ r(V).tooltip ? (l(), S(r(y), {
86
86
  key: 0,
87
87
  class: "info",
88
88
  position: "top"
89
89
  }, {
90
- tooltip: a(() => [
90
+ tooltip: i(() => [
91
91
  R(o.$slots, "tooltip")
92
92
  ]),
93
93
  _: 3
94
- })) : f("", !0)
95
- ])) : f("", !0),
96
- u(q, { class: "pl-log-view__contour" }),
97
- C("div", G, [
98
- u(r(v), {
94
+ })) : v("", !0)
95
+ ])) : v("", !0),
96
+ d(q, { class: "pl-log-view__contour" }),
97
+ b("div", G, [
98
+ d(r(y), {
99
99
  "close-delay": 800,
100
100
  position: "top"
101
101
  }, {
102
- tooltip: a(() => [
103
- S(d(i.value ? "copied" : "copy"), 1)
102
+ tooltip: i(() => [
103
+ T(m(s.value ? "copied" : "copy"), 1)
104
104
  ]),
105
- default: a(() => [
106
- u(r(T), {
105
+ default: i(() => [
106
+ d(r(h), {
107
107
  title: "Copy content",
108
- name: A.value,
109
- onClick: H
108
+ name: N.value,
109
+ onClick: A
110
110
  }, null, 8, ["name"])
111
111
  ]),
112
112
  _: 1
113
113
  }),
114
- o.downloadFilename ? (l(), b(r(v), {
114
+ n.downloadFilename ? (l(), S(r(y), {
115
115
  key: 0,
116
116
  "close-delay": 800,
117
117
  position: "top"
118
118
  }, {
119
- tooltip: a(() => e[1] || (e[1] = [
120
- S("download")
121
- ])),
122
- default: a(() => [
123
- u(r(T), {
119
+ tooltip: i(() => [...e[1] || (e[1] = [
120
+ T("download", -1)
121
+ ])]),
122
+ default: i(() => [
123
+ d(r(h), {
124
124
  name: "download",
125
- onClick: e[0] || (e[0] = () => B(o.downloadFilename))
125
+ onClick: e[0] || (e[0] = () => H(n.downloadFilename))
126
126
  })
127
127
  ]),
128
128
  _: 1
129
- })) : f("", !0)
129
+ })) : v("", !0)
130
130
  ]),
131
- m.value ? (l(), p("div", J, d(m.value), 1)) : (l(), p("div", {
131
+ f.value ? (l(), p("div", J, m(f.value), 1)) : (l(), p("div", {
132
132
  key: 2,
133
133
  ref_key: "contentRef",
134
- ref: g,
134
+ ref: w,
135
135
  class: "pl-log-view__content",
136
- onScroll: E
137
- }, d(n.value), 545))
136
+ onScroll: D
137
+ }, m(a.value), 545))
138
138
  ], 2));
139
139
  }
140
140
  });
@@ -1 +1 @@
1
- {"version":3,"file":"PlLogView.vue.js","sources":["../../../src/components/PlLogView/PlLogView.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Log Viewer Component\n */\nexport default {\n name: 'PlLogView',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport './pl-log-view.scss';\nimport { okOptional, tapIf } from '@milaboratories/helpers';\nimport type { AnyLogHandle, Platforma, ValueOrErrors } from '@platforma-sdk/model';\nimport { useLogHandle } from './useLogHandle';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { PlTooltip } from '../PlTooltip';\nimport { PlIcon24 } from '../PlIcon24';\nimport { downloadContent } from '../../helpers/dom';\n\nconst getOutputError = <T>(o?: ValueOrErrors<T>) => {\n if (o && o.ok === false) {\n return o.errors.join('\\n');\n }\n};\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * String contents\n */\n value?: string;\n /**\n * The content to copy (Note: it takes precedence over value property)\n */\n valueToCopy?: string;\n /**\n * AnyLogHandle\n */\n logHandle?: AnyLogHandle;\n /**\n * Custom progress prefix (to filter logHandle results)\n */\n progressPrefix?: string;\n /**\n * String contents\n */\n error?: unknown;\n /**\n * Block output (Note: error and value take precedence over output property)\n */\n output?: ValueOrErrors<unknown>;\n /**\n * Max retries for AnyLogHandle fetch (with the same parameters)\n */\n maxRetries?: number;\n /**\n * @TODO\n */\n mockPlatforma?: Platforma;\n /**\n * The label to display above the texarea.\n */\n label?: string;\n /**\n * Do not scroll to bottom on content change. Default is false (scroll to bottom).\n */\n disableAutoScroll?: boolean;\n /**\n * If provided, a download icon will be shown and the content will be downloaded when clicked.\n */\n downloadFilename?: string;\n}>();\n\nconst logState = useLogHandle(props);\n\nconst isAnchored = ref<boolean>(true);\n\nconst contentRef = ref<HTMLElement>();\n\nconst root = ref<HTMLInputElement>();\n\nconst computedError = computed(() => logState.value?.error ?? props.error ?? getOutputError(props.output));\n\nconst computedValue = computed(() => logState.value?.lines ?? props.value ?? okOptional(props.output));\n\nconst computedValueToCopy = computed(() => {\n if (props.valueToCopy) {\n return props.valueToCopy;\n }\n if (computedValue.value && typeof computedValue.value === 'string') {\n return computedValue.value;\n }\n return undefined;\n});\n\nconst copyActive = ref(false);\n\nuseLabelNotch(root);\n\nconst iconName = computed(() => (copyActive.value ? 'clipboard-copied' : 'clipboard'));\n\nconst onClickCopy = () => {\n copyActive.value = true;\n setTimeout(() => {\n copyActive.value = false;\n }, 1200);\n\n const toCopy = computedValueToCopy.value;\n\n if (toCopy !== undefined) {\n navigator.clipboard.writeText(toCopy);\n }\n};\n\nconst onClickDownload = (filename: string) => {\n const toDownload = computedValueToCopy.value;\n\n if (toDownload !== undefined) {\n downloadContent([toDownload, 'text/plain'], filename);\n }\n};\n\nconst optionallyScrollDown = () => {\n if (props.disableAutoScroll) {\n return;\n }\n\n tapIf(contentRef.value, (el) => {\n if (isAnchored.value) {\n el.scrollTo(el.scrollLeft, el.scrollHeight);\n }\n });\n};\n\nwatch(\n computedValue,\n () => {\n requestAnimationFrame(() => {\n optionallyScrollDown();\n });\n },\n { immediate: true },\n);\n\nconst onContentScroll = (ev: Event) => {\n const el = ev.target as HTMLElement;\n isAnchored.value = el.scrollTop + 20 /* ~ 1 line height */ >= el.scrollHeight - el.offsetHeight;\n};\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-log-view\" :class=\"{ 'has-error': computedError }\">\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 <DoubleContour class=\"pl-log-view__contour\" />\n <div class=\"pl-log-view__copy\">\n <PlTooltip :close-delay=\"800\" position=\"top\">\n <PlMaskIcon24 title=\"Copy content\" :name=\"iconName\" @click=\"onClickCopy\" />\n <template #tooltip>{{ copyActive ? 'copied' : 'copy' }}</template>\n </PlTooltip>\n <PlTooltip v-if=\"downloadFilename\" :close-delay=\"800\" position=\"top\">\n <PlIcon24 name=\"download\" @click=\"() => onClickDownload(downloadFilename!)\" />\n <template #tooltip>download</template>\n </PlTooltip>\n </div>\n <div v-if=\"computedError\" class=\"pl-log-view__error\">{{ computedError }}</div>\n <div v-else ref=\"contentRef\" class=\"pl-log-view__content\" @scroll=\"onContentScroll\">{{ computedValue }}</div>\n </div>\n</template>\n"],"names":["__default__","getOutputError","slots","useSlots","props","__props","logState","useLogHandle","isAnchored","ref","contentRef","root","computedError","computed","_a","computedValue","okOptional","computedValueToCopy","copyActive","useLabelNotch","iconName","onClickCopy","toCopy","onClickDownload","filename","toDownload","downloadContent","optionallyScrollDown","tapIf","el","watch","onContentScroll","ev"],"mappings":";;;;;;;;;;;;;GAIAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;;;;AAgBA,UAAMC,IAAiB,CAAI,MAAyB;AAClD,UAAI,KAAK,EAAE,OAAO;AAChB,eAAO,EAAE,OAAO,KAAK;AAAA,CAAI;AAAA,IAE7B,GAEMC,IAAQC,EAAA,GAERC,IAAQC,GA+CRC,IAAWC,EAAaH,CAAK,GAE7BI,IAAaC,EAAa,EAAI,GAE9BC,IAAaD,EAAA,GAEbE,IAAOF,EAAA,GAEPG,IAAgBC,EAAS,MAAA;;AAAM,eAAAC,IAAAR,EAAS,UAAT,gBAAAQ,EAAgB,UAASV,EAAM,SAASH,EAAeG,EAAM,MAAM;AAAA,KAAC,GAEnGW,IAAgBF,EAAS,MAAA;;AAAM,eAAAC,IAAAR,EAAS,UAAT,gBAAAQ,EAAgB,UAASV,EAAM,SAASY,EAAWZ,EAAM,MAAM;AAAA,KAAC,GAE/Fa,IAAsBJ,EAAS,MAAM;AACzC,UAAIT,EAAM;AACR,eAAOA,EAAM;AAEf,UAAIW,EAAc,SAAS,OAAOA,EAAc,SAAU;AACxD,eAAOA,EAAc;AAAA,IAGzB,CAAC,GAEKG,IAAaT,EAAI,EAAK;AAE5B,IAAAU,EAAcR,CAAI;AAElB,UAAMS,IAAWP,EAAS,MAAOK,EAAW,QAAQ,qBAAqB,WAAY,GAE/EG,IAAc,MAAM;AACxB,MAAAH,EAAW,QAAQ,IACnB,WAAW,MAAM;AACf,QAAAA,EAAW,QAAQ;AAAA,MACrB,GAAG,IAAI;AAEP,YAAMI,IAASL,EAAoB;AAEnC,MAAIK,MAAW,UACb,UAAU,UAAU,UAAUA,CAAM;AAAA,IAExC,GAEMC,IAAkB,CAACC,MAAqB;AAC5C,YAAMC,IAAaR,EAAoB;AAEvC,MAAIQ,MAAe,UACjBC,EAAgB,CAACD,GAAY,YAAY,GAAGD,CAAQ;AAAA,IAExD,GAEMG,IAAuB,MAAM;AACjC,MAAIvB,EAAM,qBAIVwB,EAAMlB,EAAW,OAAO,CAACmB,MAAO;AAC9B,QAAIrB,EAAW,SACbqB,EAAG,SAASA,EAAG,YAAYA,EAAG,YAAY;AAAA,MAE9C,CAAC;AAAA,IACH;AAEA,IAAAC;AAAA,MACEf;AAAA,MACA,MAAM;AACJ,8BAAsB,MAAM;AAC1B,UAAAY,EAAA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,EAAE,WAAW,GAAA;AAAA,IAAK;AAGpB,UAAMI,IAAkB,CAACC,MAAc;AACrC,YAAMH,IAAKG,EAAG;AACd,MAAAxB,EAAW,QAAQqB,EAAG,YAAY,MAA4BA,EAAG,eAAeA,EAAG;AAAA,IACrF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"PlLogView.vue.js","sources":["../../../src/components/PlLogView/PlLogView.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * Log Viewer Component\n */\nexport default {\n name: 'PlLogView',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { computed, ref, useSlots, watch } from 'vue';\nimport { PlMaskIcon24 } from '../PlMaskIcon24';\nimport './pl-log-view.scss';\nimport { okOptional, tapIf } from '@milaboratories/helpers';\nimport type { AnyLogHandle, Platforma, ValueOrErrors } from '@platforma-sdk/model';\nimport { useLogHandle } from './useLogHandle';\nimport { useLabelNotch } from '../../utils/useLabelNotch';\nimport DoubleContour from '../../utils/DoubleContour.vue';\nimport { PlTooltip } from '../PlTooltip';\nimport { PlIcon24 } from '../PlIcon24';\nimport { downloadContent } from '../../helpers/dom';\n\nconst getOutputError = <T>(o?: ValueOrErrors<T>) => {\n if (o && o.ok === false) {\n return o.errors.join('\\n');\n }\n};\n\nconst slots = useSlots();\n\nconst props = defineProps<{\n /**\n * String contents\n */\n value?: string;\n /**\n * The content to copy (Note: it takes precedence over value property)\n */\n valueToCopy?: string;\n /**\n * AnyLogHandle\n */\n logHandle?: AnyLogHandle;\n /**\n * Custom progress prefix (to filter logHandle results)\n */\n progressPrefix?: string;\n /**\n * String contents\n */\n error?: unknown;\n /**\n * Block output (Note: error and value take precedence over output property)\n */\n output?: ValueOrErrors<unknown>;\n /**\n * Max retries for AnyLogHandle fetch (with the same parameters)\n */\n maxRetries?: number;\n /**\n * @TODO\n */\n mockPlatforma?: Platforma;\n /**\n * The label to display above the texarea.\n */\n label?: string;\n /**\n * Do not scroll to bottom on content change. Default is false (scroll to bottom).\n */\n disableAutoScroll?: boolean;\n /**\n * If provided, a download icon will be shown and the content will be downloaded when clicked.\n */\n downloadFilename?: string;\n}>();\n\nconst logState = useLogHandle(props);\n\nconst isAnchored = ref<boolean>(true);\n\nconst contentRef = ref<HTMLElement>();\n\nconst root = ref<HTMLInputElement>();\n\nconst computedError = computed(() => logState.value?.error ?? props.error ?? getOutputError(props.output));\n\nconst computedValue = computed(() => logState.value?.lines ?? props.value ?? okOptional(props.output));\n\nconst computedValueToCopy = computed(() => {\n if (props.valueToCopy) {\n return props.valueToCopy;\n }\n if (computedValue.value && typeof computedValue.value === 'string') {\n return computedValue.value;\n }\n return undefined;\n});\n\nconst copyActive = ref(false);\n\nuseLabelNotch(root);\n\nconst iconName = computed(() => (copyActive.value ? 'clipboard-copied' : 'clipboard'));\n\nconst onClickCopy = () => {\n copyActive.value = true;\n setTimeout(() => {\n copyActive.value = false;\n }, 1200);\n\n const toCopy = computedValueToCopy.value;\n\n if (toCopy !== undefined) {\n navigator.clipboard.writeText(toCopy);\n }\n};\n\nconst onClickDownload = (filename: string) => {\n const toDownload = computedValueToCopy.value;\n\n if (toDownload !== undefined) {\n downloadContent([toDownload, 'text/plain'], filename);\n }\n};\n\nconst optionallyScrollDown = () => {\n if (props.disableAutoScroll) {\n return;\n }\n\n tapIf(contentRef.value, (el) => {\n if (isAnchored.value) {\n el.scrollTo(el.scrollLeft, el.scrollHeight);\n }\n });\n};\n\nwatch(\n computedValue,\n () => {\n requestAnimationFrame(() => {\n optionallyScrollDown();\n });\n },\n { immediate: true },\n);\n\nconst onContentScroll = (ev: Event) => {\n const el = ev.target as HTMLElement;\n isAnchored.value = el.scrollTop + 20 /* ~ 1 line height */ >= el.scrollHeight - el.offsetHeight;\n};\n</script>\n\n<template>\n <div ref=\"root\" class=\"pl-log-view\" :class=\"{ 'has-error': computedError }\">\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 <DoubleContour class=\"pl-log-view__contour\" />\n <div class=\"pl-log-view__copy\">\n <PlTooltip :close-delay=\"800\" position=\"top\">\n <PlMaskIcon24 title=\"Copy content\" :name=\"iconName\" @click=\"onClickCopy\" />\n <template #tooltip>{{ copyActive ? 'copied' : 'copy' }}</template>\n </PlTooltip>\n <PlTooltip v-if=\"downloadFilename\" :close-delay=\"800\" position=\"top\">\n <PlIcon24 name=\"download\" @click=\"() => onClickDownload(downloadFilename!)\" />\n <template #tooltip>download</template>\n </PlTooltip>\n </div>\n <div v-if=\"computedError\" class=\"pl-log-view__error\">{{ computedError }}</div>\n <div v-else ref=\"contentRef\" class=\"pl-log-view__content\" @scroll=\"onContentScroll\">{{ computedValue }}</div>\n </div>\n</template>\n"],"names":["__default__","getOutputError","slots","useSlots","props","__props","logState","useLogHandle","isAnchored","ref","contentRef","root","computedError","computed","_a","computedValue","okOptional","computedValueToCopy","copyActive","useLabelNotch","iconName","onClickCopy","toCopy","onClickDownload","filename","toDownload","downloadContent","optionallyScrollDown","tapIf","el","watch","onContentScroll","ev","_createElementBlock","_normalizeClass","_hoisted_1","_createElementVNode","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_createVNode","DoubleContour","_hoisted_2","PlMaskIcon24","_cache","PlIcon24","_hoisted_3","_toDisplayString"],"mappings":"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"}