11<script setup>
22defineOptions ({ inheritAttrs: false })
3- import { reactive , ref , computed , watch , useTemplateRef , useId } from ' vue'
3+ import { reactive , computed , watch , useTemplateRef , useId } from ' vue'
44import { GPlot } from ' #base/js/plot'
55import { unique , oob_squish_any , oob_squish_infinite , dropNull , emitEvent } from ' #base/js/utils'
66import { reactiveComputed , useElementSize } from ' @vueuse/core'
@@ -193,19 +193,19 @@ function pos2coord({
193193function _coord2pos(
194194 { value, min, max } = {},
195195 { oob = oob_squish_infinite } = {},
196- scale, rev, length, range
196+ scale, rev, length, boundary
197197) {
198198 let result = {}
199199 if (value != null) {
200- result.value = oob(length * (rev ? 1 - scale(value) : scale(value)), range )
200+ result.value = oob(length * (rev ? 1 - scale(value) : scale(value)), boundary )
201201 }
202202 if (min == null && max == null) return result
203203 if (rev) {
204- if (max != null) result.min = oob(length * (1 - scale(max)), range )
205- if (min != null) result.max = oob(length * (1 - scale(min)), range )
204+ if (max != null) result.min = oob(length * (1 - scale(max)), boundary )
205+ if (min != null) result.max = oob(length * (1 - scale(min)), boundary )
206206 } else {
207- if (min != null) result.min = oob(length * scale(min), range )
208- if (max != null) result.max = oob(length * scale(max), range )
207+ if (min != null) result.min = oob(length * scale(min), boundary )
208+ if (max != null) result.max = oob(length * scale(max), boundary )
209209 }
210210 return result
211211}
@@ -218,8 +218,8 @@ function coord2pos({
218218 let { width, height, l, r, t, b } = innerRect
219219 let result = {}
220220 let scales = vplot.value.coordScales
221- let rangeH = { min: -l, max: width + r },
222- rangeV = { min: -t, max: height + b }
221+ let boundaryH = { min: -l, max: width + r },
222+ boundaryV = { min: -t, max: height + b }
223223 if (x != null || xmin != null || xmax != null) {
224224 if (flip) {
225225 [v, vmin, vmax] = [x, xmin, xmax]
@@ -240,7 +240,7 @@ function coord2pos({
240240 { oob },
241241 scales[flip ? 'y' : 'x'],
242242 reverse[flip ? 'y' : 'x'],
243- width, rangeH
243+ width, boundaryH
244244 )
245245 Object.assign(result, dropNull({ h: value, hmin: min, hmax: max }))
246246 }
@@ -250,15 +250,15 @@ function coord2pos({
250250 { oob },
251251 scales[flip ? 'x' : 'y'],
252252 !reverse[flip ? 'x' : 'y'],
253- height, rangeV
253+ height, boundaryV
254254 )
255255 Object.assign(result, dropNull({ v: value, vmin: min, vmax: max }))
256256 }
257257 if (limited) {
258- if (result.hmin == null) result.hmin = rangeH .min
259- if (result.hmax == null) result.hmax = rangeH .max
260- if (result.vmin == null) result.vmin = rangeV .min
261- if (result.vmax == null) result.vmax = rangeV .max
258+ if (result.hmin == null) result.hmin = boundaryH .min
259+ if (result.hmax == null) result.hmax = boundaryH .max
260+ if (result.vmin == null) result.vmin = boundaryV .min
261+ if (result.vmax == null) result.vmax = boundaryV .max
262262 }
263263 return result
264264}
@@ -411,19 +411,19 @@ function svgPointerdown(e) {
411411 svg.style.userSelect = 'none'
412412 moveTimer = clearTimeout(moveTimer)
413413 let boundary = coord2pos(act, { unlimited: true })
414- let rangeH = {
414+ let boundaryH = {
415415 min: boundary.hmax == null ? -Infinity : innerRect.width - boundary.hmax,
416416 max: boundary.hmin == null ? Infinity : - boundary.hmin,
417417 },
418- rangeV = {
418+ boundaryV = {
419419 min: boundary.vmax == null ? -Infinity : innerRect.height - boundary.vmax,
420420 max: boundary.vmin == null ? Infinity : - boundary.vmin,
421421 }
422422 e.target.onpointermove = (ev) => {
423423 let { x = false, y = false } = act
424424 let [h, v] = flip ? [y, x] : [x, y]
425- if (h) translateH.value = oob_squish_any(translateH.value + ev.movementX, rangeH )
426- if (v) translateV.value = oob_squish_any(translateV.value + ev.movementY, rangeV )
425+ if (h) translateH.value = oob_squish_any(translateH.value + ev.movementX, boundaryH )
426+ if (v) translateV.value = oob_squish_any(translateV.value + ev.movementY, boundaryV )
427427 }
428428 e.target.onpointerup = (ev) => {
429429 ev.currentTarget.onpointerup = null
@@ -546,19 +546,19 @@ function wheel(act, pos, delta) {
546546 let boundary = coord2pos(act, { unlimited: true })
547547 if (h) {
548548 let movement = sensitivity * innerRect.width * (-delta / 120)
549- let range = {
549+ let boundaryH = {
550550 min: boundary.hmax == null ? -Infinity : innerRect.width - boundary.hmax,
551551 max: boundary.hmin == null ? Infinity : - boundary.hmin,
552552 }
553- translateH.value = oob_squish_any(movement, range )
553+ translateH.value = oob_squish_any(movement, boundaryH )
554554 }
555555 if (v) {
556556 let movement = sensitivity * innerRect.height * (-delta / 120)
557- let range = {
557+ let boundaryV = {
558558 min: boundary.vmax == null ? -Infinity : innerRect.height - boundary.vmax,
559559 max: boundary.vmin == null ? Infinity : - boundary.vmin,
560560 }
561- translateV.value = oob_squish_any(movement, range )
561+ translateV.value = oob_squish_any(movement, boundaryV )
562562 }
563563 }
564564}
@@ -579,10 +579,10 @@ const svgVOn = {
579579function changerange(coord) {
580580 let { xmin, xmax, ymin, ymax } = coord
581581 let { xmin: $xmin, xmax: $xmax, ymin: $ymin, ymax: $ymax } = range
582- xmin = xmin != null ? xmin + expandAdd.x.min : $xmin
583- xmax = xmax != null ? xmax - expandAdd.x.max : $xmax
584- ymin = ymin != null ? ymin + expandAdd.y.min : $ymin
585- ymax = ymax != null ? ymax - expandAdd.y.max : $ymax
582+ xmin = xmin != null ? typeof xmin == "number" ? xmin + expandAdd.x.min : new xmin.constructor(+xmin + expandAdd.x.min) : $xmin
583+ xmax = xmax != null ? typeof xmin == "number" ? xmax - expandAdd.x.max : new xmax.constructor(+xmax - expandAdd.x.max) : $xmax
584+ ymin = ymin != null ? typeof xmin == "number" ? ymin + expandAdd.y.min : new ymin.constructor(+ymin + expandAdd.y.min) : $ymin
585+ ymax = ymax != null ? typeof xmin == "number" ? ymax - expandAdd.y.max : new ymax.constructor(+ymax - expandAdd.y.max) : $ymax
586586 if (xmin == $xmin && xmax == $xmax && ymin == $ymin && ymax == $ymax) return
587587 if (xmin != $xmin) emit('update:xmin', xmin)
588588 if (xmax != $xmax) emit('update:xmax', xmax)
0 commit comments