@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.
Files changed (34) hide show
  1. package/dist/all-components-bundle.js +229 -32
  2. package/dist/all-components-bundle.js.map +1 -1
  3. package/dist/all-components-bundle.min.js +3485 -3383
  4. package/dist/all-components-bundle.min.js.map +1 -1
  5. package/dist/custom-elements.json +204 -186
  6. package/dist/custom-elements.md +32 -32
  7. package/dist/esm/anchor-step/index.d.ts +4 -0
  8. package/dist/esm/anchor-step/index.js +9 -0
  9. package/dist/esm/anchor-step/index.js.map +1 -1
  10. package/dist/esm/anchor-step/template.js +3 -1
  11. package/dist/esm/anchor-step/template.js.map +1 -1
  12. package/dist/esm/patterns/step/styles.js +40 -16
  13. package/dist/esm/patterns/step/styles.js.map +1 -1
  14. package/dist/esm/patterns/step/testing/step-base.pageobject.d.ts +1 -0
  15. package/dist/esm/patterns/step/testing/step-base.pageobject.js +3 -0
  16. package/dist/esm/patterns/step/testing/step-base.pageobject.js.map +1 -1
  17. package/dist/esm/patterns/step/types.d.ts +5 -0
  18. package/dist/esm/patterns/step/types.js.map +1 -1
  19. package/dist/esm/step/index.d.ts +4 -0
  20. package/dist/esm/step/index.js +9 -0
  21. package/dist/esm/step/index.js.map +1 -1
  22. package/dist/esm/step/template.js +3 -1
  23. package/dist/esm/step/template.js.map +1 -1
  24. package/dist/esm/stepper/index.d.ts +18 -0
  25. package/dist/esm/stepper/index.js +82 -1
  26. package/dist/esm/stepper/index.js.map +1 -1
  27. package/dist/esm/stepper/styles.js +50 -4
  28. package/dist/esm/stepper/styles.js.map +1 -1
  29. package/dist/esm/stepper/template.js +37 -5
  30. package/dist/esm/stepper/template.js.map +1 -1
  31. package/dist/esm/stepper/testing/stepper.pageobject.d.ts +17 -0
  32. package/dist/esm/stepper/testing/stepper.pageobject.js +91 -0
  33. package/dist/esm/stepper/testing/stepper.pageobject.js.map +1 -0
  34. 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;IAyB3E,CAAC;IAnBW,kBAAkB;QACtB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAEO,YAAY;QAChB,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC/B,CAAC;IAEO,mBAAmB;QACvB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;QACxC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;YAC/B,IAAI,CAAC,aAAa,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;YAClD,IAAI,CAAC,aAAa,CAAC,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC;YAC9C,IAAI,CAAC,aAAa,CAAC,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAzBU;IADN,IAAI;4CACkE;AAIhE;IADN,UAAU;sCACoB;AAuBnC,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAClC,QAAQ,EAAE,SAAS;IACnB,QAAQ;IACR,MAAM;CACT,CAAC,CAAC;AAEH,YAAY,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;AAC1E,MAAM,CAAC,MAAM,UAAU,GAAG,gBAAgB,CAAC","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 steps?: (StepPattern)[];\n\n private orientationChanged(): void {\n this.updateStepInternals();\n }\n\n private stepsChanged(): void {\n this.updateStepInternals();\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.orientation;\n step.stepInternals.last = index === lastIndex;\n step.stepInternals.position = index + 1;\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
+ {"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
- ol {
17
- display: contents;
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;AAE/D,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;MACnB,OAAO,CAAC,aAAa,CAAC;;;;eAIb,YAAY;;;;;;;;;;;;;;;;;;CAkB1B,CAAC","sourcesContent":["import { css } from '@ni/fast-element';\nimport { display } from '../utilities/style/display';\nimport { smallPadding } from '../theme-provider/design-tokens';\n\nexport const styles = css`\n ${display('inline-flex')}\n\n :host {\n border: none;\n gap: ${smallPadding};\n }\n\n :host([orientation=\"vertical\"]) {\n flex-direction: column;\n }\n\n ol {\n display: contents;\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
+ {"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
- export const template = html `<ol><slot
3
- name="step"
4
- ${slotted('steps')}
5
- ></slot></ol>`;
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;AAGjD,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAS;;UAE3B,OAAO,CAAC,OAAO,CAAC;kBACR,CAAC","sourcesContent":["import { html, slotted } from '@ni/fast-element';\nimport type { Stepper } from '.';\n\nexport const template = html<Stepper>`<ol><slot\n name=\"step\"\n ${slotted('steps')}\n ></slot></ol>`;\n"]}
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.4",
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",