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