Skip to content

Commit 942ab86

Browse files
authored
Fix labelledby to support multiple elements on page (#407)
* Fix labelledby to support multiple elements on page * Lint * Update API
1 parent 4964661 commit 942ab86

File tree

3 files changed

+15
-2
lines changed

3 files changed

+15
-2
lines changed

packages/widgets/src/accordionpanel.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,10 @@ export namespace AccordionPanel {
372372
* The default implementation of `IRenderer`.
373373
*/
374374
export class Renderer extends SplitPanel.Renderer implements IRenderer {
375+
constructor() {
376+
super();
377+
this._uuid = ++Renderer._nInstance;
378+
}
375379
/**
376380
* A selector which matches any title node in the accordion.
377381
*/
@@ -430,12 +434,14 @@ export namespace AccordionPanel {
430434
createTitleKey(data: Title<Widget>): string {
431435
let key = this._titleKeys.get(data);
432436
if (key === undefined) {
433-
key = `title-key-${this._titleID++}`;
437+
key = `title-key-${this._uuid}-${this._titleID++}`;
434438
this._titleKeys.set(data, key);
435439
}
436440
return key;
437441
}
438442

443+
private static _nInstance = 0;
444+
private readonly _uuid: number;
439445
private _titleID = 0;
440446
private _titleKeys = new WeakMap<Title<Widget>, string>();
441447
}

packages/widgets/src/tabbar.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1519,6 +1519,9 @@ export namespace TabBar {
15191519
* Subclasses are free to reimplement rendering methods as needed.
15201520
*/
15211521
export class Renderer implements IRenderer<any> {
1522+
constructor() {
1523+
this._uuid = ++Renderer._nInstance;
1524+
}
15221525
/**
15231526
* A selector which matches the close icon node in a tab.
15241527
*/
@@ -1607,7 +1610,7 @@ export namespace TabBar {
16071610
createTabKey(data: IRenderData<any>): string {
16081611
let key = this._tabKeys.get(data.title);
16091612
if (key === undefined) {
1610-
key = `tab-key-${this._tabID++}`;
1613+
key = `tab-key-${this._uuid}-${this._tabID++}`;
16111614
this._tabKeys.set(data.title, key);
16121615
}
16131616
return key;
@@ -1680,6 +1683,8 @@ export namespace TabBar {
16801683
return extra ? `${name} ${extra}` : name;
16811684
}
16821685

1686+
private static _nInstance = 0;
1687+
private readonly _uuid: number;
16831688
private _tabID = 0;
16841689
private _tabKeys = new WeakMap<Title<any>, string>();
16851690
}

review/api/widgets.api.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ export namespace AccordionPanel {
7373
export type IRenderer = AccordionLayout.IRenderer;
7474
export type Orientation = SplitLayout.Orientation;
7575
export class Renderer extends SplitPanel.Renderer implements IRenderer {
76+
constructor();
7677
createCollapseIcon(data: Title<Widget>): HTMLElement;
7778
createSectionTitle(data: Title<Widget>): HTMLElement;
7879
createTitleKey(data: Title<Widget>): string;
@@ -1133,6 +1134,7 @@ export namespace TabBar {
11331134
*/
11341135
| 'select-previous-tab';
11351136
export class Renderer implements IRenderer<any> {
1137+
constructor();
11361138
readonly closeIconSelector = ".lm-TabBar-tabCloseIcon";
11371139
createIconClass(data: IRenderData<any>): string;
11381140
createTabARIA(data: IRenderData<any>): ElementARIAAttrs;

0 commit comments

Comments
 (0)