Skip to content

Commit

Permalink
fix: components should only react to primary button pointer events. (#…
Browse files Browse the repository at this point in the history
…5519)

* fix: components should only react to primary pointer events.

* cleanup. add pointerdown

* fix test

* make sure primary?

* review fixes
  • Loading branch information
driskull authored Oct 21, 2022
1 parent f6e192a commit ed55933
Show file tree
Hide file tree
Showing 12 changed files with 148 additions and 39 deletions.
14 changes: 11 additions & 3 deletions src/components/action-menu/action-menu.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
State
} from "@stencil/core";
import { CSS, SLOTS, ICONS } from "./resources";
import { focusElement, toAriaBoolean } from "../../utils/dom";
import { focusElement, isPrimaryPointerButton, toAriaBoolean } from "../../utils/dom";
import { Fragment, VNode } from "@stencil/core/internal";
import { getRoundRobinIndex } from "../../utils/array";
import { guid } from "../../utils/guid";
Expand Down Expand Up @@ -121,7 +121,11 @@ export class ActionMenu {
@Event({ cancelable: false }) calciteActionMenuOpenChange: EventEmitter<DeprecatedEventPayload>;

@Listen("pointerdown", { target: "window" })
closeCalciteActionMenuOnClick(event: Event): void {
closeCalciteActionMenuOnClick(event: PointerEvent): void {
if (!isPrimaryPointerButton(event)) {
return;
}

const composedPath = event.composedPath();

if (composedPath.includes(this.el)) {
Expand Down Expand Up @@ -329,7 +333,11 @@ export class ActionMenu {
this.setFocus();
};

menuButtonClick = (): void => {
menuButtonClick = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

this.toggleOpen();
};

Expand Down
12 changes: 10 additions & 2 deletions src/components/color-picker/color-picker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import {
RGB_LIMITS,
TEXT
} from "./resources";
import { Direction, focusElement, getElementDir } from "../../utils/dom";
import { Direction, focusElement, getElementDir, isPrimaryPointerButton } from "../../utils/dom";
import { colorEqual, CSSColorMode, Format, normalizeHex, parseMode, SupportedMode } from "./utils";
import { throttle } from "lodash-es";

Expand Down Expand Up @@ -552,6 +552,10 @@ export class ColorPicker implements InteractiveComponent {
};

private handleColorFieldAndSliderPointerDown = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

const { offsetX, offsetY } = event;
const region = this.getCanvasRegion(offsetY);

Expand All @@ -575,7 +579,11 @@ export class ColorPicker implements InteractiveComponent {
this.fieldAndSliderRenderingContext.canvas.getBoundingClientRect();
};

private globalPointerUpHandler = (): void => {
private globalPointerUpHandler = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

const previouslyDragging = this.sliderThumbState === "drag" || this.hueThumbState === "drag";

this.hueThumbState = "idle";
Expand Down
8 changes: 6 additions & 2 deletions src/components/combobox/combobox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ import {
} from "../../utils/form";
import { createObserver } from "../../utils/observers";
import { InteractiveComponent, updateHostInteraction } from "../../utils/interactive";
import { toAriaBoolean } from "../../utils/dom";
import { isPrimaryPointerButton, toAriaBoolean } from "../../utils/dom";
import {
OpenCloseComponent,
connectOpenCloseComponent,
Expand Down Expand Up @@ -234,7 +234,11 @@ export class Combobox
//--------------------------------------------------------------------------

@Listen("pointerdown", { target: "document" })
documentClickHandler(event: Event): void {
documentClickHandler(event: PointerEvent): void {
if (!isPrimaryPointerButton(event)) {
return;
}

this.setInactiveIfNotContained(event);
}

Expand Down
6 changes: 3 additions & 3 deletions src/components/dropdown/dropdown.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import {
} from "@stencil/core";
import { ItemKeyboardEvent, Selection } from "./interfaces";

import { focusElement, toAriaBoolean } from "../../utils/dom";
import { focusElement, isPrimaryPointerButton, toAriaBoolean } from "../../utils/dom";
import {
positionFloatingUI,
FloatingCSS,
Expand Down Expand Up @@ -291,8 +291,8 @@ export class Dropdown implements InteractiveComponent, OpenCloseComponent, Float
@Event({ cancelable: false }) calciteDropdownOpen: EventEmitter<void>;

@Listen("pointerdown", { target: "window" })
closeCalciteDropdownOnClick(event: Event): void {
if (!this.open || event.composedPath().includes(this.el)) {
closeCalciteDropdownOnClick(event: PointerEvent): void {
if (!isPrimaryPointerButton(event) || !this.open || event.composedPath().includes(this.el)) {
return;
}

Expand Down
18 changes: 16 additions & 2 deletions src/components/input-number/input-number.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ import {
VNode,
Watch
} from "@stencil/core";
import { getElementDir, getElementProp, getSlotted, setRequestedIcon } from "../../utils/dom";
import {
getElementDir,
getElementProp,
getSlotted,
isPrimaryPointerButton,
setRequestedIcon
} from "../../utils/dom";

import { CSS, SLOTS, TEXT } from "./resources";
import { InputPlacement } from "./interfaces";
Expand Down Expand Up @@ -641,11 +647,19 @@ export class InputNumber
}, valueNudgeDelayInMs);
};

private nudgeButtonPointerUpAndOutHandler = (): void => {
private nudgeButtonPointerUpAndOutHandler = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

window.clearInterval(this.nudgeNumberValueIntervalId);
};

private nudgeButtonPointerDownHandler = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

event.preventDefault();
const direction = (event.target as HTMLDivElement).dataset.adjustment as NumberNudgeDirection;
if (!this.disabled) {
Expand Down
12 changes: 11 additions & 1 deletion src/components/input/input.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,13 @@ import {
VNode,
Watch
} from "@stencil/core";
import { getElementDir, getElementProp, getSlotted, setRequestedIcon } from "../../utils/dom";
import {
getElementDir,
getElementProp,
getSlotted,
isPrimaryPointerButton,
setRequestedIcon
} from "../../utils/dom";

import { CSS, INPUT_TYPE_ICONS, SLOTS, TEXT } from "./resources";
import { InputPlacement } from "./interfaces";
Expand Down Expand Up @@ -720,6 +726,10 @@ export class Input
};

private numberButtonPointerDownHandler = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

event.preventDefault();
const direction = (event.target as HTMLDivElement).dataset.adjustment as NumberNudgeDirection;
if (!this.disabled) {
Expand Down
9 changes: 6 additions & 3 deletions src/components/popover/PopoverManager.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import { isPrimaryPointerButton } from "../../utils/dom";
import { ReferenceElement } from "../../utils/floating-ui";
import { isActivationKey } from "../../utils/key";

Expand Down Expand Up @@ -52,7 +53,7 @@ export default class PopoverManager {
return registeredElements.get(registeredElement);
};

private togglePopovers = (event: KeyboardEvent | MouseEvent): void => {
private togglePopovers = (event: KeyboardEvent | PointerEvent): void => {
const composedPath = event.composedPath();
const togglePopover = this.queryPopover(composedPath);

Expand All @@ -75,8 +76,10 @@ export default class PopoverManager {
this.togglePopovers(event);
};

private clickHandler = (event: MouseEvent): void => {
this.togglePopovers(event);
private clickHandler = (event: PointerEvent): void => {
if (isPrimaryPointerButton(event)) {
this.togglePopovers(event);
}
};

private addListeners(): void {
Expand Down
10 changes: 9 additions & 1 deletion src/components/shell-panel/shell-panel.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
} from "@stencil/core";
import { CSS, SLOTS, TEXT } from "./resources";
import { Position, Scale } from "../interfaces";
import { getSlotted, getElementDir } from "../../utils/dom";
import { getSlotted, getElementDir, isPrimaryPointerButton } from "../../utils/dom";
import { clamp } from "../../utils/math";
import {
ConditionalSlotComponent,
Expand Down Expand Up @@ -357,6 +357,10 @@ export class ShellPanel implements ConditionalSlotComponent {
};

separatorPointerUp = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

event.preventDefault();
document.removeEventListener("pointerup", this.separatorPointerUp);
document.removeEventListener("pointermove", this.separatorPointerMove);
Expand All @@ -367,6 +371,10 @@ export class ShellPanel implements ConditionalSlotComponent {
};

separatorPointerDown = (event: PointerEvent): void => {
if (!isPrimaryPointerButton(event)) {
return;
}

event.preventDefault();
const { separatorEl } = this;

Expand Down
Loading

0 comments on commit ed55933

Please sign in to comment.