@milaboratories/uikit 2.6.1 → 2.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. package/.turbo/turbo-build.log +143 -143
  2. package/.turbo/turbo-type-check.log +1 -1
  3. package/CHANGELOG.md +14 -0
  4. package/dist/base/BtnBase.vue.js +18 -18
  5. package/dist/base/BtnBase.vue.js.map +1 -1
  6. package/dist/components/ContextProvider.vue.js.map +1 -1
  7. package/dist/components/DataTable/BaseCellComponent.vue.js +20 -20
  8. package/dist/components/DataTable/BaseCellComponent.vue.js.map +1 -1
  9. package/dist/components/DataTable/ColumnCaret.vue.js +6 -6
  10. package/dist/components/DataTable/ColumnCaret.vue.js.map +1 -1
  11. package/dist/components/DataTable/ColumnsCommandMenu.vue.js.map +1 -1
  12. package/dist/components/DataTable/RowsCommandMenu.vue.js.map +1 -1
  13. package/dist/components/DataTable/TScroll.vue.js +12 -12
  14. package/dist/components/DataTable/TScroll.vue.js.map +1 -1
  15. package/dist/components/DataTable/TableComponent.vue.js +5 -3
  16. package/dist/components/DataTable/TableComponent.vue.js.map +1 -1
  17. package/dist/components/DataTable/TdCell.vue.js +36 -36
  18. package/dist/components/DataTable/TdCell.vue.js.map +1 -1
  19. package/dist/components/DataTable/ThCell.vue.js +27 -27
  20. package/dist/components/DataTable/ThCell.vue.js.map +1 -1
  21. package/dist/components/DataTable/TrBody.vue.js +12 -12
  22. package/dist/components/DataTable/TrBody.vue.js.map +1 -1
  23. package/dist/components/DataTable/TrHead.vue.js.map +1 -1
  24. package/dist/components/DataTable/assets/TableIcon.vue.js +2 -2
  25. package/dist/components/DataTable/assets/TableIcon.vue.js.map +1 -1
  26. package/dist/components/DropdownListItem.vue.js +18 -18
  27. package/dist/components/DropdownListItem.vue.js.map +1 -1
  28. package/dist/components/HScroll.vue.js.map +1 -1
  29. package/dist/components/InputRange.vue.js.map +1 -1
  30. package/dist/components/LongText.vue.js +1 -1
  31. package/dist/components/LongText.vue.js.map +1 -1
  32. package/dist/components/LongText.vue3.js +1 -1
  33. package/dist/components/PlAccordion/ExpandTransition.vue.js.map +1 -1
  34. package/dist/components/PlAccordion/ExpandTransition.vue2.js.map +1 -1
  35. package/dist/components/PlAccordion/ExpandTransition.vue3.js +1 -1
  36. package/dist/components/PlAccordion/PlAccordion.vue.js.map +1 -1
  37. package/dist/components/PlAccordion/PlAccordionSection.vue2.js +21 -21
  38. package/dist/components/PlAccordion/PlAccordionSection.vue2.js.map +1 -1
  39. package/dist/components/PlAlert/PlAlert.vue.js +23 -23
  40. package/dist/components/PlAlert/PlAlert.vue.js.map +1 -1
  41. package/dist/components/PlAutocomplete/PlAutocomplete.vue.d.ts +4 -0
  42. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js +112 -106
  43. package/dist/components/PlAutocomplete/PlAutocomplete.vue.js.map +1 -1
  44. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.d.ts +4 -0
  45. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js +100 -94
  46. package/dist/components/PlAutocompleteMulti/PlAutocompleteMulti.vue.js.map +1 -1
  47. package/dist/components/PlBtnAccent/PlBtnAccent.vue.js.map +1 -1
  48. package/dist/components/PlBtnDanger/PlBtnDanger.vue.js.map +1 -1
  49. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js +21 -21
  50. package/dist/components/PlBtnGhost/PlBtnGhost.vue.js.map +1 -1
  51. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js +34 -34
  52. package/dist/components/PlBtnGroup/PlBtnGroup.vue.js.map +1 -1
  53. package/dist/components/PlBtnLink/PlBtnLink.vue.js +12 -12
  54. package/dist/components/PlBtnLink/PlBtnLink.vue.js.map +1 -1
  55. package/dist/components/PlBtnPrimary/PlBtnPrimary.vue.js.map +1 -1
  56. package/dist/components/PlBtnSecondary/PlBtnSecondary.vue.js.map +1 -1
  57. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js +31 -31
  58. package/dist/components/PlBtnSplit/PlBtnSplit.vue.js.map +1 -1
  59. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js +18 -18
  60. package/dist/components/PlChartHistogram/PlChartHistogram.vue2.js.map +1 -1
  61. package/dist/components/PlChartStackedBar/Legends.vue2.js.map +1 -1
  62. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js +15 -15
  63. package/dist/components/PlChartStackedBar/PlChartStackedBar.vue2.js.map +1 -1
  64. package/dist/components/PlChartStackedBar/PlChartStackedBarCompact.vue2.js.map +1 -1
  65. package/dist/components/PlChartStackedBar/StackedRow.vue2.js.map +1 -1
  66. package/dist/components/PlChartStackedBar/StackedRowCompact.vue2.js.map +1 -1
  67. package/dist/components/PlCheckbox/PlCheckbox.vue.js +13 -13
  68. package/dist/components/PlCheckbox/PlCheckbox.vue.js.map +1 -1
  69. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js +6 -6
  70. package/dist/components/PlCheckbox/PlCheckboxBase.vue.js.map +1 -1
  71. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js +28 -28
  72. package/dist/components/PlCheckboxGroup/PlCheckboxGroup.vue.js.map +1 -1
  73. package/dist/components/PlChip/PlChip.vue.js +20 -20
  74. package/dist/components/PlChip/PlChip.vue.js.map +1 -1
  75. package/dist/components/PlClipboard/PlClipboard.vue2.js.map +1 -1
  76. package/dist/components/PlConfirmDialog.vue.js +14 -14
  77. package/dist/components/PlConfirmDialog.vue.js.map +1 -1
  78. package/dist/components/PlDialogModal/PlDialogModal.vue.js +30 -30
  79. package/dist/components/PlDialogModal/PlDialogModal.vue.js.map +1 -1
  80. package/dist/components/PlDropdown/OptionList.vue.js +40 -40
  81. package/dist/components/PlDropdown/OptionList.vue.js.map +1 -1
  82. package/dist/components/PlDropdown/PlDropdown.vue.d.ts +8 -0
  83. package/dist/components/PlDropdown/PlDropdown.vue.js +102 -95
  84. package/dist/components/PlDropdown/PlDropdown.vue.js.map +1 -1
  85. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js +95 -93
  86. package/dist/components/PlDropdownLegacy/PlDropdownLegacy.vue.js.map +1 -1
  87. package/dist/components/PlDropdownLine/PlDropdownLine.vue.d.ts +1 -1
  88. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js +4 -4
  89. package/dist/components/PlDropdownLine/PlDropdownLine.vue.js.map +1 -1
  90. package/dist/components/PlDropdownLine/ResizableInput.vue.js +12 -12
  91. package/dist/components/PlDropdownLine/ResizableInput.vue.js.map +1 -1
  92. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.d.ts +4 -0
  93. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js +88 -82
  94. package/dist/components/PlDropdownMulti/PlDropdownMulti.vue.js.map +1 -1
  95. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.d.ts +1 -1
  96. package/dist/components/PlDropdownMultiRef/PlDropdownMultiRef.vue.js.map +1 -1
  97. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js +11 -11
  98. package/dist/components/PlDropdownRef/PlDropdownRef.vue.js.map +1 -1
  99. package/dist/components/PlEditableTitle/PlEditableTitle.vue.d.ts +1 -1
  100. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js +36 -36
  101. package/dist/components/PlEditableTitle/PlEditableTitle.vue.js.map +1 -1
  102. package/dist/components/PlElementList/PlElementList.vue.d.ts +20 -0
  103. package/dist/components/PlElementList/PlElementList.vue2.js +180 -135
  104. package/dist/components/PlElementList/PlElementList.vue2.js.map +1 -1
  105. package/dist/components/PlElementList/PlElementListItem.vue.d.ts +20 -0
  106. package/dist/components/PlElementList/PlElementListItem.vue2.js +101 -76
  107. package/dist/components/PlElementList/PlElementListItem.vue2.js.map +1 -1
  108. package/dist/components/PlErrorAlert/PlErrorAlert.vue2.js.map +1 -1
  109. package/dist/components/PlErrorBoundary/PlErrorBoundary.vue.js.map +1 -1
  110. package/dist/components/PlFileDialog/Local.vue.js +24 -24
  111. package/dist/components/PlFileDialog/Local.vue.js.map +1 -1
  112. package/dist/components/PlFileDialog/PlFileDialog.vue.js +38 -38
  113. package/dist/components/PlFileDialog/PlFileDialog.vue.js.map +1 -1
  114. package/dist/components/PlFileDialog/Remote.vue.js +2 -2
  115. package/dist/components/PlFileDialog/Remote.vue.js.map +1 -1
  116. package/dist/components/PlFileDialog/Shortcuts.vue2.js +4 -4
  117. package/dist/components/PlFileDialog/Shortcuts.vue2.js.map +1 -1
  118. package/dist/components/PlFileInput/PlFileInput.vue.d.ts +1 -1
  119. package/dist/components/PlFileInput/PlFileInput.vue.js +78 -76
  120. package/dist/components/PlFileInput/PlFileInput.vue.js.map +1 -1
  121. package/dist/components/PlIcon16/PlIcon16.vue2.js.map +1 -1
  122. package/dist/components/PlIcon24/PlIcon24.vue2.js.map +1 -1
  123. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js +11 -11
  124. package/dist/components/PlLoaderCircular/PlLoaderCircular.vue.js.map +1 -1
  125. package/dist/components/PlLogView/PlLogView.vue.js +62 -60
  126. package/dist/components/PlLogView/PlLogView.vue.js.map +1 -1
  127. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js +22 -22
  128. package/dist/components/PlNotificationAlert/PlNotificationAlert.vue.js.map +1 -1
  129. package/dist/components/PlNumberField/PlNumberField.vue.d.ts +6 -1
  130. package/dist/components/PlNumberField/PlNumberField.vue.js +66 -60
  131. package/dist/components/PlNumberField/PlNumberField.vue.js.map +1 -1
  132. package/dist/components/PlProgressBar/PlProgressBar.vue.js +12 -12
  133. package/dist/components/PlProgressBar/PlProgressBar.vue.js.map +1 -1
  134. package/dist/components/PlProgressCell/PlProgressCell.vue.js +20 -20
  135. package/dist/components/PlProgressCell/PlProgressCell.vue.js.map +1 -1
  136. package/dist/components/PlRadio/PlRadio.vue2.js.map +1 -1
  137. package/dist/components/PlRadio/PlRadioGroup.vue2.js +8 -8
  138. package/dist/components/PlRadio/PlRadioGroup.vue2.js.map +1 -1
  139. package/dist/components/PlSearchField/PlSearchField.vue2.js +19 -19
  140. package/dist/components/PlSearchField/PlSearchField.vue2.js.map +1 -1
  141. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js +8 -8
  142. package/dist/components/PlSectionSeparator/PlSectionSeparator.vue2.js.map +1 -1
  143. package/dist/components/PlSidebar/PlSidebarGroup.vue2.js.map +1 -1
  144. package/dist/components/PlSidebar/PlSidebarItem.vue2.js.map +1 -1
  145. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js +5 -3
  146. package/dist/components/PlSlideModal/PlPureSlideModal.vue.js.map +1 -1
  147. package/dist/components/PlSlideModal/PlSlideModal.vue2.js.map +1 -1
  148. package/dist/components/PlSplash/PlSplash.vue.js +16 -16
  149. package/dist/components/PlSplash/PlSplash.vue.js.map +1 -1
  150. package/dist/components/PlStatusTag/PlStatusTag.vue.js +7 -7
  151. package/dist/components/PlStatusTag/PlStatusTag.vue.js.map +1 -1
  152. package/dist/components/PlSvg/PlSvg.vue2.js.map +1 -1
  153. package/dist/components/PlTabs/PlTabs.vue.js +18 -18
  154. package/dist/components/PlTabs/PlTabs.vue.js.map +1 -1
  155. package/dist/components/PlTabs/Tab.vue.js +9 -9
  156. package/dist/components/PlTabs/Tab.vue.js.map +1 -1
  157. package/dist/components/PlTextArea/PlTextArea.vue.js +55 -53
  158. package/dist/components/PlTextArea/PlTextArea.vue.js.map +1 -1
  159. package/dist/components/PlTextField/PlTextField.vue.d.ts +4 -0
  160. package/dist/components/PlTextField/PlTextField.vue.js +66 -60
  161. package/dist/components/PlTextField/PlTextField.vue.js.map +1 -1
  162. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js +14 -14
  163. package/dist/components/PlToggleSwitch/PlToggleSwitch.vue.js.map +1 -1
  164. package/dist/components/PlTooltip/Beak.vue.js +2 -2
  165. package/dist/components/PlTooltip/Beak.vue.js.map +1 -1
  166. package/dist/components/PlTooltip/PlTooltip.vue.js +50 -50
  167. package/dist/components/PlTooltip/PlTooltip.vue.js.map +1 -1
  168. package/dist/components/Scrollable.vue.js.map +1 -1
  169. package/dist/components/Slider.vue.js +35 -35
  170. package/dist/components/Slider.vue.js.map +1 -1
  171. package/dist/components/SliderRange.vue.js +47 -47
  172. package/dist/components/SliderRange.vue.js.map +1 -1
  173. package/dist/components/SliderRangeTriple.vue.js +47 -47
  174. package/dist/components/SliderRangeTriple.vue.js.map +1 -1
  175. package/dist/components/TabItem.vue.js.map +1 -1
  176. package/dist/components/ThemeSwitcher.vue.js +2 -2
  177. package/dist/components/ThemeSwitcher.vue.js.map +1 -1
  178. package/dist/components/TransitionSlidePanel.vue.js.map +1 -1
  179. package/dist/components/VScroll.vue.js.map +1 -1
  180. package/dist/components/contextMenu/Menu.vue2.js +12 -12
  181. package/dist/components/contextMenu/Menu.vue2.js.map +1 -1
  182. package/dist/composition/filters/metadata.d.ts +205 -0
  183. package/dist/composition/filters/metadata.js +129 -19
  184. package/dist/composition/filters/metadata.js.map +1 -1
  185. package/dist/index.js +1 -1
  186. package/dist/layout/PlBlockPage/PlBlockPage.vue.js +27 -27
  187. package/dist/layout/PlBlockPage/PlBlockPage.vue.js.map +1 -1
  188. package/dist/layout/PlContainer/PlContainer.vue.js +10 -10
  189. package/dist/layout/PlContainer/PlContainer.vue.js.map +1 -1
  190. package/dist/layout/PlGrid/PlGrid.vue.js.map +1 -1
  191. package/dist/layout/PlRow/PlRow.vue.js +8 -8
  192. package/dist/layout/PlRow/PlRow.vue.js.map +1 -1
  193. package/dist/layout/PlSpacer/PlSpacer.vue.js.map +1 -1
  194. package/dist/utils/DoubleContour.vue.d.ts +7 -1
  195. package/dist/utils/DoubleContour.vue.js +20 -13
  196. package/dist/utils/DoubleContour.vue.js.map +1 -1
  197. package/dist/utils/DoubleContour.vue3.js +7 -0
  198. package/dist/utils/DoubleContour.vue3.js.map +1 -0
  199. package/dist/utils/DropdownOverlay/DropdownOverlay.vue.js.map +1 -1
  200. package/dist/utils/PlCloseModalBtn.vue.js +2 -2
  201. package/dist/utils/PlCloseModalBtn.vue.js.map +1 -1
  202. package/dist/utils/TextLabel.vue.js.map +1 -1
  203. package/package.json +5 -5
  204. package/src/components/PlAutocomplete/PlAutocomplete.vue +6 -1
  205. package/src/components/PlAutocompleteMulti/PlAutocompleteMulti.vue +6 -1
  206. package/src/components/PlDropdown/PlDropdown.vue +12 -2
  207. package/src/components/PlDropdownMulti/PlDropdownMulti.vue +6 -1
  208. package/src/components/PlElementList/PlElementList.vue +40 -6
  209. package/src/components/PlElementList/PlElementListItem.vue +64 -47
  210. package/src/components/PlNumberField/PlNumberField.vue +4 -1
  211. package/src/components/PlTextField/PlTextField.vue +5 -1
  212. package/src/composition/filters/metadata.ts +105 -0
  213. package/src/utils/DoubleContour.vue +68 -2
  214. package/dist/utils/DoubleContour.vue2.js +0 -7
  215. package/dist/utils/DoubleContour.vue2.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"SliderRange.vue.js","sources":["../../src/components/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, reactive, ref, unref, useSlots, watch } from 'vue';\nimport { useMouseCapture } from '../composition/useMouseCapture';\nimport { tapIf } from '../helpers/functions';\nimport { clamp } from '../helpers/math';\nimport { PlTooltip } from './PlTooltip';\nimport type { SliderMode } from '../types';\nimport InputRange from './InputRange.vue';\nimport { useSliderBreakpoints } from '../composition/useSliderBreakpoints';\nimport { getErrorMessage } from '../helpers/error.ts';\n\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: [number, number];\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst inputRange = ref<[number, number]>(props.modelValue);\nconst leftDelta = ref(props.modelValue[0]);\nconst rightDelta = ref(props.modelValue[1]);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst textModelValue = computed(() => [leftDelta.value, rightDelta.value].sort((a, b) => a - b).join('-'));\n\nconst range = computed(() => props.max - props.min);\n\nconst localValue1 = computed(() => {\n return clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max);\n});\n\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 2 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number]';\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[1] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nwatch(\n () => props.modelValue,\n (value: [number, number]) => {\n inputRange.value = value;\n leftDelta.value = +value[0];\n rightDelta.value = +value[1];\n },\n { immediate: true },\n);\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n leftDelta.value = round(clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n rightDelta.value = round(clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n return [point1, point2].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: [number, number]) {\n emit('update:modelValue', value);\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: [number, number] = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n}\n</script>\n\n<template>\n <!-- {{ leftDelta }} {{ rightDelta }} -->\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"props.mode === 'text'\" class=\"ui-slider__value-static text-s\">{{ textModelValue }}</div>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div ref=\"thumbRef1\" :style=\"thumbStyle1\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 0)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div ref=\"thumbRef2\" :style=\"thumbStyle2\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 1)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" @change=\"setModelValue\" />\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n"],"names":["slots","useSlots","emit","__emit","props","__props","data","reactive","barRef","ref","thumbRef1","thumbRef2","inputRange","leftDelta","rightDelta","propsRef","computed","breakpointsRef","useSliderBreakpoints","textModelValue","a","b","range","localValue1","clamp","localValue2","error","v","it","getErrorMessage","position1","position2","leftRight","getLeftAndRight","progressStyle","thumbStyle1","thumbStyle2","watch","value","useMouseCapture","ev","tapIf","_a","unref","rect","dx","round","setModelValue","point1","point2","handleKeyPress","e","index","nextStep","arr"],"mappings":"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"}
1
+ {"version":3,"file":"SliderRange.vue.js","sources":["../../src/components/SliderRange.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, reactive, ref, unref, useSlots, watch } from 'vue';\nimport { useMouseCapture } from '../composition/useMouseCapture';\nimport { tapIf } from '../helpers/functions';\nimport { clamp } from '../helpers/math';\nimport { PlTooltip } from './PlTooltip';\nimport type { SliderMode } from '../types';\nimport InputRange from './InputRange.vue';\nimport { useSliderBreakpoints } from '../composition/useSliderBreakpoints';\nimport { getErrorMessage } from '../helpers/error.ts';\n\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: [number, number];\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst inputRange = ref<[number, number]>(props.modelValue);\nconst leftDelta = ref(props.modelValue[0]);\nconst rightDelta = ref(props.modelValue[1]);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst textModelValue = computed(() => [leftDelta.value, rightDelta.value].sort((a, b) => a - b).join('-'));\n\nconst range = computed(() => props.max - props.min);\n\nconst localValue1 = computed(() => {\n return clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max);\n});\n\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 2 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number]';\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[1] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nwatch(\n () => props.modelValue,\n (value: [number, number]) => {\n inputRange.value = value;\n leftDelta.value = +value[0];\n rightDelta.value = +value[1];\n },\n { immediate: true },\n);\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n leftDelta.value = round(clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n rightDelta.value = round(clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\n\n inputRange.value = ([leftDelta.value, rightDelta.value] as [number, number]).sort((a, b) => a - b);\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n return [point1, point2].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: [number, number]) {\n emit('update:modelValue', value);\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: [number, number] = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n}\n</script>\n\n<template>\n <!-- {{ leftDelta }} {{ rightDelta }} -->\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n <div v-if=\"props.mode === 'text'\" class=\"ui-slider__value-static text-s\">{{ textModelValue }}</div>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div ref=\"thumbRef1\" :style=\"thumbStyle1\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 0)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div ref=\"thumbRef2\" :style=\"thumbStyle2\" class=\"ui-slider__thumb\" tabindex=\"0\" @keydown=\"handleKeyPress($event, 1)\">\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" @change=\"setModelValue\" />\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n"],"names":["slots","useSlots","emit","__emit","props","__props","data","reactive","barRef","ref","thumbRef1","thumbRef2","inputRange","leftDelta","rightDelta","propsRef","computed","breakpointsRef","useSliderBreakpoints","textModelValue","a","b","range","localValue1","clamp","localValue2","error","v","it","getErrorMessage","position1","position2","leftRight","getLeftAndRight","progressStyle","thumbStyle1","thumbStyle2","watch","value","useMouseCapture","ev","tapIf","_a","unref","rect","dx","round","setModelValue","point1","point2","handleKeyPress","e","index","nextStep","arr","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_1","_hoisted_2","_openBlock","_hoisted_3","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_hoisted_4","_toDisplayString","_hoisted_5","_hoisted_6","_hoisted_7","_Fragment","_renderList","item","_cache","$event","_hoisted_8","InputRange","_hoisted_9"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- import { defineComponent as W, useSlots as X, reactive as Y, ref as w, computed as r, onMounted as Z, createElementBlock as h, openBlock as d, normalizeClass as I, createElementVNode as o, createCommentVNode as R, createBlock as ee, toDisplayString as P, unref as m, withCtx as te, renderSlot as le, normalizeStyle as _, Fragment as ae, renderList as ie } from "vue";
2
- import { useMouseCapture as E } from "../composition/useMouseCapture.js";
3
- import { tapIf as $ } from "../helpers/functions.js";
1
+ import { defineComponent as W, useSlots as X, reactive as Y, ref as w, computed as r, onMounted as Z, createElementBlock as h, openBlock as d, normalizeClass as P, createElementVNode as o, createCommentVNode as R, createBlock as ee, toDisplayString as T, unref as m, withCtx as te, renderSlot as le, normalizeStyle as _, Fragment as ae, renderList as ie } from "vue";
2
+ import { useMouseCapture as $ } from "../composition/useMouseCapture.js";
3
+ import { tapIf as D } from "../helpers/functions.js";
4
4
  import { clamp as c } from "../helpers/math.js";
5
5
  import oe from "./PlTooltip/PlTooltip.vue.js";
6
6
  import { useSliderBreakpoints as re } from "../composition/useSliderBreakpoints.js";
@@ -27,12 +27,12 @@ const ue = { class: "ui-slider__wrapper" }, ne = { class: "ui-slider__label-sect
27
27
  disabled: { type: Boolean, default: !1 }
28
28
  },
29
29
  emits: ["update:modelValue"],
30
- setup(T, { emit: U }) {
31
- const j = X(), H = U, e = T, s = Y({
30
+ setup(k, { emit: U }) {
31
+ const j = X(), H = U, e = k, s = Y({
32
32
  deltaValue1: 0,
33
33
  deltaValue2: 0,
34
34
  deltaValue3: 0
35
- }), b = w(), p = w(), v = w(), f = w(), n = r(() => e.max - e.min), O = r(() => e), q = re(O), g = r(() => c((e.modelValue[0] ?? 0) + s.deltaValue1, e.min, e.max)), V = r(() => c((e.modelValue[1] ?? 0) + s.deltaValue2, e.min, e.max)), y = r(() => c((e.modelValue[2] ?? 0) + s.deltaValue3, e.min, e.max)), D = r(() => {
35
+ }), b = w(), p = w(), v = w(), f = w(), n = r(() => e.max - e.min), O = r(() => e), q = re(O), g = r(() => c((e.modelValue[0] ?? 0) + s.deltaValue1, e.min, e.max)), V = r(() => c((e.modelValue[1] ?? 0) + s.deltaValue2, e.min, e.max)), y = r(() => c((e.modelValue[2] ?? 0) + s.deltaValue3, e.min, e.max)), L = r(() => {
36
36
  const l = e.modelValue;
37
37
  if (!(Array.isArray(l) && l.length === 3 && l.every((a) => Number.isFinite(a))))
38
38
  return "Expected model [number, number, number]";
@@ -40,42 +40,42 @@ const ue = { class: "ui-slider__wrapper" }, ne = { class: "ui-slider__label-sect
40
40
  return [...e.modelValue].forEach((a) => {
41
41
  a > e.max && i.push(`Max model value must be lower than max props ${e.max}.`), a < e.min && i.push("Min model value must be greater than max props.");
42
42
  }), i.length > 0 ? i.join(" ") : se(e.error);
43
- }), L = r(() => (g.value - e.min) / n.value), K = r(() => (V.value - e.min) / n.value), F = r(() => (y.value - e.min) / n.value), z = r(() => J()), G = r(() => ({
44
- right: z.value[0] + "%",
45
- left: 100 - z.value[2] + "%"
46
- })), k = r(() => ({
47
- right: Math.ceil((1 - L.value) * 100) + "%"
43
+ }), K = r(() => (g.value - e.min) / n.value), F = r(() => (V.value - e.min) / n.value), z = r(() => (y.value - e.min) / n.value), I = r(() => J()), G = r(() => ({
44
+ right: I.value[0] + "%",
45
+ left: 100 - I.value[2] + "%"
48
46
  })), M = r(() => ({
49
47
  right: Math.ceil((1 - K.value) * 100) + "%"
50
48
  })), S = r(() => ({
51
49
  right: Math.ceil((1 - F.value) * 100) + "%"
50
+ })), A = r(() => ({
51
+ right: Math.ceil((1 - z.value) * 100) + "%"
52
52
  }));
53
- E(p, (l) => {
53
+ $(p, (l) => {
54
54
  var t;
55
- $((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
55
+ D((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
56
56
  const { dx: a } = l;
57
- s.deltaValue1 = a / i.width * n.value, p.value && A(p.value, e.modelValue[0], s.deltaValue1), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue1 = 0);
57
+ s.deltaValue1 = a / i.width * n.value, p.value && B(p.value, e.modelValue[0], s.deltaValue1), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue1 = 0);
58
58
  });
59
- }), E(v, (l) => {
59
+ }), $(v, (l) => {
60
60
  var t;
61
- $((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
61
+ D((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
62
62
  const { dx: a } = l;
63
- s.deltaValue2 = a / i.width * n.value, v.value && A(v.value, e.modelValue[1], s.deltaValue2), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue2 = 0);
63
+ s.deltaValue2 = a / i.width * n.value, v.value && B(v.value, e.modelValue[1], s.deltaValue2), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue2 = 0);
64
64
  });
65
- }), E(f, (l) => {
65
+ }), $(f, (l) => {
66
66
  var t;
67
- $((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
67
+ D((t = m(b)) == null ? void 0 : t.getBoundingClientRect(), (i) => {
68
68
  const { dx: a } = l;
69
- s.deltaValue3 = a / i.width * n.value, f.value && A(f.value, e.modelValue[2], s.deltaValue3), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue3 = 0);
69
+ s.deltaValue3 = a / i.width * n.value, f.value && B(f.value, e.modelValue[2], s.deltaValue3), l.stop && (x([u(g.value), u(V.value), u(y.value)]), s.deltaValue3 = 0);
70
70
  });
71
71
  });
72
- function A(l, t, i) {
72
+ function B(l, t, i) {
73
73
  const a = u(c((t ?? 0) + i, e.min, e.max));
74
- l.dataset.percent = `${a}${e.measure}`, B();
74
+ l.dataset.percent = `${a}${e.measure}`, C();
75
75
  }
76
76
  function J() {
77
- const l = Math.ceil((1 - L.value) * 100), t = Math.ceil((1 - K.value) * 100), i = Math.ceil((1 - F.value) * 100);
78
- return [l, t, i].sort((a, N) => a - N);
77
+ const l = Math.ceil((1 - K.value) * 100), t = Math.ceil((1 - F.value) * 100), i = Math.ceil((1 - z.value) * 100);
78
+ return [l, t, i].sort((a, E) => a - E);
79
79
  }
80
80
  function u(l) {
81
81
  const t = c(l, e.min, e.max);
@@ -84,31 +84,31 @@ const ue = { class: "ui-slider__wrapper" }, ne = { class: "ui-slider__label-sect
84
84
  function x(l) {
85
85
  H("update:modelValue", l);
86
86
  }
87
- function B() {
88
- const l = Number(k.value.right.substring(0, k.value.right.length - 1)), t = Number(M.value.right.substring(0, M.value.right.length - 1)), i = Number(S.value.right.substring(0, S.value.right.length - 1)), a = [
87
+ function C() {
88
+ const l = Number(M.value.right.substring(0, M.value.right.length - 1)), t = Number(S.value.right.substring(0, S.value.right.length - 1)), i = Number(A.value.right.substring(0, A.value.right.length - 1)), a = [
89
89
  { r: l, th: p },
90
90
  { r: t, th: v },
91
91
  { r: i, th: f }
92
- ].sort((N, Q) => N.r - Q.r);
92
+ ].sort((E, Q) => E.r - Q.r);
93
93
  a[0].th.value && (a[0].th.value.dataset.hint = "high"), a[1].th.value && (a[1].th.value.dataset.hint = "mid"), a[2].th.value && (a[2].th.value.dataset.hint = "low");
94
94
  }
95
- function C(l, t) {
95
+ function N(l, t) {
96
96
  ["ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft", "Enter"].includes(l.code) && l.preventDefault();
97
97
  const i = l.code === "ArrowUp" || l.code === "ArrowRight" ? e.step * 1 : l.code === "ArrowDown" || l.code === "ArrowLeft" ? e.step * -1 : 0, a = [...e.modelValue];
98
- a[t] = c(a[t] + i, e.min, e.max), x(a), B();
98
+ a[t] = c(a[t] + i, e.min, e.max), x(a), C();
99
99
  }
100
100
  return Z(() => {
101
- B();
101
+ C();
102
102
  }), (l, t) => (d(), h("div", {
103
- class: I([e.disabled ? "ui-slider__disabled" : void 0, "ui-slider__envelope ui-slider__triple"])
103
+ class: P([e.disabled ? "ui-slider__disabled" : void 0, "ui-slider__envelope ui-slider__triple"])
104
104
  }, [
105
105
  o("div", {
106
- class: I([`ui-slider__mode-${e.mode}`, "ui-slider"])
106
+ class: P([`ui-slider__mode-${e.mode}`, "ui-slider"])
107
107
  }, [
108
108
  o("div", ue, [
109
109
  o("div", ne, [
110
- l.label ? (d(), h("label", de, [
111
- o("span", null, P(l.label), 1),
110
+ k.label ? (d(), h("label", de, [
111
+ o("span", null, T(k.label), 1),
112
112
  m(j).tooltip ? (d(), ee(m(oe), {
113
113
  key: 0,
114
114
  class: "info",
@@ -143,45 +143,45 @@ const ue = { class: "ui-slider__wrapper" }, ne = { class: "ui-slider__label-sect
143
143
  o("div", {
144
144
  ref_key: "thumbRef1",
145
145
  ref: p,
146
- style: _(k.value),
146
+ style: _(M.value),
147
147
  "data-percent": e.modelValue[0] + "%",
148
148
  class: "ui-slider__thumb ui-slider__triple-thumb",
149
149
  r1: "",
150
150
  tabindex: "0",
151
- onKeydown: t[0] || (t[0] = (i) => C(i, 0))
152
- }, t[3] || (t[3] = [
151
+ onKeydown: t[0] || (t[0] = (i) => N(i, 0))
152
+ }, [...t[3] || (t[3] = [
153
153
  o("div", { class: "ui-slider__thumb-focused-contour" }, null, -1)
154
- ]), 44, ve),
154
+ ])], 44, ve),
155
155
  o("div", {
156
156
  ref_key: "thumbRef2",
157
157
  ref: v,
158
- style: _(M.value),
158
+ style: _(S.value),
159
159
  "data-percent": e.modelValue[1] + "%",
160
160
  class: "ui-slider__thumb ui-slider__triple-thumb",
161
161
  r2: "",
162
162
  tabindex: "0",
163
- onKeydown: t[1] || (t[1] = (i) => C(i, 1))
164
- }, t[4] || (t[4] = [
163
+ onKeydown: t[1] || (t[1] = (i) => N(i, 1))
164
+ }, [...t[4] || (t[4] = [
165
165
  o("div", { class: "ui-slider__thumb-focused-contour" }, null, -1)
166
- ]), 44, fe),
166
+ ])], 44, fe),
167
167
  o("div", {
168
168
  ref_key: "thumbRef3",
169
169
  ref: f,
170
- style: _(S.value),
170
+ style: _(A.value),
171
171
  "data-percent": e.modelValue[2] + "%",
172
172
  class: "ui-slider__thumb ui-slider__triple-thumb",
173
173
  r3: "",
174
174
  tabindex: "0",
175
- onKeydown: t[2] || (t[2] = (i) => C(i, 2))
176
- }, t[5] || (t[5] = [
175
+ onKeydown: t[2] || (t[2] = (i) => N(i, 2))
176
+ }, [...t[5] || (t[5] = [
177
177
  o("div", { class: "ui-slider__thumb-focused-contour" }, null, -1)
178
- ]), 44, he)
178
+ ])], 44, he)
179
179
  ])
180
180
  ])
181
181
  ]),
182
182
  t[6] || (t[6] = o("div", { class: "ui-slider__input-wrapper d-flex" }, null, -1))
183
183
  ], 2),
184
- D.value ? (d(), h("div", _e, P(D.value), 1)) : R("", !0)
184
+ L.value ? (d(), h("div", _e, T(L.value), 1)) : R("", !0)
185
185
  ], 2));
186
186
  }
187
187
  });
@@ -1 +1 @@
1
- {"version":3,"file":"SliderRangeTriple.vue.js","sources":["../../src/components/SliderRangeTriple.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, unref, useSlots } from 'vue';\nimport { useMouseCapture } from '../composition/useMouseCapture';\nimport { tapIf } from '../helpers/functions';\nimport { clamp } from '../helpers/math';\nimport { PlTooltip } from './PlTooltip';\nimport type { SliderMode } from '../types';\nimport { useSliderBreakpoints } from '../composition/useSliderBreakpoints';\nimport { getErrorMessage } from '../helpers/error.ts';\n\ntype ModelType = [number, number, number];\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: ModelType;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '%',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n deltaValue3: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst thumbRef3 = ref<HTMLElement>();\n\nconst range = computed(() => props.max - props.min);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst localValue1 = computed(() => clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\nconst localValue3 = computed(() => clamp((props.modelValue[2] ?? 0) + data.deltaValue3, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 3 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number, number]';\n }\n\n const errors: string[] = [];\n\n [...props.modelValue].forEach((v) => {\n if (v > props.max) {\n errors.push(`Max model value must be lower than max props ${props.max}.`);\n }\n if (v < props.min) {\n errors.push('Min model value must be greater than max props.');\n }\n });\n\n if (errors.length > 0) {\n return errors.join(' ');\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst position3 = computed(() => {\n return (localValue3.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[2] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nconst thumbStyle3 = computed(() => ({\n right: Math.ceil((1 - position3.value) * 100) + '%',\n}));\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n if (thumbRef1.value) {\n updateDatasetForThumb(thumbRef1.value, props.modelValue[0], data.deltaValue1);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n if (thumbRef2.value) {\n updateDatasetForThumb(thumbRef2.value, props.modelValue[1], data.deltaValue2);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef3, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue3 = (dx / rect.width) * range.value;\n\n if (thumbRef3.value) {\n updateDatasetForThumb(thumbRef3.value, props.modelValue[2], data.deltaValue3);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue3 = 0;\n }\n });\n});\n\nfunction updateDatasetForThumb(thumb: HTMLElement, modelVal: number, delta: number) {\n const value = round(clamp((modelVal ?? 0) + delta, props.min, props.max));\n thumb.dataset.percent = `${value}${props.measure}`;\n getHint();\n}\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n const point3 = Math.ceil((1 - position3.value) * 100);\n return [point1, point2, point3].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: ModelType) {\n emit('update:modelValue', value);\n}\n\nfunction getHint() {\n const right1 = Number(thumbStyle1.value.right.substring(0, thumbStyle1.value.right.length - 1));\n const right2 = Number(thumbStyle2.value.right.substring(0, thumbStyle2.value.right.length - 1));\n const right3 = Number(thumbStyle3.value.right.substring(0, thumbStyle3.value.right.length - 1));\n\n const arr = [\n { r: right1, th: thumbRef1 },\n { r: right2, th: thumbRef2 },\n { r: right3, th: thumbRef3 },\n ].sort((a, b) => a.r - b.r);\n\n if (arr[0].th.value) {\n arr[0].th.value.dataset.hint = 'high';\n }\n if (arr[1].th.value) {\n arr[1].th.value.dataset.hint = 'mid';\n }\n\n if (arr[2].th.value) {\n arr[2].th.value.dataset.hint = 'low';\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: ModelType = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n getHint();\n}\n\nonMounted(() => {\n getHint();\n});\n</script>\n\n<template>\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope ui-slider__triple\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div\n ref=\"thumbRef1\"\n :style=\"thumbStyle1\"\n :data-percent=\"props.modelValue[0] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r1\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 0)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef2\"\n :style=\"thumbStyle2\"\n :data-percent=\"props.modelValue[1] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r2\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 1)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef3\"\n :style=\"thumbStyle3\"\n :data-percent=\"props.modelValue[2] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r3\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 2)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <!-- {{ props.modelValue }} -->\n <!-- <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" /> -->\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n\n<style></style>\n"],"names":["slots","useSlots","emit","__emit","props","__props","data","reactive","barRef","ref","thumbRef1","thumbRef2","thumbRef3","range","computed","propsRef","breakpointsRef","useSliderBreakpoints","localValue1","clamp","localValue2","localValue3","error","v","it","errors","getErrorMessage","position1","position2","position3","leftRight","getLeftAndRight","progressStyle","thumbStyle1","thumbStyle2","thumbStyle3","useMouseCapture","ev","tapIf","_a","unref","rect","dx","updateDatasetForThumb","setModelValue","round","thumb","modelVal","delta","value","getHint","point1","point2","point3","b","right1","right2","right3","arr","a","handleKeyPress","e","index","nextStep","onMounted"],"mappings":"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"}
1
+ {"version":3,"file":"SliderRangeTriple.vue.js","sources":["../../src/components/SliderRangeTriple.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onMounted, reactive, ref, unref, useSlots } from 'vue';\nimport { useMouseCapture } from '../composition/useMouseCapture';\nimport { tapIf } from '../helpers/functions';\nimport { clamp } from '../helpers/math';\nimport { PlTooltip } from './PlTooltip';\nimport type { SliderMode } from '../types';\nimport { useSliderBreakpoints } from '../composition/useSliderBreakpoints';\nimport { getErrorMessage } from '../helpers/error.ts';\n\ntype ModelType = [number, number, number];\nconst slots = useSlots();\n\nconst emit = defineEmits(['update:modelValue']);\n\nconst props = withDefaults(\n defineProps<{\n modelValue: ModelType;\n min?: number;\n max: number;\n step?: number;\n label?: string;\n helper?: string;\n error?: unknown;\n mode?: SliderMode;\n measure?: string;\n breakpoints?: boolean;\n disabled?: boolean;\n }>(),\n {\n label: undefined,\n helper: undefined,\n error: undefined,\n min: 0,\n step: 1,\n mode: 'text',\n measure: '%',\n breakpoints: false,\n disabled: false,\n },\n);\n\nconst data = reactive({\n deltaValue1: 0,\n deltaValue2: 0,\n deltaValue3: 0,\n});\n\nconst barRef = ref<HTMLElement>();\nconst thumbRef1 = ref<HTMLElement>();\nconst thumbRef2 = ref<HTMLElement>();\nconst thumbRef3 = ref<HTMLElement>();\n\nconst range = computed(() => props.max - props.min);\n\nconst propsRef = computed(() => props);\n\nconst breakpointsRef = useSliderBreakpoints(propsRef);\n\nconst localValue1 = computed(() => clamp((props.modelValue[0] ?? 0) + data.deltaValue1, props.min, props.max));\nconst localValue2 = computed(() => clamp((props.modelValue[1] ?? 0) + data.deltaValue2, props.min, props.max));\nconst localValue3 = computed(() => clamp((props.modelValue[2] ?? 0) + data.deltaValue3, props.min, props.max));\n\nconst error = computed(() => {\n const v = props.modelValue as unknown;\n\n const isValidModel = Array.isArray(v) && v.length === 3 && v.every((it) => Number.isFinite(it));\n\n if (!isValidModel) {\n return 'Expected model [number, number, number]';\n }\n\n const errors: string[] = [];\n\n [...props.modelValue].forEach((v) => {\n if (v > props.max) {\n errors.push(`Max model value must be lower than max props ${props.max}.`);\n }\n if (v < props.min) {\n errors.push('Min model value must be greater than max props.');\n }\n });\n\n if (errors.length > 0) {\n return errors.join(' ');\n }\n\n return getErrorMessage(props.error);\n});\n\nconst position1 = computed(() => {\n return (localValue1.value - props.min) / range.value;\n});\n\nconst position2 = computed(() => {\n return (localValue2.value - props.min) / range.value;\n});\n\nconst position3 = computed(() => {\n return (localValue3.value - props.min) / range.value;\n});\n\nconst leftRight = computed(() => getLeftAndRight());\n\nconst progressStyle = computed(() => ({\n right: leftRight.value[0] + '%',\n left: 100 - leftRight.value[2] + '%',\n}));\n\nconst thumbStyle1 = computed(() => ({\n right: Math.ceil((1 - position1.value) * 100) + '%',\n}));\n\nconst thumbStyle2 = computed(() => ({\n right: Math.ceil((1 - position2.value) * 100) + '%',\n}));\n\nconst thumbStyle3 = computed(() => ({\n right: Math.ceil((1 - position3.value) * 100) + '%',\n}));\n\nuseMouseCapture(thumbRef1, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue1 = (dx / rect.width) * range.value;\n\n if (thumbRef1.value) {\n updateDatasetForThumb(thumbRef1.value, props.modelValue[0], data.deltaValue1);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue1 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef2, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue2 = (dx / rect.width) * range.value;\n\n if (thumbRef2.value) {\n updateDatasetForThumb(thumbRef2.value, props.modelValue[1], data.deltaValue2);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue2 = 0;\n }\n });\n});\n\nuseMouseCapture(thumbRef3, (ev) => {\n tapIf(unref(barRef)?.getBoundingClientRect(), (rect) => {\n const { dx } = ev;\n data.deltaValue3 = (dx / rect.width) * range.value;\n\n if (thumbRef3.value) {\n updateDatasetForThumb(thumbRef3.value, props.modelValue[2], data.deltaValue3);\n }\n\n if (ev.stop) {\n setModelValue([round(localValue1.value), round(localValue2.value), round(localValue3.value)]);\n data.deltaValue3 = 0;\n }\n });\n});\n\nfunction updateDatasetForThumb(thumb: HTMLElement, modelVal: number, delta: number) {\n const value = round(clamp((modelVal ?? 0) + delta, props.min, props.max));\n thumb.dataset.percent = `${value}${props.measure}`;\n getHint();\n}\n\nfunction getLeftAndRight() {\n const point1 = Math.ceil((1 - position1.value) * 100);\n const point2 = Math.ceil((1 - position2.value) * 100);\n const point3 = Math.ceil((1 - position3.value) * 100);\n return [point1, point2, point3].sort((a, b) => a - b);\n}\n\nfunction round(value: number) {\n const v = clamp(value, props.min, props.max);\n // This is the same as Math.round(v / props.step) * props.step but here we need this magic to avoid numbers like 3.00000000000000000004\n return Math.round((v + Number.EPSILON) * (1 / props.step)) / (1 / props.step);\n}\n\nfunction setModelValue(value: ModelType) {\n emit('update:modelValue', value);\n}\n\nfunction getHint() {\n const right1 = Number(thumbStyle1.value.right.substring(0, thumbStyle1.value.right.length - 1));\n const right2 = Number(thumbStyle2.value.right.substring(0, thumbStyle2.value.right.length - 1));\n const right3 = Number(thumbStyle3.value.right.substring(0, thumbStyle3.value.right.length - 1));\n\n const arr = [\n { r: right1, th: thumbRef1 },\n { r: right2, th: thumbRef2 },\n { r: right3, th: thumbRef3 },\n ].sort((a, b) => a.r - b.r);\n\n if (arr[0].th.value) {\n arr[0].th.value.dataset.hint = 'high';\n }\n if (arr[1].th.value) {\n arr[1].th.value.dataset.hint = 'mid';\n }\n\n if (arr[2].th.value) {\n arr[2].th.value.dataset.hint = 'low';\n }\n}\n\nfunction handleKeyPress(e: { code: string; preventDefault(): void }, index: number) {\n if (['ArrowDown', 'ArrowUp', 'ArrowRight', 'ArrowLeft', 'Enter'].includes(e.code)) {\n e.preventDefault();\n }\n\n const nextStep\n = e.code === 'ArrowUp' || e.code === 'ArrowRight' ? props.step * 1 : e.code === 'ArrowDown' || e.code === 'ArrowLeft' ? props.step * -1 : 0;\n\n const arr: ModelType = [...props.modelValue];\n arr[index] = clamp(arr[index] + nextStep, props.min, props.max);\n setModelValue(arr);\n getHint();\n}\n\nonMounted(() => {\n getHint();\n});\n</script>\n\n<template>\n <div :class=\"props.disabled ? 'ui-slider__disabled' : undefined\" class=\"ui-slider__envelope ui-slider__triple\">\n <div :class=\"`ui-slider__mode-${props.mode}`\" class=\"ui-slider\">\n <div class=\"ui-slider__wrapper\">\n <div class=\"ui-slider__label-section\">\n <label v-if=\"label\" class=\"text-s\">\n <span>{{ label }}</span>\n <PlTooltip v-if=\"slots.tooltip\" class=\"info\" position=\"top\">\n <template #tooltip>\n <slot name=\"tooltip\" />\n </template>\n </PlTooltip>\n </label>\n </div>\n <div class=\"ui-slider__base\">\n <div class=\"ui-slider__container\">\n <div ref=\"barRef\" class=\"ui-slider__bar\">\n <div class=\"ui-slider__progress\" :style=\"progressStyle\" />\n </div>\n </div>\n <div class=\"ui-slider__container ui-slider__container-thumb\">\n <template v-if=\"props.breakpoints\">\n <div v-for=\"(item, index) in breakpointsRef\" :key=\"index\" :style=\"{ right: `${item}%` }\" class=\"ui-slider__thumb-step\"/>\n </template>\n <div\n ref=\"thumbRef1\"\n :style=\"thumbStyle1\"\n :data-percent=\"props.modelValue[0] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r1\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 0)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef2\"\n :style=\"thumbStyle2\"\n :data-percent=\"props.modelValue[1] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r2\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 1)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n <div\n ref=\"thumbRef3\"\n :style=\"thumbStyle3\"\n :data-percent=\"props.modelValue[2] + '%'\"\n class=\"ui-slider__thumb ui-slider__triple-thumb\"\n r3\n tabindex=\"0\"\n @keydown=\"handleKeyPress($event, 2)\"\n >\n <div class=\"ui-slider__thumb-focused-contour\" />\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"ui-slider__input-wrapper d-flex\">\n <!-- {{ props.modelValue }} -->\n <!-- <InputRange v-if=\"props.mode === 'input'\" v-model=\"inputRange\" class=\"ui-focused-border\" /> -->\n </div>\n </div>\n <!-- <div v-if=\"helper\" class=\"ui-slider__helper\">\n {{ helper }}\n </div> -->\n <div v-if=\"error\" class=\"ui-slider__error\">\n {{ error }}\n </div>\n </div>\n</template>\n\n<style></style>\n"],"names":["slots","useSlots","emit","__emit","props","__props","data","reactive","barRef","ref","thumbRef1","thumbRef2","thumbRef3","range","computed","propsRef","breakpointsRef","useSliderBreakpoints","localValue1","clamp","localValue2","localValue3","error","v","it","errors","getErrorMessage","position1","position2","position3","leftRight","getLeftAndRight","progressStyle","thumbStyle1","thumbStyle2","thumbStyle3","useMouseCapture","ev","tapIf","_a","unref","rect","dx","updateDatasetForThumb","setModelValue","round","thumb","modelVal","delta","value","getHint","point1","point2","point3","b","right1","right2","right3","arr","a","handleKeyPress","e","index","nextStep","onMounted","_createElementBlock","_createElementVNode","_normalizeClass","_hoisted_1","_hoisted_2","_openBlock","_hoisted_3","_unref","_createBlock","PlTooltip","_renderSlot","_ctx","_hoisted_4","_hoisted_5","_hoisted_6","_Fragment","_renderList","item","_cache","$event","_hoisted_10","_toDisplayString"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TabItem.vue.js","sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { ListOptionNormalized } from '../types';\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push('dropdown-tab-item__selected');\n }\n if (props.isHovered) {\n classList.push('hovered-item');\n }\n return classList.join(' ');\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"dropdown-tab-item\">\n <div class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"names":["props","__props","label","computed","classes","classList"],"mappings":";;;;;;;;;AAIA,UAAMA,IAAQC,GAYRC,IAAQC,EAAS,MAAMH,EAAM,OAAO,KAAK,GAEzCI,IAAUD,EAAiB,MAAM;AACrC,YAAME,IAAsB,CAAA;AAC5B,aAAIL,EAAM,cACRK,EAAU,KAAK,6BAA6B,GAE1CL,EAAM,aACRK,EAAU,KAAK,cAAc,GAExBA,EAAU,KAAK,GAAG;AAAA,IAC3B,CAAC;;;;;;;;"}
1
+ {"version":3,"file":"TabItem.vue.js","sources":["../../src/components/TabItem.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport type { ListOptionNormalized } from '../types';\n\nconst props = withDefaults(\n defineProps<{\n option: ListOptionNormalized;\n isSelected: boolean;\n isHovered: boolean;\n }>(),\n {\n isSelected: false,\n isHovered: false,\n },\n);\n\nconst label = computed(() => props.option.label);\n\nconst classes = computed<string>(() => {\n const classList: string[] = [];\n if (props.isSelected) {\n classList.push('dropdown-tab-item__selected');\n }\n if (props.isHovered) {\n classList.push('hovered-item');\n }\n return classList.join(' ');\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"dropdown-tab-item\">\n <div class=\"dropdown-tab-item__title text-caps13\">\n {{ label }}\n </div>\n </div>\n</template>\n"],"names":["props","__props","label","computed","classes","classList","_createElementBlock","_normalizeClass","_createElementVNode","_hoisted_1","_toDisplayString"],"mappings":";;;;;;;;;AAIA,UAAMA,IAAQC,GAYRC,IAAQC,EAAS,MAAMH,EAAM,OAAO,KAAK,GAEzCI,IAAUD,EAAiB,MAAM;AACrC,YAAME,IAAsB,CAAA;AAC5B,aAAIL,EAAM,cACRK,EAAU,KAAK,6BAA6B,GAE1CL,EAAM,aACRK,EAAU,KAAK,cAAc,GAExBA,EAAU,KAAK,GAAG;AAAA,IAC3B,CAAC;2BAGCC,EAIM,OAAA;AAAA,MAJA,OAAKC,EAAA,CAAEH,EAAA,OAAe,mBAAmB,CAAA;AAAA,IAAA;MAC7CI,EAEM,OAFNC,GAEMC,EADDR,EAAA,KAAK,GAAA,CAAA;AAAA,IAAA;;;"}
@@ -8,9 +8,9 @@ const h = /* @__PURE__ */ m({
8
8
  class: i(["ui-theme-switcher", t(o)]),
9
9
  onClick: e[0] || (e[0] = //@ts-ignore
10
10
  (...r) => t(n) && t(n)(...r))
11
- }, e[1] || (e[1] = [
11
+ }, [...e[1] || (e[1] = [
12
12
  u("div", null, null, -1)
13
- ]), 2));
13
+ ])], 2));
14
14
  }
15
15
  });
16
16
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"ThemeSwitcher.vue.js","sources":["../../src/components/ThemeSwitcher.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useTheme } from '../composition/useTheme';\nconst [theme, toggleTheme] = useTheme();\n</script>\n\n<template>\n <div class=\"ui-theme-switcher\" :class=\"theme\" @click=\"toggleTheme\">\n <div />\n </div>\n</template>\n"],"names":["theme","toggleTheme","useTheme"],"mappings":";;;;;AAEA,UAAM,CAACA,GAAOC,CAAW,IAAIC,EAAA;;;;;;;;;;"}
1
+ {"version":3,"file":"ThemeSwitcher.vue.js","sources":["../../src/components/ThemeSwitcher.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useTheme } from '../composition/useTheme';\nconst [theme, toggleTheme] = useTheme();\n</script>\n\n<template>\n <div class=\"ui-theme-switcher\" :class=\"theme\" @click=\"toggleTheme\">\n <div />\n </div>\n</template>\n"],"names":["theme","toggleTheme","useTheme","_createElementBlock","_normalizeClass","_unref","_cache","args","_createElementVNode"],"mappings":";;;;;AAEA,UAAM,CAACA,GAAOC,CAAW,IAAIC,EAAA;2BAI3BC,EAEM,OAAA;AAAA,MAFD,OAAKC,EAAA,CAAC,qBAA4BC,EAAAL,CAAA,CAAK,CAAA;AAAA,MAAG,SAAKM,EAAA,CAAA,MAAAA,EAAA,CAAA;AAAA,gBAAED,EAAAJ,CAAA,KAAAI,EAAAJ,CAAA,EAAA,GAAAM,CAAA;AAAA,IAAA;MACpDC,EAAO,OAAA,MAAA,MAAA,EAAA;AAAA,IAAA;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransitionSlidePanel.vue.js","sources":["../../src/components/TransitionSlidePanel.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nfunction onAfterEnter() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n\nfunction onAfterLeave() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n</script>\n\n<template>\n <Transition name=\"slide-panel\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <slot />\n </Transition>\n</template>\n"],"names":["onAfterEnter","onAfterLeave"],"mappings":";;;;AACA,aAASA,IAAe;AACtB,aAAO,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,IAChD;AAEA,aAASC,IAAe;AACtB,aAAO,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,IAChD;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"TransitionSlidePanel.vue.js","sources":["../../src/components/TransitionSlidePanel.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nfunction onAfterEnter() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n\nfunction onAfterLeave() {\n window.dispatchEvent(new CustomEvent('adjust'));\n}\n</script>\n\n<template>\n <Transition name=\"slide-panel\" @after-enter=\"onAfterEnter\" @after-leave=\"onAfterLeave\">\n <slot />\n </Transition>\n</template>\n"],"names":["onAfterEnter","onAfterLeave","_createBlock","_Transition","_renderSlot","_ctx"],"mappings":";;;;AACA,aAASA,IAAe;AACtB,aAAO,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,IAChD;AAEA,aAASC,IAAe;AACtB,aAAO,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,IAChD;2BAIEC,EAEaC,GAAA;AAAA,MAFD,MAAK;AAAA,MAAe,cAAAH;AAAA,MAA4B,cAAAC;AAAA,IAAA;iBAC1D,MAAQ;AAAA,QAARG,EAAQC,EAAA,QAAA,SAAA;AAAA,MAAA;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"VScroll.vue.js","sources":["../../src/components/VScroll.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, unref } from 'vue';\nimport { useEventListener } from '../composition/useEventListener';\nimport { eventListener } from '../helpers/dom';\n\nconst emit = defineEmits(['update:scrollTop']);\n\nconst props = defineProps<{\n scrollTop: number;\n clientHeight: number;\n scrollHeight: number;\n}>();\n\nconst scrollRef = ref<EventTarget>();\n\nconst ratioRef = computed(() => props.clientHeight / (props.scrollHeight || 1));\n\nconst visibleRef = computed(() => {\n return ratioRef.value < 1;\n});\n\nconst scrollbarStyle = computed(() => {\n const ratio = unref(ratioRef);\n return {\n top: props.scrollTop * ratio + 'px',\n height: Math.floor(props.clientHeight * ratio) + 'px',\n };\n});\n\nuseEventListener(scrollRef, 'pointerdown', (down: PointerEvent) => {\n const s = {\n clientY: down.clientY,\n };\n\n const update = (e: MouseEvent) => {\n const dy = (e.clientY - s.clientY) / ratioRef.value;\n emit('update:scrollTop', props.scrollTop + dy);\n s.clientY = e.clientY;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const removePointerMove = eventListener(document as any, 'mousemove', update);\n\n ['mouseup', 'pointercancel'].forEach((eventType) => {\n document.addEventListener(eventType, removePointerMove, { once: true });\n });\n});\n</script>\n\n<template>\n <div v-if=\"visibleRef\" ref=\"scrollRef\" class=\"v-scroll\">\n <div class=\"v-scroll__scrollbar\" :style=\"scrollbarStyle\" />\n </div>\n</template>\n"],"names":["emit","__emit","props","__props","scrollRef","ref","ratioRef","computed","visibleRef","scrollbarStyle","ratio","unref","useEventListener","down","s","removePointerMove","eventListener","e","dy","eventType"],"mappings":";;;;;;;;;;;;AAKA,UAAMA,IAAOC,GAEPC,IAAQC,GAMRC,IAAYC,EAAA,GAEZC,IAAWC,EAAS,MAAML,EAAM,gBAAgBA,EAAM,gBAAgB,EAAE,GAExEM,IAAaD,EAAS,MACnBD,EAAS,QAAQ,CACzB,GAEKG,IAAiBF,EAAS,MAAM;AACpC,YAAMG,IAAQC,EAAML,CAAQ;AAC5B,aAAO;AAAA,QACL,KAAKJ,EAAM,YAAYQ,IAAQ;AAAA,QAC/B,QAAQ,KAAK,MAAMR,EAAM,eAAeQ,CAAK,IAAI;AAAA,MAAA;AAAA,IAErD,CAAC;AAED,WAAAE,EAAiBR,GAAW,eAAe,CAACS,MAAuB;AACjE,YAAMC,IAAI;AAAA,QACR,SAASD,EAAK;AAAA,MAAA,GAUVE,IAAoBC,EAAc,UAAiB,aAP1C,CAACC,MAAkB;AAChC,cAAMC,KAAMD,EAAE,UAAUH,EAAE,WAAWR,EAAS;AAC9C,QAAAN,EAAK,oBAAoBE,EAAM,YAAYgB,CAAE,GAC7CJ,EAAE,UAAUG,EAAE;AAAA,MAChB,CAG4E;AAE5E,OAAC,WAAW,eAAe,EAAE,QAAQ,CAACE,MAAc;AAClD,iBAAS,iBAAiBA,GAAWJ,GAAmB,EAAE,MAAM,IAAM;AAAA,MACxE,CAAC;AAAA,IACH,CAAC;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"VScroll.vue.js","sources":["../../src/components/VScroll.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, unref } from 'vue';\nimport { useEventListener } from '../composition/useEventListener';\nimport { eventListener } from '../helpers/dom';\n\nconst emit = defineEmits(['update:scrollTop']);\n\nconst props = defineProps<{\n scrollTop: number;\n clientHeight: number;\n scrollHeight: number;\n}>();\n\nconst scrollRef = ref<EventTarget>();\n\nconst ratioRef = computed(() => props.clientHeight / (props.scrollHeight || 1));\n\nconst visibleRef = computed(() => {\n return ratioRef.value < 1;\n});\n\nconst scrollbarStyle = computed(() => {\n const ratio = unref(ratioRef);\n return {\n top: props.scrollTop * ratio + 'px',\n height: Math.floor(props.clientHeight * ratio) + 'px',\n };\n});\n\nuseEventListener(scrollRef, 'pointerdown', (down: PointerEvent) => {\n const s = {\n clientY: down.clientY,\n };\n\n const update = (e: MouseEvent) => {\n const dy = (e.clientY - s.clientY) / ratioRef.value;\n emit('update:scrollTop', props.scrollTop + dy);\n s.clientY = e.clientY;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const removePointerMove = eventListener(document as any, 'mousemove', update);\n\n ['mouseup', 'pointercancel'].forEach((eventType) => {\n document.addEventListener(eventType, removePointerMove, { once: true });\n });\n});\n</script>\n\n<template>\n <div v-if=\"visibleRef\" ref=\"scrollRef\" class=\"v-scroll\">\n <div class=\"v-scroll__scrollbar\" :style=\"scrollbarStyle\" />\n </div>\n</template>\n"],"names":["emit","__emit","props","__props","scrollRef","ref","ratioRef","computed","visibleRef","scrollbarStyle","ratio","unref","useEventListener","down","s","removePointerMove","eventListener","e","dy","eventType","_createElementBlock","_createElementVNode"],"mappings":";;;;;;;;;;;;AAKA,UAAMA,IAAOC,GAEPC,IAAQC,GAMRC,IAAYC,EAAA,GAEZC,IAAWC,EAAS,MAAML,EAAM,gBAAgBA,EAAM,gBAAgB,EAAE,GAExEM,IAAaD,EAAS,MACnBD,EAAS,QAAQ,CACzB,GAEKG,IAAiBF,EAAS,MAAM;AACpC,YAAMG,IAAQC,EAAML,CAAQ;AAC5B,aAAO;AAAA,QACL,KAAKJ,EAAM,YAAYQ,IAAQ;AAAA,QAC/B,QAAQ,KAAK,MAAMR,EAAM,eAAeQ,CAAK,IAAI;AAAA,MAAA;AAAA,IAErD,CAAC;AAED,WAAAE,EAAiBR,GAAW,eAAe,CAACS,MAAuB;AACjE,YAAMC,IAAI;AAAA,QACR,SAASD,EAAK;AAAA,MAAA,GAUVE,IAAoBC,EAAc,UAAiB,aAP1C,CAACC,MAAkB;AAChC,cAAMC,KAAMD,EAAE,UAAUH,EAAE,WAAWR,EAAS;AAC9C,QAAAN,EAAK,oBAAoBE,EAAM,YAAYgB,CAAE,GAC7CJ,EAAE,UAAUG,EAAE;AAAA,MAChB,CAG4E;AAE5E,OAAC,WAAW,eAAe,EAAE,QAAQ,CAACE,MAAc;AAClD,iBAAS,iBAAiBA,GAAWJ,GAAmB,EAAE,MAAM,IAAM;AAAA,MACxE,CAAC;AAAA,IACH,CAAC,aAIYP,EAAA,cAAXY,EAEM,OAAA;AAAA;eAFqB;AAAA,MAAJ,KAAIhB;AAAA,MAAY,OAAM;AAAA,IAAA;MAC3CiB,EAA2D,OAAA;AAAA,QAAtD,OAAM;AAAA,QAAuB,SAAOZ,EAAA,KAAc;AAAA,MAAA;;;;"}
@@ -1,25 +1,25 @@
1
- import { defineComponent as l, createElementBlock as t, openBlock as n, Fragment as p, renderList as m, withModifiers as a, createElementVNode as _, toDisplayString as u } from "vue";
2
- const d = { class: "context-menu" }, k = ["onClick"], x = /* @__PURE__ */ l({
1
+ import { defineComponent as m, createElementBlock as e, openBlock as t, Fragment as p, renderList as a, withModifiers as u, createElementVNode as _, toDisplayString as d } from "vue";
2
+ const k = { class: "context-menu" }, f = ["onClick"], v = /* @__PURE__ */ m({
3
3
  __name: "Menu",
4
4
  props: {
5
5
  options: {}
6
6
  },
7
7
  emits: ["close"],
8
- setup(f, { emit: s }) {
9
- const i = s, c = (e) => {
10
- e.cb(), i("close");
8
+ setup(s, { emit: i }) {
9
+ const c = i, r = (n) => {
10
+ n.cb(), c("close");
11
11
  };
12
- return (e, h) => (n(), t("div", d, [
13
- (n(!0), t(p, null, m(e.options, (o, r) => (n(), t("div", {
14
- key: r,
15
- onClick: a((C) => c(o), ["stop"])
12
+ return (n, h) => (t(), e("div", k, [
13
+ (t(!0), e(p, null, a(s.options, (o, l) => (t(), e("div", {
14
+ key: l,
15
+ onClick: u((x) => r(o), ["stop"])
16
16
  }, [
17
- _("span", null, u(o.text), 1)
18
- ], 8, k))), 128))
17
+ _("span", null, d(o.text), 1)
18
+ ], 8, f))), 128))
19
19
  ]));
20
20
  }
21
21
  });
22
22
  export {
23
- x as default
23
+ v as default
24
24
  };
25
25
  //# sourceMappingURL=Menu.vue2.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.vue2.js","sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from './types';\n\nconst emit = defineEmits(['close']);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit('close');\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <div v-for=\"(opt, i) in options\" :key=\"i\" @click.stop=\"onClickOption(opt)\">\n <span>{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: '';\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"names":["emit","__emit","onClickOption","opt"],"mappings":";;;;;;;;AAGA,UAAMA,IAAOC,GAMPC,IAAgB,CAACC,MAAuB;AAC5C,MAAAA,EAAI,GAAA,GACJH,EAAK,OAAO;AAAA,IACd;;;;;;;;;;;"}
1
+ {"version":3,"file":"Menu.vue2.js","sources":["../../../src/components/contextMenu/Menu.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { ContextOption } from './types';\n\nconst emit = defineEmits(['close']);\n\ndefineProps<{\n options: readonly ContextOption[];\n}>();\n\nconst onClickOption = (opt: ContextOption) => {\n opt.cb();\n emit('close');\n};\n</script>\n\n<template>\n <div class=\"context-menu\">\n <div v-for=\"(opt, i) in options\" :key=\"i\" @click.stop=\"onClickOption(opt)\">\n <span>{{ opt.text }}</span>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.context-menu {\n display: block;\n position: absolute;\n top: 50px;\n left: 50px;\n z-index: var(--z-context-menu);\n\n margin: 0;\n padding: 3px 0 4px;\n\n background: rgba(255, 255, 255, 0.95);\n box-shadow: 0px 8px 15px rgba(0, 0, 0, 0.35);\n border-radius: 4px;\n\n font-family:\n Lucida Grande,\n sans-serif;\n font-size: 14px;\n line-height: 15px;\n\n &::before {\n display: block;\n position: absolute;\n content: '';\n top: -1px;\n left: -1px;\n bottom: -1px;\n right: -1px;\n\n border-radius: 4px;\n border: 1px solid rgba(0, 0, 0, 0.125);\n z-index: -1;\n }\n\n hr {\n border: none;\n height: 1px;\n background: rgba(0, 0, 0, 0.1);\n margin: 6px 1px 5px;\n padding: 0;\n }\n\n > div {\n display: block;\n padding: 0 20px;\n border-top: 1px solid rgba(0, 0, 0, 0);\n border-bottom: 1px solid rgba(0, 0, 0, 0);\n\n span {\n vertical-align: 2px;\n user-select: none;\n }\n\n &:hover {\n background: -webkit-linear-gradient(top, #648bf5, #2866f2);\n background: linear-gradient(to bottom, #648bf5 0%, #2866f2 100%);\n border-top: 1px solid #5a82eb;\n border-bottom: 1px solid #1758e7;\n }\n\n &:hover::after {\n color: #fff;\n }\n }\n}\n</style>\n"],"names":["emit","__emit","onClickOption","opt","_openBlock","_createElementBlock","_hoisted_1","_Fragment","_renderList","__props","i","_withModifiers","$event","_createElementVNode","_toDisplayString"],"mappings":";;;;;;;;AAGA,UAAMA,IAAOC,GAMPC,IAAgB,CAACC,MAAuB;AAC5C,MAAAA,EAAI,GAAA,GACJH,EAAK,OAAO;AAAA,IACd;sBAIEI,EAAA,GAAAC,EAIM,OAJNC,GAIM;AAAA,OAHJF,EAAA,EAAA,GAAAC,EAEME,GAAA,MAAAC,EAFkBC,EAAA,SAAO,CAAlBN,GAAKO,YAAlBL,EAEM,OAAA;AAAA,QAF4B,KAAKK;AAAA,QAAI,SAAKC,EAAA,CAAAC,MAAOV,EAAcC,CAAG,GAAA,CAAA,MAAA,CAAA;AAAA,MAAA;QACtEU,EAA2B,QAAA,MAAAC,EAAlBX,EAAI,IAAI,GAAA,CAAA;AAAA,MAAA;;;;"}