Skip to content

Commit 595fd6c

Browse files
committed
Merge remote-tracking branch 'origin/dev' into benelan/icon-ci-fixes
* origin/dev: fix(label): prevent focusing and toggling elements slotted within a label when a text selection occurs (#9990)
2 parents 5c25f75 + 49d6ae1 commit 595fd6c

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

packages/calcite-components/src/components/label/label.e2e.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { newE2EPage } from "@stencil/core/testing";
22
import { renders, hidden } from "../../tests/commonTests";
3+
import { isElementFocused } from "../../tests/utils";
4+
import { html } from "../../../support/formatting";
35

46
describe("calcite-label", () => {
57
describe("renders", () => {
@@ -145,6 +147,28 @@ describe("calcite-label", () => {
145147
expect(element).toEqualAttribute("layout", "inline-space-between");
146148
});
147149

150+
it("should not focus on the slotted form element when a label's text is selected", async () => {
151+
const page = await newE2EPage();
152+
await page.setContent(html`
153+
<calcite-label layout="inline-space-between">
154+
Label text
155+
<calcite-input></calcite-input>
156+
</calcite-label>
157+
`);
158+
159+
await page.$eval("calcite-label", (el) => {
160+
const selection = window.getSelection();
161+
selection.removeAllRanges();
162+
const range = document.createRange();
163+
range.selectNode(el);
164+
selection.addRange(range);
165+
el.click();
166+
});
167+
await page.waitForChanges();
168+
169+
expect(await isElementFocused(page, "calcite-input")).toBe(false);
170+
});
171+
148172
// TODO: need shadow DOM equivalent update on helper
149173
it("clicking sibling label focuses input when both are inside a shadowRoot", async () => {
150174
const page = await newE2EPage();

packages/calcite-components/src/components/label/label.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,10 @@ export class Label {
7777
//--------------------------------------------------------------------------
7878

7979
labelClickHandler = (event: MouseEvent): void => {
80+
if (window.getSelection()?.type === "Range") {
81+
return;
82+
}
83+
8084
this.calciteInternalLabelClick.emit({
8185
sourceEvent: event,
8286
});

0 commit comments

Comments
 (0)