@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.
- package/.turbo/turbo-build.log +129 -129
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +13 -0
- package/dist/base/BtnBase.vue.js +18 -18
- package/dist/base/BtnBase.vue.js.map +1 -1
- package/dist/components/ContextProvider.vue.js.map +1 -1
- package/dist/components/DataTable/BaseCellComponent.vue.js +20 -20
- package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
- package/dist/components/DataTable/ColumnCaret.vue.js +6 -6
- package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
- package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
- package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
- package/dist/components/DataTable/TScroll.vue.js +12 -12
- package/dist/components/DataTable/TScroll.vue.js.map +1 -1
- package/dist/components/DataTable/TableComponent.vue.js +1 -1
- package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
- package/dist/components/DataTable/TdCell.vue.js +36 -36
- package/dist/components/DataTable/TdCell.vue.js.map +1 -1
- package/dist/components/DataTable/ThCell.vue.js +27 -27
- package/dist/components/DataTable/ThCell.vue.js.map +1 -1
- package/dist/components/DataTable/TrBody.vue.js +12 -12
- package/dist/components/DataTable/TrBody.vue.js.map +1 -1
- package/dist/components/DataTable/TrHead.vue.js.map +1 -1
- package/dist/components/DataTable/assets/TableIcon.vue.js +2 -2
- package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
- package/dist/components/DropdownListItem.vue.js +18 -18
- package/dist/components/DropdownListItem.vue.js.map +1 -1
- package/dist/components/HScroll.vue.js.map +1 -1
- package/dist/components/InputRange.vue.js.map +1 -1
- package/dist/components/LongText.vue.js +1 -1
- package/dist/components/LongText.vue.js.map +1 -1
- package/dist/components/LongText.vue3.js +1 -1
- package/dist/components/PlAccordion/{ExpandTransition.vue2.js → ExpandTransition.vue.js} +1 -1
- package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
- package/dist/components/PlAccordion/ExpandTransition.vue3.js +1 -1
- package/dist/components/PlAccordion/PlAccordion.vue.js.map +1 -1
- package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
- package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
- package/dist/components/PlAlert/PlAlert.vue.js +23 -23
- package/dist/components/PlAlert/PlAlert.vue.js.map +1 -1
- package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +86 -86
- package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
- package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +83 -83
- package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
- package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
- package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
- package/dist/components/PlBtnGhost/PlBtnGhost.vue.js +21 -21
- package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
- package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +34 -34
- package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
- package/dist/components/PlBtnLink/PlBtnLink.vue.js +12 -12
- package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
- package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
- package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
- package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +31 -31
- package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
- package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +18 -18
- package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
- package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
- package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +15 -15
- package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
- package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
- package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
- package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
- package/dist/components/PlCheckbox/PlCheckbox.vue.js +13 -13
- package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
- package/dist/components/PlCheckbox/PlCheckboxBase.vue.js +6 -6
- package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
- package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +28 -28
- package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
- package/dist/components/PlChip/PlChip.vue.js +20 -20
- package/dist/components/PlChip/PlChip.vue.js.map +1 -1
- package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
- package/dist/components/PlConfirmDialog.vue.js +14 -14
- package/dist/components/PlConfirmDialog.vue.js.map +1 -1
- package/dist/components/PlDialogModal/PlDialogModal.vue.js +30 -30
- package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
- package/dist/components/PlDropdown/OptionList.vue.js +40 -40
- package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
- package/dist/components/PlDropdown/PlDropdown.vue.js +89 -89
- package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
- package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +92 -92
- package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
- package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
- package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +4 -4
- package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
- package/dist/components/PlDropdownLine/ResizableInput.vue.js +12 -12
- package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
- package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +70 -70
- package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
- package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts +1 -1
- package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -11
- package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
- package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts +1 -1
- package/dist/components/PlEditableTitle/PlEditableTitle.vue.js +36 -36
- package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
- package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
- package/dist/components/PlElementList/PlElementListItem.vue2.js +67 -67
- package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
- package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
- package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
- package/dist/components/PlFileDialog/Local.vue.js +24 -24
- package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
- package/dist/components/PlFileDialog/PlFileDialog.vue.js +38 -38
- package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
- package/dist/components/PlFileDialog/Remote.vue.js +2 -2
- package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
- package/dist/components/PlFileDialog/Shortcuts.vue2.js +4 -4
- package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
- package/dist/components/PlFileInput/PlFileInput.vue.d.ts +1 -1
- package/dist/components/PlFileInput/PlFileInput.vue.js +75 -75
- package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
- package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
- package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
- package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +11 -11
- package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
- package/dist/components/PlLogView/PlLogView.vue.js +58 -58
- package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
- package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js +22 -22
- package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
- package/dist/components/PlNumberField/PlNumberField.vue.d.ts +1 -1
- package/dist/components/PlNumberField/PlNumberField.vue.js +75 -75
- package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
- package/dist/components/PlProgressBar/PlProgressBar.vue.js +12 -12
- package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
- package/dist/components/PlProgressCell/PlProgressCell.vue.js +20 -20
- package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
- package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
- package/dist/components/PlRadio/PlRadioGroup.vue2.js +8 -8
- package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
- package/dist/components/PlSearchField/PlSearchField.vue2.js +19 -19
- package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
- package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +8 -8
- package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
- package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
- package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
- package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +1 -1
- package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
- package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
- package/dist/components/PlSplash/PlSplash.vue.js +16 -16
- package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
- package/dist/components/PlStatusTag/PlStatusTag.vue.js +7 -7
- package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
- package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
- package/dist/components/PlTabs/PlTabs.vue.js +18 -18
- package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
- package/dist/components/PlTabs/Tab.vue.js +9 -9
- package/dist/components/PlTabs/Tab.vue.js.map +1 -1
- package/dist/components/PlTextArea/PlTextArea.vue.js +51 -51
- package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
- package/dist/components/PlTextField/PlTextField.vue.js +62 -62
- package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
- package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js +14 -14
- package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
- package/dist/components/PlTooltip/Beak.vue.js +2 -2
- package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
- package/dist/components/PlTooltip/PlTooltip.vue.js +50 -50
- package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
- package/dist/components/Scrollable.vue.js.map +1 -1
- package/dist/components/Slider.vue.js +35 -35
- package/dist/components/Slider.vue.js.map +1 -1
- package/dist/components/SliderRange.vue.js +47 -47
- package/dist/components/SliderRange.vue.js.map +1 -1
- package/dist/components/SliderRangeTriple.vue.js +47 -47
- package/dist/components/SliderRangeTriple.vue.js.map +1 -1
- package/dist/components/TabItem.vue.js.map +1 -1
- package/dist/components/ThemeSwitcher.vue.js +2 -2
- package/dist/components/ThemeSwitcher.vue.js.map +1 -1
- package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
- package/dist/components/VScroll.vue.js.map +1 -1
- package/dist/components/contextMenu/Menu.vue2.js +12 -12
- package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/layout/PlBlockPage/PlBlockPage.vue.js +27 -27
- package/dist/layout/PlBlockPage/PlBlockPage.vue.js.map +1 -1
- package/dist/layout/PlContainer/PlContainer.vue.js +10 -10
- package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
- package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
- package/dist/layout/PlRow/PlRow.vue.js +8 -8
- package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
- package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
- package/dist/utils/DoubleContour.vue.js +9 -9
- package/dist/utils/DoubleContour.vue.js.map +1 -1
- package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
- package/dist/utils/PlCloseModalBtn.vue.js +2 -2
- package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
- package/dist/utils/TextLabel.vue.js.map +1 -1
- package/package.json +5 -5
- package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +0 -1
- package/dist/utils/DoubleContour.vue2.js +0 -23
- 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
|
|
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
|
|
6
|
-
import { getFileNameFromHandle as
|
|
7
|
-
import { getErrorMessage as
|
|
8
|
-
import
|
|
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
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
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
|
-
},
|
|
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
|
-
},
|
|
25
|
+
}, ie = {
|
|
26
26
|
key: 1,
|
|
27
27
|
class: "pl-file-input__helper"
|
|
28
|
-
},
|
|
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(
|
|
46
|
-
const
|
|
45
|
+
setup(l, { emit: N }) {
|
|
46
|
+
const n = $({
|
|
47
47
|
fileDialogOpen: !1,
|
|
48
48
|
error: void 0
|
|
49
|
-
}),
|
|
49
|
+
}), v = q(), h = N, o = l, k = (e, i) => {
|
|
50
50
|
if (e)
|
|
51
51
|
try {
|
|
52
|
-
return
|
|
53
|
-
} catch (
|
|
54
|
-
return
|
|
52
|
+
return i(e);
|
|
53
|
+
} catch (p) {
|
|
54
|
+
return n.error = p instanceof Error ? p.message : String(p), e;
|
|
55
55
|
}
|
|
56
|
-
},
|
|
57
|
-
const { status: e, done:
|
|
58
|
-
return !e || !e.bytesTotal ? "" : e.bytesProcessed && !
|
|
59
|
-
}),
|
|
60
|
-
var
|
|
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((((
|
|
63
|
+
width: e.done ? "100%" : Math.round((((i = e.status) == null ? void 0 : i.progress) ?? 0) * 100) + "%"
|
|
64
64
|
} : {};
|
|
65
|
-
}),
|
|
66
|
-
|
|
67
|
-
},
|
|
68
|
-
e.files.length &&
|
|
69
|
-
},
|
|
70
|
-
|
|
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
|
-
() =>
|
|
72
|
+
() => n.error = void 0,
|
|
73
73
|
{ immediate: !0 }
|
|
74
74
|
);
|
|
75
|
-
const
|
|
76
|
-
return o.cellStyle ||
|
|
77
|
-
|
|
78
|
-
class: O([{ "pl-file-input__cell-style": !!
|
|
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
|
-
|
|
80
|
+
f("div", {
|
|
81
81
|
ref_key: "rootRef",
|
|
82
|
-
ref:
|
|
83
|
-
class: O([{ dashed:
|
|
82
|
+
ref: D,
|
|
83
|
+
class: O([{ dashed: l.dashed, error: y.value }, "pl-file-input"]),
|
|
84
84
|
tabindex: "0",
|
|
85
|
-
onKeyup:
|
|
86
|
-
onClick: F(
|
|
85
|
+
onKeyup: z(C, ["enter"]),
|
|
86
|
+
onClick: F(C, ["stop"])
|
|
87
87
|
}, [
|
|
88
|
-
|
|
89
|
-
style:
|
|
88
|
+
f("div", {
|
|
89
|
+
style: H(T.value),
|
|
90
90
|
class: "pl-file-input__progress"
|
|
91
91
|
}, null, 4),
|
|
92
|
-
!
|
|
93
|
-
|
|
92
|
+
!l.cellStyle && l.label ? (t(), u("label", le, [
|
|
93
|
+
l.required ? (t(), a(r(ee), {
|
|
94
94
|
key: 0,
|
|
95
|
-
uri:
|
|
96
|
-
}, null, 8, ["uri"])) :
|
|
97
|
-
|
|
98
|
-
|
|
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:
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
})) :
|
|
110
|
-
], 512)) :
|
|
111
|
-
|
|
109
|
+
})) : d("", !0)
|
|
110
|
+
], 512)) : d("", !0),
|
|
111
|
+
y.value ? (t(), a(r(m), {
|
|
112
112
|
key: 1,
|
|
113
113
|
name: "restart"
|
|
114
|
-
})) :
|
|
114
|
+
})) : P.value ? (t(), a(r(m), {
|
|
115
115
|
key: 2,
|
|
116
116
|
name: "cloud-upload"
|
|
117
|
-
})) :
|
|
117
|
+
})) : E.value ? (t(), a(r(m), {
|
|
118
118
|
key: 3,
|
|
119
119
|
name: "success"
|
|
120
|
-
})) : (
|
|
120
|
+
})) : (t(), a(r(m), {
|
|
121
121
|
key: 4,
|
|
122
122
|
name: "paper-clip"
|
|
123
123
|
})),
|
|
124
|
-
|
|
125
|
-
"data-placeholder":
|
|
124
|
+
f("div", {
|
|
125
|
+
"data-placeholder": l.placeholder ?? "Choose file",
|
|
126
126
|
class: "pl-file-input__filename"
|
|
127
|
-
},
|
|
128
|
-
|
|
129
|
-
|
|
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(
|
|
134
|
-
})) :
|
|
135
|
-
B(
|
|
133
|
+
onClick: F(M, ["stop"])
|
|
134
|
+
})) : d("", !0),
|
|
135
|
+
B(Q, { class: "pl-file-input__contour" })
|
|
136
136
|
], 34),
|
|
137
|
-
|
|
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(
|
|
140
|
-
modelValue:
|
|
141
|
-
"onUpdate:modelValue":
|
|
142
|
-
"close-on-outside-click":
|
|
143
|
-
extensions:
|
|
144
|
-
title:
|
|
145
|
-
"onImport:files":
|
|
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
|
-
|
|
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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;MAKrBG,EAmCM,OAAA;AAAA,QAnCA,OAAKC,EAAA,CAAA,EAAA,6BAAA,CAAA,CAAmC9B,EAAA,WAAS,YAAA,CAAA,CAAgBK,EAAA,MAAA,GAAkB,yBAAyB,CAAA;AAAA,MAAA;QAChHwB,EA6BM,OAAA;AAAA,mBA5BA;AAAA,UAAJ,KAAIH;AAAA,UACH,OAAKI,EAAA,CAAA,EAAA,QAAI9B,EAAA,QAAM,OAASc,EAAA,MAAA,GACnB,eAAe,CAAA;AAAA,UACrB,UAAS;AAAA,UACR,WAAaQ,GAAc,CAAA,OAAA,CAAA;AAAA,UAC3B,WAAYA,GAAc,CAAA,MAAA,CAAA;AAAA,QAAA;UAE3BO,EAA8D,OAAA;AAAA,YAAxD,SAAOV,EAAA,KAAa;AAAA,YAAE,OAAM;AAAA,UAAA;UACpB,CAAAnB,EAAA,aAAaA,EAAA,SAA3B+B,KAAAC,EASQ,SATRC,IASQ;AAAA,YAROjC,EAAA,iBAAbkC,EAA4CC,EAAAC,EAAA,GAAA;AAAA;cAApB,KAAKD,EAAAE,CAAA;AAAA,YAAA;YAC7BR,EAAwB,gBAAf7B,EAAA,KAAK,GAAA,CAAA;AAAA,YACGmC,EAAAxC,CAAA,EAAM,WAAWa,EAAA,cAAlC0B,EAKYC,EAAAG,CAAA,GAAA;AAAA;cALgC,OAAM;AAAA,cAAO,UAAS;AAAA,YAAA;cACrD,WACT,MAA4C;AAAA,gBAAhCH,EAAAxC,CAAA,EAAM,UAAlB4C,EAA4CC,EAAA,QAAA,WAAA,EAAA,KAAA,GAAA,UAC5CR,EAA0CS,GAAA,EAAA,KAAA,KAAA;AAAA,sBAAtBjC,EAAA,KAAQ,GAAA,CAAA;AAAA,gBAAA;;;;;UAIdM,EAAA,cAApBoB,EAAgDC,EAAAO,CAAA,GAAA;AAAA;YAAjB,MAAK;AAAA,UAAA,MACXhC,EAAA,cAAzBwB,EAA4DC,EAAAO,CAAA,GAAA;AAAA;YAAtB,MAAK;AAAA,UAAA,MAClB/B,EAAA,cAAzBuB,EAAsDC,EAAAO,CAAA,GAAA;AAAA;YAAjB,MAAK;AAAA,UAAA,YAC1CR,EAAyCC,EAAAO,CAAA,GAAA;AAAA;YAApB,MAAK;AAAA,UAAA;UAC1Bb,EAEM,OAAA;AAAA,YAFA,oBAAkB7B,EAAA,eAAW;AAAA,YAAmB,OAAM;AAAA,UAAA,KACvDK,EAAA,KAAQ,GAAA,GAAAsC,EAAA;AAAA,UAEF5B,EAAA,cAAXiB,EAA4E,OAA5EY,IAA4EC,EAApB9B,EAAA,KAAW,GAAA,CAAA;UAC/Cf,EAAA,mBAApBkC,EAAgGC,EAAAO,CAAA,GAAA;AAAA;YAAhE,OAAM;AAAA,YAAuB,MAAK;AAAA,YAAS,WAAYlB,GAAK,CAAA,MAAA,CAAA;AAAA,UAAA;UAC5FsB,EAAgDC,GAAA,EAAjC,OAAM,0BAAwB;AAAA,QAAA;QAEpCjC,EAAA,cAAXkB,EAEM,OAFNgB,IAEMH,EADDjC,EAAA,KAAoB,GAAA,CAAA,KAETZ,EAAA,eAAhBgC,EAAwE,OAAxEiB,IAAwEJ,EAAf7C,EAAA,MAAM,GAAA,CAAA;;MAEjE8C,EAMEX,EAAAe,CAAA,GAAA;AAAA,QALS,YAAAzD,EAAK;AAAA,QAAL,uBAAA0D,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAA3D,EAAK,iBAAc2D;AAAA,QAC3B,0BAAwBpD,EAAA;AAAA,QACxB,YAAYA,EAAA;AAAA,QACZ,OAAOA,EAAA;AAAA,QACP,kBAAcuB;AAAA,MAAA;;;;"}
|
|
@@ -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
|
|
2
|
+
import { defineComponent as i, createElementBlock as c, openBlock as r, createElementVNode as l, normalizeStyle as t } from "vue";
|
|
3
3
|
|
|
4
|
-
const
|
|
4
|
+
const a = { class: "pl-loader-circular" }, o = {
|
|
5
5
|
class: "pl-loader-circular__svg",
|
|
6
6
|
viewBox: "25 25 50 50"
|
|
7
|
-
},
|
|
7
|
+
}, s = ["stroke"], p = /* @__PURE__ */ i({
|
|
8
8
|
__name: "PlLoaderCircular",
|
|
9
9
|
props: {
|
|
10
10
|
size: { default: "16" }
|
|
11
11
|
},
|
|
12
|
-
setup(
|
|
13
|
-
return (
|
|
14
|
-
|
|
15
|
-
style:
|
|
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
|
-
(
|
|
19
|
-
|
|
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,
|
|
27
|
+
}, null, 8, s)
|
|
28
28
|
]))
|
|
29
29
|
], 4)
|
|
30
30
|
]));
|
|
31
31
|
}
|
|
32
32
|
});
|
|
33
33
|
export {
|
|
34
|
-
|
|
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
|
|
4
|
-
import
|
|
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
|
|
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__ */
|
|
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(
|
|
34
|
-
const
|
|
33
|
+
setup(n) {
|
|
34
|
+
const x = (o) => {
|
|
35
35
|
if (o && o.ok === !1)
|
|
36
36
|
return o.errors.join(`
|
|
37
37
|
`);
|
|
38
|
-
},
|
|
38
|
+
}, V = F(), t = n, g = O(t), k = c(!0), w = c(), _ = c(), f = u(() => {
|
|
39
39
|
var o;
|
|
40
|
-
return ((o =
|
|
41
|
-
}),
|
|
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 =
|
|
44
|
-
}),
|
|
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 (
|
|
48
|
-
return
|
|
49
|
-
}),
|
|
50
|
-
j(
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
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 =
|
|
55
|
+
const o = C.value;
|
|
56
56
|
o !== void 0 && navigator.clipboard.writeText(o);
|
|
57
|
-
},
|
|
58
|
-
const e =
|
|
57
|
+
}, H = (o) => {
|
|
58
|
+
const e = C.value;
|
|
59
59
|
e !== void 0 && z([e, "text/plain"], o);
|
|
60
|
-
},
|
|
61
|
-
t.disableAutoScroll || I(
|
|
62
|
-
|
|
60
|
+
}, B = () => {
|
|
61
|
+
t.disableAutoScroll || I(w.value, (o) => {
|
|
62
|
+
k.value && o.scrollTo(o.scrollLeft, o.scrollHeight);
|
|
63
63
|
});
|
|
64
64
|
};
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
L(
|
|
66
|
+
a,
|
|
67
67
|
() => {
|
|
68
68
|
requestAnimationFrame(() => {
|
|
69
|
-
|
|
69
|
+
B();
|
|
70
70
|
});
|
|
71
71
|
},
|
|
72
72
|
{ immediate: !0 }
|
|
73
73
|
);
|
|
74
|
-
const
|
|
74
|
+
const D = (o) => {
|
|
75
75
|
const e = o.target;
|
|
76
|
-
|
|
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:
|
|
81
|
-
class:
|
|
80
|
+
ref: _,
|
|
81
|
+
class: P(["pl-log-view", { "has-error": f.value }])
|
|
82
82
|
}, [
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
r(
|
|
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:
|
|
90
|
+
tooltip: i(() => [
|
|
91
91
|
R(o.$slots, "tooltip")
|
|
92
92
|
]),
|
|
93
93
|
_: 3
|
|
94
|
-
})) :
|
|
95
|
-
])) :
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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:
|
|
103
|
-
|
|
102
|
+
tooltip: i(() => [
|
|
103
|
+
T(m(s.value ? "copied" : "copy"), 1)
|
|
104
104
|
]),
|
|
105
|
-
default:
|
|
106
|
-
|
|
105
|
+
default: i(() => [
|
|
106
|
+
d(r(h), {
|
|
107
107
|
title: "Copy content",
|
|
108
|
-
name:
|
|
109
|
-
onClick:
|
|
108
|
+
name: N.value,
|
|
109
|
+
onClick: A
|
|
110
110
|
}, null, 8, ["name"])
|
|
111
111
|
]),
|
|
112
112
|
_: 1
|
|
113
113
|
}),
|
|
114
|
-
|
|
114
|
+
n.downloadFilename ? (l(), S(r(y), {
|
|
115
115
|
key: 0,
|
|
116
116
|
"close-delay": 800,
|
|
117
117
|
position: "top"
|
|
118
118
|
}, {
|
|
119
|
-
tooltip:
|
|
120
|
-
|
|
121
|
-
])),
|
|
122
|
-
default:
|
|
123
|
-
|
|
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] = () =>
|
|
125
|
+
onClick: e[0] || (e[0] = () => H(n.downloadFilename))
|
|
126
126
|
})
|
|
127
127
|
]),
|
|
128
128
|
_: 1
|
|
129
|
-
})) :
|
|
129
|
+
})) : v("", !0)
|
|
130
130
|
]),
|
|
131
|
-
|
|
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:
|
|
134
|
+
ref: w,
|
|
135
135
|
class: "pl-log-view__content",
|
|
136
|
-
onScroll:
|
|
137
|
-
},
|
|
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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"}
|