@ni/nimble-components 31.1.0 → 31.1.2

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.
@@ -2,6 +2,7 @@ import { __decorate } from "tslib";
2
2
  import { attr, observable } from '@microsoft/fast-element';
3
3
  import { FoundationElement } from '@microsoft/fast-foundation';
4
4
  import { ColumnInternals } from './models/column-internals';
5
+ import { slotTextContent } from '../../utilities/models/slot-text-content';
5
6
  /**
6
7
  * The base class for table columns
7
8
  */
@@ -26,10 +27,7 @@ export class TableColumn extends FoundationElement {
26
27
  }
27
28
  /** @internal */
28
29
  get headerTextContent() {
29
- return this.contentSlot
30
- .assignedNodes()
31
- .map(node => node.textContent?.trim())
32
- .join(' ');
30
+ return slotTextContent(this.contentSlot);
33
31
  }
34
32
  connectedCallback() {
35
33
  super.connectedCallback();
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/base/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACH,eAAe,EAElB,MAAM,2BAA2B,CAAC;AAInC;;GAEG;AACH,MAAM,OAAgB,WAGpB,SAAQ,iBAAiB;IAH3B;;QAII;;;;WAIG;QACa,oBAAe,GAG3B,IAAI,eAAe,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAYnD,iBAAY,GAAG,KAAK,CAAC;QAE5B,gBAAgB;QAET,gBAAW,GAAG,KAAK,CAAC;IA6B/B,CAAC;IAxBU,aAAa;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC;IACxD,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC;IAED,gBAAgB;IAChB,IAAW,iBAAiB;QACxB,OAAO,IAAI,CAAC,WAAW;aAClB,aAAa,EAAE;aACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;aACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAEe,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,oFAAoF;QACpF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CAGJ;AA1CU;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;6CACR;AAGlB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;mDACT;AAGxB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;oDACT;AAGzB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iDAC1B;AAIrB;IADN,UAAU;gDACgB","sourcesContent":["import { attr, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport {\n ColumnInternals,\n ColumnInternalsOptions\n} from './models/column-internals';\nimport type { TableColumnValidity } from './types';\nimport type { ColumnValidator } from './models/column-validator';\n\n/**\n * The base class for table columns\n */\nexport abstract class TableColumn<\n TColumnConfig = unknown,\n TColumnValidator extends ColumnValidator<[]> = ColumnValidator<[]>\n> extends FoundationElement {\n /**\n * @internal\n *\n * Column properties configurable by plugin authors\n */\n public readonly columnInternals: ColumnInternals<\n TColumnConfig,\n TColumnValidator\n > = new ColumnInternals(this.getColumnInternalsOptions());\n\n @attr({ attribute: 'column-id' })\n public columnId?: string;\n\n @attr({ attribute: 'action-menu-slot' })\n public actionMenuSlot?: string;\n\n @attr({ attribute: 'action-menu-label' })\n public actionMenuLabel?: string;\n\n @attr({ attribute: 'column-hidden', mode: 'boolean' })\n public columnHidden = false;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /** @internal */\n public contentSlot!: HTMLSlotElement;\n\n public checkValidity(): boolean {\n return this.columnInternals.validator.isColumnValid;\n }\n\n public get validity(): TableColumnValidity {\n return this.columnInternals.validator.getValidity();\n }\n\n /** @internal */\n public get headerTextContent(): string {\n return this.contentSlot\n .assignedNodes()\n .map(node => node.textContent?.trim())\n .join(' ');\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n\n // Done here to enforce consistency across headers as they may have custom templates\n this.setAttribute('slot', this.columnInternals.uniqueId);\n }\n\n protected abstract getColumnInternalsOptions(): ColumnInternalsOptions<TColumnValidator>;\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/table-column/base/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EACH,eAAe,EAElB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E;;GAEG;AACH,MAAM,OAAgB,WAGpB,SAAQ,iBAAiB;IAH3B;;QAII;;;;WAIG;QACa,oBAAe,GAG3B,IAAI,eAAe,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC,CAAC;QAYnD,iBAAY,GAAG,KAAK,CAAC;QAE5B,gBAAgB;QAET,gBAAW,GAAG,KAAK,CAAC;IA0B/B,CAAC;IArBU,aAAa;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,aAAa,CAAC;IACxD,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC;IAED,gBAAgB;IAChB,IAAW,iBAAiB;QACxB,OAAO,eAAe,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC7C,CAAC;IAEe,iBAAiB;QAC7B,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAE1B,oFAAoF;QACpF,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;CAGJ;AAvCU;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,CAAC;6CACR;AAGlB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;mDACT;AAGxB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,mBAAmB,EAAE,CAAC;oDACT;AAGzB;IADN,IAAI,CAAC,EAAE,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iDAC1B;AAIrB;IADN,UAAU;gDACgB","sourcesContent":["import { attr, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport {\n ColumnInternals,\n ColumnInternalsOptions\n} from './models/column-internals';\nimport type { TableColumnValidity } from './types';\nimport type { ColumnValidator } from './models/column-validator';\nimport { slotTextContent } from '../../utilities/models/slot-text-content';\n\n/**\n * The base class for table columns\n */\nexport abstract class TableColumn<\n TColumnConfig = unknown,\n TColumnValidator extends ColumnValidator<[]> = ColumnValidator<[]>\n> extends FoundationElement {\n /**\n * @internal\n *\n * Column properties configurable by plugin authors\n */\n public readonly columnInternals: ColumnInternals<\n TColumnConfig,\n TColumnValidator\n > = new ColumnInternals(this.getColumnInternalsOptions());\n\n @attr({ attribute: 'column-id' })\n public columnId?: string;\n\n @attr({ attribute: 'action-menu-slot' })\n public actionMenuSlot?: string;\n\n @attr({ attribute: 'action-menu-label' })\n public actionMenuLabel?: string;\n\n @attr({ attribute: 'column-hidden', mode: 'boolean' })\n public columnHidden = false;\n\n /** @internal */\n @observable\n public hasOverflow = false;\n\n /** @internal */\n public contentSlot!: HTMLSlotElement;\n\n public checkValidity(): boolean {\n return this.columnInternals.validator.isColumnValid;\n }\n\n public get validity(): TableColumnValidity {\n return this.columnInternals.validator.getValidity();\n }\n\n /** @internal */\n public get headerTextContent(): string {\n return slotTextContent(this.contentSlot);\n }\n\n public override connectedCallback(): void {\n super.connectedCallback();\n\n // Done here to enforce consistency across headers as they may have custom templates\n this.setAttribute('slot', this.columnInternals.uniqueId);\n }\n\n protected abstract getColumnInternalsOptions(): ColumnInternalsOptions<TColumnValidator>;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Finds all text content within a slot and returns it as a space-delimited string.
3
+ */
4
+ export declare const slotTextContent: (slot: HTMLSlotElement) => string;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Finds all text content within a slot and returns it as a space-delimited string.
3
+ */
4
+ export const slotTextContent = (slot) => {
5
+ return slot
6
+ .assignedNodes()
7
+ .map(node => node.textContent?.trim())
8
+ .filter(content => content !== undefined && content !== '')
9
+ .join(' ');
10
+ };
11
+ //# sourceMappingURL=slot-text-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot-text-content.js","sourceRoot":"","sources":["../../../../src/utilities/models/slot-text-content.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAU,EAAE;IAC7D,OAAO,IAAI;SACN,aAAa,EAAE;SACf,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;SACrC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,EAAE,CAAC;SAC1D,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC,CAAC","sourcesContent":["/**\n * Finds all text content within a slot and returns it as a space-delimited string.\n */\nexport const slotTextContent = (slot: HTMLSlotElement): string => {\n return slot\n .assignedNodes()\n .map(node => node.textContent?.trim())\n .filter(content => content !== undefined && content !== '')\n .join(' ');\n};\n"]}
@@ -1,19 +1,10 @@
1
- /// <reference types="jasmine" />
2
1
  export declare function clickElement(element: HTMLElement): Promise<void>;
3
2
  export declare function sendKeyDownEvent(target: HTMLElement, key: string, init?: KeyboardEventInit): Promise<KeyboardEvent>;
4
3
  export declare function sendKeyDownEvents(target: HTMLElement, keySequence: string[], init?: KeyboardEventInit[]): Promise<KeyboardEvent[]>;
5
4
  /** A helper function to abstract turning waiting for an event to fire into a promise.
6
5
  * The returned promise should be resolved prior to completing a test.
7
6
  */
8
- export declare function waitForEventAsync(element: HTMLElement, eventName: string): Promise<void>;
9
- /** A helper function to abstract adding an event listener, spying
10
- * on the event being called, and removing the event listener. The returned promise
11
- * should be resolved prior to completing a test.
12
- */
13
- export declare function createEventListener(element: HTMLElement, eventName: string): {
14
- promise: Promise<void>;
15
- spy: jasmine.Spy;
16
- };
7
+ export declare function waitForEvent<T extends Event>(element: HTMLElement, eventName: string, callback?: (evt: T) => void): Promise<void>;
17
8
  /**
18
9
  * Waits for a requested animation frame to occur.
19
10
  */
@@ -30,33 +30,17 @@ export async function sendKeyDownEvents(target, keySequence, init) {
30
30
  /** A helper function to abstract turning waiting for an event to fire into a promise.
31
31
  * The returned promise should be resolved prior to completing a test.
32
32
  */
33
- export async function waitForEventAsync(element, eventName) {
33
+ export async function waitForEvent(element, eventName, callback) {
34
34
  return new Promise(resolve => {
35
- const handler = () => {
36
- element.removeEventListener(eventName, handler);
35
+ const handler = ((evt) => {
36
+ callback?.(evt);
37
37
  resolve();
38
- };
39
- element.addEventListener(eventName, handler);
38
+ });
39
+ element.addEventListener(eventName, handler, {
40
+ once: true
41
+ });
40
42
  });
41
43
  }
42
- /** A helper function to abstract adding an event listener, spying
43
- * on the event being called, and removing the event listener. The returned promise
44
- * should be resolved prior to completing a test.
45
- */
46
- export function createEventListener(element, eventName) {
47
- const spy = jasmine.createSpy();
48
- return {
49
- promise: new Promise(resolve => {
50
- const handler = (...args) => {
51
- element.removeEventListener(eventName, handler);
52
- spy(...args);
53
- resolve();
54
- };
55
- element.addEventListener(eventName, handler);
56
- }),
57
- spy
58
- };
59
- }
60
44
  /**
61
45
  * Waits for a requested animation frame to occur.
62
46
  */
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/utilities/testing/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAoB;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,mBAAmB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,MAAmB,EACnB,GAAW,EACX,IAAwB;IAExB,OAAO,CACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACpE,CAAC,CAAC,CAAE,CAAC;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAmB,EACnB,WAAqB,EACrB,IAA0B;IAE1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACX,+DAA+D,CAClE,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE;YACvC,GAAG;YACH,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,OAAoB,EACpB,SAAiB;IAEjB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,GAAS,EAAE;YACvB,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,OAAO,EAAE,CAAC;QACd,CAAC,CAAC;QACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAC/B,OAAoB,EACpB,SAAiB;IAKjB,MAAM,GAAG,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAChC,OAAO;QACH,OAAO,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAe,EAAQ,EAAE;gBACzC,OAAO,CAAC,mBAAmB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAChD,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;gBACb,OAAO,EAAE,CAAC;YACd,CAAC,CAAC;YACF,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACjD,CAAC,CAAC;QACF,GAAG;KACN,CAAC;AACN,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { waitForUpdatesAsync } from '../../testing/async-helpers';\n\nexport async function clickElement(element: HTMLElement): Promise<void> {\n element.click();\n await waitForUpdatesAsync();\n}\n\nexport async function sendKeyDownEvent(\n target: HTMLElement,\n key: string,\n init?: KeyboardEventInit\n): Promise<KeyboardEvent> {\n return (\n await sendKeyDownEvents(target, [key], init ? [init] : undefined)\n )[0]!;\n}\n\nexport async function sendKeyDownEvents(\n target: HTMLElement,\n keySequence: string[],\n init?: KeyboardEventInit[]\n): Promise<KeyboardEvent[]> {\n if (keySequence.length === 0) {\n throw new Error('The key sequence must have at least one key.');\n }\n if (init && init.length !== keySequence.length) {\n throw new Error(\n 'The length of the key sequence and the init array must match.'\n );\n }\n const events: KeyboardEvent[] = [];\n for (const [index, key] of keySequence.entries()) {\n const event = new KeyboardEvent('keydown', {\n key,\n cancelable: true,\n bubbles: true,\n ...init?.[index]\n });\n target.dispatchEvent(event);\n events.push(event);\n }\n await waitForUpdatesAsync();\n return events;\n}\n\n/** A helper function to abstract turning waiting for an event to fire into a promise.\n * The returned promise should be resolved prior to completing a test.\n */\nexport async function waitForEventAsync(\n element: HTMLElement,\n eventName: string\n): Promise<void> {\n return new Promise(resolve => {\n const handler = (): void => {\n element.removeEventListener(eventName, handler);\n resolve();\n };\n element.addEventListener(eventName, handler);\n });\n}\n\n/** A helper function to abstract adding an event listener, spying\n * on the event being called, and removing the event listener. The returned promise\n * should be resolved prior to completing a test.\n */\nexport function createEventListener(\n element: HTMLElement,\n eventName: string\n): {\n promise: Promise<void>,\n spy: jasmine.Spy\n } {\n const spy = jasmine.createSpy();\n return {\n promise: new Promise(resolve => {\n const handler = (...args: unknown[]): void => {\n element.removeEventListener(eventName, handler);\n spy(...args);\n resolve();\n };\n element.addEventListener(eventName, handler);\n }),\n spy\n };\n}\n\n/**\n * Waits for a requested animation frame to occur.\n */\nexport async function waitAnimationFrame(): Promise<void> {\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve());\n });\n}\n"]}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../src/utilities/testing/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAoB;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,MAAM,mBAAmB,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAClC,MAAmB,EACnB,GAAW,EACX,IAAwB;IAExB,OAAO,CACH,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACpE,CAAC,CAAC,CAAE,CAAC;AACV,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACnC,MAAmB,EACnB,WAAqB,EACrB,IAA0B;IAE1B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CACX,+DAA+D,CAClE,CAAC;IACN,CAAC;IACD,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,KAAK,GAAG,IAAI,aAAa,CAAC,SAAS,EAAE;YACvC,GAAG;YACH,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,IAAI;YACb,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC;SACnB,CAAC,CAAC;QACH,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,MAAM,mBAAmB,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,OAAoB,EACpB,SAAiB,EACjB,QAA2B;IAE3B,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,MAAM,OAAO,GAAG,CAAC,CAAC,GAAM,EAAQ,EAAE;YAC9B,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;YAChB,OAAO,EAAE,CAAC;QACd,CAAC,CAAkB,CAAC;QACpB,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,EAAE;YACzC,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACpC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QACzB,qBAAqB,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["import { waitForUpdatesAsync } from '../../testing/async-helpers';\n\nexport async function clickElement(element: HTMLElement): Promise<void> {\n element.click();\n await waitForUpdatesAsync();\n}\n\nexport async function sendKeyDownEvent(\n target: HTMLElement,\n key: string,\n init?: KeyboardEventInit\n): Promise<KeyboardEvent> {\n return (\n await sendKeyDownEvents(target, [key], init ? [init] : undefined)\n )[0]!;\n}\n\nexport async function sendKeyDownEvents(\n target: HTMLElement,\n keySequence: string[],\n init?: KeyboardEventInit[]\n): Promise<KeyboardEvent[]> {\n if (keySequence.length === 0) {\n throw new Error('The key sequence must have at least one key.');\n }\n if (init && init.length !== keySequence.length) {\n throw new Error(\n 'The length of the key sequence and the init array must match.'\n );\n }\n const events: KeyboardEvent[] = [];\n for (const [index, key] of keySequence.entries()) {\n const event = new KeyboardEvent('keydown', {\n key,\n cancelable: true,\n bubbles: true,\n ...init?.[index]\n });\n target.dispatchEvent(event);\n events.push(event);\n }\n await waitForUpdatesAsync();\n return events;\n}\n\n/** A helper function to abstract turning waiting for an event to fire into a promise.\n * The returned promise should be resolved prior to completing a test.\n */\nexport async function waitForEvent<T extends Event>(\n element: HTMLElement,\n eventName: string,\n callback?: (evt: T) => void\n): Promise<void> {\n return new Promise(resolve => {\n const handler = ((evt: T): void => {\n callback?.(evt);\n resolve();\n }) as EventListener;\n element.addEventListener(eventName, handler, {\n once: true\n });\n });\n}\n\n/**\n * Waits for a requested animation frame to occur.\n */\nexport async function waitAnimationFrame(): Promise<void> {\n return new Promise(resolve => {\n requestAnimationFrame(() => resolve());\n });\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ni/nimble-components",
3
- "version": "31.1.0",
3
+ "version": "31.1.2",
4
4
  "description": "Styled web components for the NI Nimble Design System",
5
5
  "scripts": {
6
6
  "build": "npm run generate-icons && npm run generate-workers && npm run build-components && npm run bundle-components && npm run generate-scss",