@ni/nimble-components 35.5.4 → 35.5.6
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/all-components-bundle.js +229 -32
- package/dist/all-components-bundle.js.map +1 -1
- package/dist/all-components-bundle.min.js +3485 -3383
- package/dist/all-components-bundle.min.js.map +1 -1
- package/dist/custom-elements.json +204 -186
- package/dist/custom-elements.md +32 -32
- package/dist/esm/anchor-step/index.d.ts +4 -0
- package/dist/esm/anchor-step/index.js +9 -0
- package/dist/esm/anchor-step/index.js.map +1 -1
- package/dist/esm/anchor-step/template.js +3 -1
- package/dist/esm/anchor-step/template.js.map +1 -1
- package/dist/esm/patterns/step/styles.js +40 -16
- package/dist/esm/patterns/step/styles.js.map +1 -1
- package/dist/esm/patterns/step/testing/step-base.pageobject.d.ts +1 -0
- package/dist/esm/patterns/step/testing/step-base.pageobject.js +3 -0
- package/dist/esm/patterns/step/testing/step-base.pageobject.js.map +1 -1
- package/dist/esm/patterns/step/types.d.ts +5 -0
- package/dist/esm/patterns/step/types.js.map +1 -1
- package/dist/esm/step/index.d.ts +4 -0
- package/dist/esm/step/index.js +9 -0
- package/dist/esm/step/index.js.map +1 -1
- package/dist/esm/step/template.js +3 -1
- package/dist/esm/step/template.js.map +1 -1
- package/dist/esm/stepper/index.d.ts +18 -0
- package/dist/esm/stepper/index.js +82 -1
- package/dist/esm/stepper/index.js.map +1 -1
- package/dist/esm/stepper/styles.js +50 -4
- package/dist/esm/stepper/styles.js.map +1 -1
- package/dist/esm/stepper/template.js +37 -5
- package/dist/esm/stepper/template.js.map +1 -1
- package/dist/esm/stepper/testing/stepper.pageobject.d.ts +17 -0
- package/dist/esm/stepper/testing/stepper.pageobject.js +91 -0
- package/dist/esm/stepper/testing/stepper.pageobject.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stepper/index.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAS7C;;GAEG;AACH,MAAM,OAAO,OAAQ,SAAQ,iBAAiB;IAA9C;;QAEW,gBAAW,GAAuB,kBAAkB,CAAC,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/stepper/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { DesignSystem, FoundationElement } from '@ni/fast-foundation';\nimport { attr, observable } from '@ni/fast-element';\nimport { styles } from './styles';\nimport { template } from './template';\nimport { StepperOrientation } from './types';\nimport type { StepPattern } from '../patterns/step/types';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nimble-stepper': Stepper;\n }\n}\n\n/**\n * A nimble-styled stepper\n */\nexport class Stepper extends FoundationElement {\n @attr\n public orientation: StepperOrientation = StepperOrientation.horizontal;\n\n /** @internal */\n @observable\n public showScrollButtons = false;\n\n /** @internal */\n @observable\n public steps?: (StepPattern)[];\n\n /** @internal */\n public list!: HTMLElement;\n\n /** @internal */\n public readonly startScrollButton?: HTMLElement;\n\n private listIntersectionObserver?: IntersectionObserver;\n\n /** @internal */\n public onScrollStartClick(): void {\n if (this.isHorizontal()) {\n this.list.scrollBy({\n left: -this.list.clientWidth,\n behavior: 'smooth'\n });\n } else {\n this.list.scrollBy({\n top: -this.list.clientHeight,\n behavior: 'smooth'\n });\n }\n }\n\n /** @internal */\n public onScrollEndClick(): void {\n if (this.isHorizontal()) {\n this.list.scrollBy({\n left: this.list.clientWidth,\n behavior: 'smooth'\n });\n } else {\n this.list.scrollBy({\n top: this.list.clientHeight,\n behavior: 'smooth'\n });\n }\n }\n\n /** @internal */\n public override connectedCallback(): void {\n super.connectedCallback();\n // Steps fill parent container so can't rely on a resize observer to track their space usage.\n // Instead directly track each step's occlusion with intersection observer which is more compute intensive.\n // When available can switch to container scroll state queries, see: https://github.com/ni/nimble/issues/2922\n this.listIntersectionObserver = new IntersectionObserver(_ => {\n this.handleListOverflow();\n }, {\n root: this.list,\n threshold: 1.0\n });\n }\n\n /** @internal */\n public override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.listIntersectionObserver?.disconnect();\n }\n\n /** @internal */\n public isHorizontal(): boolean {\n return this.orientation !== StepperOrientation.vertical;\n }\n\n private orientationChanged(): void {\n this.updateStepInternals();\n }\n\n private stepsChanged(): void {\n this.updateStepInternals();\n this.listIntersectionObserver?.disconnect();\n if (this.steps) {\n this.steps.forEach(step => this.listIntersectionObserver?.observe(step));\n }\n }\n\n private updateStepInternals(): void {\n if (!this.steps) {\n return;\n }\n const lastIndex = this.steps.length - 1;\n this.steps.forEach((step, index) => {\n step.stepInternals.orientation = this.isHorizontal()\n ? StepperOrientation.horizontal\n : StepperOrientation.vertical;\n step.stepInternals.last = index === lastIndex;\n step.stepInternals.position = index + 1;\n });\n }\n\n private handleListOverflow(): void {\n let listVisibleSize = this.isHorizontal()\n ? this.list.clientWidth\n : this.list.clientHeight;\n if (listVisibleSize !== undefined) {\n const buttonSize = this.isHorizontal()\n ? this.startScrollButton?.clientWidth ?? 0\n : this.startScrollButton?.clientHeight ?? 0;\n listVisibleSize = Math.ceil(listVisibleSize);\n if (this.showScrollButtons) {\n listVisibleSize += buttonSize * 2;\n }\n const listScrollSize = this.isHorizontal()\n ? this.list.scrollWidth\n : this.list.scrollHeight;\n this.showScrollButtons = listVisibleSize < listScrollSize;\n }\n }\n}\n\nconst nimbleStepper = Stepper.compose({\n baseName: 'stepper',\n template,\n styles\n});\n\nDesignSystem.getOrCreate().withPrefix('nimble').register(nimbleStepper());\nexport const stepperTag = 'nimble-stepper';\n"]}
|
|
@@ -1,20 +1,66 @@
|
|
|
1
1
|
import { css } from '@ni/fast-element';
|
|
2
2
|
import { display } from '../utilities/style/display';
|
|
3
|
-
import { smallPadding } from '../theme-provider/design-tokens';
|
|
3
|
+
import { controlHeight, smallPadding } from '../theme-provider/design-tokens';
|
|
4
4
|
export const styles = css `
|
|
5
5
|
${display('inline-flex')}
|
|
6
6
|
|
|
7
7
|
:host {
|
|
8
8
|
border: none;
|
|
9
|
-
gap: ${smallPadding};
|
|
10
9
|
}
|
|
11
10
|
|
|
12
11
|
:host([orientation="vertical"]) {
|
|
13
12
|
flex-direction: column;
|
|
14
13
|
}
|
|
15
14
|
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
.scroll-button.start {
|
|
16
|
+
width: ${controlHeight};
|
|
17
|
+
height: ${controlHeight};
|
|
18
|
+
margin-right: ${smallPadding};
|
|
19
|
+
margin-bottom: 0px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
:host([orientation="vertical"]) .scroll-button.start {
|
|
23
|
+
margin-right: 0px;
|
|
24
|
+
margin-bottom: ${smallPadding};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.list {
|
|
28
|
+
flex-grow: 1;
|
|
29
|
+
display: inline-flex;
|
|
30
|
+
gap: ${smallPadding};
|
|
31
|
+
scrollbar-width: none;
|
|
32
|
+
padding: 0;
|
|
33
|
+
margin: 0;
|
|
34
|
+
|
|
35
|
+
flex-direction: row;
|
|
36
|
+
overflow-x: scroll;
|
|
37
|
+
overflow-y: hidden;
|
|
38
|
+
width: max-content;
|
|
39
|
+
max-width: 100%;
|
|
40
|
+
height: auto;
|
|
41
|
+
max-height: none;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:host([orientation="vertical"]) .list {
|
|
45
|
+
flex-direction: column;
|
|
46
|
+
overflow-x: hidden;
|
|
47
|
+
overflow-y: scroll;
|
|
48
|
+
width: auto;
|
|
49
|
+
max-width: none;
|
|
50
|
+
height: max-content;
|
|
51
|
+
max-height: 100%;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.scroll-button.end {
|
|
55
|
+
width: ${controlHeight};
|
|
56
|
+
height: ${controlHeight};
|
|
57
|
+
margin-left: ${smallPadding};
|
|
58
|
+
margin-top: 0px;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:host([orientation="vertical"]) .scroll-button.end {
|
|
62
|
+
margin-left: 0px;
|
|
63
|
+
margin-top: ${smallPadding};
|
|
18
64
|
}
|
|
19
65
|
|
|
20
66
|
slot[name="step"]::slotted(*) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/stepper/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/stepper/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAE9E,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;;;;;;;;iBAWX,aAAa;kBACZ,aAAa;wBACP,YAAY;;;;;;yBAMX,YAAY;;;;;;eAMtB,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;iBAyBV,aAAa;kBACZ,aAAa;uBACR,YAAY;;;;;;sBAMb,YAAY;;;;;;;;;;CAUjC,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport { display } from '../utilities/style/display';\nimport { controlHeight, smallPadding } from '../theme-provider/design-tokens';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n border: none;\n }\n\n :host([orientation=\"vertical\"]) {\n flex-direction: column;\n }\n\n .scroll-button.start {\n width: ${controlHeight};\n height: ${controlHeight};\n margin-right: ${smallPadding};\n margin-bottom: 0px;\n }\n\n :host([orientation=\"vertical\"]) .scroll-button.start {\n margin-right: 0px;\n margin-bottom: ${smallPadding};\n }\n\n .list {\n flex-grow: 1;\n display: inline-flex;\n gap: ${smallPadding};\n scrollbar-width: none;\n padding: 0;\n margin: 0;\n\n flex-direction: row;\n overflow-x: scroll;\n overflow-y: hidden;\n width: max-content;\n max-width: 100%;\n height: auto;\n max-height: none;\n }\n\n :host([orientation=\"vertical\"]) .list {\n flex-direction: column;\n overflow-x: hidden;\n overflow-y: scroll;\n width: auto;\n max-width: none;\n height: max-content;\n max-height: 100%;\n }\n\n .scroll-button.end {\n width: ${controlHeight};\n height: ${controlHeight};\n margin-left: ${smallPadding};\n margin-top: 0px;\n }\n\n :host([orientation=\"vertical\"]) .scroll-button.end {\n margin-left: 0px;\n margin-top: ${smallPadding};\n }\n\n slot[name=\"step\"]::slotted(*) {\n flex-grow: 1;\n }\n\n slot[name=\"step\"]::slotted(:last-child) {\n flex-grow: 0;\n }\n`;\n"]}
|
|
@@ -1,6 +1,38 @@
|
|
|
1
|
-
import { html, slotted } from '@ni/fast-element';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { html, ref, slotted, when } from '@ni/fast-element';
|
|
2
|
+
import { buttonTag } from '../button';
|
|
3
|
+
import { ButtonAppearance } from '../button/types';
|
|
4
|
+
import { scrollBackwardLabel, scrollForwardLabel } from '../label-provider/core/label-tokens';
|
|
5
|
+
import { iconArrowExpanderLeftTag } from '../icons/arrow-expander-left';
|
|
6
|
+
import { iconArrowExpanderRightTag } from '../icons/arrow-expander-right';
|
|
7
|
+
import { iconArrowExpanderUpTag } from '../icons/arrow-expander-up';
|
|
8
|
+
import { iconArrowExpanderDownTag } from '../icons/arrow-expander-down';
|
|
9
|
+
export const template = html `
|
|
10
|
+
${when(x => x.showScrollButtons, html `
|
|
11
|
+
<${buttonTag}
|
|
12
|
+
content-hidden
|
|
13
|
+
class="scroll-button start"
|
|
14
|
+
appearance="${ButtonAppearance.ghost}"
|
|
15
|
+
@click="${x => x.onScrollStartClick()}"
|
|
16
|
+
${ref('startScrollButton')}
|
|
17
|
+
>
|
|
18
|
+
${x => scrollForwardLabel.getValueFor(x)}
|
|
19
|
+
${when(x => x.isHorizontal(), html `<${iconArrowExpanderLeftTag} slot="start"></${iconArrowExpanderLeftTag}>`, html `<${iconArrowExpanderUpTag} slot="start"></${iconArrowExpanderUpTag}>`)}
|
|
20
|
+
</${buttonTag}>
|
|
21
|
+
`)}
|
|
22
|
+
<ol ${ref('list')} class="list"><slot
|
|
23
|
+
name="step"
|
|
24
|
+
${slotted('steps')}
|
|
25
|
+
></slot></ol>
|
|
26
|
+
${when(x => x.showScrollButtons, html `
|
|
27
|
+
<${buttonTag}
|
|
28
|
+
content-hidden
|
|
29
|
+
class="scroll-button end"
|
|
30
|
+
appearance="${ButtonAppearance.ghost}"
|
|
31
|
+
@click="${x => x.onScrollEndClick()}"
|
|
32
|
+
>
|
|
33
|
+
${x => scrollBackwardLabel.getValueFor(x)}
|
|
34
|
+
${when(x => x.isHorizontal(), html `<${iconArrowExpanderRightTag} slot="start"></${iconArrowExpanderRightTag}>`, html `<${iconArrowExpanderDownTag} slot="start"></${iconArrowExpanderDownTag}>`)}
|
|
35
|
+
</${buttonTag}>
|
|
36
|
+
`)}
|
|
37
|
+
`;
|
|
6
38
|
//# sourceMappingURL=template.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/stepper/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../../src/stepper/template.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACH,mBAAmB,EACnB,kBAAkB,EACrB,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAC1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8BAA8B,CAAC;AAExE,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAS;MAC/B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAS;WACvC,SAAS;;;0BAGM,gBAAgB,CAAC,KAAK;sBAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,EAAE;cACnC,GAAG,CAAC,mBAAmB,CAAC;;cAExB,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC;cACtC,IAAI,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,EACrB,IAAI,CAAA,IAAI,wBAAwB,mBAAmB,wBAAwB,GAAG,EAC9E,IAAI,CAAA,IAAI,sBAAsB,mBAAmB,sBAAsB,GAAG,CAC7E;YACD,SAAS;KAChB,CAAC;UACI,GAAG,CAAC,MAAM,CAAC;;cAEP,OAAO,CAAC,OAAO,CAAC;;MAExB,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,EAAE,IAAI,CAAS;WACvC,SAAS;;;0BAGM,gBAAgB,CAAC,KAAK;sBAC1B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE;;cAEjC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC,CAAC;cACvC,IAAI,CACF,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,EACrB,IAAI,CAAA,IAAI,yBAAyB,mBAAmB,yBAAyB,GAAG,EAChF,IAAI,CAAA,IAAI,wBAAwB,mBAAmB,wBAAwB,GAAG,CACjF;YACD,SAAS;KAChB,CAAC;CACL,CAAC","sourcesContent":["import { html, ref, slotted, when } from '@ni/fast-element';\nimport type { Stepper } from '.';\nimport { buttonTag } from '../button';\nimport { ButtonAppearance } from '../button/types';\nimport {\n scrollBackwardLabel,\n scrollForwardLabel\n} from '../label-provider/core/label-tokens';\nimport { iconArrowExpanderLeftTag } from '../icons/arrow-expander-left';\nimport { iconArrowExpanderRightTag } from '../icons/arrow-expander-right';\nimport { iconArrowExpanderUpTag } from '../icons/arrow-expander-up';\nimport { iconArrowExpanderDownTag } from '../icons/arrow-expander-down';\n\nexport const template = html<Stepper>`\n ${when(x => x.showScrollButtons, html<Stepper>`\n <${buttonTag}\n content-hidden\n class=\"scroll-button start\"\n appearance=\"${ButtonAppearance.ghost}\"\n @click=\"${x => x.onScrollStartClick()}\"\n ${ref('startScrollButton')}\n >\n ${x => scrollForwardLabel.getValueFor(x)}\n ${when(\n x => x.isHorizontal(),\n html`<${iconArrowExpanderLeftTag} slot=\"start\"></${iconArrowExpanderLeftTag}>`,\n html`<${iconArrowExpanderUpTag} slot=\"start\"></${iconArrowExpanderUpTag}>`\n )}\n </${buttonTag}>\n `)}\n <ol ${ref('list')} class=\"list\"><slot\n name=\"step\"\n ${slotted('steps')}\n ></slot></ol>\n ${when(x => x.showScrollButtons, html<Stepper>`\n <${buttonTag}\n content-hidden\n class=\"scroll-button end\"\n appearance=\"${ButtonAppearance.ghost}\"\n @click=\"${x => x.onScrollEndClick()}\"\n >\n ${x => scrollBackwardLabel.getValueFor(x)}\n ${when(\n x => x.isHorizontal(),\n html`<${iconArrowExpanderRightTag} slot=\"start\"></${iconArrowExpanderRightTag}>`,\n html`<${iconArrowExpanderDownTag} slot=\"start\"></${iconArrowExpanderDownTag}>`\n )}\n </${buttonTag}>\n `)}\n`;\n"]}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Stepper } from '..';
|
|
2
|
+
/**
|
|
3
|
+
* Page object for the `nimble-stepper`
|
|
4
|
+
*/
|
|
5
|
+
export declare class StepperPageObject {
|
|
6
|
+
protected readonly element: Stepper;
|
|
7
|
+
constructor(element: Stepper);
|
|
8
|
+
setStepperScrollAxisSize(size: number): Promise<void>;
|
|
9
|
+
clickScrollStartButton(): Promise<void>;
|
|
10
|
+
clickScrollEndButton(): Promise<void>;
|
|
11
|
+
areScrollButtonsVisible(): boolean;
|
|
12
|
+
getStepperViewScrollOffset(): number;
|
|
13
|
+
scrollStepIntoViewByIndex(index: number): Promise<void>;
|
|
14
|
+
addStep(title?: string): Promise<void>;
|
|
15
|
+
removeStepByIndex(index: number): Promise<void>;
|
|
16
|
+
updateStepTitle(index: number, title: string): Promise<void>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { waitForUpdatesAsync } from '../../testing/async-helpers';
|
|
2
|
+
import { waitTimeout } from '../../utilities/testing/component';
|
|
3
|
+
import { stepTag } from '../../step';
|
|
4
|
+
import { StepperOrientation } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Page object for the `nimble-stepper`
|
|
7
|
+
*/
|
|
8
|
+
export class StepperPageObject {
|
|
9
|
+
constructor(element) {
|
|
10
|
+
this.element = element;
|
|
11
|
+
}
|
|
12
|
+
async setStepperScrollAxisSize(size) {
|
|
13
|
+
if (this.element.orientation === StepperOrientation.horizontal) {
|
|
14
|
+
this.element.style.width = `${size}px`;
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
this.element.style.height = `${size}px`;
|
|
18
|
+
}
|
|
19
|
+
await waitForUpdatesAsync();
|
|
20
|
+
await waitForUpdatesAsync(); // wait for the resize observer to fire
|
|
21
|
+
}
|
|
22
|
+
async clickScrollStartButton() {
|
|
23
|
+
const startButton = this.element.shadowRoot.querySelector('.scroll-button.start');
|
|
24
|
+
if (!startButton) {
|
|
25
|
+
throw new Error('Scroll start button not found');
|
|
26
|
+
}
|
|
27
|
+
startButton.click();
|
|
28
|
+
await waitForUpdatesAsync();
|
|
29
|
+
await waitTimeout(50); // let animation run
|
|
30
|
+
}
|
|
31
|
+
async clickScrollEndButton() {
|
|
32
|
+
const endButton = this.element.shadowRoot.querySelector('.scroll-button.end');
|
|
33
|
+
if (!endButton) {
|
|
34
|
+
throw new Error('Scroll end button not found');
|
|
35
|
+
}
|
|
36
|
+
endButton.click();
|
|
37
|
+
await waitForUpdatesAsync();
|
|
38
|
+
await waitTimeout(50); // let animation run
|
|
39
|
+
}
|
|
40
|
+
areScrollButtonsVisible() {
|
|
41
|
+
return (this.element.shadowRoot.querySelectorAll('.scroll-button').length > 0);
|
|
42
|
+
}
|
|
43
|
+
getStepperViewScrollOffset() {
|
|
44
|
+
const list = this.element.shadowRoot.querySelector('.list');
|
|
45
|
+
return this.element.orientation === 'horizontal'
|
|
46
|
+
? list.scrollLeft
|
|
47
|
+
: list.scrollTop;
|
|
48
|
+
}
|
|
49
|
+
async scrollStepIntoViewByIndex(index) {
|
|
50
|
+
const steps = this.element.steps;
|
|
51
|
+
if (!steps || index >= steps.length) {
|
|
52
|
+
throw new Error(`Step with index ${index} not found`);
|
|
53
|
+
}
|
|
54
|
+
steps[index].scrollIntoView();
|
|
55
|
+
await waitForUpdatesAsync();
|
|
56
|
+
}
|
|
57
|
+
async addStep(title) {
|
|
58
|
+
const step = document.createElement(stepTag);
|
|
59
|
+
step.appendChild(Object.assign(document.createElement('span'), {
|
|
60
|
+
slot: 'title',
|
|
61
|
+
textContent: title ?? ''
|
|
62
|
+
}));
|
|
63
|
+
this.element.appendChild(step);
|
|
64
|
+
await waitForUpdatesAsync();
|
|
65
|
+
await waitForUpdatesAsync(); // wait for overflow check queued by stepsChanged
|
|
66
|
+
}
|
|
67
|
+
async removeStepByIndex(index) {
|
|
68
|
+
const steps = this.element.steps;
|
|
69
|
+
if (!steps || index >= steps.length) {
|
|
70
|
+
throw new Error(`Step with index ${index} not found`);
|
|
71
|
+
}
|
|
72
|
+
steps[index].remove();
|
|
73
|
+
await waitForUpdatesAsync();
|
|
74
|
+
await waitForUpdatesAsync(); // wait for overflow check queued by stepsChanged
|
|
75
|
+
}
|
|
76
|
+
async updateStepTitle(index, title) {
|
|
77
|
+
const steps = this.element.steps;
|
|
78
|
+
if (!steps || index >= steps.length) {
|
|
79
|
+
throw new Error(`Step with index ${index} not found`);
|
|
80
|
+
}
|
|
81
|
+
const step = steps[index];
|
|
82
|
+
const titleSlot = step.querySelector('[slot="title"]');
|
|
83
|
+
if (!titleSlot) {
|
|
84
|
+
throw new Error(`No slot="title" element found to update for step with index ${index}`);
|
|
85
|
+
}
|
|
86
|
+
titleSlot.textContent = title;
|
|
87
|
+
await waitForUpdatesAsync();
|
|
88
|
+
await waitForUpdatesAsync();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=stepper.pageobject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stepper.pageobject.js","sourceRoot":"","sources":["../../../../src/stepper/testing/stepper.pageobject.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Button } from '../../button';\nimport { waitForUpdatesAsync } from '../../testing/async-helpers';\nimport { waitTimeout } from '../../utilities/testing/component';\nimport type { Stepper } from '..';\nimport { stepTag } from '../../step';\nimport { StepperOrientation } from '../types';\n\n/**\n * Page object for the `nimble-stepper`\n */\nexport class StepperPageObject {\n public constructor(protected readonly element: Stepper) {}\n\n public async setStepperScrollAxisSize(size: number): Promise<void> {\n if (this.element.orientation === StepperOrientation.horizontal) {\n this.element.style.width = `${size}px`;\n } else {\n this.element.style.height = `${size}px`;\n }\n await waitForUpdatesAsync();\n await waitForUpdatesAsync(); // wait for the resize observer to fire\n }\n\n public async clickScrollStartButton(): Promise<void> {\n const startButton = this.element.shadowRoot!.querySelector<Button>(\n '.scroll-button.start'\n );\n if (!startButton) {\n throw new Error('Scroll start button not found');\n }\n startButton.click();\n await waitForUpdatesAsync();\n await waitTimeout(50); // let animation run\n }\n\n public async clickScrollEndButton(): Promise<void> {\n const endButton = this.element.shadowRoot!.querySelector<Button>(\n '.scroll-button.end'\n );\n if (!endButton) {\n throw new Error('Scroll end button not found');\n }\n endButton.click();\n await waitForUpdatesAsync();\n await waitTimeout(50); // let animation run\n }\n\n public areScrollButtonsVisible(): boolean {\n return (\n this.element.shadowRoot!.querySelectorAll(\n '.scroll-button'\n ).length > 0\n );\n }\n\n public getStepperViewScrollOffset(): number {\n const list = this.element.shadowRoot!.querySelector('.list')!;\n return this.element.orientation === 'horizontal'\n ? list.scrollLeft\n : list.scrollTop;\n }\n\n public async scrollStepIntoViewByIndex(index: number): Promise<void> {\n const steps = this.element.steps;\n if (!steps || index >= steps.length) {\n throw new Error(`Step with index ${index} not found`);\n }\n steps[index]!.scrollIntoView();\n await waitForUpdatesAsync();\n }\n\n public async addStep(title?: string): Promise<void> {\n const step = document.createElement(stepTag);\n step.appendChild(Object.assign(document.createElement('span'), {\n slot: 'title',\n textContent: title ?? ''\n }));\n this.element.appendChild(step);\n await waitForUpdatesAsync();\n await waitForUpdatesAsync(); // wait for overflow check queued by stepsChanged\n }\n\n public async removeStepByIndex(index: number): Promise<void> {\n const steps = this.element.steps;\n if (!steps || index >= steps.length) {\n throw new Error(`Step with index ${index} not found`);\n }\n steps[index]!.remove();\n await waitForUpdatesAsync();\n await waitForUpdatesAsync(); // wait for overflow check queued by stepsChanged\n }\n\n public async updateStepTitle(\n index: number,\n title: string\n ): Promise<void> {\n const steps = this.element.steps;\n if (!steps || index >= steps.length) {\n throw new Error(`Step with index ${index} not found`);\n }\n const step = steps[index]!;\n const titleSlot = step.querySelector('[slot=\"title\"]');\n if (!titleSlot) {\n throw new Error(`No slot=\"title\" element found to update for step with index ${index}`);\n }\n titleSlot.textContent = title;\n await waitForUpdatesAsync();\n await waitForUpdatesAsync();\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ni/nimble-components",
|
|
3
|
-
"version": "35.5.
|
|
3
|
+
"version": "35.5.6",
|
|
4
4
|
"description": "Styled web components for the NI Nimble Design System",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"build": "npm run build:icons && npm run build:workers && npm run build:components && npm run build:scss && npm run build:cem",
|