@thewhitehaven04/chartjs-plugin-zoom 2.2.8 → 2.2.10
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/dist/@thewhitehaven04/chartjs-plugin-zoom.esm.js +1172 -0
- package/dist/@thewhitehaven04/chartjs-plugin-zoom.esm.js.map +1 -0
- package/dist/@thewhitehaven04/chartjs-plugin-zoom.js +3 -3
- package/dist/@thewhitehaven04/chartjs-plugin-zoom.js.map +1 -0
- package/dist/@thewhitehaven04/chartjs-plugin-zoom.min.js +8 -0
- package/dist/@thewhitehaven04/chartjs-plugin-zoom.min.js.map +1 -0
- package/dist/src/core.d.ts +24 -0
- package/dist/src/defaults.d.ts +3 -0
- package/dist/src/hammer.d.ts +6 -0
- package/dist/src/handlers.d.ts +24 -0
- package/dist/src/index.d.ts +31 -0
- package/dist/src/index.umd.d.ts +3 -0
- package/dist/src/options.d.ts +196 -0
- package/dist/src/plugin.d.ts +25 -0
- package/dist/src/scale.types.d.ts +12 -0
- package/dist/src/scale.types.test.d.ts +2 -0
- package/dist/src/state.d.ts +53 -0
- package/dist/src/types.d.ts +11 -0
- package/dist/src/utils.d.ts +14 -0
- package/dist/src/utils.test.d.ts +2 -0
- package/package.json +9 -9
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartjs-plugin-zoom.esm.js","sources":["../../src/utils.ts","../../src/state.ts","../../src/scale.types.ts","../../src/core.ts","../../src/handlers.ts","../../src/hammer.ts","../../src/defaults.ts","../../src/plugin.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
|
-
* @thewhitehaven04/chartjs-plugin-zoom v2.2.
|
|
3
|
-
* https://www.chartjs.org/chartjs-plugin-zoom/2.2.
|
|
2
|
+
* @thewhitehaven04/chartjs-plugin-zoom v2.2.10
|
|
3
|
+
* https://www.chartjs.org/chartjs-plugin-zoom/2.2.10/
|
|
4
4
|
* (c) 2016-2026 chartjs-plugin-zoom Contributors
|
|
5
5
|
* Released under the MIT License
|
|
6
6
|
*/
|
|
@@ -1046,7 +1046,7 @@ function hammerOptionsChanged(oldOptions, newOptions) {
|
|
|
1046
1046
|
return false;
|
|
1047
1047
|
}
|
|
1048
1048
|
|
|
1049
|
-
var version = "2.2.
|
|
1049
|
+
var version = "2.2.10";
|
|
1050
1050
|
|
|
1051
1051
|
const defaults = {
|
|
1052
1052
|
pan: {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chartjs-plugin-zoom.js","sources":["../../src/utils.ts","../../src/state.ts","../../src/scale.types.ts","../../src/core.ts","../../src/handlers.ts","../../src/hammer.ts","../../src/defaults.ts","../../src/plugin.ts","../../src/index.umd.ts"],"sourcesContent":["import type { Chart, Point, Scale } from 'chart.js'\nimport type { DragOptions, ModeOption, ModifierKey, PanOptions } from './options'\n\nconst eventKey = (key: ModifierKey): 'altKey' | 'ctrlKey' | 'metaKey' | 'shiftKey' => `${key}Key`\n\nexport const getModifierKey = (opts?: DragOptions | PanOptions): ModifierKey | undefined =>\n opts?.enabled && opts.modifierKey ? opts.modifierKey : undefined\nexport const keyPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && event[eventKey(key)]\nexport const keyNotPressed = (key: ModifierKey | undefined, event: TouchEvent | MouseEvent | PointerEvent) =>\n key && !event[eventKey(key)]\n\nexport function directionEnabled(mode: ModeOption | undefined, dir: 'x' | 'y', chart: Chart): boolean {\n if (mode === undefined) {\n return true\n } else if (typeof mode === 'string') {\n return mode.indexOf(dir) !== -1\n } else if (typeof mode === 'function') {\n return mode({ chart }).indexOf(dir) !== -1\n }\n\n return false\n}\n\nfunction directionsEnabled(mode: ModeOption | undefined, chart: Chart) {\n if (typeof mode === 'function') {\n mode = mode({ chart })\n }\n if (typeof mode === 'string') {\n return { x: mode.indexOf('x') !== -1, y: mode.indexOf('y') !== -1 }\n }\n\n return { x: false, y: false }\n}\n\nexport function debounce(fn: () => void, delay: number | undefined) {\n let timeout: number | NodeJS.Timeout\n return function () {\n clearTimeout(timeout)\n timeout = setTimeout(fn, delay)\n return delay\n }\n}\n\nfunction getScaleUnderPoint({ x, y }: Point, chart: Chart): Scale | null {\n const scales = chart.scales\n const scaleIds = Object.keys(scales)\n for (let i = 0; i < scaleIds.length; i++) {\n const scale = scales[scaleIds[i]]\n if (y >= scale.top && y <= scale.bottom && x >= scale.left && x <= scale.right) {\n return scale\n }\n }\n return null\n}\n\ntype EnabledDirections = { x: boolean; y: boolean }\n\nconst convertOverScaleMode = (\n chart: Chart,\n overScaleMode: ModeOption | undefined,\n scaleEnabled: EnabledDirections,\n enabled: EnabledDirections\n) => {\n if (!overScaleMode) {\n return\n }\n\n const overScaleEnabled = directionsEnabled(overScaleMode, chart)\n for (const axis of ['x', 'y'] as const) {\n if (overScaleEnabled[axis]) {\n scaleEnabled[axis] = enabled[axis]\n enabled[axis] = false\n }\n }\n}\n\nconst getEnabledScales = (chart: Chart, enabled: EnabledDirections): Scale[] => {\n const enabledScales: Scale[] = []\n\n for (const scaleItem of Object.values(chart.scales)) {\n if (enabled[scaleItem.axis as 'x' | 'y']) {\n enabledScales.push(scaleItem)\n }\n }\n\n return enabledScales || Object.values(chart.scales)\n}\n\n/**\n * Evaluate the chart's mode, scaleMode, and overScaleMode properties to\n * determine which axes are eligible for scaling.\n * options.overScaleMode can be a function if user want zoom only one scale of many for example.\n */\nexport function getEnabledScalesByPoint(options: PanOptions | undefined, point: Point, chart: Chart): Scale[] {\n const { mode = 'xy', scaleMode, overScaleMode } = options || {}\n const scale = getScaleUnderPoint(point, chart)\n\n const enabled = directionsEnabled(mode, chart)\n const scaleEnabled = directionsEnabled(scaleMode, chart)\n\n // Convert deprecated overScaleEnabled to new scaleEnabled.\n convertOverScaleMode(chart, overScaleMode, scaleEnabled, enabled)\n\n if (scale && scaleEnabled[scale.axis as 'x' | 'y']) {\n return [scale]\n }\n\n return getEnabledScales(chart, enabled)\n}\n","import { Chart, type Point } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nexport type ScaleRange = { min: number; max: number }\nexport type OriginalLimits = { min: { scale?: number; options?: unknown }; max: { scale?: number; options?: unknown } }\nexport type OriginalScaleLimits = Record<string, OriginalLimits>\nexport type UpdatedScaleLimits = Record<string, ScaleRange>\n\nexport type HandlerFunctions = {\n click: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n keydown: (chart: Chart, event: KeyboardEvent) => void\n mousedown: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mousemove: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n mouseup: (chart: Chart, event: MouseEvent, options: ZoomPluginOptions) => void\n onZoomComplete: ({ chart }: { chart: Chart }) => void\n wheel: (chart: Chart, event: WheelEvent) => void\n}\nexport type HandlerName = keyof HandlerFunctions\nexport type HandlerFunction = HandlerFunctions[HandlerName]\nexport type Handler = EventListener\nexport type Handlers = Partial<Record<HandlerName, Handler>>\n\nexport type HandlerTarget = Partial<Record<HandlerName, HTMLCanvasElement | Document>>\n\nexport interface State {\n originalScaleLimits: OriginalScaleLimits\n updatedScaleLimits: UpdatedScaleLimits\n handlers: Handlers\n targets: HandlerTarget\n panDelta: Record<string, number>\n dragging: boolean\n panning: boolean\n options: ZoomPluginOptions\n dragStart?: MouseEvent\n dragEnd?: MouseEvent\n filterNextClick?: boolean\n scale?: number | null\n delta?: Point | null\n panScales?: string[]\n}\n\nconst chartStates = new WeakMap<Chart, State>()\n\nexport function getState(chart: Chart): State {\n let state = chartStates.get(chart)\n if (!state) {\n state = {\n originalScaleLimits: {},\n updatedScaleLimits: {},\n handlers: {},\n options: {},\n targets: {},\n panDelta: {},\n dragging: false,\n panning: false,\n }\n chartStates.set(chart, state)\n }\n return state\n}\n\nexport function removeState(chart: Chart) {\n chartStates.delete(chart)\n}\n","import { almostEquals, isNullOrUndef, isNumber, valueOrDefault } from 'chart.js/helpers'\nimport { getState, type ScaleRange, type State } from './state'\nimport type { Point, Scale, TimeScale, TimeUnit } from 'chart.js'\nimport type { LimitOptions, ScaleLimits } from './options'\n\nexport type ZoomFunction = (scale: Scale, zoom: number, center: Point, limits: LimitOptions) => boolean\nexport type ZoomRectFunction = (scale: Scale, from: number, to: number, limits: LimitOptions) => boolean\nexport type PanFunction = (scale: Scale, delta: number, limits: LimitOptions) => boolean\n\nconst isTimeScale = (scale: Scale): scale is TimeScale => scale.type === 'time'\n\nconst isNotNumber = (value?: number): value is undefined => value === undefined || isNaN(value)\n\nexport function zoomDelta(\n val: number | undefined,\n min: number | undefined,\n range: number,\n newRange: number\n): ScaleRange {\n const minPercent = range && isNumber(val) && isNumber(min) ? Math.max(0, Math.min(1, (val - min) / range)) : 0\n const maxPercent = 1 - minPercent\n\n return {\n min: newRange * minPercent,\n max: newRange * maxPercent,\n }\n}\n\nfunction getValueAtPoint(scale: Scale, point: Point): number | undefined {\n const pixel = scale.isHorizontal() ? point.x : point.y\n\n return scale.getValueForPixel(pixel)\n}\n\nfunction linearZoomDelta(scale: Scale, zoom: number, center: Point): ScaleRange {\n const range = scale.max - scale.min\n const newRange = range * (zoom - 1)\n const centerValue = getValueAtPoint(scale, center)\n\n return zoomDelta(centerValue, scale.min, range, newRange)\n}\n\nfunction logarithmicZoomRange(scale: Scale, zoom: number, center: Point) {\n const centerValue = getValueAtPoint(scale, center)\n\n // Return the original range, if value could not be determined.\n if (centerValue === undefined) {\n return { min: scale.min, max: scale.max }\n }\n\n const logMin = Math.log10(scale.min)\n const logMax = Math.log10(scale.max)\n const logCenter = Math.log10(centerValue)\n const logRange = logMax - logMin\n const newLogRange = logRange * (zoom - 1)\n const delta = zoomDelta(logCenter, logMin, logRange, newLogRange)\n\n return {\n min: Math.pow(10, logMin + delta.min),\n max: Math.pow(10, logMax - delta.max),\n }\n}\n\nfunction getScaleLimits(scale: Scale, limits?: LimitOptions): ScaleLimits {\n return limits?.[scale.id] || limits?.[scale.axis] || {}\n}\n\nfunction getLimit(state: State, scale: Scale, scaleLimits: ScaleLimits, prop: 'min' | 'max', fallback: number): number {\n let limit = scaleLimits[prop]\n if (limit === 'original') {\n const original = state.originalScaleLimits[scale.id][prop]\n if (isNumber(original.options)) {\n return original.options\n }\n\n if (!isNullOrUndef(original.options)) {\n const parsed = scale.parse(original.options)\n if (isNumber(parsed)) {\n return parsed\n }\n }\n\n limit = original.scale\n }\n return valueOrDefault(limit, fallback)\n}\n\nfunction linearRange(scale: Scale, pixel0: number, pixel1: number): ScaleRange {\n const v0 = scale.getValueForPixel(pixel0) ?? scale.min\n const v1 = scale.getValueForPixel(pixel1) ?? scale.max\n return {\n min: Math.min(v0, v1),\n max: Math.max(v0, v1),\n }\n}\n\nfunction fixRange(\n range: number,\n { min, max, minLimit, maxLimit }: { min: number; max: number; minLimit: number; maxLimit: number },\n state: State,\n scale: Scale\n) {\n const offset = (range - max + min) / 2\n min -= offset\n max += offset\n\n // In case the values are really close to the original values, use the original values.\n const origLimits: ScaleLimits = { min: 'original', max: 'original' }\n const origMin = getLimit(state, scale, origLimits, 'min', -Infinity)\n const origMax = getLimit(state, scale, origLimits, 'max', Infinity)\n\n const epsilon = range / 1e6\n if (almostEquals(min, origMin, epsilon)) {\n min = origMin\n }\n if (almostEquals(max, origMax, epsilon)) {\n max = origMax\n }\n\n // Apply limits\n if (min < minLimit) {\n min = minLimit\n max = Math.min(minLimit + range, maxLimit)\n } else if (max > maxLimit) {\n max = maxLimit\n min = Math.max(maxLimit - range, minLimit)\n }\n\n return { min, max }\n}\n\nexport function updateRange(\n scale: Scale,\n { min, max }: ScaleRange,\n limits?: LimitOptions,\n zoom = false,\n pan = false\n): boolean {\n const state = getState(scale.chart)\n const { options: scaleOpts } = scale\n\n const scaleLimits = getScaleLimits(scale, limits)\n const { minRange = 0 } = scaleLimits\n const minLimit = getLimit(state, scale, scaleLimits, 'min', -Infinity)\n const maxLimit = getLimit(state, scale, scaleLimits, 'max', Infinity)\n\n if (pan && (min < minLimit || max > maxLimit)) {\n // At limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const scaleRange = scale.max - scale.min\n const range = zoom ? Math.max(max - min, minRange) : scaleRange\n\n if (zoom && range === minRange && scaleRange <= minRange) {\n // At range limit: No change but return true to indicate no need to store the delta.\n return true\n }\n\n const newRange = fixRange(range, { min, max, minLimit, maxLimit }, state, scale)\n\n scaleOpts.min = newRange.min\n scaleOpts.max = newRange.max\n\n state.updatedScaleLimits[scale.id] = newRange\n\n // return true if the scale range is changed\n return scale.parse(newRange.min) !== scale.min || scale.parse(newRange.max) !== scale.max\n}\n\nfunction zoomNumericalScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n const newRange = { min: scale.min + delta.min, max: scale.max - delta.max }\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomLogarithmicScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const newRange = logarithmicZoomRange(scale, zoom, center)\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction zoomRectNumericalScale(scale: Scale, from: number, to: number, limits: LimitOptions) {\n return updateRange(scale, linearRange(scale, from, to), limits, true)\n}\n\nconst integerChange = (v: number) =>\n v === 0 || isNaN(v) ? 0 : v < 0 ? Math.min(Math.round(v), -1) : Math.max(Math.round(v), 1)\n\nfunction existCategoryFromMaxZoom(scale: Scale) {\n const labels = scale.getLabels()\n const maxIndex = labels.length - 1\n\n if (scale.min > 0) {\n scale.min -= 1\n }\n if (scale.max < maxIndex) {\n scale.max += 1\n }\n}\n\nfunction zoomCategoryScale(scale: Scale, zoom: number, center: Point, limits: LimitOptions) {\n const delta = linearZoomDelta(scale, zoom, center)\n if (scale.min === scale.max && zoom < 1) {\n existCategoryFromMaxZoom(scale)\n }\n const newRange = { min: scale.min + integerChange(delta.min), max: scale.max - integerChange(delta.max) }\n\n return updateRange(scale, newRange, limits, true)\n}\n\nfunction scaleLength(scale: Scale) {\n return scale.isHorizontal() ? scale.width : scale.height\n}\n\nfunction panCategoryScale(scale: Scale, delta: number, limits: LimitOptions) {\n const labels = scale.getLabels()\n const lastLabelIndex = labels.length - 1\n let { min, max } = scale\n // The visible range. Ticks can be skipped, and thus not reliable.\n const range = Math.max(max - min, 1)\n // How many pixels of delta is required before making a step. stepSize, but limited to max 1/10 of the scale length.\n const stepDelta = Math.round(scaleLength(scale) / Math.max(range, 10))\n const stepSize = Math.round(Math.abs(delta / stepDelta))\n let applied\n if (delta < -stepDelta) {\n max = Math.min(max + stepSize, lastLabelIndex)\n min = range === 1 ? max : max - range\n applied = max === lastLabelIndex\n } else if (delta > stepDelta) {\n min = Math.max(0, min - stepSize)\n max = range === 1 ? min : min + range\n applied = min === 0\n }\n\n return updateRange(scale, { min, max }, limits) || Boolean(applied)\n}\n\nconst OFFSETS: Record<TimeUnit, number> = {\n millisecond: 0,\n second: 500, // 500 ms\n minute: 30 * 1000, // 30 s\n hour: 30 * 60 * 1000, // 30 m\n day: 12 * 60 * 60 * 1000, // 12 h\n week: 3.5 * 24 * 60 * 60 * 1000, // 3.5 d\n month: 15 * 24 * 60 * 60 * 1000, // 15 d\n quarter: 60 * 24 * 60 * 60 * 1000, // 60 d\n year: 182 * 24 * 60 * 60 * 1000, // 182 d\n}\n\nfunction panNumericalScale(scale: Scale, delta: number, limits: LimitOptions, canZoom = false) {\n const { min: prevStart, max: prevEnd } = scale\n let offset = 0\n if (isTimeScale(scale)) {\n const round = scale.options.time?.round\n offset = round ? OFFSETS[round] : 0\n }\n const newMin = scale.getValueForPixel(scale.getPixelForValue(prevStart + offset) - delta)\n const newMax = scale.getValueForPixel(scale.getPixelForValue(prevEnd + offset) - delta)\n if (isNotNumber(newMin) || isNotNumber(newMax)) {\n // NaN can happen for 0-dimension scales (either because they were configured\n // with min === max or because the chart has 0 plottable area).\n return true\n }\n return updateRange(scale, { min: newMin, max: newMax }, limits, canZoom, true)\n}\n\nfunction panNonLinearScale(scale: Scale, delta: number, limits: LimitOptions) {\n return panNumericalScale(scale, delta, limits, true)\n}\n\nexport const zoomFunctions: Record<string, ZoomFunction> = {\n category: zoomCategoryScale,\n default: zoomNumericalScale,\n logarithmic: zoomLogarithmicScale,\n}\n\nexport const zoomRectFunctions: Record<string, ZoomRectFunction> = {\n default: zoomRectNumericalScale,\n}\n\nexport const panFunctions: Record<string, PanFunction> = {\n category: panCategoryScale,\n default: panNumericalScale,\n logarithmic: panNonLinearScale,\n timeseries: panNonLinearScale,\n}\n","import { isNumber, sign } from 'chart.js/helpers'\nimport { panFunctions, updateRange, zoomFunctions, zoomRectFunctions } from './scale.types.js'\nimport { getState, type OriginalScaleLimits, type ScaleRange, type State, type UpdatedScaleLimits } from './state.js'\nimport { directionEnabled, getEnabledScalesByPoint } from './utils.js'\nimport type { Chart, Point, Scale, UpdateMode } from 'chart.js'\nimport type { LimitOptions, PanTrigger, ZoomTrigger } from './options.js'\nimport type { ZoomAmount } from './types.js'\n\nfunction shouldUpdateScaleLimits(\n scale: Scale,\n originalScaleLimits: OriginalScaleLimits,\n updatedScaleLimits: UpdatedScaleLimits\n) {\n const {\n id,\n options: { min, max },\n } = scale\n if (!originalScaleLimits[id] || !updatedScaleLimits[id]) {\n return true\n }\n const previous = updatedScaleLimits[id]\n return previous.min !== min || previous.max !== max\n}\n\nfunction removeMissingScales(limits: OriginalScaleLimits | UpdatedScaleLimits, scales: Record<string, Scale>) {\n for (const key of Object.keys(limits)) {\n if (!scales[key]) {\n delete limits[key]\n }\n }\n}\n\nfunction storeOriginalScaleLimits(chart: Chart, state: State) {\n const { scales } = chart\n const { originalScaleLimits, updatedScaleLimits } = state\n\n for (const scale of Object.values(scales)) {\n if (shouldUpdateScaleLimits(scale, originalScaleLimits, updatedScaleLimits)) {\n originalScaleLimits[scale.id] = {\n min: { scale: scale.min, options: scale.options.min },\n max: { scale: scale.max, options: scale.options.max },\n }\n }\n }\n\n removeMissingScales(originalScaleLimits, scales)\n removeMissingScales(updatedScaleLimits, scales)\n return originalScaleLimits\n}\n\nfunction doZoom(scale: Scale, amount: number, center: Point, limits: LimitOptions) {\n const fn = zoomFunctions[scale.type] || zoomFunctions.default\n fn?.(scale, amount, center, limits)\n}\n\nfunction doZoomRect(scale: Scale, from: number, to: number, limits: LimitOptions) {\n const fn = zoomRectFunctions[scale.type] || zoomRectFunctions.default\n fn?.(scale, from, to, limits)\n}\n\nfunction getCenter(chart: Chart) {\n const ca = chart.chartArea\n return {\n x: (ca.left + ca.right) / 2,\n y: (ca.top + ca.bottom) / 2,\n }\n}\n\nexport function zoom(chart: Chart, amount: ZoomAmount, transition: UpdateMode = 'none', trigger: ZoomTrigger = 'api') {\n const { x = 1, y = 1, focalPoint = getCenter(chart) } = typeof amount === 'number' ? { x: amount, y: amount } : amount\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions },\n } = state\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 1\n const yEnabled = y !== 1\n const enabledScales = getEnabledScalesByPoint(zoomOptions, focalPoint, chart)\n\n for (const scale of enabledScales) {\n if (scale.isHorizontal() && xEnabled) {\n doZoom(scale, x, focalPoint, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoom(scale, y, focalPoint, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions?.onZoom?.({ chart, trigger, amount: { x, y, focalPoint } })\n}\n\nexport function zoomRect(\n chart: Chart,\n p0: Point,\n p1: Point,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n const {\n options: { limits = {}, zoom: zoomOptions = {} },\n } = state\n const { mode = 'xy' } = zoomOptions\n\n storeOriginalScaleLimits(chart, state)\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n\n for (const scale of Object.values(chart.scales)) {\n if (scale.isHorizontal() && xEnabled) {\n doZoomRect(scale, p0.x, p1.x, limits)\n } else if (!scale.isHorizontal() && yEnabled) {\n doZoomRect(scale, p0.y, p1.y, limits)\n }\n }\n\n chart.update(transition)\n\n zoomOptions.onZoom?.({ chart, trigger })\n}\n\nexport function zoomScale(\n chart: Chart,\n scaleId: string,\n range: ScaleRange,\n transition: UpdateMode = 'none',\n trigger: ZoomTrigger = 'api'\n) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scale = chart.scales[scaleId]\n updateRange(scale, range, undefined, true)\n chart.update(transition)\n\n state.options.zoom?.onZoom?.({ chart, trigger })\n}\n\nexport function resetZoom(chart: Chart, transition: UpdateMode = 'default') {\n const state = getState(chart)\n const originalScaleLimits = storeOriginalScaleLimits(chart, state)\n\n for (const scale of Object.values(chart.scales)) {\n const scaleOptions = scale.options\n if (originalScaleLimits[scale.id]) {\n scaleOptions.min = originalScaleLimits[scale.id].min.options\n scaleOptions.max = originalScaleLimits[scale.id].max.options\n } else {\n delete scaleOptions.min\n delete scaleOptions.max\n }\n delete state.updatedScaleLimits[scale.id]\n }\n chart.update(transition)\n\n state.options.zoom?.onZoomComplete?.({ chart })\n}\n\nfunction getOriginalRange(state: State, scaleId: string): number | undefined {\n const original = state.originalScaleLimits[scaleId]\n if (!original) {\n return undefined\n }\n const { min, max } = original\n if (isNumber(max.options) && isNumber(min.options)) {\n return max.options - min.options\n }\n if (isNumber(max.scale) && isNumber(min.scale)) {\n return max.scale - min.scale\n }\n return undefined\n}\n\nexport function getZoomLevel(chart: Chart) {\n const state = getState(chart)\n let min = 1\n let max = 1\n for (const scale of Object.values(chart.scales)) {\n const origRange = getOriginalRange(state, scale.id)\n if (origRange) {\n const level = Math.round((origRange / (scale.max - scale.min)) * 100) / 100\n min = Math.min(min, level)\n max = Math.max(max, level)\n }\n }\n return min < 1 ? min : max\n}\n\nfunction panScale(scale: Scale, delta: number, limits: LimitOptions, state: State) {\n const { panDelta } = state\n // Add possible cumulative delta from previous pan attempts where scale did not change\n const storedDelta = panDelta[scale.id] || 0\n if (sign(storedDelta) === sign(delta)) {\n delta += storedDelta\n }\n const fn = panFunctions[scale.type] || panFunctions.default\n if (fn?.(scale, delta, limits)) {\n // The scale changed, reset cumulative delta\n panDelta[scale.id] = 0\n } else {\n // The scale did not change, store cumulative delta\n panDelta[scale.id] = delta\n }\n}\n\ntype PanAmount = number | Partial<Point>\n\nexport function pan(\n chart: Chart,\n delta: PanAmount,\n enabledScales?: Scale[],\n transition: UpdateMode = 'none',\n trigger: PanTrigger = 'other'\n) {\n const { x = 0, y = 0 } = typeof delta === 'number' ? { x: delta, y: delta } : delta\n const state = getState(chart)\n const {\n options: { pan: panOptions, limits = {} },\n } = state\n const { onPan } = panOptions || {}\n\n storeOriginalScaleLimits(chart, state)\n\n const xEnabled = x !== 0\n const yEnabled = y !== 0\n\n const scales = enabledScales || Object.values(chart.scales)\n\n for (const scale of scales) {\n if (scale.isHorizontal() && xEnabled) {\n panScale(scale, x, limits, state)\n } else if (!scale.isHorizontal() && yEnabled) {\n panScale(scale, y, limits, state)\n }\n }\n\n chart.update(transition)\n\n onPan?.({ chart, trigger, delta: { x, y } })\n}\n\nexport function getInitialScaleBounds(chart: Chart) {\n const state = getState(chart)\n storeOriginalScaleLimits(chart, state)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n const { min, max } = state.originalScaleLimits[scaleId] || { min: {}, max: {} }\n scaleBounds[scaleId] = { min: min.scale, max: max.scale }\n }\n\n return scaleBounds\n}\n\nexport function getZoomedScaleBounds(chart: Chart) {\n const state = getState(chart)\n const scaleBounds: Record<string, { min?: number; max?: number }> = {}\n for (const scaleId of Object.keys(chart.scales)) {\n scaleBounds[scaleId] = state.updatedScaleLimits[scaleId]\n }\n\n return scaleBounds\n}\n\nexport function isZoomedOrPanned(chart: Chart) {\n const scaleBounds = getInitialScaleBounds(chart)\n for (const scaleId of Object.keys(chart.scales)) {\n const { min: originalMin, max: originalMax } = scaleBounds[scaleId]\n\n if (originalMin !== undefined && chart.scales[scaleId].min !== originalMin) {\n return true\n }\n\n if (originalMax !== undefined && chart.scales[scaleId].max !== originalMax) {\n return true\n }\n }\n\n return false\n}\n\nexport function isZoomingOrPanningState(state: State) {\n return state.panning || state.dragging\n}\n\nexport function isZoomingOrPanning(chart: Chart) {\n const state = getState(chart)\n // From the perspective of outside callers, zooming and panning are still\n // active if we haven't yet cleared the next click.\n return !!(isZoomingOrPanningState(state) || state.filterNextClick)\n}\n","import { directionEnabled, debounce, keyNotPressed, getModifierKey, keyPressed } from './utils'\nimport { zoom, zoomRect } from './core'\nimport { getRelativePosition, _isPointInArea } from 'chart.js/helpers'\nimport { getState, type HandlerFunctions, type HandlerName } from './state'\nimport type { Chart, ChartArea, Point } from 'chart.js'\nimport type { ModeOption, ZoomOptions, ZoomPluginOptions } from './options'\n\nconst clamp = (x: number, from: number, to: number): number => Math.min(to, Math.max(from, x))\n\nfunction removeHandler(chart: Chart, type: HandlerName) {\n const { handlers, targets } = getState(chart)\n const handler = handlers[type]\n const target = targets[type]\n if (handler && target) {\n target.removeEventListener(type, handler)\n delete handlers[type]\n }\n}\n\ntype EventHandler<T extends Event> = (chart: Chart, event: T, options: ZoomPluginOptions) => void\n\nfunction addHandler<T extends Event>(\n chart: Chart,\n target: HTMLCanvasElement | Document,\n type: HandlerName,\n handler: EventHandler<T>\n) {\n const { handlers, options, targets } = getState(chart)\n const oldHandler = handlers[type]\n if (oldHandler && targets[type] === target) {\n // already attached\n return\n }\n removeHandler(chart, type)\n const listener = (handlers[type] = (event) => handler(chart, event as T, options))\n targets[type] = target\n\n // `passive: false` for wheel events, to prevent chrome warnings. Use default value for other events.\n const passive = type === 'wheel' ? false : undefined\n target.addEventListener(type, listener, { passive })\n}\n\nexport function mouseMove(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (state.dragStart) {\n state.dragging = true\n state.dragEnd = event\n chart.draw()\n }\n}\n\nfunction keyDown(chart: Chart, event: KeyboardEvent) {\n const state = getState(chart)\n if (!state.dragStart || event.key !== 'Escape') {\n return\n }\n\n removeHandler(chart, 'keydown')\n state.dragging = false\n state.dragStart = state.dragEnd = undefined\n chart.draw()\n}\n\nfunction getPointPosition(event: MouseEvent, chart: Chart) {\n if (event.target !== chart.canvas) {\n const canvasArea = chart.canvas.getBoundingClientRect()\n return {\n x: event.clientX - canvasArea.left,\n y: event.clientY - canvasArea.top,\n }\n }\n return getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n}\n\nfunction zoomStart(chart: Chart, event: MouseEvent, zoomOptions: ZoomOptions): boolean | void {\n const { onZoomStart, onZoomRejected } = zoomOptions\n if (onZoomStart) {\n const point = getPointPosition(event, chart)\n if (onZoomStart?.({ chart, event, point }) === false) {\n onZoomRejected?.({ chart, event })\n return false\n }\n }\n}\n\nexport function mouseDown(chart: Chart, event: MouseEvent): void {\n if (chart.legend) {\n const point = getRelativePosition(event, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (_isPointInArea(point, chart.legend)) {\n return\n }\n }\n const state = getState(chart)\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (\n event.button !== 0 ||\n keyPressed(getModifierKey(panOptions), event) ||\n keyNotPressed(getModifierKey(zoomOptions.drag), event)\n ) {\n return zoomOptions.onZoomRejected?.({ chart, event })\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n state.dragStart = event\n\n addHandler(chart, chart.canvas.ownerDocument, 'mousemove', mouseMove)\n addHandler(chart, window.document, 'keydown', keyDown)\n}\n\nfunction applyAspectRatio(\n { begin, end }: { begin: { x: number; y: number }; end: { x: number; y: number } },\n aspectRatio: number\n) {\n let width = end.x - begin.x\n let height = end.y - begin.y\n const ratio = Math.abs(width / height)\n\n if (ratio > aspectRatio) {\n width = Math.sign(width) * Math.abs(height * aspectRatio)\n } else if (ratio < aspectRatio) {\n height = Math.sign(height) * Math.abs(width / aspectRatio)\n }\n\n end.x = begin.x + width\n end.y = begin.y + height\n}\n\ntype Rect = { top?: number; left?: number; right?: number; bottom?: number }\nfunction applyMinMaxProps(\n rect: Rect,\n chartArea: ChartArea,\n points: { begin: Point; end: Point },\n { min, max, prop }: { min: keyof Rect; max: keyof Rect; prop: 'x' | 'y' }\n) {\n rect[min] = clamp(Math.min(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n rect[max] = clamp(Math.max(points.begin[prop], points.end[prop]), chartArea[min], chartArea[max])\n}\n\nfunction getRelativePoints(\n chart: Chart,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio?: boolean\n) {\n const points = {\n begin: getPointPosition(pointEvents.dragStart, chart),\n end: getPointPosition(pointEvents.dragEnd, chart),\n }\n\n if (maintainAspectRatio) {\n const aspectRatio = chart.chartArea.width / chart.chartArea.height\n applyAspectRatio(points, aspectRatio)\n }\n\n return points\n}\n\nexport function computeDragRect(\n chart: Chart,\n mode: ModeOption | undefined,\n pointEvents: { dragStart: MouseEvent; dragEnd: MouseEvent },\n maintainAspectRatio: boolean | undefined\n) {\n const xEnabled = directionEnabled(mode, 'x', chart)\n const yEnabled = directionEnabled(mode, 'y', chart)\n const { top, left, right, bottom, width: chartWidth, height: chartHeight } = chart.chartArea\n const rect = { top, left, right, bottom }\n\n const points = getRelativePoints(chart, pointEvents, maintainAspectRatio && xEnabled && yEnabled)\n\n if (xEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'left', max: 'right', prop: 'x' })\n }\n\n if (yEnabled) {\n applyMinMaxProps(rect, chart.chartArea, points, { min: 'top', max: 'bottom', prop: 'y' })\n }\n\n const width = rect.right - rect.left\n const height = rect.bottom - rect.top\n\n return {\n ...rect,\n width,\n height,\n zoomX: xEnabled && width ? 1 + (chartWidth - width) / chartWidth : 1,\n zoomY: yEnabled && height ? 1 + (chartHeight - height) / chartHeight : 1,\n }\n}\n\nexport function mouseUp(chart: Chart, event: MouseEvent) {\n const state = getState(chart)\n if (!state.dragStart) {\n return\n }\n\n removeHandler(chart, 'mousemove')\n const { mode, onZoomComplete, drag } = state.options.zoom ?? {}\n const { threshold = 0, maintainAspectRatio } = drag ?? {}\n const rect = computeDragRect(chart, mode, { dragStart: state.dragStart, dragEnd: event }, maintainAspectRatio)\n const distanceX = directionEnabled(mode, 'x', chart) ? rect.width : 0\n const distanceY = directionEnabled(mode, 'y', chart) ? rect.height : 0\n const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY)\n\n // Remove drag start and end before chart render to stop drawing selected area\n state.dragStart = state.dragEnd = undefined\n\n if (distance <= threshold) {\n state.dragging = false\n chart.draw()\n return\n }\n\n zoomRect(chart, { x: rect.left, y: rect.top }, { x: rect.right, y: rect.bottom }, 'zoom', 'drag')\n\n state.dragging = false\n state.filterNextClick = true\n onZoomComplete?.({ chart })\n}\n\nfunction wheelPreconditions(chart: Chart, event: WheelEvent, zoomOptions: ZoomOptions): true | void {\n // Before preventDefault, check if the modifier key required and pressed\n if (keyNotPressed(getModifierKey(zoomOptions.wheel), event)) {\n zoomOptions.onZoomRejected?.({ chart, event })\n return\n }\n\n if (zoomStart(chart, event, zoomOptions) === false) {\n return\n }\n\n // Prevent the event from triggering the default behavior (e.g. content scrolling).\n if (event.cancelable) {\n event.preventDefault()\n }\n\n // Firefox always fires the wheel event twice:\n // First without the delta and right after that once with the delta properties.\n if (event.deltaY === undefined) {\n return\n }\n return true\n}\n\nexport function wheel(chart: Chart, event: WheelEvent & { target?: HTMLCanvasElement }) {\n const {\n handlers: { onZoomComplete },\n options: { zoom: zoomOptions = {} },\n } = getState(chart)\n\n if (!wheelPreconditions(chart, event, zoomOptions)) {\n return\n }\n\n const rect = event.target?.getBoundingClientRect()\n const speed = zoomOptions?.wheel?.speed ?? 0.1\n const percentage = event.deltaY >= 0 ? 2 - 1 / (1 - speed) : 1 + speed\n const amount = {\n x: percentage,\n y: percentage,\n focalPoint: {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'wheel')\n\n onZoomComplete?.(event)\n}\n\nfunction addDebouncedHandler(\n chart: Chart,\n name: HandlerName,\n handler: HandlerFunctions['onZoomComplete'] | undefined,\n delay: number\n) {\n if (handler) {\n getState(chart).handlers[name] = debounce(() => handler?.({ chart }), delay)\n }\n}\n\nexport function addListeners(chart: Chart, options: ZoomPluginOptions) {\n const canvas = chart.canvas\n const { wheel: wheelOptions, drag: dragOptions, onZoomComplete } = options.zoom ?? {}\n\n // Install listeners. Do this dynamically based on options so that we can turn zoom on and off\n // We also want to make sure listeners aren't always on. E.g. if you're scrolling down a page\n // and the mouse goes over a chart you don't want it intercepted unless the plugin is enabled\n if (wheelOptions?.enabled) {\n addHandler(chart, canvas, 'wheel', wheel)\n addDebouncedHandler(chart, 'onZoomComplete', onZoomComplete, 250)\n } else {\n removeHandler(chart, 'wheel')\n }\n if (dragOptions?.enabled) {\n addHandler(chart, canvas, 'mousedown', mouseDown)\n addHandler(chart, canvas.ownerDocument, 'mouseup', mouseUp)\n } else {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'keydown')\n }\n}\n\nexport function removeListeners(chart: Chart) {\n removeHandler(chart, 'mousedown')\n removeHandler(chart, 'mousemove')\n removeHandler(chart, 'mouseup')\n removeHandler(chart, 'wheel')\n removeHandler(chart, 'click')\n removeHandler(chart, 'keydown')\n}\n","import { getRelativePosition } from 'chart.js/helpers'\nimport Hammer from 'hammerjs'\nimport { pan, zoom } from './core'\nimport { getState, type State } from './state'\nimport { directionEnabled, getEnabledScalesByPoint, getModifierKey, keyNotPressed, keyPressed } from './utils'\nimport type { Chart } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\n\nfunction createEnabler(chart: Chart, state: State) {\n return function (_recognizer: any, event: HammerInput) {\n const { pan: panOptions, zoom: zoomOptions = {} } = state.options\n if (!panOptions || !panOptions.enabled) {\n return false\n }\n const srcEvent = event && event.srcEvent\n if (!srcEvent) {\n // Sometimes Hammer queries this with a null event.\n return true\n }\n if (\n !state.panning &&\n event.pointerType === 'mouse' &&\n (keyNotPressed(getModifierKey(panOptions), srcEvent) || keyPressed(getModifierKey(zoomOptions.drag), srcEvent))\n ) {\n panOptions.onPanRejected?.({ chart, event })\n return false\n }\n return true\n }\n}\n\nfunction pinchAxes(p0: { clientX: number; clientY: number }, p1: { clientX: number; clientY: number }) {\n // fingers position difference\n const pinchX = Math.abs(p0.clientX - p1.clientX)\n const pinchY = Math.abs(p0.clientY - p1.clientY)\n\n // diagonal fingers will change both (xy) axes\n const p = pinchX / pinchY\n let x, y\n if (p > 0.3 && p < 1.7) {\n x = y = true\n } else if (pinchX > pinchY) {\n x = true\n } else {\n y = true\n }\n return { x, y }\n}\n\nfunction handlePinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n const { center, pointers } = e\n // Hammer reports the total scaling. We need the incremental amount\n const zoomPercent = (1 / state.scale) * e.scale\n const rect = e.target.getBoundingClientRect()\n const pinch = pinchAxes(pointers[0], pointers[1])\n const mode = state.options.zoom?.mode\n const amount = {\n x: pinch.x && directionEnabled(mode, 'x', chart) ? zoomPercent : 1,\n y: pinch.y && directionEnabled(mode, 'y', chart) ? zoomPercent : 1,\n focalPoint: {\n x: center.x - rect.left,\n y: center.y - rect.top,\n },\n }\n\n zoom(chart, amount, 'zoom', 'pinch')\n\n // Keep track of overall scale\n state.scale = e.scale\n }\n}\n\nfunction startPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.options.zoom?.pinch?.enabled) {\n const point = getRelativePosition(e.srcEvent, chart as any) // TODO: would expect Chart type to be valid for getRelativePosition\n if (state.options.zoom?.onZoomStart?.({ chart, event: e.srcEvent, point }) === false) {\n state.scale = null\n state.options.zoom?.onZoomRejected?.({ chart, event: e.srcEvent })\n } else {\n state.scale = 1\n }\n }\n}\n\nfunction endPinch(chart: Chart, state: State, e: HammerInput) {\n if (state.scale) {\n handlePinch(chart, state, e)\n state.scale = null // reset\n state.options.zoom?.onZoomComplete?.({ chart })\n }\n}\n\nfunction handlePan(chart: Chart, state: State, e: HammerInput) {\n const delta = state.delta\n if (delta) {\n state.panning = true\n pan(\n chart,\n { x: e.deltaX - delta.x, y: e.deltaY - delta.y },\n state.panScales && state.panScales.map((i) => chart.scales[i]).filter(Boolean)\n )\n state.delta = { x: e.deltaX, y: e.deltaY }\n }\n}\n\nfunction startPan(chart: Chart, state: State, event: HammerInput) {\n const { enabled, onPanStart, onPanRejected } = state.options.pan ?? {}\n if (!enabled) {\n return\n }\n const rect = event.target.getBoundingClientRect()\n const point = {\n x: event.center.x - rect.left,\n y: event.center.y - rect.top,\n }\n\n if (onPanStart?.({ chart, event, point }) === false) {\n return onPanRejected?.({ chart, event })\n }\n\n state.panScales = getEnabledScalesByPoint(state.options.pan, point, chart).map((i) => i.id)\n state.delta = { x: 0, y: 0 }\n handlePan(chart, state, event)\n}\n\nfunction endPan(chart: Chart, state: State) {\n state.delta = null\n if (state.panning) {\n state.panning = false\n state.filterNextClick = true\n state.options.pan?.onPanComplete?.({ chart })\n }\n}\n\nconst hammers = new WeakMap()\nexport function startHammer(chart: Chart, options: ZoomPluginOptions) {\n const state = getState(chart)\n const canvas = chart.canvas\n const { pan: panOptions, zoom: zoomOptions } = options\n\n const mc = new Hammer.Manager(canvas)\n if (zoomOptions?.pinch?.enabled) {\n mc.add(new Hammer.Pinch())\n mc.on('pinchstart', (e) => startPinch(chart, state, e))\n mc.on('pinch', (e) => handlePinch(chart, state, e))\n mc.on('pinchend', (e) => endPinch(chart, state, e))\n }\n\n if (panOptions && panOptions.enabled) {\n mc.add(\n new Hammer.Pan({\n threshold: panOptions.threshold,\n enable: createEnabler(chart, state),\n })\n )\n mc.on('panstart', (e) => startPan(chart, state, e))\n mc.on('panmove', (e) => handlePan(chart, state, e))\n mc.on('panend', () => endPan(chart, state))\n }\n\n hammers.set(chart, mc)\n}\n\nexport function stopHammer(chart: Chart) {\n const mc = hammers.get(chart)\n if (mc) {\n mc.remove('pinchstart')\n mc.remove('pinch')\n mc.remove('pinchend')\n mc.remove('panstart')\n mc.remove('pan')\n mc.remove('panend')\n mc.destroy()\n hammers.delete(chart)\n }\n}\n\nexport function hammerOptionsChanged(oldOptions: ZoomPluginOptions, newOptions: ZoomPluginOptions) {\n const { pan: oldPan, zoom: oldZoom } = oldOptions\n const { pan: newPan, zoom: newZoom } = newOptions\n\n if (oldZoom?.pinch?.enabled !== newZoom?.pinch?.enabled) {\n return true\n }\n if (oldPan?.enabled !== newPan?.enabled) {\n return true\n }\n if (oldPan?.threshold !== newPan?.threshold) {\n return true\n }\n\n return false\n}\n","import type { ZoomPluginOptions } from './options'\n\nexport const defaults: ZoomPluginOptions = {\n pan: {\n enabled: false,\n mode: 'xy',\n threshold: 10,\n modifierKey: null,\n },\n zoom: {\n wheel: {\n enabled: false,\n speed: 0.1,\n modifierKey: null,\n },\n drag: {\n enabled: false,\n drawTime: 'beforeDatasetsDraw',\n modifierKey: null,\n },\n pinch: {\n enabled: false,\n },\n mode: 'xy',\n },\n}\n","import Hammer from 'hammerjs'\nimport { addListeners, computeDragRect, removeListeners } from './handlers'\nimport { hammerOptionsChanged, startHammer, stopHammer } from './hammer'\nimport {\n pan,\n zoom,\n resetZoom,\n zoomScale,\n getZoomLevel,\n getInitialScaleBounds,\n getZoomedScaleBounds,\n isZoomedOrPanned,\n isZoomingOrPanning,\n isZoomingOrPanningState,\n zoomRect,\n} from './core'\nimport { panFunctions, zoomFunctions, zoomRectFunctions } from './scale.types'\nimport { getState, removeState } from './state'\nimport { version } from '../package.json'\nimport type { Chart, ChartEvent } from 'chart.js'\nimport type { ZoomPluginOptions } from './options'\nimport { defaults } from './defaults'\n\nfunction draw(chart: Chart, caller: string, options: ZoomPluginOptions) {\n const dragOptions = options.zoom?.drag\n const { dragStart, dragEnd } = getState(chart)\n\n if (dragOptions?.drawTime !== caller || !dragStart || !dragEnd) {\n return\n }\n const { left, top, width, height } = computeDragRect(\n chart,\n options.zoom?.mode,\n { dragStart, dragEnd },\n dragOptions.maintainAspectRatio\n )\n const ctx = chart.ctx\n\n ctx.save()\n ctx.beginPath()\n ctx.fillStyle = dragOptions.backgroundColor || 'rgba(225,225,225,0.3)'\n ctx.fillRect(left, top, width, height)\n\n if (dragOptions.borderWidth) {\n ctx.lineWidth = dragOptions.borderWidth\n ctx.strokeStyle = dragOptions.borderColor || 'rgba(225,225,225)'\n ctx.strokeRect(left, top, width, height)\n }\n ctx.restore()\n}\n\nconst bindApi = (chart: Chart) => {\n chart.pan = (delta, panScales, transition) => pan(chart, delta, panScales, transition, 'api')\n chart.zoom = (args, transition) => zoom(chart, args, transition)\n chart.zoomRect = (p0, p1, transition) => zoomRect(chart, p0, p1, transition)\n chart.zoomScale = (id, range, transition) => zoomScale(chart, id, range, transition)\n chart.resetZoom = (transition) => resetZoom(chart, transition)\n chart.getZoomLevel = () => getZoomLevel(chart)\n chart.getInitialScaleBounds = () => getInitialScaleBounds(chart)\n chart.getZoomedScaleBounds = () => getZoomedScaleBounds(chart)\n chart.isZoomedOrPanned = () => isZoomedOrPanned(chart)\n chart.isZoomingOrPanning = () => isZoomingOrPanning(chart)\n}\n\nexport default {\n id: 'zoom',\n\n version,\n\n defaults,\n\n start(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n state.options = options\n\n if (Object.prototype.hasOwnProperty.call(options.zoom, 'enabled')) {\n console.warn(\n 'The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`.'\n )\n }\n if (\n Object.prototype.hasOwnProperty.call(options.zoom, 'overScaleMode') ||\n Object.prototype.hasOwnProperty.call(options.pan, 'overScaleMode')\n ) {\n console.warn(\n 'The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired).'\n )\n }\n\n if (Hammer) {\n startHammer(chart, options)\n }\n\n bindApi(chart)\n },\n\n beforeEvent(\n chart: Chart,\n { event }: { event: ChartEvent; replay: boolean; cancelable: true; inChartArea: boolean }\n ): boolean | void {\n const state = getState(chart)\n if (isZoomingOrPanningState(state)) {\n // cancel any event handling while panning or dragging\n return false\n }\n // cancel the next click or mouseup after drag or pan\n if (event.type === 'click' || event.type === 'mouseup') {\n if (state.filterNextClick) {\n state.filterNextClick = false\n return false\n }\n }\n },\n\n beforeUpdate(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n const state = getState(chart)\n const previousOptions = state.options\n state.options = options\n\n // Hammer needs to be restarted when certain options change.\n if (hammerOptionsChanged(previousOptions, options)) {\n stopHammer(chart)\n startHammer(chart, options)\n }\n\n addListeners(chart, options)\n },\n\n beforeDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDatasetsDraw', options)\n },\n\n afterDatasetsDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDatasetsDraw', options)\n },\n\n beforeDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'beforeDraw', options)\n },\n\n afterDraw(chart: Chart, _args: unknown, options: ZoomPluginOptions) {\n draw(chart, 'afterDraw', options)\n },\n\n stop(chart: Chart) {\n removeListeners(chart)\n\n if (Hammer) {\n stopHammer(chart)\n }\n removeState(chart)\n },\n\n panFunctions,\n zoomFunctions,\n zoomRectFunctions,\n}\n","import { Chart } from 'chart.js'\nimport Zoom from './plugin'\n\nChart.register(Zoom)\n\nexport default Zoom\n"],"names":["eventKey","key","getModifierKey","opts","enabled","modifierKey","undefined","keyPressed","event","keyNotPressed","directionEnabled","mode","dir","chart","indexOf","directionsEnabled","x","y","debounce","fn","delay","timeout","clearTimeout","setTimeout","getScaleUnderPoint","scales","scaleIds","Object","keys","i","length","scale","top","bottom","left","right","convertOverScaleMode","overScaleMode","scaleEnabled","overScaleEnabled","axis","getEnabledScales","enabledScales","scaleItem","values","push","getEnabledScalesByPoint","options","point","scaleMode","chartStates","WeakMap","getState","state","get","originalScaleLimits","updatedScaleLimits","handlers","targets","panDelta","dragging","panning","set","removeState","delete","isTimeScale","type","isNotNumber","value","isNaN","zoomDelta","val","min","range","newRange","minPercent","isNumber","Math","max","maxPercent","getValueAtPoint","pixel","isHorizontal","getValueForPixel","linearZoomDelta","zoom","center","centerValue","logarithmicZoomRange","logMin","log10","logMax","logCenter","logRange","newLogRange","delta","pow","getScaleLimits","limits","id","getLimit","scaleLimits","prop","fallback","limit","original","isNullOrUndef","parsed","parse","valueOrDefault","linearRange","pixel0","pixel1","v0","v1","fixRange","minLimit","maxLimit","offset","origLimits","origMin","Infinity","origMax","epsilon","almostEquals","updateRange","pan","scaleOpts","minRange","scaleRange","zoomNumericalScale","zoomLogarithmicScale","zoomRectNumericalScale","from","to","integerChange","v","round","existCategoryFromMaxZoom","labels","getLabels","maxIndex","zoomCategoryScale","scaleLength","width","height","panCategoryScale","lastLabelIndex","stepDelta","stepSize","abs","applied","Boolean","OFFSETS","millisecond","second","minute","hour","day","week","month","quarter","year","panNumericalScale","canZoom","prevStart","prevEnd","time","newMin","getPixelForValue","newMax","panNonLinearScale","zoomFunctions","category","default","logarithmic","zoomRectFunctions","panFunctions","timeseries","shouldUpdateScaleLimits","previous","removeMissingScales","storeOriginalScaleLimits","doZoom","amount","doZoomRect","getCenter","ca","chartArea","transition","trigger","focalPoint","zoomOptions","xEnabled","yEnabled","update","onZoom","zoomRect","p0","p1","zoomScale","scaleId","resetZoom","scaleOptions","onZoomComplete","getOriginalRange","getZoomLevel","origRange","level","panScale","storedDelta","sign","panOptions","onPan","getInitialScaleBounds","scaleBounds","getZoomedScaleBounds","isZoomedOrPanned","originalMin","originalMax","isZoomingOrPanningState","isZoomingOrPanning","filterNextClick","clamp","removeHandler","handler","target","removeEventListener","addHandler","oldHandler","listener","passive","addEventListener","mouseMove","dragStart","dragEnd","draw","keyDown","getPointPosition","canvas","canvasArea","getBoundingClientRect","clientX","clientY","getRelativePosition","zoomStart","onZoomStart","onZoomRejected","mouseDown","legend","_isPointInArea","button","drag","ownerDocument","window","document","applyAspectRatio","begin","end","aspectRatio","ratio","applyMinMaxProps","rect","points","getRelativePoints","pointEvents","maintainAspectRatio","computeDragRect","chartWidth","chartHeight","zoomX","zoomY","mouseUp","threshold","distanceX","distanceY","distance","sqrt","wheelPreconditions","wheel","cancelable","preventDefault","deltaY","speed","percentage","addDebouncedHandler","name","addListeners","wheelOptions","dragOptions","removeListeners","createEnabler","_recognizer","srcEvent","pointerType","onPanRejected","pinchAxes","pinchX","pinchY","p","handlePinch","e","pointers","zoomPercent","pinch","startPinch","endPinch","handlePan","deltaX","panScales","map","filter","startPan","onPanStart","endPan","onPanComplete","hammers","startHammer","mc","Hammer","Manager","add","Pinch","on","Pan","enable","stopHammer","remove","destroy","hammerOptionsChanged","oldOptions","newOptions","oldPan","oldZoom","newPan","newZoom","defaults","drawTime","caller","ctx","save","beginPath","fillStyle","backgroundColor","fillRect","borderWidth","lineWidth","strokeStyle","borderColor","strokeRect","restore","bindApi","args","version","start","_args","prototype","hasOwnProperty","call","console","warn","beforeEvent","beforeUpdate","previousOptions","beforeDatasetsDraw","afterDatasetsDraw","beforeDraw","afterDraw","stop","Chart","register","Zoom"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* @thewhitehaven04/chartjs-plugin-zoom v2.2.10
|
|
3
|
+
* https://www.chartjs.org/chartjs-plugin-zoom/2.2.10/
|
|
4
|
+
* (c) 2016-2026 chartjs-plugin-zoom Contributors
|
|
5
|
+
* Released under the MIT License
|
|
6
|
+
*/
|
|
7
|
+
!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n(require("chart.js"),require("hammerjs"),require("chart.js/helpers")):"function"==typeof define&&define.amd?define(["chart.js","hammerjs","chart.js/helpers"],n):(t="undefined"!=typeof globalThis?globalThis:t||self).ChartZoom=n(t.Chart,t.Hammer,t.Chart.helpers)}(this,(function(t,n,e){"use strict";const o=t=>`${t}Key`,i=t=>t?.enabled&&t.modifierKey?t.modifierKey:void 0,a=(t,n)=>t&&n[o(t)],r=(t,n)=>t&&!n[o(t)];function s(t,n,e){return void 0===t||("string"==typeof t?-1!==t.indexOf(n):"function"==typeof t&&-1!==t({chart:e}).indexOf(n))}function c(t,n){return"function"==typeof t&&(t=t({chart:n})),"string"==typeof t?{x:-1!==t.indexOf("x"),y:-1!==t.indexOf("y")}:{x:!1,y:!1}}function l(t,n,e){const{mode:o="xy",scaleMode:i,overScaleMode:a}=t||{},r=function({x:t,y:n},e){const o=e.scales,i=Object.keys(o);for(let e=0;e<i.length;e++){const a=o[i[e]];if(n>=a.top&&n<=a.bottom&&t>=a.left&&t<=a.right)return a}return null}(n,e),s=c(o,e),l=c(i,e);return((t,n,e,o)=>{if(!n)return;const i=c(n,t);for(const t of["x","y"])i[t]&&(e[t]=o[t],o[t]=!1)})(e,a,l,s),r&&l[r.axis]?[r]:((t,n)=>{const e=[];for(const o of Object.values(t.scales))n[o.axis]&&e.push(o);return e||Object.values(t.scales)})(e,s)}const m=new WeakMap;function u(t){let n=m.get(t);return n||(n={originalScaleLimits:{},updatedScaleLimits:{},handlers:{},options:{},targets:{},panDelta:{},dragging:!1,panning:!1},m.set(t,n)),n}const d=t=>void 0===t||isNaN(t);function f(t,n,o,i){const a=o&&e.isNumber(t)&&e.isNumber(n)?Math.max(0,Math.min(1,(t-n)/o)):0;return{min:i*a,max:i*(1-a)}}function p(t,n){const e=t.isHorizontal()?n.x:n.y;return t.getValueForPixel(e)}function h(t,n,e){const o=t.max-t.min,i=o*(n-1);return f(p(t,e),t.min,o,i)}function g(t,n,o,i,a){let r=o[i];if("original"===r){const o=t.originalScaleLimits[n.id][i];if(e.isNumber(o.options))return o.options;if(!e.isNullOrUndef(o.options)){const t=n.parse(o.options);if(e.isNumber(t))return t}r=o.scale}return e.valueOrDefault(r,a)}function x(t,{min:n,max:o},i,a=!1,r=!1){const s=u(t.chart),{options:c}=t,l=function(t,n){return n?.[t.id]||n?.[t.axis]||{}}(t,i),{minRange:m=0}=l,d=g(s,t,l,"min",-1/0),f=g(s,t,l,"max",1/0);if(r&&(n<d||o>f))return!0;const p=t.max-t.min,h=a?Math.max(o-n,m):p;if(a&&h===m&&p<=m)return!0;const x=function(t,{min:n,max:o,minLimit:i,maxLimit:a},r,s){const c=(t-o+n)/2;n-=c,o+=c;const l={min:"original",max:"original"},m=g(r,s,l,"min",-1/0),u=g(r,s,l,"max",1/0),d=t/1e6;return e.almostEquals(n,m,d)&&(n=m),e.almostEquals(o,u,d)&&(o=u),n<i?(n=i,o=Math.min(i+t,a)):o>a&&(o=a,n=Math.max(a-t,i)),{min:n,max:o}}(h,{min:n,max:o,minLimit:d,maxLimit:f},s,t);return c.min=x.min,c.max=x.max,s.updatedScaleLimits[t.id]=x,t.parse(x.min)!==t.min||t.parse(x.max)!==t.max}const y=t=>0===t||isNaN(t)?0:t<0?Math.min(Math.round(t),-1):Math.max(Math.round(t),1);const b={millisecond:0,second:500,minute:3e4,hour:18e5,day:432e5,week:3024e5,month:1296e6,quarter:5184e6,year:157248e5};function v(t,n,e,o=!1){const{min:i,max:a}=t;let r=0;if((t=>"time"===t.type)(t)){const n=t.options.time?.round;r=n?b[n]:0}const s=t.getValueForPixel(t.getPixelForValue(i+r)-n),c=t.getValueForPixel(t.getPixelForValue(a+r)-n);return!(!d(s)&&!d(c))||x(t,{min:s,max:c},e,o,!0)}function w(t,n,e){return v(t,n,e,!0)}const M={category:function(t,n,e,o){const i=h(t,n,e);return t.min===t.max&&n<1&&function(t){const n=t.getLabels().length-1;t.min>0&&(t.min-=1),t.max<n&&(t.max+=1)}(t),x(t,{min:t.min+y(i.min),max:t.max-y(i.max)},o,!0)},default:function(t,n,e,o){const i=h(t,n,e);return x(t,{min:t.min+i.min,max:t.max-i.max},o,!0)},logarithmic:function(t,n,e,o){const i=function(t,n,e){const o=p(t,e);if(void 0===o)return{min:t.min,max:t.max};const i=Math.log10(t.min),a=Math.log10(t.max),r=a-i,s=f(Math.log10(o),i,r,r*(n-1));return{min:Math.pow(10,i+s.min),max:Math.pow(10,a-s.max)}}(t,n,e);return x(t,i,o,!0)}},z={default:function(t,n,e,o){return x(t,function(t,n,e){const o=t.getValueForPixel(n)??t.min,i=t.getValueForPixel(e)??t.max;return{min:Math.min(o,i),max:Math.max(o,i)}}(t,n,e),o,!0)}},S={category:function(t,n,e){const o=t.getLabels().length-1;let{min:i,max:a}=t;const r=Math.max(a-i,1),s=Math.round(function(t){return t.isHorizontal()?t.width:t.height}(t)/Math.max(r,10)),c=Math.round(Math.abs(n/s));let l;return n<-s?(a=Math.min(a+c,o),i=1===r?a:a-r,l=a===o):n>s&&(i=Math.max(0,i-c),a=1===r?i:i+r,l=0===i),x(t,{min:i,max:a},e)||Boolean(l)},default:v,logarithmic:w,timeseries:w};function P(t,n,e){const{id:o,options:{min:i,max:a}}=t;if(!n[o]||!e[o])return!0;const r=e[o];return r.min!==i||r.max!==a}function j(t,n){for(const e of Object.keys(t))n[e]||delete t[e]}function O(t,n){const{scales:e}=t,{originalScaleLimits:o,updatedScaleLimits:i}=n;for(const t of Object.values(e))P(t,o,i)&&(o[t.id]={min:{scale:t.min,options:t.options.min},max:{scale:t.max,options:t.options.max}});return j(o,e),j(i,e),o}function k(t,n,e,o){const i=M[t.type]||M.default;i?.(t,n,e,o)}function C(t,n,e,o){const i=z[t.type]||z.default;i?.(t,n,e,o)}function Z(t){const n=t.chartArea;return{x:(n.left+n.right)/2,y:(n.top+n.bottom)/2}}function D(t,n,e="none",o="api"){const{x:i=1,y:a=1,focalPoint:r=Z(t)}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{limits:c={},zoom:m}}=s;O(t,s);const d=1!==i,f=1!==a,p=l(m,r,t);for(const t of p)t.isHorizontal()&&d?k(t,i,r,c):!t.isHorizontal()&&f&&k(t,a,r,c);t.update(e),m?.onZoom?.({chart:t,trigger:o,amount:{x:i,y:a,focalPoint:r}})}function R(t,n,e,o="none",i="api"){const a=u(t),{options:{limits:r={},zoom:c={}}}=a,{mode:l="xy"}=c;O(t,a);const m=s(l,"x",t),d=s(l,"y",t);for(const o of Object.values(t.scales))o.isHorizontal()&&m?C(o,n.x,e.x,r):!o.isHorizontal()&&d&&C(o,n.y,e.y,r);t.update(o),c.onZoom?.({chart:t,trigger:i})}function L(t,n){const o=t.originalScaleLimits[n];if(!o)return;const{min:i,max:a}=o;return e.isNumber(a.options)&&e.isNumber(i.options)?a.options-i.options:e.isNumber(a.scale)&&e.isNumber(i.scale)?a.scale-i.scale:void 0}function N(t,n,o,i){const{panDelta:a}=i,r=a[t.id]||0;e.sign(r)===e.sign(n)&&(n+=r);const s=S[t.type]||S.default;s?.(t,n,o)?a[t.id]=0:a[t.id]=n}function E(t,n,e,o="none",i="other"){const{x:a=0,y:r=0}="number"==typeof n?{x:n,y:n}:n,s=u(t),{options:{pan:c,limits:l={}}}=s,{onPan:m}=c||{};O(t,s);const d=0!==a,f=0!==r,p=e||Object.values(t.scales);for(const t of p)t.isHorizontal()&&d?N(t,a,l,s):!t.isHorizontal()&&f&&N(t,r,l,s);t.update(o),m?.({chart:t,trigger:i,delta:{x:a,y:r}})}function F(t){const n=u(t);O(t,n);const e={};for(const o of Object.keys(t.scales)){const{min:t,max:i}=n.originalScaleLimits[o]||{min:{},max:{}};e[o]={min:t.scale,max:i.scale}}return e}function A(t){return t.panning||t.dragging}const H=(t,n,e)=>Math.min(e,Math.max(n,t));function T(t,n){const{handlers:e,targets:o}=u(t),i=e[n],a=o[n];i&&a&&(a.removeEventListener(n,i),delete e[n])}function Y(t,n,e,o){const{handlers:i,options:a,targets:r}=u(t);if(i[e]&&r[e]===n)return;T(t,e);const s=i[e]=n=>o(t,n,a);r[e]=n;const c="wheel"!==e&&void 0;n.addEventListener(e,s,{passive:c})}function B(t,n){const e=u(t);e.dragStart&&(e.dragging=!0,e.dragEnd=n,t.draw())}function q(t,n){const e=u(t);e.dragStart&&"Escape"===n.key&&(T(t,"keydown"),e.dragging=!1,e.dragStart=e.dragEnd=void 0,t.draw())}function V(t,n){if(t.target!==n.canvas){const e=n.canvas.getBoundingClientRect();return{x:t.clientX-e.left,y:t.clientY-e.top}}return e.getRelativePosition(t,n)}function X(t,n,e){const{onZoomStart:o,onZoomRejected:i}=e;if(o){const e=V(n,t);if(!1===o?.({chart:t,event:n,point:e}))return i?.({chart:t,event:n}),!1}}function K(t,n){if(t.legend){const o=e.getRelativePosition(n,t);if(e._isPointInArea(o,t.legend))return}const o=u(t),{pan:s,zoom:c={}}=o.options;if(0!==n.button||a(i(s),n)||r(i(c.drag),n))return c.onZoomRejected?.({chart:t,event:n});!1!==X(t,n,c)&&(o.dragStart=n,Y(t,t.canvas.ownerDocument,"mousemove",B),Y(t,window.document,"keydown",q))}function W(t,n,e,{min:o,max:i,prop:a}){t[o]=H(Math.min(e.begin[a],e.end[a]),n[o],n[i]),t[i]=H(Math.max(e.begin[a],e.end[a]),n[o],n[i])}function I(t,n,e){const o={begin:V(n.dragStart,t),end:V(n.dragEnd,t)};if(e){!function({begin:t,end:n},e){let o=n.x-t.x,i=n.y-t.y;const a=Math.abs(o/i);a>e?o=Math.sign(o)*Math.abs(i*e):a<e&&(i=Math.sign(i)*Math.abs(o/e)),n.x=t.x+o,n.y=t.y+i}(o,t.chartArea.width/t.chartArea.height)}return o}function U(t,n,e,o){const i=s(n,"x",t),a=s(n,"y",t),{top:r,left:c,right:l,bottom:m,width:u,height:d}=t.chartArea,f={top:r,left:c,right:l,bottom:m},p=I(t,e,o&&i&&a);i&&W(f,t.chartArea,p,{min:"left",max:"right",prop:"x"}),a&&W(f,t.chartArea,p,{min:"top",max:"bottom",prop:"y"});const h=f.right-f.left,g=f.bottom-f.top;return{...f,width:h,height:g,zoomX:i&&h?1+(u-h)/u:1,zoomY:a&&g?1+(d-g)/d:1}}function $(t,n){const e=u(t);if(!e.dragStart)return;T(t,"mousemove");const{mode:o,onZoomComplete:i,drag:a}=e.options.zoom??{},{threshold:r=0,maintainAspectRatio:c}=a??{},l=U(t,o,{dragStart:e.dragStart,dragEnd:n},c),m=s(o,"x",t)?l.width:0,d=s(o,"y",t)?l.height:0,f=Math.sqrt(m*m+d*d);if(e.dragStart=e.dragEnd=void 0,f<=r)return e.dragging=!1,void t.draw();R(t,{x:l.left,y:l.top},{x:l.right,y:l.bottom},"zoom","drag"),e.dragging=!1,e.filterNextClick=!0,i?.({chart:t})}function _(t,n){const{handlers:{onZoomComplete:e},options:{zoom:o={}}}=u(t);if(!function(t,n,e){if(r(i(e.wheel),n))e.onZoomRejected?.({chart:t,event:n});else if(!1!==X(t,n,e)&&(n.cancelable&&n.preventDefault(),void 0!==n.deltaY))return!0}(t,n,o))return;const a=n.target?.getBoundingClientRect(),s=o?.wheel?.speed??.1,c=n.deltaY>=0?2-1/(1-s):1+s;D(t,{x:c,y:c,focalPoint:{x:n.clientX-a.left,y:n.clientY-a.top}},"zoom","wheel"),e?.(n)}function G(t,n,e,o){e&&(u(t).handlers[n]=function(t,n){let e;return function(){return clearTimeout(e),e=setTimeout(t,n),n}}((()=>e?.({chart:t})),o))}function J(t,n){return function(e,o){const{pan:s,zoom:c={}}=n.options;if(!s||!s.enabled)return!1;const l=o&&o.srcEvent;return!l||(!(!n.panning&&"mouse"===o.pointerType&&(r(i(s),l)||a(i(c.drag),l)))||(s.onPanRejected?.({chart:t,event:o}),!1))}}function Q(t,n,e){if(n.scale){const{center:o,pointers:i}=e,a=1/n.scale*e.scale,r=e.target.getBoundingClientRect(),c=function(t,n){const e=Math.abs(t.clientX-n.clientX),o=Math.abs(t.clientY-n.clientY),i=e/o;let a,r;return i>.3&&i<1.7?a=r=!0:e>o?a=!0:r=!0,{x:a,y:r}}(i[0],i[1]),l=n.options.zoom?.mode;D(t,{x:c.x&&s(l,"x",t)?a:1,y:c.y&&s(l,"y",t)?a:1,focalPoint:{x:o.x-r.left,y:o.y-r.top}},"zoom","pinch"),n.scale=e.scale}}function tt(t,n,e){const o=n.delta;o&&(n.panning=!0,E(t,{x:e.deltaX-o.x,y:e.deltaY-o.y},n.panScales&&n.panScales.map((n=>t.scales[n])).filter(Boolean)),n.delta={x:e.deltaX,y:e.deltaY})}const nt=new WeakMap;function et(t,o){const i=u(t),a=t.canvas,{pan:r,zoom:s}=o,c=new n.Manager(a);s?.pinch?.enabled&&(c.add(new n.Pinch),c.on("pinchstart",(n=>function(t,n,o){if(n.options.zoom?.pinch?.enabled){const i=e.getRelativePosition(o.srcEvent,t);!1===n.options.zoom?.onZoomStart?.({chart:t,event:o.srcEvent,point:i})?(n.scale=null,n.options.zoom?.onZoomRejected?.({chart:t,event:o.srcEvent})):n.scale=1}}(t,i,n))),c.on("pinch",(n=>Q(t,i,n))),c.on("pinchend",(n=>function(t,n,e){n.scale&&(Q(t,n,e),n.scale=null,n.options.zoom?.onZoomComplete?.({chart:t}))}(t,i,n)))),r&&r.enabled&&(c.add(new n.Pan({threshold:r.threshold,enable:J(t,i)})),c.on("panstart",(n=>function(t,n,e){const{enabled:o,onPanStart:i,onPanRejected:a}=n.options.pan??{};if(!o)return;const r=e.target.getBoundingClientRect(),s={x:e.center.x-r.left,y:e.center.y-r.top};if(!1===i?.({chart:t,event:e,point:s}))return a?.({chart:t,event:e});n.panScales=l(n.options.pan,s,t).map((t=>t.id)),n.delta={x:0,y:0},tt(t,n,e)}(t,i,n))),c.on("panmove",(n=>tt(t,i,n))),c.on("panend",(()=>function(t,n){n.delta=null,n.panning&&(n.panning=!1,n.filterNextClick=!0,n.options.pan?.onPanComplete?.({chart:t}))}(t,i)))),nt.set(t,c)}function ot(t){const n=nt.get(t);n&&(n.remove("pinchstart"),n.remove("pinch"),n.remove("pinchend"),n.remove("panstart"),n.remove("pan"),n.remove("panend"),n.destroy(),nt.delete(t))}function it(t,n,e){const o=e.zoom?.drag,{dragStart:i,dragEnd:a}=u(t);if(o?.drawTime!==n||!i||!a)return;const{left:r,top:s,width:c,height:l}=U(t,e.zoom?.mode,{dragStart:i,dragEnd:a},o.maintainAspectRatio),m=t.ctx;m.save(),m.beginPath(),m.fillStyle=o.backgroundColor||"rgba(225,225,225,0.3)",m.fillRect(r,s,c,l),o.borderWidth&&(m.lineWidth=o.borderWidth,m.strokeStyle=o.borderColor||"rgba(225,225,225)",m.strokeRect(r,s,c,l)),m.restore()}const at=t=>{t.pan=(n,e,o)=>E(t,n,e,o,"api"),t.zoom=(n,e)=>D(t,n,e),t.zoomRect=(n,e,o)=>R(t,n,e,o),t.zoomScale=(n,e,o)=>function(t,n,e,o="none",i="api"){const a=u(t);O(t,a),x(t.scales[n],e,void 0,!0),t.update(o),a.options.zoom?.onZoom?.({chart:t,trigger:i})}(t,n,e,o),t.resetZoom=n=>function(t,n="default"){const e=u(t),o=O(t,e);for(const n of Object.values(t.scales)){const t=n.options;o[n.id]?(t.min=o[n.id].min.options,t.max=o[n.id].max.options):(delete t.min,delete t.max),delete e.updatedScaleLimits[n.id]}t.update(n),e.options.zoom?.onZoomComplete?.({chart:t})}(t,n),t.getZoomLevel=()=>function(t){const n=u(t);let e=1,o=1;for(const i of Object.values(t.scales)){const t=L(n,i.id);if(t){const n=Math.round(t/(i.max-i.min)*100)/100;e=Math.min(e,n),o=Math.max(o,n)}}return e<1?e:o}(t),t.getInitialScaleBounds=()=>F(t),t.getZoomedScaleBounds=()=>function(t){const n=u(t),e={};for(const o of Object.keys(t.scales))e[o]=n.updatedScaleLimits[o];return e}(t),t.isZoomedOrPanned=()=>function(t){const n=F(t);for(const e of Object.keys(t.scales)){const{min:o,max:i}=n[e];if(void 0!==o&&t.scales[e].min!==o)return!0;if(void 0!==i&&t.scales[e].max!==i)return!0}return!1}(t),t.isZoomingOrPanning=()=>function(t){const n=u(t);return!(!A(n)&&!n.filterNextClick)}(t)};var rt={id:"zoom",version:"2.2.10",defaults:{pan:{enabled:!1,mode:"xy",threshold:10,modifierKey:null},zoom:{wheel:{enabled:!1,speed:.1,modifierKey:null},drag:{enabled:!1,drawTime:"beforeDatasetsDraw",modifierKey:null},pinch:{enabled:!1},mode:"xy"}},start(t,e,o){u(t).options=o,Object.prototype.hasOwnProperty.call(o.zoom,"enabled")&&console.warn("The option `zoom.enabled` is no longer supported. Please use `zoom.wheel.enabled`, `zoom.drag.enabled`, or `zoom.pinch.enabled`."),(Object.prototype.hasOwnProperty.call(o.zoom,"overScaleMode")||Object.prototype.hasOwnProperty.call(o.pan,"overScaleMode"))&&console.warn("The option `overScaleMode` is deprecated. Please use `scaleMode` instead (and update `mode` as desired)."),n&&et(t,o),at(t)},beforeEvent(t,{event:n}){const e=u(t);return!A(e)&&("click"!==n.type&&"mouseup"!==n.type||!e.filterNextClick?void 0:(e.filterNextClick=!1,!1))},beforeUpdate(t,n,e){const o=u(t),i=o.options;o.options=e,function(t,n){const{pan:e,zoom:o}=t,{pan:i,zoom:a}=n;return o?.pinch?.enabled!==a?.pinch?.enabled||e?.enabled!==i?.enabled||e?.threshold!==i?.threshold}(i,e)&&(ot(t),et(t,e)),function(t,n){const e=t.canvas,{wheel:o,drag:i,onZoomComplete:a}=n.zoom??{};o?.enabled?(Y(t,e,"wheel",_),G(t,"onZoomComplete",a,250)):T(t,"wheel"),i?.enabled?(Y(t,e,"mousedown",K),Y(t,e.ownerDocument,"mouseup",$)):(T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"keydown"))}(t,e)},beforeDatasetsDraw(t,n,e){it(t,"beforeDatasetsDraw",e)},afterDatasetsDraw(t,n,e){it(t,"afterDatasetsDraw",e)},beforeDraw(t,n,e){it(t,"beforeDraw",e)},afterDraw(t,n,e){it(t,"afterDraw",e)},stop(t){!function(t){T(t,"mousedown"),T(t,"mousemove"),T(t,"mouseup"),T(t,"wheel"),T(t,"click"),T(t,"keydown")}(t),n&&ot(t),function(t){m.delete(t)}(t)},panFunctions:S,zoomFunctions:M,zoomRectFunctions:z};return t.Chart.register(rt),rt}));
|
|
8
|
+
//# sourceMappingURL=chartjs-plugin-zoom.min.js.map
|