@milaboratories/uikit 2.6.2 → 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 +135 -135
- package/.turbo/turbo-type-check.log +1 -1
- package/CHANGELOG.md +6 -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.vue.js +27 -0
- package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -0
- package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +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 +4 -4
- package/dist/utils/DoubleContour.vue2.js +0 -23
- package/dist/utils/DoubleContour.vue2.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { defineComponent as
|
|
1
|
+
import { defineComponent as r, useSlots as s, computed as p, createBlock as u, openBlock as f, unref as a, mergeProps as m, createSlots as c, withCtx as g, renderSlot as b } from "vue";
|
|
2
2
|
import v from "../PlDropdown/PlDropdown.vue.js";
|
|
3
3
|
const k = {
|
|
4
4
|
name: "PlDropdownRef"
|
|
5
|
-
},
|
|
5
|
+
}, w = /* @__PURE__ */ r({
|
|
6
6
|
...k,
|
|
7
7
|
props: {
|
|
8
8
|
modelValue: {},
|
|
@@ -18,11 +18,11 @@ const k = {
|
|
|
18
18
|
optionSize: { default: "small" }
|
|
19
19
|
},
|
|
20
20
|
emits: ["update:modelValue"],
|
|
21
|
-
setup(
|
|
22
|
-
const n =
|
|
21
|
+
setup(l) {
|
|
22
|
+
const n = s(), t = l, d = p(
|
|
23
23
|
() => {
|
|
24
24
|
var o;
|
|
25
|
-
return (o =
|
|
25
|
+
return (o = t.options) == null ? void 0 : o.map(
|
|
26
26
|
(e) => "ref" in e ? {
|
|
27
27
|
label: e.label,
|
|
28
28
|
value: e.ref,
|
|
@@ -31,11 +31,11 @@ const k = {
|
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
);
|
|
34
|
-
return (o, e) => (f(), u(a(v), m(
|
|
35
|
-
options:
|
|
36
|
-
"loading-options-helper":
|
|
37
|
-
"arrow-icon-large":
|
|
38
|
-
"onUpdate:modelValue": e[0] || (e[0] = (
|
|
34
|
+
return (o, e) => (f(), u(a(v), m(t, {
|
|
35
|
+
options: d.value,
|
|
36
|
+
"loading-options-helper": l.loadingOptionsHelper,
|
|
37
|
+
"arrow-icon-large": l.disabled ? "link-disabled" : "link",
|
|
38
|
+
"onUpdate:modelValue": e[0] || (e[0] = (i) => o.$emit("update:modelValue", i))
|
|
39
39
|
}), c({ _: 2 }, [
|
|
40
40
|
a(n).tooltip ? {
|
|
41
41
|
name: "tooltip",
|
|
@@ -48,6 +48,6 @@ const k = {
|
|
|
48
48
|
}
|
|
49
49
|
});
|
|
50
50
|
export {
|
|
51
|
-
|
|
51
|
+
w as default
|
|
52
52
|
};
|
|
53
53
|
//# sourceMappingURL=PlDropdownRef.vue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlDropdownRef.vue.js","sources":["../../../src/components/PlDropdownRef/PlDropdownRef.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlDropdownRef',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = ModelRef\">\nimport { computed, useSlots } from 'vue';\nimport type { ListOption, ModelRef, RefOption } from '../../types';\nimport { PlDropdown } from '../PlDropdown';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst slots: any = useSlots();\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected ref of the dropdown.\n */\n modelValue: M | undefined;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available ref options for the dropdown\n */\n options?: Readonly<RefOption[] | ListOption<M>[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n }>(),\n {\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n optionSize: 'small',\n options: undefined,\n },\n);\n\nconst options = computed(() =>\n props.options?.map((opt) =>\n 'ref' in opt\n ? {\n label: opt.label,\n value: opt.ref,\n group: opt.group,\n } as ListOption<M>\n : opt,\n ),\n);\n</script>\n\n<template>\n <PlDropdown\n v-bind=\"props\"\n :options=\"options\"\n :loading-options-helper=\"loadingOptionsHelper\"\n :arrow-icon-large=\"disabled ? 'link-disabled' : 'link'\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <template v-if=\"slots.tooltip\" #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlDropdown>\n</template>\n"],"names":["__default__","slots","useSlots","props","__props","options","computed","_a","opt"],"mappings":";;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;;;;;AASA,UAAMC,IAAaC,EAAA,GASbC,IAAQC,GA8DRC,IAAUC;AAAA,MAAS,MAAA;;AACvB,gBAAAC,IAAAJ,EAAM,YAAN,gBAAAI,EAAe;AAAA,UAAI,CAACC,MAClB,SAASA,IACL;AAAA,YACE,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,UAAA,IAEbA;AAAA;AAAA;AAAA,IACN
|
|
1
|
+
{"version":3,"file":"PlDropdownRef.vue.js","sources":["../../../src/components/PlDropdownRef/PlDropdownRef.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * A component for selecting one value from a list of options\n */\nexport default {\n name: 'PlDropdownRef',\n};\n</script>\n\n<script lang=\"ts\" setup generic=\"M = ModelRef\">\nimport { computed, useSlots } from 'vue';\nimport type { ListOption, ModelRef, RefOption } from '../../types';\nimport { PlDropdown } from '../PlDropdown';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst slots: any = useSlots();\n\ndefineEmits<{\n /**\n * Emitted when the model value is updated.\n */\n (e: 'update:modelValue', value: M | undefined): void;\n}>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * The current selected ref of the dropdown.\n */\n modelValue: M | undefined;\n /**\n * The label text for the dropdown field (optional)\n */\n label?: string;\n /**\n * List of available ref options for the dropdown\n */\n options?: Readonly<RefOption[] | ListOption<M>[]>;\n /**\n * A helper text displayed below the dropdown when there are no errors (optional).\n */\n helper?: string;\n /**\n * A helper text displayed below the dropdown when there are no options yet or options is undefined (optional).\n */\n loadingOptionsHelper?: string;\n /**\n * Error message displayed below the dropdown (optional)\n */\n error?: unknown;\n /**\n * Placeholder text shown when no value is selected.\n */\n placeholder?: string;\n /**\n * Enables a button to clear the selected value (default: false)\n */\n clearable?: boolean;\n /**\n * If `true`, the dropdown component is marked as required.\n */\n required?: boolean;\n /**\n * If `true`, the dropdown component is disabled and cannot be interacted with.\n */\n disabled?: boolean;\n /**\n * Option list item size\n */\n optionSize?: 'small' | 'medium';\n }>(),\n {\n label: '',\n helper: undefined,\n loadingOptionsHelper: undefined,\n error: undefined,\n placeholder: '...',\n clearable: false,\n required: false,\n disabled: false,\n arrowIcon: undefined,\n optionSize: 'small',\n options: undefined,\n },\n);\n\nconst options = computed(() =>\n props.options?.map((opt) =>\n 'ref' in opt\n ? {\n label: opt.label,\n value: opt.ref,\n group: opt.group,\n } as ListOption<M>\n : opt,\n ),\n);\n</script>\n\n<template>\n <PlDropdown\n v-bind=\"props\"\n :options=\"options\"\n :loading-options-helper=\"loadingOptionsHelper\"\n :arrow-icon-large=\"disabled ? 'link-disabled' : 'link'\"\n @update:model-value=\"$emit('update:modelValue', $event)\"\n >\n <template v-if=\"slots.tooltip\" #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlDropdown>\n</template>\n"],"names":["__default__","slots","useSlots","props","__props","options","computed","_a","opt","_createBlock","_unref","PlDropdown","_mergeProps","_cache","$event","$emit","_renderSlot","_ctx"],"mappings":";;AAIA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;;;;;;;;;AASA,UAAMC,IAAaC,EAAA,GASbC,IAAQC,GA8DRC,IAAUC;AAAA,MAAS,MAAA;;AACvB,gBAAAC,IAAAJ,EAAM,YAAN,gBAAAI,EAAe;AAAA,UAAI,CAACC,MAClB,SAASA,IACL;AAAA,YACE,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,YACX,OAAOA,EAAI;AAAA,UAAA,IAEbA;AAAA;AAAA;AAAA,IACN;2BAKAC,EAUaC,EAAAC,CAAA,GAVbC,EAUaT,GATE;AAAA,MACZ,SAASE,EAAA;AAAA,MACT,0BAAwBD,EAAA;AAAA,MACxB,oBAAkBA,EAAA,WAAQ,kBAAA;AAAA,MAC1B,uBAAkBS,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAC,MAAEC,EAAAA,MAAK,qBAAsBD,CAAM;AAAA,IAAA;MAEtCJ,EAAAT,CAAA,EAAM;cAAU;AAAA,cAC9B,MAAuB;AAAA,UAAvBe,EAAuBC,EAAA,QAAA,SAAA;AAAA,QAAA;;;;;;"}
|
|
@@ -32,8 +32,8 @@ declare const _default: import('vue').DefineComponent<__VLS_PublicProps, {}, {},
|
|
|
32
32
|
}, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
|
|
33
33
|
"onUpdate:modelValue"?: ((value: string) => any) | undefined;
|
|
34
34
|
}>, {
|
|
35
|
-
maxWidth: string;
|
|
36
35
|
placeholder: string;
|
|
36
|
+
maxWidth: string;
|
|
37
37
|
prefix: string;
|
|
38
38
|
maxLength: number;
|
|
39
39
|
minLength: number;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineComponent as L, mergeModels as M, useModel as k, ref as w, computed as E, onMounted as V, createElementBlock as
|
|
1
|
+
import { defineComponent as L, mergeModels as M, useModel as k, ref as w, computed as E, onMounted as V, createElementBlock as u, openBlock as d, normalizeStyle as b, normalizeClass as m, unref as t, createElementVNode as p, createCommentVNode as h, withDirectives as C, toDisplayString as g, withKeys as v, vModelText as T } from "vue";
|
|
2
2
|
import { useTransformedModel as B } from "../../composition/useTransformedModel.js";
|
|
3
|
-
import
|
|
3
|
+
import f from "./pl-editable-title.module.scss.js";
|
|
4
4
|
const S = { key: 0 }, W = ["placeholder"], N = /* @__PURE__ */ L({
|
|
5
5
|
__name: "PlEditableTitle",
|
|
6
6
|
props: /* @__PURE__ */ M({
|
|
@@ -15,65 +15,65 @@ const S = { key: 0 }, W = ["placeholder"], N = /* @__PURE__ */ L({
|
|
|
15
15
|
modelModifiers: {}
|
|
16
16
|
}),
|
|
17
17
|
emits: ["update:modelValue"],
|
|
18
|
-
setup(
|
|
19
|
-
const
|
|
18
|
+
setup(a) {
|
|
19
|
+
const i = k(a, "modelValue"), o = a, e = B(i, {
|
|
20
20
|
update() {
|
|
21
21
|
return !1;
|
|
22
22
|
},
|
|
23
|
-
parse: (
|
|
24
|
-
if (typeof
|
|
23
|
+
parse: (r) => {
|
|
24
|
+
if (typeof r != "string")
|
|
25
25
|
throw Error("value should be a string");
|
|
26
|
-
if (
|
|
27
|
-
throw Error(`Max title length is ${
|
|
28
|
-
if (
|
|
29
|
-
throw Error(`Min title length is ${
|
|
30
|
-
return
|
|
26
|
+
if (o.maxLength && r.length > o.maxLength)
|
|
27
|
+
throw Error(`Max title length is ${o.maxLength} characters`);
|
|
28
|
+
if (o.minLength && r.length < o.minLength)
|
|
29
|
+
throw Error(`Min title length is ${o.minLength} characters`);
|
|
30
|
+
return r.trim();
|
|
31
31
|
}
|
|
32
|
-
}),
|
|
33
|
-
maxWidth:
|
|
34
|
-
})),
|
|
35
|
-
|
|
32
|
+
}), s = w(), x = E(() => ({
|
|
33
|
+
maxWidth: o.maxWidth ?? "80%"
|
|
34
|
+
})), y = () => {
|
|
35
|
+
i.value = e.value && !e.error ? e.value : i.value, e.reset();
|
|
36
36
|
};
|
|
37
37
|
return V(() => {
|
|
38
|
-
var
|
|
39
|
-
|
|
40
|
-
}), (
|
|
41
|
-
class:
|
|
42
|
-
style: b(
|
|
38
|
+
var r;
|
|
39
|
+
o.autofocus && ((r = s.value) == null || r.focus());
|
|
40
|
+
}), (r, l) => (d(), u("div", {
|
|
41
|
+
class: m(["pl-editable-title", t(f).component]),
|
|
42
|
+
style: b(x.value)
|
|
43
43
|
}, [
|
|
44
|
-
|
|
45
|
-
class:
|
|
44
|
+
p("div", {
|
|
45
|
+
class: m(t(f).container),
|
|
46
46
|
onClick: l[3] || (l[3] = () => {
|
|
47
47
|
var n;
|
|
48
|
-
return (n =
|
|
48
|
+
return (n = s.value) == null ? void 0 : n.focus();
|
|
49
49
|
})
|
|
50
50
|
}, [
|
|
51
|
-
|
|
52
|
-
C(
|
|
51
|
+
a.prefix ? (d(), u("span", S, g(a.prefix.trim()) + " ", 1)) : h("", !0),
|
|
52
|
+
C(p("input", {
|
|
53
53
|
ref_key: "inputRef",
|
|
54
|
-
ref:
|
|
55
|
-
"onUpdate:modelValue": l[0] || (l[0] = (n) =>
|
|
56
|
-
placeholder:
|
|
57
|
-
onFocusout:
|
|
54
|
+
ref: s,
|
|
55
|
+
"onUpdate:modelValue": l[0] || (l[0] = (n) => t(e).value = n),
|
|
56
|
+
placeholder: a.placeholder,
|
|
57
|
+
onFocusout: y,
|
|
58
58
|
onKeydown: [
|
|
59
59
|
l[1] || (l[1] = v(
|
|
60
60
|
//@ts-ignore
|
|
61
|
-
(...n) =>
|
|
61
|
+
(...n) => t(e).reset && t(e).reset(...n),
|
|
62
62
|
["escape"]
|
|
63
63
|
)),
|
|
64
64
|
l[2] || (l[2] = v((n) => {
|
|
65
|
-
var
|
|
66
|
-
return (
|
|
65
|
+
var c;
|
|
66
|
+
return (c = n.target) == null ? void 0 : c.blur();
|
|
67
67
|
}, ["enter"]))
|
|
68
68
|
]
|
|
69
69
|
}, null, 40, W), [
|
|
70
|
-
[T,
|
|
70
|
+
[T, t(e).value]
|
|
71
71
|
])
|
|
72
72
|
], 2),
|
|
73
|
-
|
|
73
|
+
t(e).error ? (d(), u("div", {
|
|
74
74
|
key: 0,
|
|
75
|
-
class:
|
|
76
|
-
}, g(
|
|
75
|
+
class: m(t(f).error)
|
|
76
|
+
}, g(t(e).error), 3)) : h("", !0)
|
|
77
77
|
], 6));
|
|
78
78
|
}
|
|
79
79
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlEditableTitle.vue.js","sources":["../../../src/components/PlEditableTitle/PlEditableTitle.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useTransformedModel } from '../../composition/useTransformedModel';\nimport style from './pl-editable-title.module.scss';\nimport { computed, onMounted, ref } from 'vue';\n\nconst model = defineModel<string>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Standard input placeholder\n */\n placeholder?: string;\n /**\n * Any css `width` value (px, %), default is 80%\n */\n maxWidth?: string;\n /**\n * Fixed non-editable prefix\n */\n prefix?: string;\n /**\n * Max title length (default is 1000)\n */\n maxLength?: number;\n /**\n * Min title length\n */\n minLength?: number;\n /**\n * If true, input will be focused on mount\n */\n autofocus?: boolean;\n }>(),\n {\n placeholder: 'Title',\n maxWidth: '80%',\n prefix: undefined,\n maxLength: 1000,\n minLength: undefined,\n },\n);\n\nconst local = useTransformedModel(model, {\n update() {\n return false;\n },\n parse: (v): string => {\n if (typeof v !== 'string') {\n throw Error('value should be a string');\n }\n\n if (props.maxLength && v.length > props.maxLength) {\n throw Error(`Max title length is ${props.maxLength} characters`);\n }\n\n if (props.minLength && v.length < props.minLength) {\n throw Error(`Min title length is ${props.minLength} characters`);\n }\n\n return v.trim();\n },\n});\n\nconst inputRef = ref<HTMLInputElement>();\n\nconst computedStyle = computed(() => ({\n maxWidth: props.maxWidth ?? '80%',\n}));\n\nconst save = () => {\n model.value = local.value && !local.error ? local.value : model.value;\n local.reset();\n};\n\nonMounted(() => {\n if (props.autofocus) {\n inputRef.value?.focus();\n }\n});\n\n</script>\n\n<template>\n <div class=\"pl-editable-title\" :class=\"style.component\" :style=\"computedStyle\">\n <div :class=\"style.container\" @click=\"() => inputRef?.focus()\">\n <span v-if=\"prefix\">{{ prefix.trim() }} </span>\n <input\n ref=\"inputRef\"\n v-model=\"local.value\"\n :placeholder=\"placeholder\"\n @focusout=\"save\"\n @keydown.escape=\"local.reset\"\n @keydown.enter=\"(ev) => (ev.target as HTMLInputElement)?.blur()\"\n />\n </div>\n <div v-if=\"local.error\" :class=\"style.error\">{{ local.error }}</div>\n </div>\n</template>\n"],"names":["model","_useModel","__props","props","local","useTransformedModel","v","inputRef","ref","computedStyle","computed","save","onMounted","_a"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,UAAMA,IAAQC,EAAmBC,GAAA,YAAC,GAE5BC,IAAQD,GAoCRE,IAAQC,EAAoBL,GAAO;AAAA,MACvC,SAAS;AACP,eAAO;AAAA,MACT;AAAA,MACA,OAAO,CAACM,MAAc;AACpB,YAAI,OAAOA,KAAM;AACf,gBAAM,MAAM,0BAA0B;AAGxC,YAAIH,EAAM,aAAaG,EAAE,SAASH,EAAM;AACtC,gBAAM,MAAM,uBAAuBA,EAAM,SAAS,aAAa;AAGjE,YAAIA,EAAM,aAAaG,EAAE,SAASH,EAAM;AACtC,gBAAM,MAAM,uBAAuBA,EAAM,SAAS,aAAa;AAGjE,eAAOG,EAAE,KAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKC,IAAWC,EAAA,GAEXC,IAAgBC,EAAS,OAAO;AAAA,MACpC,UAAUP,EAAM,YAAY;AAAA,IAAA,EAC5B,GAEIQ,IAAO,MAAM;AACjB,MAAAX,EAAM,QAAQI,EAAM,SAAS,CAACA,EAAM,QAAQA,EAAM,QAAQJ,EAAM,OAChEI,EAAM,MAAA;AAAA,IACR;AAEA,WAAAQ,EAAU,MAAM;;AACd,MAAIT,EAAM,eACRU,IAAAN,EAAS,UAAT,QAAAM,EAAgB;AAAA,IAEpB,CAAC
|
|
1
|
+
{"version":3,"file":"PlEditableTitle.vue.js","sources":["../../../src/components/PlEditableTitle/PlEditableTitle.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useTransformedModel } from '../../composition/useTransformedModel';\nimport style from './pl-editable-title.module.scss';\nimport { computed, onMounted, ref } from 'vue';\n\nconst model = defineModel<string>();\n\nconst props = withDefaults(\n defineProps<{\n /**\n * Standard input placeholder\n */\n placeholder?: string;\n /**\n * Any css `width` value (px, %), default is 80%\n */\n maxWidth?: string;\n /**\n * Fixed non-editable prefix\n */\n prefix?: string;\n /**\n * Max title length (default is 1000)\n */\n maxLength?: number;\n /**\n * Min title length\n */\n minLength?: number;\n /**\n * If true, input will be focused on mount\n */\n autofocus?: boolean;\n }>(),\n {\n placeholder: 'Title',\n maxWidth: '80%',\n prefix: undefined,\n maxLength: 1000,\n minLength: undefined,\n },\n);\n\nconst local = useTransformedModel(model, {\n update() {\n return false;\n },\n parse: (v): string => {\n if (typeof v !== 'string') {\n throw Error('value should be a string');\n }\n\n if (props.maxLength && v.length > props.maxLength) {\n throw Error(`Max title length is ${props.maxLength} characters`);\n }\n\n if (props.minLength && v.length < props.minLength) {\n throw Error(`Min title length is ${props.minLength} characters`);\n }\n\n return v.trim();\n },\n});\n\nconst inputRef = ref<HTMLInputElement>();\n\nconst computedStyle = computed(() => ({\n maxWidth: props.maxWidth ?? '80%',\n}));\n\nconst save = () => {\n model.value = local.value && !local.error ? local.value : model.value;\n local.reset();\n};\n\nonMounted(() => {\n if (props.autofocus) {\n inputRef.value?.focus();\n }\n});\n\n</script>\n\n<template>\n <div class=\"pl-editable-title\" :class=\"style.component\" :style=\"computedStyle\">\n <div :class=\"style.container\" @click=\"() => inputRef?.focus()\">\n <span v-if=\"prefix\">{{ prefix.trim() }} </span>\n <input\n ref=\"inputRef\"\n v-model=\"local.value\"\n :placeholder=\"placeholder\"\n @focusout=\"save\"\n @keydown.escape=\"local.reset\"\n @keydown.enter=\"(ev) => (ev.target as HTMLInputElement)?.blur()\"\n />\n </div>\n <div v-if=\"local.error\" :class=\"style.error\">{{ local.error }}</div>\n </div>\n</template>\n"],"names":["model","_useModel","__props","props","local","useTransformedModel","v","inputRef","ref","computedStyle","computed","save","onMounted","_a","_createElementBlock","_normalizeClass","_unref","style","_createElementVNode","_cache","_openBlock","_hoisted_1","_toDisplayString","$event","args","_withKeys","ev","_vModelText"],"mappings":";;;;;;;;;;;;;;;;;;AAKA,UAAMA,IAAQC,EAAmBC,GAAA,YAAC,GAE5BC,IAAQD,GAoCRE,IAAQC,EAAoBL,GAAO;AAAA,MACvC,SAAS;AACP,eAAO;AAAA,MACT;AAAA,MACA,OAAO,CAACM,MAAc;AACpB,YAAI,OAAOA,KAAM;AACf,gBAAM,MAAM,0BAA0B;AAGxC,YAAIH,EAAM,aAAaG,EAAE,SAASH,EAAM;AACtC,gBAAM,MAAM,uBAAuBA,EAAM,SAAS,aAAa;AAGjE,YAAIA,EAAM,aAAaG,EAAE,SAASH,EAAM;AACtC,gBAAM,MAAM,uBAAuBA,EAAM,SAAS,aAAa;AAGjE,eAAOG,EAAE,KAAA;AAAA,MACX;AAAA,IAAA,CACD,GAEKC,IAAWC,EAAA,GAEXC,IAAgBC,EAAS,OAAO;AAAA,MACpC,UAAUP,EAAM,YAAY;AAAA,IAAA,EAC5B,GAEIQ,IAAO,MAAM;AACjB,MAAAX,EAAM,QAAQI,EAAM,SAAS,CAACA,EAAM,QAAQA,EAAM,QAAQJ,EAAM,OAChEI,EAAM,MAAA;AAAA,IACR;AAEA,WAAAQ,EAAU,MAAM;;AACd,MAAIT,EAAM,eACRU,IAAAN,EAAS,UAAT,QAAAM,EAAgB;AAAA,IAEpB,CAAC,mBAKCC,EAaM,OAAA;AAAA,MAbD,OAAKC,EAAA,CAAC,qBAA4BC,EAAAC,CAAA,EAAM,SAAS,CAAA;AAAA,MAAG,SAAOR,EAAA,KAAa;AAAA,IAAA;MAC3ES,EAUM,OAAA;AAAA,QAVA,OAAKH,EAAEC,EAAAC,CAAA,EAAM,SAAS;AAAA,QAAG,SAAKE,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,MAAA;;AAAQ,kBAAAN,IAAAN,EAAA,UAAA,gBAAAM,EAAU;AAAA;AAAA,MAAK;QAC7CX,EAAA,UAAZkB,EAAA,GAAAN,EAAoD,QAAAO,GAAAC,EAA7BpB,EAAA,OAAO,KAAA,KAAS,KAAM,CAAA;UAC7CgB,EAOE,SAAA;AAAA,mBANI;AAAA,UAAJ,KAAIX;AAAA,UACK,uBAAAY,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAA,CAAAI,MAAAP,EAAAZ,CAAA,EAAM,QAAKmB;AAAA,UACnB,aAAarB,EAAA;AAAA,UACb,YAAUS;AAAA,UACV,WAAO;AAAA;;cAAS,IAAAa,MAAAR,EAAAZ,CAAA,EAAM,SAANY,EAAAZ,CAAA,EAAM,MAAK,GAAAoB,CAAA;AAAA,cAAA,CAAA,QAAA;AAAA,YAAA;AAAA,YACXL,EAAA,CAAA,MAAAA,EAAA,CAAA,IAAAM,EAAA,CAAAC,MAAA;;AAAQ,sBAAAb,IAAAa,EAAG,WAAH,gBAAAb,EAAgC;AAAA,eAAI,CAAA,OAAA,CAAA;AAAA,UAAA;AAAA;UAJpD,CAAAc,GAAAX,EAAAZ,CAAA,EAAM,KAAK;AAAA,QAAA;;MAObY,EAAAZ,CAAA,EAAM,cAAjBU,EAAoE,OAAA;AAAA;QAA3C,OAAKC,EAAEC,EAAAC,CAAA,EAAM,KAAK;AAAA,MAAA,GAAKK,EAAAN,EAAAZ,CAAA,EAAM,KAAK,GAAA,CAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlElementList.vue2.js","sources":["../../../src/components/PlElementList/PlElementList.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown, K extends number | string = number | string\" lang=\"ts\" setup>\nimport { isFunction, shallowHash } from '@milaboratories/helpers';\nimport { useSortable } from '@vueuse/integrations/useSortable';\nimport { type SortableEvent } from 'sortablejs';\nimport type { ShallowRef } from 'vue';\nimport { computed, shallowRef, watch } from 'vue';\nimport PlElementListItem from './PlElementListItem.vue';\nimport { moveElements } from './utils.ts';\n\nconst itemsRef = defineModel<T[]>('items', { required: true });\n\nconst props = withDefaults(\n defineProps<{\n getItemKey?: (item: T, index: number) => K;\n\n itemClass?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassTitle?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassBefore?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassAfter?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassContent?: string | string[] | ((item: T, index: number) => string | string[]);\n isActive?: (item: T, index: number) => boolean;\n\n disableDragging?: boolean;\n isDraggable?: (item: T, index: number) => boolean;\n onDragEnd?: (oldIndex: number, newIndex: number) => void | boolean;\n onSort?: (oldIndex: number, newIndex: number) => void | boolean;\n\n disableRemoving?: boolean;\n isRemovable?: (item: T, index: number) => boolean;\n onRemove?: (item: T, index: number) => void | boolean;\n\n disableExpanding?: boolean;\n isExpandable?: (item: T, index: number) => boolean;\n isExpanded?: (item: T, index: number) => boolean;\n onExpand?: (item: T, index: number) => unknown;\n\n disableToggling?: boolean;\n isToggable?: (item: T, index: number) => boolean;\n isToggled?: (item: T, index: number) => boolean;\n onToggle?: (item: T, index: number) => unknown;\n\n disablePinning?: boolean;\n isPinnable?: (item: T, index: number) => boolean;\n isPinned?: (item: T, index: number) => boolean;\n onPin?: (item: T, index: number) => void | boolean;\n }>(), {\n getItemKey: (item: T) => JSON.stringify(item) as K,\n\n itemClass: undefined,\n itemClassTitle: undefined,\n itemClassContent: undefined,\n itemClassBefore: undefined,\n itemClassAfter: undefined,\n isActive: undefined,\n\n disableDragging: undefined,\n isDraggable: undefined,\n onDragEnd: undefined,\n onSort: undefined,\n\n disableRemoving: undefined,\n isRemovable: undefined,\n onRemove: undefined,\n\n disableExpanding: undefined,\n isExpandable: undefined,\n isExpanded: undefined,\n onExpand: undefined,\n\n disableToggling: undefined,\n isToggable: undefined,\n isToggled: undefined,\n onToggle: undefined,\n\n disablePinning: undefined,\n isPinnable: undefined,\n isPinned: undefined,\n onPin: undefined,\n },\n);\n\nconst emits = defineEmits<{\n (e: 'itemClick', item: T): void;\n}>();\n\nconst slots = defineSlots<{\n ['item-title']: (props: { item: T; index: number }) => unknown;\n ['item-content']?: (props: { item: T; index: number }) => unknown;\n ['item-before']?: (props: { item: T; index: number }) => unknown;\n ['item-after']?: (props: { item: T; index: number }) => unknown;\n}>();\n\nconst dndSortingEnabled = computed((): boolean => {\n return props.disableDragging !== true;\n});\n\nconst pinnedItemsRef = computed(() => itemsRef.value.filter(isPinnedItem));\nconst hasPinnedItems = computed(() => pinnedItemsRef.value.length > 0);\n\nconst unpinnedItemsRef = computed(() => itemsRef.value.filter((item, index) => !isPinnedItem(item, index)));\nconst hasUnpinnedItems = computed(() => unpinnedItemsRef.value.length > 0);\n\nconst domProjectionItemsRef = shallowRef<undefined | T[]>();\nconst pinnedContainerRef = shallowRef<HTMLElement>();\nconst unpinnedContainerRef = shallowRef<HTMLElement>();\n\n// version fix problem with sync between data and rendered values\nconst getKey = (item: T, index: number) => {\n return `${versionRef.value}-${props.getItemKey(item, index)}`;\n};\nconst pinnedKeysRef = computed(() => pinnedItemsRef.value.map(getKey));\nconst unpinnedKeysRef = computed(() => unpinnedItemsRef.value.map(getKey));\n\n// version fix problem with sync between data and rendered values when items have been changed\nconst versionRef = computed<number>((oldVersion) => {\n const currentKeys = itemsRef.value.map(props.getItemKey);\n\n if (domProjectionItemsRef.value === undefined) return oldVersion ?? shallowHash(...currentKeys);\n if (currentKeys.length !== domProjectionItemsRef.value.length) return shallowHash(...currentKeys);\n\n const domProjectionKeys = domProjectionItemsRef.value.map(props.getItemKey);\n const domProjectionKeysSet = new Set(domProjectionKeys);\n\n for (let i = 0; i < currentKeys.length; i++) {\n const hasInconsistentPosition = domProjectionKeysSet.has(currentKeys[i]) && domProjectionKeys[i] !== currentKeys[i];\n\n if (hasInconsistentPosition) {\n return shallowHash(...currentKeys);\n }\n }\n\n return oldVersion ?? shallowHash(...currentKeys);\n});\n\ncreateSortable(hasPinnedItems, pinnedContainerRef, pinnedItemsRef, () => 0);\ncreateSortable(hasUnpinnedItems, unpinnedContainerRef, unpinnedItemsRef, () => pinnedItemsRef.value.length);\n\nfunction createSortable(toggler: ShallowRef<boolean>, elRef: ShallowRef<undefined | HTMLElement>, itemsRef: ShallowRef<T[]>, getOffset: () => number) {\n const sortable = useSortable(elRef, itemsRef, {\n handle: `[data-draggable=\"true\"]`,\n animation: 150,\n forceFallback: true,\n fallbackOnBody: true,\n scrollSensitivity: 80,\n forceAutoScrollFallback: true,\n onUpdate: (evt: SortableEvent) => {\n if (evt.oldIndex == null || evt.newIndex == null) {\n throw new Error('Sortable event has no index');\n }\n if (props.onDragEnd?.(evt.oldIndex, evt.newIndex) !== false) {\n moveItems(getOffset() + evt.oldIndex, getOffset() + evt.newIndex, true);\n }\n },\n });\n watch(\n [elRef, () => props.disableDragging, toggler],\n ([elRef, disabled, on]) => {\n if (!elRef || disabled || !on) {\n sortable.stop();\n } else {\n sortable.start();\n }\n },\n { immediate: true },\n );\n\n return sortable;\n}\n\nfunction moveItems(oldIndex: number, newIndex: number, afterUpdateDom: boolean) {\n if (oldIndex === newIndex) return;\n\n if (afterUpdateDom) {\n domProjectionItemsRef.value = moveElements(itemsRef.value.slice(), oldIndex, newIndex);\n }\n\n const preventDefault = props.onSort?.(oldIndex, newIndex) === false;\n\n if (!preventDefault) {\n moveElements(itemsRef.value, oldIndex, newIndex);\n }\n}\n\nfunction isActiveItem(item: T, index: number): boolean {\n return props.isActive?.(item, index) ?? false;\n}\n\nfunction isDraggableItem(item: T, index: number): boolean {\n if (props.disableDragging === true) return false;\n return (props.isDraggable?.(item, index) ?? true);\n}\n\nfunction isRemovableItem(item: T, index: number): boolean {\n if (props.disableRemoving === true) return false;\n return (props.isRemovable?.(item, index) ?? true);\n}\n\nfunction isToggableItem(item: T, index: number): boolean {\n if (props.disableToggling === true) return false;\n return (props.isToggable?.(item, index) ?? (isFunction(props.isToggled) || isFunction(props.onToggle)));\n}\n\nfunction isToggledItem(item: T, index: number): boolean {\n return props.isToggled?.(item, index) ?? false;\n}\n\nfunction isPinnableItem(item: T, index: number): boolean {\n if (props.disablePinning === true) return false;\n return (props.isPinnable?.(item, index) ?? (isFunction(props.isPinned) || isFunction(props.onPin)));\n}\n\nfunction isPinnedItem(item: T, index: number): boolean {\n return props.isPinned?.(item, index) ?? false;\n}\n\nfunction isExpandableItem(item: T, index: number): boolean {\n if (props.disableExpanding === true) return false;\n return (props.isExpandable?.(item, index) ?? (isFunction(props.isExpanded) || isFunction(props.onExpand)));\n}\n\nfunction isExpandedItem(item: T, index: number): boolean {\n return props.isExpanded?.(item, index) ?? false;\n}\n\nfunction handleExpand(item: T, index: number) {\n props.onExpand?.(item, index);\n}\n\nfunction handleToggle(item: T, index: number) {\n props.onToggle?.(item, index);\n}\n\nfunction handlePin(item: T, index: number) {\n if (index === -1) {\n throw new Error('Pinnable item not found');\n }\n\n const alreadyPinned = pinnedItemsRef.value.includes(item);\n\n if (props.onPin?.(item, index) === false) return;\n\n moveItems(index, pinnedItemsRef.value.length + (alreadyPinned ? 0 : -1), false);\n}\n\nfunction handleRemove(item: T, index: number) {\n if (props.onRemove?.(item, index) === false) return;\n itemsRef.value.splice(index, 1);\n}\n\nfunction getClassFunction(propsItemClass: string | string[] | ((item: T, index: number) => string | string[]) | undefined): (item: T, index: number) => null | string | string[] {\n return (item: T, index: number): null | string | string[] => {\n if (typeof propsItemClass === 'function') {\n return propsItemClass(item, index);\n }\n return propsItemClass ?? null;\n };\n}\nconst getItemClass = getClassFunction(props.itemClass);\nconst getItemClassTitle = getClassFunction(props.itemClassTitle);\nconst getItemClassContent = getClassFunction(props.itemClassContent);\nconst getItemClassBefore = getClassFunction(props.itemClassBefore);\nconst getItemClassAfter = getClassFunction(props.itemClassAfter);\n\n</script>\n\n<template>\n <div :class=\"$style.root\">\n <div ref=\"pinnedContainerRef\" :class=\"$style.list\">\n <PlElementListItem\n v-for=\"(pinnedItem, pinnedIndex) in pinnedItemsRef\" :key=\"pinnedKeysRef[pinnedIndex]\"\n :class=\"[$style.item, getItemClass(pinnedItem, pinnedIndex)]\"\n :titleClass=\"getItemClassTitle(pinnedItem, pinnedIndex)\"\n :contentClass=\"getItemClassContent(pinnedItem, pinnedIndex)\"\n :beforeClass=\"getItemClassBefore(pinnedItem, pinnedIndex)\"\n :afterClass=\"getItemClassAfter(pinnedItem, pinnedIndex)\"\n\n :index=\"pinnedIndex\"\n :item=\"pinnedItem\"\n :showDragHandle=\"dndSortingEnabled\"\n :isActive=\"isActiveItem(pinnedItem, pinnedIndex)\"\n :isDraggable=\"isDraggableItem(pinnedItem, pinnedIndex)\"\n :isRemovable=\"isRemovableItem(pinnedItem, pinnedIndex)\"\n :isToggable=\"isToggableItem(pinnedItem, pinnedIndex)\"\n :isToggled=\"isToggledItem(pinnedItem, pinnedIndex)\"\n :isPinnable=\"isPinnableItem(pinnedItem, pinnedIndex)\"\n :isPinned=\"true\"\n :isExpandable=\"isExpandableItem(pinnedItem, pinnedIndex)\"\n :isExpanded=\"isExpandedItem(pinnedItem, pinnedIndex)\"\n\n @click=\"emits('itemClick', pinnedItem)\"\n @remove=\"handleRemove\"\n @toggle=\"handleToggle\"\n @pin=\"handlePin\"\n @expand=\"handleExpand\"\n >\n <template v-if=\"slots['item-before']\" #before=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-before\" />\n </template>\n <template #title=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-title\" />\n </template>\n <template v-if=\"slots['item-content']\" #content=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-content\" />\n </template>\n <template v-if=\"slots['item-after']\" #after=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-after\" />\n </template>\n </PlElementListItem>\n </div>\n <div v-if=\"hasUnpinnedItems\" ref=\"unpinnedContainerRef\" :class=\"$style.list\">\n <PlElementListItem\n v-for=\"(unpinnedItem, unpinnedIndex) in unpinnedItemsRef\" :key=\"unpinnedKeysRef[unpinnedIndex]\"\n :class=\"[$style.item, getItemClass(unpinnedItem, unpinnedIndex)]\"\n :titleClass=\"getItemClassTitle(unpinnedItem, unpinnedIndex)\"\n :contentClass=\"getItemClassContent(unpinnedItem, unpinnedIndex)\"\n :beforeClass=\"getItemClassBefore(unpinnedItem, unpinnedIndex)\"\n :afterClass=\"getItemClassAfter(unpinnedItem, unpinnedIndex)\"\n\n :index=\"unpinnedIndex + (pinnedItemsRef?.length ?? 0)\"\n :item=\"unpinnedItem\"\n :showDragHandle=\"dndSortingEnabled\"\n :isActive=\"isActiveItem(unpinnedItem, unpinnedIndex)\"\n :isDraggable=\"isDraggableItem(unpinnedItem, unpinnedIndex)\"\n :isRemovable=\"isRemovableItem(unpinnedItem, unpinnedIndex)\"\n :isToggable=\"isToggableItem(unpinnedItem, unpinnedIndex)\"\n :isToggled=\"isToggledItem(unpinnedItem, unpinnedIndex)\"\n :isPinnable=\"isPinnableItem(unpinnedItem, unpinnedIndex)\"\n :isPinned=\"false\"\n :isExpandable=\"isExpandableItem(unpinnedItem, unpinnedIndex)\"\n :isExpanded=\"isExpandedItem(unpinnedItem, unpinnedIndex)\"\n\n @click=\"emits('itemClick', unpinnedItem)\"\n @remove=\"handleRemove\"\n @toggle=\"handleToggle\"\n @pin=\"handlePin\"\n @expand=\"handleExpand\"\n >\n <template #title=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-title\" />\n </template>\n <template v-if=\"slots['item-content']\" #content=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-content\" />\n </template>\n <template v-if=\"slots['item-after']\" #after=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-after\" />\n </template>\n </PlElementListItem>\n </div>\n </div>\n</template>\n\n<style module>\n.root, .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 180px;\n}\n\n.item {\n width: 100%;\n}\n\n:global(.sortable-ghost) {\n visibility: hidden;\n}\n:global(.sortable-drag) {\n opacity: 1;\n}\n</style>\n"],"names":["itemsRef","_useModel","__props","props","emits","__emit","slots","_useSlots","dndSortingEnabled","computed","pinnedItemsRef","isPinnedItem","hasPinnedItems","unpinnedItemsRef","item","index","hasUnpinnedItems","domProjectionItemsRef","shallowRef","pinnedContainerRef","unpinnedContainerRef","getKey","versionRef","pinnedKeysRef","unpinnedKeysRef","oldVersion","currentKeys","shallowHash","domProjectionKeys","domProjectionKeysSet","i","createSortable","toggler","elRef","getOffset","sortable","useSortable","evt","_a","moveItems","watch","disabled","on","oldIndex","newIndex","afterUpdateDom","moveElements","isActiveItem","isDraggableItem","isRemovableItem","isToggableItem","isFunction","isToggledItem","isPinnableItem","isExpandableItem","isExpandedItem","handleExpand","handleToggle","handlePin","alreadyPinned","handleRemove","getClassFunction","propsItemClass","getItemClass","getItemClassTitle","getItemClassContent","getItemClassBefore","getItemClassAfter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PlElementList.vue2.js","sources":["../../../src/components/PlElementList/PlElementList.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown, K extends number | string = number | string\" lang=\"ts\" setup>\nimport { isFunction, shallowHash } from '@milaboratories/helpers';\nimport { useSortable } from '@vueuse/integrations/useSortable';\nimport { type SortableEvent } from 'sortablejs';\nimport type { ShallowRef } from 'vue';\nimport { computed, shallowRef, watch } from 'vue';\nimport PlElementListItem from './PlElementListItem.vue';\nimport { moveElements } from './utils.ts';\n\nconst itemsRef = defineModel<T[]>('items', { required: true });\n\nconst props = withDefaults(\n defineProps<{\n getItemKey?: (item: T, index: number) => K;\n\n itemClass?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassTitle?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassBefore?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassAfter?: string | string[] | ((item: T, index: number) => string | string[]);\n itemClassContent?: string | string[] | ((item: T, index: number) => string | string[]);\n isActive?: (item: T, index: number) => boolean;\n\n disableDragging?: boolean;\n isDraggable?: (item: T, index: number) => boolean;\n onDragEnd?: (oldIndex: number, newIndex: number) => void | boolean;\n onSort?: (oldIndex: number, newIndex: number) => void | boolean;\n\n disableRemoving?: boolean;\n isRemovable?: (item: T, index: number) => boolean;\n onRemove?: (item: T, index: number) => void | boolean;\n\n disableExpanding?: boolean;\n isExpandable?: (item: T, index: number) => boolean;\n isExpanded?: (item: T, index: number) => boolean;\n onExpand?: (item: T, index: number) => unknown;\n\n disableToggling?: boolean;\n isToggable?: (item: T, index: number) => boolean;\n isToggled?: (item: T, index: number) => boolean;\n onToggle?: (item: T, index: number) => unknown;\n\n disablePinning?: boolean;\n isPinnable?: (item: T, index: number) => boolean;\n isPinned?: (item: T, index: number) => boolean;\n onPin?: (item: T, index: number) => void | boolean;\n }>(), {\n getItemKey: (item: T) => JSON.stringify(item) as K,\n\n itemClass: undefined,\n itemClassTitle: undefined,\n itemClassContent: undefined,\n itemClassBefore: undefined,\n itemClassAfter: undefined,\n isActive: undefined,\n\n disableDragging: undefined,\n isDraggable: undefined,\n onDragEnd: undefined,\n onSort: undefined,\n\n disableRemoving: undefined,\n isRemovable: undefined,\n onRemove: undefined,\n\n disableExpanding: undefined,\n isExpandable: undefined,\n isExpanded: undefined,\n onExpand: undefined,\n\n disableToggling: undefined,\n isToggable: undefined,\n isToggled: undefined,\n onToggle: undefined,\n\n disablePinning: undefined,\n isPinnable: undefined,\n isPinned: undefined,\n onPin: undefined,\n },\n);\n\nconst emits = defineEmits<{\n (e: 'itemClick', item: T): void;\n}>();\n\nconst slots = defineSlots<{\n ['item-title']: (props: { item: T; index: number }) => unknown;\n ['item-content']?: (props: { item: T; index: number }) => unknown;\n ['item-before']?: (props: { item: T; index: number }) => unknown;\n ['item-after']?: (props: { item: T; index: number }) => unknown;\n}>();\n\nconst dndSortingEnabled = computed((): boolean => {\n return props.disableDragging !== true;\n});\n\nconst pinnedItemsRef = computed(() => itemsRef.value.filter(isPinnedItem));\nconst hasPinnedItems = computed(() => pinnedItemsRef.value.length > 0);\n\nconst unpinnedItemsRef = computed(() => itemsRef.value.filter((item, index) => !isPinnedItem(item, index)));\nconst hasUnpinnedItems = computed(() => unpinnedItemsRef.value.length > 0);\n\nconst domProjectionItemsRef = shallowRef<undefined | T[]>();\nconst pinnedContainerRef = shallowRef<HTMLElement>();\nconst unpinnedContainerRef = shallowRef<HTMLElement>();\n\n// version fix problem with sync between data and rendered values\nconst getKey = (item: T, index: number) => {\n return `${versionRef.value}-${props.getItemKey(item, index)}`;\n};\nconst pinnedKeysRef = computed(() => pinnedItemsRef.value.map(getKey));\nconst unpinnedKeysRef = computed(() => unpinnedItemsRef.value.map(getKey));\n\n// version fix problem with sync between data and rendered values when items have been changed\nconst versionRef = computed<number>((oldVersion) => {\n const currentKeys = itemsRef.value.map(props.getItemKey);\n\n if (domProjectionItemsRef.value === undefined) return oldVersion ?? shallowHash(...currentKeys);\n if (currentKeys.length !== domProjectionItemsRef.value.length) return shallowHash(...currentKeys);\n\n const domProjectionKeys = domProjectionItemsRef.value.map(props.getItemKey);\n const domProjectionKeysSet = new Set(domProjectionKeys);\n\n for (let i = 0; i < currentKeys.length; i++) {\n const hasInconsistentPosition = domProjectionKeysSet.has(currentKeys[i]) && domProjectionKeys[i] !== currentKeys[i];\n\n if (hasInconsistentPosition) {\n return shallowHash(...currentKeys);\n }\n }\n\n return oldVersion ?? shallowHash(...currentKeys);\n});\n\ncreateSortable(hasPinnedItems, pinnedContainerRef, pinnedItemsRef, () => 0);\ncreateSortable(hasUnpinnedItems, unpinnedContainerRef, unpinnedItemsRef, () => pinnedItemsRef.value.length);\n\nfunction createSortable(toggler: ShallowRef<boolean>, elRef: ShallowRef<undefined | HTMLElement>, itemsRef: ShallowRef<T[]>, getOffset: () => number) {\n const sortable = useSortable(elRef, itemsRef, {\n handle: `[data-draggable=\"true\"]`,\n animation: 150,\n forceFallback: true,\n fallbackOnBody: true,\n scrollSensitivity: 80,\n forceAutoScrollFallback: true,\n onUpdate: (evt: SortableEvent) => {\n if (evt.oldIndex == null || evt.newIndex == null) {\n throw new Error('Sortable event has no index');\n }\n if (props.onDragEnd?.(evt.oldIndex, evt.newIndex) !== false) {\n moveItems(getOffset() + evt.oldIndex, getOffset() + evt.newIndex, true);\n }\n },\n });\n watch(\n [elRef, () => props.disableDragging, toggler],\n ([elRef, disabled, on]) => {\n if (!elRef || disabled || !on) {\n sortable.stop();\n } else {\n sortable.start();\n }\n },\n { immediate: true },\n );\n\n return sortable;\n}\n\nfunction moveItems(oldIndex: number, newIndex: number, afterUpdateDom: boolean) {\n if (oldIndex === newIndex) return;\n\n if (afterUpdateDom) {\n domProjectionItemsRef.value = moveElements(itemsRef.value.slice(), oldIndex, newIndex);\n }\n\n const preventDefault = props.onSort?.(oldIndex, newIndex) === false;\n\n if (!preventDefault) {\n moveElements(itemsRef.value, oldIndex, newIndex);\n }\n}\n\nfunction isActiveItem(item: T, index: number): boolean {\n return props.isActive?.(item, index) ?? false;\n}\n\nfunction isDraggableItem(item: T, index: number): boolean {\n if (props.disableDragging === true) return false;\n return (props.isDraggable?.(item, index) ?? true);\n}\n\nfunction isRemovableItem(item: T, index: number): boolean {\n if (props.disableRemoving === true) return false;\n return (props.isRemovable?.(item, index) ?? true);\n}\n\nfunction isToggableItem(item: T, index: number): boolean {\n if (props.disableToggling === true) return false;\n return (props.isToggable?.(item, index) ?? (isFunction(props.isToggled) || isFunction(props.onToggle)));\n}\n\nfunction isToggledItem(item: T, index: number): boolean {\n return props.isToggled?.(item, index) ?? false;\n}\n\nfunction isPinnableItem(item: T, index: number): boolean {\n if (props.disablePinning === true) return false;\n return (props.isPinnable?.(item, index) ?? (isFunction(props.isPinned) || isFunction(props.onPin)));\n}\n\nfunction isPinnedItem(item: T, index: number): boolean {\n return props.isPinned?.(item, index) ?? false;\n}\n\nfunction isExpandableItem(item: T, index: number): boolean {\n if (props.disableExpanding === true) return false;\n return (props.isExpandable?.(item, index) ?? (isFunction(props.isExpanded) || isFunction(props.onExpand)));\n}\n\nfunction isExpandedItem(item: T, index: number): boolean {\n return props.isExpanded?.(item, index) ?? false;\n}\n\nfunction handleExpand(item: T, index: number) {\n props.onExpand?.(item, index);\n}\n\nfunction handleToggle(item: T, index: number) {\n props.onToggle?.(item, index);\n}\n\nfunction handlePin(item: T, index: number) {\n if (index === -1) {\n throw new Error('Pinnable item not found');\n }\n\n const alreadyPinned = pinnedItemsRef.value.includes(item);\n\n if (props.onPin?.(item, index) === false) return;\n\n moveItems(index, pinnedItemsRef.value.length + (alreadyPinned ? 0 : -1), false);\n}\n\nfunction handleRemove(item: T, index: number) {\n if (props.onRemove?.(item, index) === false) return;\n itemsRef.value.splice(index, 1);\n}\n\nfunction getClassFunction(propsItemClass: string | string[] | ((item: T, index: number) => string | string[]) | undefined): (item: T, index: number) => null | string | string[] {\n return (item: T, index: number): null | string | string[] => {\n if (typeof propsItemClass === 'function') {\n return propsItemClass(item, index);\n }\n return propsItemClass ?? null;\n };\n}\nconst getItemClass = getClassFunction(props.itemClass);\nconst getItemClassTitle = getClassFunction(props.itemClassTitle);\nconst getItemClassContent = getClassFunction(props.itemClassContent);\nconst getItemClassBefore = getClassFunction(props.itemClassBefore);\nconst getItemClassAfter = getClassFunction(props.itemClassAfter);\n\n</script>\n\n<template>\n <div :class=\"$style.root\">\n <div ref=\"pinnedContainerRef\" :class=\"$style.list\">\n <PlElementListItem\n v-for=\"(pinnedItem, pinnedIndex) in pinnedItemsRef\" :key=\"pinnedKeysRef[pinnedIndex]\"\n :class=\"[$style.item, getItemClass(pinnedItem, pinnedIndex)]\"\n :titleClass=\"getItemClassTitle(pinnedItem, pinnedIndex)\"\n :contentClass=\"getItemClassContent(pinnedItem, pinnedIndex)\"\n :beforeClass=\"getItemClassBefore(pinnedItem, pinnedIndex)\"\n :afterClass=\"getItemClassAfter(pinnedItem, pinnedIndex)\"\n\n :index=\"pinnedIndex\"\n :item=\"pinnedItem\"\n :showDragHandle=\"dndSortingEnabled\"\n :isActive=\"isActiveItem(pinnedItem, pinnedIndex)\"\n :isDraggable=\"isDraggableItem(pinnedItem, pinnedIndex)\"\n :isRemovable=\"isRemovableItem(pinnedItem, pinnedIndex)\"\n :isToggable=\"isToggableItem(pinnedItem, pinnedIndex)\"\n :isToggled=\"isToggledItem(pinnedItem, pinnedIndex)\"\n :isPinnable=\"isPinnableItem(pinnedItem, pinnedIndex)\"\n :isPinned=\"true\"\n :isExpandable=\"isExpandableItem(pinnedItem, pinnedIndex)\"\n :isExpanded=\"isExpandedItem(pinnedItem, pinnedIndex)\"\n\n @click=\"emits('itemClick', pinnedItem)\"\n @remove=\"handleRemove\"\n @toggle=\"handleToggle\"\n @pin=\"handlePin\"\n @expand=\"handleExpand\"\n >\n <template v-if=\"slots['item-before']\" #before=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-before\" />\n </template>\n <template #title=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-title\" />\n </template>\n <template v-if=\"slots['item-content']\" #content=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-content\" />\n </template>\n <template v-if=\"slots['item-after']\" #after=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-after\" />\n </template>\n </PlElementListItem>\n </div>\n <div v-if=\"hasUnpinnedItems\" ref=\"unpinnedContainerRef\" :class=\"$style.list\">\n <PlElementListItem\n v-for=\"(unpinnedItem, unpinnedIndex) in unpinnedItemsRef\" :key=\"unpinnedKeysRef[unpinnedIndex]\"\n :class=\"[$style.item, getItemClass(unpinnedItem, unpinnedIndex)]\"\n :titleClass=\"getItemClassTitle(unpinnedItem, unpinnedIndex)\"\n :contentClass=\"getItemClassContent(unpinnedItem, unpinnedIndex)\"\n :beforeClass=\"getItemClassBefore(unpinnedItem, unpinnedIndex)\"\n :afterClass=\"getItemClassAfter(unpinnedItem, unpinnedIndex)\"\n\n :index=\"unpinnedIndex + (pinnedItemsRef?.length ?? 0)\"\n :item=\"unpinnedItem\"\n :showDragHandle=\"dndSortingEnabled\"\n :isActive=\"isActiveItem(unpinnedItem, unpinnedIndex)\"\n :isDraggable=\"isDraggableItem(unpinnedItem, unpinnedIndex)\"\n :isRemovable=\"isRemovableItem(unpinnedItem, unpinnedIndex)\"\n :isToggable=\"isToggableItem(unpinnedItem, unpinnedIndex)\"\n :isToggled=\"isToggledItem(unpinnedItem, unpinnedIndex)\"\n :isPinnable=\"isPinnableItem(unpinnedItem, unpinnedIndex)\"\n :isPinned=\"false\"\n :isExpandable=\"isExpandableItem(unpinnedItem, unpinnedIndex)\"\n :isExpanded=\"isExpandedItem(unpinnedItem, unpinnedIndex)\"\n\n @click=\"emits('itemClick', unpinnedItem)\"\n @remove=\"handleRemove\"\n @toggle=\"handleToggle\"\n @pin=\"handlePin\"\n @expand=\"handleExpand\"\n >\n <template #title=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-title\" />\n </template>\n <template v-if=\"slots['item-content']\" #content=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-content\" />\n </template>\n <template v-if=\"slots['item-after']\" #after=\"{ item, index }\">\n <slot :index=\"index\" :item=\"item\" name=\"item-after\" />\n </template>\n </PlElementListItem>\n </div>\n </div>\n</template>\n\n<style module>\n.root, .list {\n display: flex;\n flex-direction: column;\n gap: 8px;\n min-width: 180px;\n}\n\n.item {\n width: 100%;\n}\n\n:global(.sortable-ghost) {\n visibility: hidden;\n}\n:global(.sortable-drag) {\n opacity: 1;\n}\n</style>\n"],"names":["itemsRef","_useModel","__props","props","emits","__emit","slots","_useSlots","dndSortingEnabled","computed","pinnedItemsRef","isPinnedItem","hasPinnedItems","unpinnedItemsRef","item","index","hasUnpinnedItems","domProjectionItemsRef","shallowRef","pinnedContainerRef","unpinnedContainerRef","getKey","versionRef","pinnedKeysRef","unpinnedKeysRef","oldVersion","currentKeys","shallowHash","domProjectionKeys","domProjectionKeysSet","i","createSortable","toggler","elRef","getOffset","sortable","useSortable","evt","_a","moveItems","watch","disabled","on","oldIndex","newIndex","afterUpdateDom","moveElements","isActiveItem","isDraggableItem","isRemovableItem","isToggableItem","isFunction","isToggledItem","isPinnableItem","isExpandableItem","isExpandedItem","handleExpand","handleToggle","handlePin","alreadyPinned","handleRemove","getClassFunction","propsItemClass","getItemClass","getItemClassTitle","getItemClassContent","getItemClassBefore","getItemClassAfter","_createElementBlock","_normalizeClass","$style","_createElementVNode","_openBlock","_Fragment","_renderList","pinnedItem","pinnedIndex","_createBlock","PlElementListItem","_unref","$event","_withCtx","_renderSlot","_ctx","unpinnedItem","unpinnedIndex"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { defineComponent as E, useSlots as P, computed as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
1
|
+
import { defineComponent as E, useSlots as P, computed as b, createElementBlock as n, openBlock as i, createCommentVNode as a, createElementVNode as y, normalizeClass as l, renderSlot as m, createBlock as w, createVNode as v, unref as d, withModifiers as p } from "vue";
|
|
2
|
+
import u from "../PlIcon16/PlIcon16.vue.js";
|
|
3
|
+
import f from "../PlIcon24/PlIcon24.vue.js";
|
|
4
4
|
const h = ["data-draggable"], A = /* @__PURE__ */ E({
|
|
5
5
|
inheritAttrs: !1,
|
|
6
6
|
__name: "PlElementListItem",
|
|
@@ -23,106 +23,106 @@ const h = ["data-draggable"], A = /* @__PURE__ */ E({
|
|
|
23
23
|
beforeClass: {}
|
|
24
24
|
},
|
|
25
25
|
emits: ["expand", "toggle", "pin", "remove"],
|
|
26
|
-
setup(
|
|
27
|
-
const
|
|
28
|
-
return (
|
|
29
|
-
|
|
26
|
+
setup(o, { emit: c }) {
|
|
27
|
+
const e = o, $ = P(), k = b(() => $.content !== void 0), C = b(() => $.after !== void 0), B = b(() => $.before !== void 0), r = c;
|
|
28
|
+
return (s, t) => (i(), n("div", null, [
|
|
29
|
+
B.value ? (i(), n("div", {
|
|
30
30
|
key: 0,
|
|
31
|
-
class: l(
|
|
31
|
+
class: l(o.beforeClass)
|
|
32
32
|
}, [
|
|
33
|
-
|
|
34
|
-
item:
|
|
35
|
-
index:
|
|
33
|
+
m(s.$slots, "before", {
|
|
34
|
+
item: e.item,
|
|
35
|
+
index: e.index
|
|
36
36
|
})
|
|
37
|
-
], 2)) :
|
|
38
|
-
|
|
39
|
-
class: l([
|
|
40
|
-
[
|
|
41
|
-
[
|
|
42
|
-
[
|
|
43
|
-
[
|
|
37
|
+
], 2)) : a("", !0),
|
|
38
|
+
y("div", {
|
|
39
|
+
class: l([s.$style.root, s.$attrs.class, {
|
|
40
|
+
[s.$style.active]: e.isActive,
|
|
41
|
+
[s.$style.pinned]: e.isPinned,
|
|
42
|
+
[s.$style.opened]: e.isExpanded,
|
|
43
|
+
[s.$style.disabled]: e.isToggled
|
|
44
44
|
}])
|
|
45
45
|
}, [
|
|
46
|
-
|
|
47
|
-
class: l([
|
|
48
|
-
[
|
|
46
|
+
y("div", {
|
|
47
|
+
class: l([s.$style.head, o.titleClass, {
|
|
48
|
+
[s.$style.clickable]: k.value
|
|
49
49
|
}]),
|
|
50
|
-
onClick: t[3] || (t[3] = (
|
|
50
|
+
onClick: t[3] || (t[3] = (g) => o.isExpandable && r("expand", e.item, e.index))
|
|
51
51
|
}, [
|
|
52
|
-
|
|
52
|
+
e.showDragHandle ? (i(), n("div", {
|
|
53
53
|
key: 0,
|
|
54
|
-
class: l([
|
|
55
|
-
"data-draggable":
|
|
54
|
+
class: l([s.$style.action, s.$style.draggable, { [s.$style.disable]: !e.isDraggable }]),
|
|
55
|
+
"data-draggable": e.isDraggable
|
|
56
56
|
}, [
|
|
57
|
-
|
|
58
|
-
], 10, h)) :
|
|
59
|
-
|
|
57
|
+
v(d(u), { name: "drag-dots" })
|
|
58
|
+
], 10, h)) : a("", !0),
|
|
59
|
+
o.isExpandable ? (i(), w(d(u), {
|
|
60
60
|
key: 1,
|
|
61
|
-
class: l([
|
|
61
|
+
class: l([s.$style.contentChevron, { [s.$style.opened]: e.isExpanded }]),
|
|
62
62
|
name: "chevron-down"
|
|
63
|
-
}, null, 8, ["class"])) :
|
|
64
|
-
|
|
65
|
-
class: l(
|
|
63
|
+
}, null, 8, ["class"])) : a("", !0),
|
|
64
|
+
y("div", {
|
|
65
|
+
class: l(s.$style.title)
|
|
66
66
|
}, [
|
|
67
|
-
|
|
68
|
-
item:
|
|
69
|
-
index:
|
|
67
|
+
m(s.$slots, "title", {
|
|
68
|
+
item: e.item,
|
|
69
|
+
index: e.index
|
|
70
70
|
})
|
|
71
71
|
], 2),
|
|
72
|
-
|
|
73
|
-
class: l([
|
|
72
|
+
y("div", {
|
|
73
|
+
class: l([s.$style.actions, s.$style.showOnHover])
|
|
74
74
|
}, [
|
|
75
|
-
|
|
75
|
+
e.isToggable ? (i(), n("div", {
|
|
76
76
|
key: 0,
|
|
77
|
-
class: l([
|
|
78
|
-
onClick: t[0] || (t[0] =
|
|
77
|
+
class: l([s.$style.action, s.$style.clickable, { [s.$style.disable]: !e.isToggable }]),
|
|
78
|
+
onClick: t[0] || (t[0] = p((g) => r("toggle", e.item, e.index), ["stop"]))
|
|
79
79
|
}, [
|
|
80
|
-
|
|
81
|
-
name:
|
|
80
|
+
v(d(f), {
|
|
81
|
+
name: e.isToggled === !0 ? "view-hide" : "view-show",
|
|
82
82
|
size: "16"
|
|
83
83
|
}, null, 8, ["name"])
|
|
84
|
-
], 2)) :
|
|
85
|
-
|
|
84
|
+
], 2)) : a("", !0),
|
|
85
|
+
e.isPinnable ? (i(), n("div", {
|
|
86
86
|
key: 1,
|
|
87
|
-
class: l([
|
|
88
|
-
[
|
|
89
|
-
[
|
|
87
|
+
class: l([s.$style.action, s.$style.clickable, {
|
|
88
|
+
[s.$style.disable]: !e.isPinnable,
|
|
89
|
+
[s.$style.activated]: e.isPinned
|
|
90
90
|
}]),
|
|
91
|
-
onClick: t[1] || (t[1] =
|
|
91
|
+
onClick: t[1] || (t[1] = p((g) => r("pin", e.item, e.index), ["stop"]))
|
|
92
92
|
}, [
|
|
93
|
-
|
|
93
|
+
v(d(f), {
|
|
94
94
|
name: "pin",
|
|
95
95
|
size: "16"
|
|
96
96
|
})
|
|
97
|
-
], 2)) :
|
|
98
|
-
|
|
97
|
+
], 2)) : a("", !0),
|
|
98
|
+
e.isRemovable ? (i(), n("div", {
|
|
99
99
|
key: 2,
|
|
100
|
-
class: l([
|
|
101
|
-
onClick: t[2] || (t[2] =
|
|
100
|
+
class: l([s.$style.action, s.$style.clickable]),
|
|
101
|
+
onClick: t[2] || (t[2] = p((g) => r("remove", e.item, e.index), ["stop"]))
|
|
102
102
|
}, [
|
|
103
|
-
|
|
104
|
-
], 2)) :
|
|
103
|
+
v(d(u), { name: "close" })
|
|
104
|
+
], 2)) : a("", !0)
|
|
105
105
|
], 2)
|
|
106
106
|
], 2),
|
|
107
|
-
|
|
107
|
+
k.value && e.isExpanded ? (i(), n("div", {
|
|
108
108
|
key: 0,
|
|
109
|
-
class: l([
|
|
109
|
+
class: l([s.$style.body, o.contentClass, { [s.$style.disabled]: e.isToggled }])
|
|
110
110
|
}, [
|
|
111
|
-
|
|
112
|
-
item:
|
|
113
|
-
index:
|
|
111
|
+
m(s.$slots, "content", {
|
|
112
|
+
item: e.item,
|
|
113
|
+
index: e.index
|
|
114
114
|
})
|
|
115
|
-
], 2)) :
|
|
115
|
+
], 2)) : a("", !0)
|
|
116
116
|
], 2),
|
|
117
|
-
|
|
117
|
+
C.value ? (i(), n("div", {
|
|
118
118
|
key: 1,
|
|
119
|
-
class: l(
|
|
119
|
+
class: l(o.afterClass)
|
|
120
120
|
}, [
|
|
121
|
-
|
|
122
|
-
item:
|
|
123
|
-
index:
|
|
121
|
+
m(s.$slots, "after", {
|
|
122
|
+
item: e.item,
|
|
123
|
+
index: e.index
|
|
124
124
|
})
|
|
125
|
-
], 2)) :
|
|
125
|
+
], 2)) : a("", !0)
|
|
126
126
|
]));
|
|
127
127
|
}
|
|
128
128
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlElementListItem.vue2.js","sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown\" lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlIcon24 } from '../PlIcon24';\n\nconst props = defineProps<{\n item: T;\n index: number;\n showDragHandle: boolean;\n isActive: boolean;\n isDraggable: boolean;\n isRemovable: boolean;\n isExpandable: boolean;\n isExpanded: boolean;\n isToggable: boolean;\n isToggled: boolean;\n isPinnable: boolean;\n isPinned: boolean;\n titleClass: string | string[] | null;\n contentClass: string | string[] | null;\n afterClass: string | string[] | null;\n beforeClass: string | string[] | null;\n}>();\ndefineOptions({ inheritAttrs: false });\n\nconst slots = defineSlots<{\n title: (props: { item: T; index: number }) => unknown;\n content?: (props: { item: T; index: number }) => unknown;\n after?: (props: { item: T; index: number }) => unknown;\n before?: (props: { item: T; index: number }) => unknown;\n}>();\nconst hasContentSlot = computed(() => slots['content'] !== undefined);\nconst hasAfterSlot = computed(() => slots['after'] !== undefined);\nconst hasBeforeSlot = computed(() => slots['before'] !== undefined);\n\nconst emit = defineEmits<{\n (e: 'expand', item: T, index: number): void;\n (e: 'toggle', item: T, index: number): void;\n (e: 'pin', item: T, index: number): void;\n (e: 'remove', item: T, index: number): void;\n}>();\n</script>\n\n<template>\n <div>\n <div v-if=\"hasBeforeSlot\" :class=\"beforeClass\">\n <slot name=\"before\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n <div\n :class=\"[$style.root, $attrs.class, {\n [$style.active]: props.isActive,\n [$style.pinned]: props.isPinned,\n [$style.opened]: props.isExpanded,\n [$style.disabled]: props.isToggled,\n }]\"\n >\n <div\n :class=\"[$style.head, titleClass, {\n [$style.clickable]: hasContentSlot,\n }]\"\n @click=\"isExpandable && emit('expand', props.item, props.index)\"\n >\n <div\n v-if=\"props.showDragHandle\"\n :class=\"[$style.action, $style.draggable, { [$style.disable]: !props.isDraggable } ]\"\n :data-draggable=\"props.isDraggable\"\n >\n <PlIcon16 name=\"drag-dots\" />\n </div>\n <PlIcon16 v-if=\"isExpandable\" :class=\"[$style.contentChevron, { [$style.opened]: props.isExpanded }]\" name=\"chevron-down\" />\n\n <div :class=\"$style.title\">\n <slot name=\"title\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n\n <div :class=\"[$style.actions, $style.showOnHover]\">\n <div\n v-if=\"props.isToggable\"\n :class=\"[$style.action, $style.clickable, { [$style.disable]: !props.isToggable }]\"\n @click.stop=\"emit('toggle', props.item, props.index)\"\n >\n <PlIcon24 :name=\"props.isToggled === true ? 'view-hide' : 'view-show'\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isPinnable\"\n :class=\"[$style.action, $style.clickable, {\n [$style.disable]: !props.isPinnable,\n [$style.activated]: props.isPinned,\n }]\"\n @click.stop=\"emit('pin', props.item, props.index)\"\n >\n <PlIcon24 name=\"pin\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isRemovable\"\n :class=\"[$style.action, $style.clickable]\"\n @click.stop=\"emit('remove', props.item, props.index)\"\n >\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n </div>\n <div\n v-if=\"hasContentSlot && props.isExpanded\"\n :class=\"[$style.body, contentClass, { [$style.disabled]: props.isToggled }]\"\n >\n <slot name=\"content\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n <div v-if=\"hasAfterSlot\" :class=\"afterClass\">\n <slot name=\"after\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n</template>\n\n<style module>\n@use '../../assets/variables.scss' as *;\n\n.root {\n --background: rgba(255, 255, 255, 0.8);\n --border-color: var(--color-div-grey);\n --head-background: unset;\n --box-shadow: none;\n --box-shadow-active: 0 0 0 4px color-mix(in srgb, var(--border-color-focus) 50%, transparent);\n\n &:global(.sortable-drag),\n &:global(.sortable-chosen) {\n --head-background: var(--gradient-light-lime);\n --border-color: var(--border-color-focus);\n --box-shadow: var(--box-shadow-active)\n }\n}\n.root {\n display: flex;\n flex-direction: column;\n justify-content: center;\n border-radius: var(--border-radius);\n border: 1px solid var(--border-color);\n background-color: var(--background);\n transition: box-shadow 0.15s;\n box-shadow: var(--box-shadow);;\n overflow: hidden;\n\n &:hover {\n --border-color: var(--border-color-focus);\n --head-background: var(--gradient-light-lime);\n }\n\n &.opened {\n --head-background: var(--gradient-light-lime);\n }\n\n &.disabled {\n --icon-color: var(--ic-02);\n --border-color: var(--border-color-div-grey);\n color: var(--txt-03);\n filter: grayscale(1);\n }\n\n &.pinned {\n --background: var(--bg-base-light);\n }\n\n &.active {\n --border-color: var(--border-color-focus);\n --head-background: var(--btn-accent-positive-500);\n }\n}\n\n.head {\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px;\n min-height: 40px;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background: var(--head-background);\n}\n\n.contentChevron {\n display: block;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n transform: rotate(-90deg);\n transition: transform 0.15s;\n\n &.opened {\n transform: rotate(0deg);\n }\n}\n\n.title {\n display: flex;\n flex-direction: row;\n flex: 1 1 0;\n gap: 8px;\n text-overflow: ellipsis;\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 24px;\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n\n &.disabled {\n pointer-events: none;\n }\n}\n\n.actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n align-items: center;\n background-color: var(--background);\n border-radius: var(--border-radius);\n}\n\n.action {\n width: 24px;\n height: 24px;\n padding: 4px; /* use padding instead of gap on parent, for better accessibility */\n opacity: 0.6;\n border-radius: var(--border-radius);\n transition: all 0.15s;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--bg-elevated-02);\n }\n\n &.activated {\n opacity: 0.8;\n }\n\n &.disable {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.clickable {\n cursor: pointer;\n}\n\n.draggable {\n cursor: grab;\n}\n\n.showOnHover {\n opacity: 0;\n transition: opacity 0.15s;\n}\n\n.root:hover .showOnHover {\n opacity: 1;\n}\n</style>\n"],"names":["props","__props","slots","_useSlots","hasContentSlot","computed","hasAfterSlot","hasBeforeSlot","emit","__emit"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,UAAMA,IAAQC,GAoBRC,IAAQC,EAAA,GAMRC,IAAiBC,EAAS,MAAMH,EAAM,YAAe,MAAS,GAC9DI,IAAeD,EAAS,MAAMH,EAAM,UAAa,MAAS,GAC1DK,IAAgBF,EAAS,MAAMH,EAAM,WAAc,MAAS,GAE5DM,IAAOC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"PlElementListItem.vue2.js","sources":["../../../src/components/PlElementList/PlElementListItem.vue"],"sourcesContent":["<script generic=\"T extends unknown = unknown\" lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport { PlIcon16 } from '../PlIcon16';\nimport { PlIcon24 } from '../PlIcon24';\n\nconst props = defineProps<{\n item: T;\n index: number;\n showDragHandle: boolean;\n isActive: boolean;\n isDraggable: boolean;\n isRemovable: boolean;\n isExpandable: boolean;\n isExpanded: boolean;\n isToggable: boolean;\n isToggled: boolean;\n isPinnable: boolean;\n isPinned: boolean;\n titleClass: string | string[] | null;\n contentClass: string | string[] | null;\n afterClass: string | string[] | null;\n beforeClass: string | string[] | null;\n}>();\ndefineOptions({ inheritAttrs: false });\n\nconst slots = defineSlots<{\n title: (props: { item: T; index: number }) => unknown;\n content?: (props: { item: T; index: number }) => unknown;\n after?: (props: { item: T; index: number }) => unknown;\n before?: (props: { item: T; index: number }) => unknown;\n}>();\nconst hasContentSlot = computed(() => slots['content'] !== undefined);\nconst hasAfterSlot = computed(() => slots['after'] !== undefined);\nconst hasBeforeSlot = computed(() => slots['before'] !== undefined);\n\nconst emit = defineEmits<{\n (e: 'expand', item: T, index: number): void;\n (e: 'toggle', item: T, index: number): void;\n (e: 'pin', item: T, index: number): void;\n (e: 'remove', item: T, index: number): void;\n}>();\n</script>\n\n<template>\n <div>\n <div v-if=\"hasBeforeSlot\" :class=\"beforeClass\">\n <slot name=\"before\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n <div\n :class=\"[$style.root, $attrs.class, {\n [$style.active]: props.isActive,\n [$style.pinned]: props.isPinned,\n [$style.opened]: props.isExpanded,\n [$style.disabled]: props.isToggled,\n }]\"\n >\n <div\n :class=\"[$style.head, titleClass, {\n [$style.clickable]: hasContentSlot,\n }]\"\n @click=\"isExpandable && emit('expand', props.item, props.index)\"\n >\n <div\n v-if=\"props.showDragHandle\"\n :class=\"[$style.action, $style.draggable, { [$style.disable]: !props.isDraggable } ]\"\n :data-draggable=\"props.isDraggable\"\n >\n <PlIcon16 name=\"drag-dots\" />\n </div>\n <PlIcon16 v-if=\"isExpandable\" :class=\"[$style.contentChevron, { [$style.opened]: props.isExpanded }]\" name=\"chevron-down\" />\n\n <div :class=\"$style.title\">\n <slot name=\"title\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n\n <div :class=\"[$style.actions, $style.showOnHover]\">\n <div\n v-if=\"props.isToggable\"\n :class=\"[$style.action, $style.clickable, { [$style.disable]: !props.isToggable }]\"\n @click.stop=\"emit('toggle', props.item, props.index)\"\n >\n <PlIcon24 :name=\"props.isToggled === true ? 'view-hide' : 'view-show'\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isPinnable\"\n :class=\"[$style.action, $style.clickable, {\n [$style.disable]: !props.isPinnable,\n [$style.activated]: props.isPinned,\n }]\"\n @click.stop=\"emit('pin', props.item, props.index)\"\n >\n <PlIcon24 name=\"pin\" size=\"16\" />\n </div>\n <div\n v-if=\"props.isRemovable\"\n :class=\"[$style.action, $style.clickable]\"\n @click.stop=\"emit('remove', props.item, props.index)\"\n >\n <PlIcon16 name=\"close\" />\n </div>\n </div>\n </div>\n <div\n v-if=\"hasContentSlot && props.isExpanded\"\n :class=\"[$style.body, contentClass, { [$style.disabled]: props.isToggled }]\"\n >\n <slot name=\"content\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n <div v-if=\"hasAfterSlot\" :class=\"afterClass\">\n <slot name=\"after\" :item=\"props.item\" :index=\"props.index\" />\n </div>\n </div>\n</template>\n\n<style module>\n@use '../../assets/variables.scss' as *;\n\n.root {\n --background: rgba(255, 255, 255, 0.8);\n --border-color: var(--color-div-grey);\n --head-background: unset;\n --box-shadow: none;\n --box-shadow-active: 0 0 0 4px color-mix(in srgb, var(--border-color-focus) 50%, transparent);\n\n &:global(.sortable-drag),\n &:global(.sortable-chosen) {\n --head-background: var(--gradient-light-lime);\n --border-color: var(--border-color-focus);\n --box-shadow: var(--box-shadow-active)\n }\n}\n.root {\n display: flex;\n flex-direction: column;\n justify-content: center;\n border-radius: var(--border-radius);\n border: 1px solid var(--border-color);\n background-color: var(--background);\n transition: box-shadow 0.15s;\n box-shadow: var(--box-shadow);;\n overflow: hidden;\n\n &:hover {\n --border-color: var(--border-color-focus);\n --head-background: var(--gradient-light-lime);\n }\n\n &.opened {\n --head-background: var(--gradient-light-lime);\n }\n\n &.disabled {\n --icon-color: var(--ic-02);\n --border-color: var(--border-color-div-grey);\n color: var(--txt-03);\n filter: grayscale(1);\n }\n\n &.pinned {\n --background: var(--bg-base-light);\n }\n\n &.active {\n --border-color: var(--border-color-focus);\n --head-background: var(--btn-accent-positive-500);\n }\n}\n\n.head {\n position: relative;\n display: flex;\n align-items: center;\n padding: 8px;\n min-height: 40px;\n border-radius: var(--border-radius) var(--border-radius) 0 0;\n background: var(--head-background);\n}\n\n.contentChevron {\n display: block;\n width: 16px;\n height: 16px;\n margin-right: 4px;\n transform: rotate(-90deg);\n transition: transform 0.15s;\n\n &.opened {\n transform: rotate(0deg);\n }\n}\n\n.title {\n display: flex;\n flex-direction: row;\n flex: 1 1 0;\n gap: 8px;\n text-overflow: ellipsis;\n}\n\n.body {\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 24px;\n border-radius: 0 0 var(--border-radius) var(--border-radius);\n\n &.disabled {\n pointer-events: none;\n }\n}\n\n.actions {\n position: absolute;\n top: 8px;\n right: 8px;\n display: flex;\n align-items: center;\n background-color: var(--background);\n border-radius: var(--border-radius);\n}\n\n.action {\n width: 24px;\n height: 24px;\n padding: 4px; /* use padding instead of gap on parent, for better accessibility */\n opacity: 0.6;\n border-radius: var(--border-radius);\n transition: all 0.15s;\n\n svg {\n width: 16px;\n height: 16px;\n }\n\n &:hover {\n opacity: 1;\n background-color: var(--bg-elevated-02);\n }\n\n &.activated {\n opacity: 0.8;\n }\n\n &.disable {\n cursor: not-allowed;\n opacity: 0.4;\n }\n}\n\n.clickable {\n cursor: pointer;\n}\n\n.draggable {\n cursor: grab;\n}\n\n.showOnHover {\n opacity: 0;\n transition: opacity 0.15s;\n}\n\n.root:hover .showOnHover {\n opacity: 1;\n}\n</style>\n"],"names":["props","__props","slots","_useSlots","hasContentSlot","computed","hasAfterSlot","hasBeforeSlot","emit","__emit","_createElementBlock","_renderSlot","_ctx","_createElementVNode","$style","$attrs","_normalizeClass","_cache","$event","_createVNode","_unref","PlIcon16","_createBlock","_withModifiers","PlIcon24"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlErrorAlert.vue2.js","sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: 'PlErrorAlert',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from '../PlClipboard';\nimport { PlMaskIcon16 } from '../PlMaskIcon16';\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: '300px',\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === 'string') {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div :class=\"$style.title\">\n <PlMaskIcon16 :class=\"$style.titleIcon\" name=\"warning\" />\n <div :class=\"$style.titleText\">{{ props.title }}</div>\n </div>\n </slot>\n <slot name=\"message\">\n <div :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"names":["__default__","props","__props","onCopy","value"],"mappings":";;;AACA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;AAOA,UAAMC,IAAQC;AAed,aAASC,IAAS;AAChB,YAAMC,IAAQH,EAAM,eAAeA,EAAM;AACzC,MAAI,OAAOG,KAAU,YACnB,UAAU,UAAU,UAAUA,CAAK;AAAA,IAEvC
|
|
1
|
+
{"version":3,"file":"PlErrorAlert.vue2.js","sources":["../../../src/components/PlErrorAlert/PlErrorAlert.vue"],"sourcesContent":["<script lang=\"ts\">\nexport default {\n name: 'PlErrorAlert',\n};\n</script>\n\n<script lang=\"ts\" setup>\nimport { PlClipboard } from '../PlClipboard';\nimport { PlMaskIcon16 } from '../PlMaskIcon16';\n\nconst props = withDefaults(\n defineProps<{\n title?: string;\n message?: string;\n maxHeight?: string;\n copyMessage?: string;\n }>(),\n {\n title: undefined,\n message: undefined,\n maxHeight: '300px',\n copyMessage: undefined,\n },\n);\n\nfunction onCopy() {\n const value = props.copyMessage ?? props.message;\n if (typeof value === 'string') {\n navigator.clipboard.writeText(value);\n }\n}\n</script>\n\n<template>\n <div :style=\"{ maxHeight: props.maxHeight }\" :class=\"$style.root\">\n <PlClipboard :class=\"$style.copy\" @copy=\"onCopy\" />\n <slot name=\"title\">\n <div :class=\"$style.title\">\n <PlMaskIcon16 :class=\"$style.titleIcon\" name=\"warning\" />\n <div :class=\"$style.titleText\">{{ props.title }}</div>\n </div>\n </slot>\n <slot name=\"message\">\n <div :class=\"$style.message\">\n {{ props.message }}\n </div>\n </slot>\n </div>\n</template>\n\n<style module>\n.root {\n position: relative;\n overflow: auto;\n display: flex;\n flex-direction: column;\n gap: 12px;\n padding: 12px;\n background: var(--bg-error);\n border: 1px var(--border-color-error) solid;\n border-radius: var(--border-radius-control);\n /* color: var(--txt-error); */\n}\n\n.copy {\n position: absolute;\n right: 12px;\n top: 12px;\n opacity: 0.4;\n transition: opacity 0.3s;\n\n &:hover {\n opacity: 1;\n }\n}\n\n.title {\n display: flex;\n align-items: center;\n gap: 10px;\n max-width: calc(100% - 20px);\n min-height: 24px;\n line-height: 24px;\n font-weight: bold;\n overflow: hidden;\n}\n\n.titleIcon {\n --icon-color: var(--txt-error);\n}\n\n.titleText {\n width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n\n.message {\n overflow: auto;\n max-height: 100%;\n white-space: pre-wrap;\n word-break: break-word;\n font-family: var(--font-family-monospace);\n}\n</style>\n"],"names":["__default__","props","__props","onCopy","value","_createElementBlock","_normalizeStyle","_normalizeClass","$style","_createVNode","_unref","PlClipboard","_renderSlot","_ctx","_createElementVNode","PlMaskIcon16","_toDisplayString"],"mappings":";;;AACA,MAAAA,IAAe;AAAA,EACb,MAAM;AACR;;;;;;;;;AAOA,UAAMC,IAAQC;AAed,aAASC,IAAS;AAChB,YAAMC,IAAQH,EAAM,eAAeA,EAAM;AACzC,MAAI,OAAOG,KAAU,YACnB,UAAU,UAAU,UAAUA,CAAK;AAAA,IAEvC;2BAIEC,EAaM,OAAA;AAAA,MAbA,OAAKC,EAAA,EAAA,WAAeL,EAAM,WAAS;AAAA,MAAK,OAAKM,EAAEC,EAAAA,OAAO,IAAI;AAAA,IAAA;MAC9DC,EAAmDC,EAAAC,CAAA,GAAA;AAAA,QAArC,OAAKJ,EAAEC,EAAAA,OAAO,IAAI;AAAA,QAAG,QAAAL;AAAA,MAAA;MACnCS,EAKOC,uBALP,MAKO;AAAA,QAJLC,EAGM,OAAA;AAAA,UAHA,OAAKP,EAAEC,EAAAA,OAAO,KAAK;AAAA,QAAA;UACvBC,EAAyDC,EAAAK,CAAA,GAAA;AAAA,YAA1C,OAAKR,EAAEC,EAAAA,OAAO,SAAS;AAAA,YAAE,MAAK;AAAA,UAAA;UAC7CM,EAAsD,OAAA;AAAA,YAAhD,OAAKP,EAAEC,EAAAA,OAAO,SAAS;AAAA,UAAA,GAAKQ,EAAAf,EAAM,KAAK,GAAA,CAAA;AAAA,QAAA;;MAGjDW,EAIOC,yBAJP,MAIO;AAAA,QAHLC,EAEM,OAAA;AAAA,UAFA,OAAKP,EAAEC,EAAAA,OAAO,OAAO;AAAA,QAAA,GACtBQ,EAAAf,EAAM,OAAO,GAAA,CAAA;AAAA,MAAA;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PlErrorBoundary.vue.js","sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from 'vue';\nimport { PlErrorAlert } from '../PlErrorAlert';\nimport { isErrorLike, tryDo } from '@milaboratories/helpers';\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + '\\n' + err.stack;\n }\n\n return tryDo(() => JSON.stringify(err, null, 4), () => err.toString());\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert v-if=\"error\" ref=\"errorAlert\" :message=\"message\" :title=\"data?.title\" />\n</template>\n"],"names":["extractMessage","err","isErrorLike","tryDo","data","ref","error","computed","_a","message","reset","errorAlert","onBeforeUpdate","onErrorCaptured","instance","_b","__expose"],"mappings":";;;;;;AAKA,UAAMA,IAAiB,CAACC,MAAqC;AAC3D,UAAIA,KAAO;AAIX,eAAIC,EAAYD,CAAG,IACVA,EAAI,SAAS,QAAQA,EAAI,MAAM,WAAW,IAC7CA,EAAI,UACJA,EAAI,MAAM,SAASA,EAAI,OAAO,IAC5BA,EAAI,QACJA,EAAI,UAAU;AAAA,IAAOA,EAAI,QAG1BE,EAAM,MAAM,KAAK,UAAUF,GAAK,MAAM,CAAC,GAAG,MAAMA,EAAI,UAAU;AAAA,IACvE,GAEMG,IAAOC,EAGV,IAAI,GAEDC,IAAQC,EAAS,MAAA;;AAAM,cAAAC,IAAAJ,EAAK,UAAL,gBAAAI,EAAY;AAAA,KAAK,GACxCC,IAAUF,EAAS,MAAMP,EAAeM,EAAM,KAAK,CAAC;AAE1D,aAASI,IAAQ;AACf,MAAAN,EAAK,QAAQ;AAAA,IACf;AAEA,UAAMO,IAAaN,EAA8C,IAAI;AAErE,WAAAO,EAAe,MAAM;AAGnB,MAAIR,EAAK,UAAU,QAAQO,EAAW,SACpCD,EAAA;AAAA,IAEJ,CAAC,GAEDG,EAAgB,CAACZ,GAAKa,MAAa;;AACjC,aAAAV,EAAK,QAAQ;AAAA,QACX,SAAOW,KAAAP,IAAAM,KAAA,gBAAAA,EAAU,MAAV,gBAAAN,EAAa,SAAb,gBAAAO,EAAmB,SAAQ;AAAA,QAClC,OAAOd;AAAA,MAAA,GAGF;AAAA,IACT,CAAC,GAEDe,EAAa,EAAE,OAAAV,GAAO,OAAAI,GAAO
|
|
1
|
+
{"version":3,"file":"PlErrorBoundary.vue.js","sources":["../../../src/components/PlErrorBoundary/PlErrorBoundary.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onErrorCaptured, ref, onBeforeUpdate } from 'vue';\nimport { PlErrorAlert } from '../PlErrorAlert';\nimport { isErrorLike, tryDo } from '@milaboratories/helpers';\n\nconst extractMessage = (err: unknown): undefined | string => {\n if (err == null) {\n return undefined;\n }\n\n if (isErrorLike(err)) {\n return err.stack == null || err.stack.length === 0\n ? err.message\n : err.stack.includes(err.message)\n ? err.stack\n : err.message + '\\n' + err.stack;\n }\n\n return tryDo(() => JSON.stringify(err, null, 4), () => err.toString());\n};\n\nconst data = ref<null | {\n title: undefined | string;\n error: Error;\n}>(null);\n\nconst error = computed(() => data.value?.error);\nconst message = computed(() => extractMessage(error.value));\n\nfunction reset() {\n data.value = null;\n}\n\nconst errorAlert = ref<InstanceType<typeof PlErrorAlert> | null>(null);\n\nonBeforeUpdate(() => {\n // If an error is currently displayed, and the component updates (e.g., due to slot content changing),\n // reset the error state.\n if (data.value !== null && errorAlert.value) {\n reset();\n }\n});\n\nonErrorCaptured((err, instance) => {\n data.value = {\n title: instance?.$?.type?.name ?? undefined,\n error: err,\n };\n // stop error propagation\n return false;\n});\n\ndefineExpose({ error, reset });\n</script>\n\n<template>\n <slot />\n <PlErrorAlert v-if=\"error\" ref=\"errorAlert\" :message=\"message\" :title=\"data?.title\" />\n</template>\n"],"names":["extractMessage","err","isErrorLike","tryDo","data","ref","error","computed","_a","message","reset","errorAlert","onBeforeUpdate","onErrorCaptured","instance","_b","__expose","_renderSlot","_ctx","_createBlock","_unref","PlErrorAlert"],"mappings":";;;;;;AAKA,UAAMA,IAAiB,CAACC,MAAqC;AAC3D,UAAIA,KAAO;AAIX,eAAIC,EAAYD,CAAG,IACVA,EAAI,SAAS,QAAQA,EAAI,MAAM,WAAW,IAC7CA,EAAI,UACJA,EAAI,MAAM,SAASA,EAAI,OAAO,IAC5BA,EAAI,QACJA,EAAI,UAAU;AAAA,IAAOA,EAAI,QAG1BE,EAAM,MAAM,KAAK,UAAUF,GAAK,MAAM,CAAC,GAAG,MAAMA,EAAI,UAAU;AAAA,IACvE,GAEMG,IAAOC,EAGV,IAAI,GAEDC,IAAQC,EAAS,MAAA;;AAAM,cAAAC,IAAAJ,EAAK,UAAL,gBAAAI,EAAY;AAAA,KAAK,GACxCC,IAAUF,EAAS,MAAMP,EAAeM,EAAM,KAAK,CAAC;AAE1D,aAASI,IAAQ;AACf,MAAAN,EAAK,QAAQ;AAAA,IACf;AAEA,UAAMO,IAAaN,EAA8C,IAAI;AAErE,WAAAO,EAAe,MAAM;AAGnB,MAAIR,EAAK,UAAU,QAAQO,EAAW,SACpCD,EAAA;AAAA,IAEJ,CAAC,GAEDG,EAAgB,CAACZ,GAAKa,MAAa;;AACjC,aAAAV,EAAK,QAAQ;AAAA,QACX,SAAOW,KAAAP,IAAAM,KAAA,gBAAAA,EAAU,MAAV,gBAAAN,EAAa,SAAb,gBAAAO,EAAmB,SAAQ;AAAA,QAClC,OAAOd;AAAA,MAAA,GAGF;AAAA,IACT,CAAC,GAEDe,EAAa,EAAE,OAAAV,GAAO,OAAAI,GAAO;;;QAI3BO,EAAQC,EAAA,QAAA,SAAA;AAAA,QACYZ,EAAA,cAApBa,EAAsFC,EAAAC,CAAA,GAAA;AAAA;mBAAvD;AAAA,UAAJ,KAAIV;AAAA,UAAc,SAASF,EAAA;AAAA,UAAU,QAAOD,IAAAJ,EAAA,UAAA,gBAAAI,EAAM;AAAA,QAAA;;;;;"}
|