q2-tecton-elements 1.54.0 → 1.54.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.
- package/dist/bundle-report.json +13 -12
- package/dist/cjs/q2-badge_7.cjs.entry.js +3 -3
- package/dist/cjs/q2-badge_7.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-file-picker.cjs.entry.js +3 -3
- package/dist/cjs/q2-file-picker.cjs.entry.js.map +1 -1
- package/dist/cjs/q2-select.cjs.entry.js +5 -5
- package/dist/cjs/q2-select.cjs.entry.js.map +1 -1
- package/dist/collection/components/q2-btn/q2-btn.css +29 -3
- package/dist/collection/components/q2-btn/q2-btn.js +2 -2
- package/dist/collection/components/q2-btn/q2-btn.js.map +1 -1
- package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js +72 -4
- package/dist/collection/components/q2-btn/test/q2-btn-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-file-picker/q2-file-picker.css +15 -15
- package/dist/collection/components/q2-file-picker/q2-file-picker.js +3 -3
- package/dist/collection/components/q2-file-picker/q2-file-picker.js.map +1 -1
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js +34 -0
- package/dist/collection/components/q2-file-picker/test/q2-file-picker-test.spec.js.map +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.e2e.js +1 -1
- package/dist/collection/components/q2-input/test/q2-input-test.e2e.js.map +1 -1
- package/dist/collection/components/q2-select/q2-select.js +5 -5
- package/dist/collection/components/q2-select/q2-select.js.map +1 -1
- package/dist/components/q2-btn2.js +3 -3
- package/dist/components/q2-btn2.js.map +1 -1
- package/dist/components/q2-file-picker.js +3 -3
- package/dist/components/q2-file-picker.js.map +1 -1
- package/dist/components/q2-select2.js +5 -5
- package/dist/components/q2-select2.js.map +1 -1
- package/dist/esm/q2-badge_7.entry.js +3 -3
- package/dist/esm/q2-badge_7.entry.js.map +1 -1
- package/dist/esm/q2-file-picker.entry.js +3 -3
- package/dist/esm/q2-file-picker.entry.js.map +1 -1
- package/dist/esm/q2-select.entry.js +5 -5
- package/dist/esm/q2-select.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-badge_7.entry.js +40 -38
- package/dist/q2-tecton-elements/q2-badge_7.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-file-picker.entry.js +4 -3
- package/dist/q2-tecton-elements/q2-file-picker.entry.js.map +1 -1
- package/dist/q2-tecton-elements/q2-select.entry.js +8 -7
- package/dist/q2-tecton-elements/q2-select.entry.js.map +1 -1
- package/dist/types/components/q2-file-picker/q2-file-picker.d.ts +4 -2
- package/dist/types/components.d.ts +2 -2
- package/package.json +3 -3
|
@@ -211,18 +211,30 @@ button:disabled {
|
|
|
211
211
|
text-transform: var(--tct-btn-text-transform, var(--comp-text-transform));
|
|
212
212
|
letter-spacing: var(--tct-btn-letter-spacing, var(--comp-letter-spacing));
|
|
213
213
|
}
|
|
214
|
+
:host(:not([size])) button:not(.icon-only) ::slotted(q2-icon) {
|
|
215
|
+
--tct-icon-size: var(--tct-btn-icon-size, 18px);
|
|
216
|
+
}
|
|
214
217
|
:host([size=small]) button {
|
|
215
218
|
padding: var(--tct-btn-padding-size-small, var(--t-btn-padding-size-small, 4px 16px));
|
|
216
219
|
font-size: var(--tct-btn-font-size-small, var(--t-btn-font-size-small, 14px));
|
|
217
220
|
}
|
|
221
|
+
:host([size=small]) button:not(.icon-only) ::slotted(q2-icon) {
|
|
222
|
+
--tct-icon-size: var(--tct-btn-icon-size-small, 16px);
|
|
223
|
+
}
|
|
218
224
|
:host([size=medium]) button {
|
|
219
225
|
padding: var(--tct-btn-padding-size-medium, var(--t-btn-padding-size-medium, 12px 24px));
|
|
220
226
|
font-size: var(--tct-btn-font-size-medium, var(--t-btn-font-size-medium, 16px));
|
|
221
227
|
}
|
|
228
|
+
:host([size=medium]) button:not(.icon-only) ::slotted(q2-icon) {
|
|
229
|
+
--tct-icon-size: var(--tct-btn-icon-size-medium, unset);
|
|
230
|
+
}
|
|
222
231
|
:host([size=large]) button {
|
|
223
232
|
padding: var(--tct-btn-padding-size-large, var(--t-btn-padding-size-large, 16px 32px));
|
|
224
233
|
font-size: var(--tct-btn-font-size-large, var(--t-btn-font-size-large, 20px));
|
|
225
234
|
}
|
|
235
|
+
:host([size=large]) button:not(.icon-only) ::slotted(q2-icon) {
|
|
236
|
+
--tct-icon-size: var(--tct-btn-icon-size-large, unset);
|
|
237
|
+
}
|
|
226
238
|
:host([color=primary]) button, :host([intent=workflow-primary]) button {
|
|
227
239
|
--comp-background: var(--tct-btn-primary-background, var(--tct-btn-primary-bg, var(--t-a11y-active-gray-color-AA, #404040)));
|
|
228
240
|
--comp-hover-background: var(--tct-btn-primary-hover-background, var(--tct-btn-primary-hover-bg));
|
|
@@ -690,11 +702,20 @@ button:disabled {
|
|
|
690
702
|
:host([intent=neutral-text]) button ::slotted(q2-icon) {
|
|
691
703
|
--t-text: var(--tct-btn-neutral-text-icon-color, var(--t-btn-neutral-text-icon-color, var(--comp-font-color, currentcolor)));
|
|
692
704
|
}
|
|
693
|
-
|
|
705
|
+
button.icon-only {
|
|
694
706
|
width: var(--tct-btn-icon-width, var(--t-btn-icon-width, 44px));
|
|
695
707
|
height: var(--tct-btn-icon-height, var(--t-btn-icon-height, 44px));
|
|
696
708
|
border-radius: var(--tct-btn-icon-border-radius, var(--t-btn-icon-border-radius, var(--tct-btn-border-radius, 0)));
|
|
697
709
|
}
|
|
710
|
+
button.icon-only ::slotted(q2-icon) {
|
|
711
|
+
--tct-icon-size: unset;
|
|
712
|
+
}
|
|
713
|
+
:host([size]) button.icon-only {
|
|
714
|
+
padding: var(--tct-btn-icon-only-padding, 0px);
|
|
715
|
+
}
|
|
716
|
+
:host([intent]) button.icon-only {
|
|
717
|
+
padding: var(--tct-btn-icon-only-intent-padding, var(--app-scale-2x, 10px));
|
|
718
|
+
}
|
|
698
719
|
button :host(:not([color]):not([intent])):hover, button :host(:not([color]):not([intent])):focus, button.icon-only:hover, button.icon-only:focus {
|
|
699
720
|
background: var(--tct-btn-icon-hover-background, var(--tct-btn-icon-hover-bg, var(--t-btn-icon-hover-bg, var(--tct-gray-13, var(--t-gray-13, var(--tct-gray-l3, var(--app-gray-l3, #f2f2f2)))))));
|
|
700
721
|
}
|
|
@@ -759,15 +780,18 @@ button.intent-coin:hover:not([disabled]) {
|
|
|
759
780
|
--tct-avatar-text-color: var(--tct-btn-coin-avatar-text-color, var(--t-base, #FFFFFF));
|
|
760
781
|
box-shadow: var(--const-double-focus-ring);
|
|
761
782
|
}
|
|
783
|
+
button.intent-coin:active:not([disabled]) {
|
|
784
|
+
box-shadow: none;
|
|
785
|
+
}
|
|
762
786
|
|
|
763
|
-
|
|
787
|
+
.slot-container {
|
|
764
788
|
display: flex;
|
|
765
789
|
align-items: center;
|
|
766
790
|
justify-content: center;
|
|
767
791
|
gap: var(--app-scale-1x, 5px);
|
|
768
792
|
pointer-events: none;
|
|
769
793
|
}
|
|
770
|
-
:host([loading]) .icon-right
|
|
794
|
+
:host([loading]) .icon-right .slot-container {
|
|
771
795
|
flex-direction: row-reverse;
|
|
772
796
|
}
|
|
773
797
|
|
|
@@ -812,6 +836,8 @@ q2-loading {
|
|
|
812
836
|
--tct-avatar-display: block;
|
|
813
837
|
display: flex;
|
|
814
838
|
align-items: center;
|
|
839
|
+
justify-content: center;
|
|
840
|
+
gap: var(--app-scale-1x, 5px);
|
|
815
841
|
flex-direction: column;
|
|
816
842
|
width: var(--tct-btn-coin-container-width, 95px);
|
|
817
843
|
}
|
|
@@ -136,7 +136,7 @@ export class Q2Btn {
|
|
|
136
136
|
const { iconPosition, loading, badge, label, hideLabel } = this;
|
|
137
137
|
const renderLoadingSpinner = iconPosition || loading;
|
|
138
138
|
const isLoadingSpinnerInline = !iconPosition || badge;
|
|
139
|
-
return (h(Fragment, null, h("button", { ref: el => (this.primaryBtn = el !== null && el !== void 0 ? el : this.primaryBtn), "aria-expanded": ariaExpanded, "aria-haspopup": ariaHasPopup, "aria-label": hideLabel && loc(label), "aria-selected": ariaSelected, "aria-pressed": ariaPressed, disabled: disabled, type: type, tabindex: tabindex, "test-id": "q2BtnInnerButton", class: this.buttonClasses, "aria-describedby": !!description ? 'hidden-description' : undefined, "aria-labelledby": this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined, role: this._role || undefined }, h("div",
|
|
139
|
+
return (h(Fragment, null, h("button", { ref: el => (this.primaryBtn = el !== null && el !== void 0 ? el : this.primaryBtn), "aria-expanded": ariaExpanded, "aria-haspopup": ariaHasPopup, "aria-label": hideLabel && loc(label), "aria-selected": ariaSelected, "aria-pressed": ariaPressed, disabled: disabled, type: type, tabindex: tabindex, "test-id": "q2BtnInnerButton", class: this.buttonClasses, "aria-describedby": !!description ? 'hidden-description' : undefined, "aria-labelledby": this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined, role: this._role || undefined }, h("div", { class: "slot-container" }, renderLoadingSpinner && (h("q2-loading", { hidden: !loading, modifiers: isLoadingSpinnerInline ? 'inline' : undefined })), this.renderDefaultLabel(), this.renderDefaultCoinSlot())), this.renderCoinLabel(), !!description && (h("div", { id: "hidden-description", "aria-hidden": "true", class: "sr" }, description))));
|
|
140
140
|
}
|
|
141
141
|
renderCoinLabel() {
|
|
142
142
|
if (this.intent !== 'coin' || this.hideLabel)
|
|
@@ -156,7 +156,7 @@ export class Q2Btn {
|
|
|
156
156
|
return h("slot", { onSlotchange: this.handleSlotChange });
|
|
157
157
|
}
|
|
158
158
|
render() {
|
|
159
|
-
return this.size === 'small' || this.intent === 'coin' ? (
|
|
159
|
+
return (this.size === 'small' && this.iconPosition !== 'only') || this.intent === 'coin' ? (
|
|
160
160
|
// wrap only for small sized and coin intent
|
|
161
161
|
h("div", { class: this.size === 'small' ? 'btn-height-wrapper' : 'coin-wrapper', ref: el => (this.primaryBtnWrapper = el !== null && el !== void 0 ? el : this.primaryBtnWrapper), tabIndex: this.size === 'small' ? -1 : undefined }, this.renderButton())) : (this.renderButton());
|
|
162
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-btn.js","sourceRoot":"","sources":["../../../src/components/q2-btn/q2-btn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAsB,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EACH,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,GAAG,EACH,aAAa,EACb,wBAAwB,GAC3B,MAAM,WAAW,CAAC;AAGnB,MAAM,OAAO,KAAK;;QA0Nd,qBAAgB,GAAG,GAAG,EAAE;YACpB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC;QAEF,gBAAW,GAAG,GAAG,EAAE;YACf,oCAAoC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBACnG,IAAI,GAAG;oBAAE,OAAO,CAAC,MAAM,EAAE,CAAC;;oBACrB,GAAG,GAAG,OAAO,CAAC;gBACnB,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,KAAK,IAAI,CAAC;YAClG,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,KAAK,IAAI,CAAC;YAClG,MAAM,WAAW,GAAG,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC;YAE7D,IAAI,YAAY,CAAC;YACjB,IAAI,WAAW;gBAAE,YAAY,GAAG,MAAM,CAAC;iBAClC,IAAI,WAAW;gBAAE,YAAY,GAAG,MAAM,CAAC;iBACvC,IAAI,YAAY;gBAAE,YAAY,GAAG,OAAO,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACrC,CAAC,CAAC;QAEF,qBAAgB,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;oBA1Ha,QAAQ;;IAEvB,aAAa;IACb,qCAAqC;IAErC,iBAAiB;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;IACb,oBAAoB;IAGpB,WAAW,CAAC,KAAY;QACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,wBAAwB,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAGD,aAAa,CAAC,KAAiB;QAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO;QACzD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAGD,YAAY;QACR,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,gBAAgB;QAChB,OAAO;YACH,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE;gBAClD,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,SAAS;gBACT,MAAM;gBACN,MAAM;gBACN,QAAQ;aACX,CAAC;YACF,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACrE,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtE,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;SACvC,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,gBAAgB;QAChB,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAkCD,aAAa;IACb,yBAAyB;IAEzB,YAAY;QACR,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAClG,IAAI,CAAC,gBAAgB,CAAC;QAC1B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAChE,MAAM,oBAAoB,GAAG,YAAY,IAAI,OAAO,CAAC;QACrD,MAAM,sBAAsB,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC;QACtD,OAAO,CACH,EAAC,QAAQ;YACL,cACI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,CAAC,UAAU,CAAC,mBACrC,YAAY,mBACZ,YAAY,gBACf,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,mBACpB,YAAY,kBACb,WAAW,EACzB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,aACV,kBAAkB,EAC1B,KAAK,EAAE,IAAI,CAAC,aAAa,sBACP,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,qBACjD,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAChF,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;gBAE7B;oBACK,oBAAoB,IAAI,CACrB,kBACI,MAAM,EAAE,CAAC,OAAO,EAChB,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAC1D,CACL;oBACA,IAAI,CAAC,kBAAkB,EAAE;oBACzB,IAAI,CAAC,qBAAqB,EAAE,CAC3B,CACD;YACR,IAAI,CAAC,eAAe,EAAE;YACtB,CAAC,CAAC,WAAW,IAAI,CACd,WACI,EAAE,EAAC,oBAAoB,iBACX,MAAM,EAClB,KAAK,EAAC,IAAI,IAET,WAAW,CACV,CACT,CACM,CACd,CAAC;IACN,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QACrD,OAAO,CACH,WACI,EAAE,EAAC,YAAY,EACf,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAE3B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC,CAAC,CAAC,CACA,YACI,IAAI,EAAC,YAAY,EACjB,YAAY,EAAE,IAAI,CAAC,gBAAgB,GACrC,CACL,CACC,CACT,CAAC;IACN,CAAC;IAED,qBAAqB;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,OAAO,YAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAI,CAAC;IACzD,CAAC;IAED,kBAAkB;QACd,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,YAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAI,CAAC;IACzD,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;QACrD,4CAA4C;QAC5C,WACI,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc,EACpE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,CAAC,iBAAiB,CAAC,EAClE,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAE/C,IAAI,CAAC,YAAY,EAAE,CAClB,CACT,CAAC,CAAC,CAAC,CACA,IAAI,CAAC,YAAY,EAAE,CACtB,CAAC;IACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, State, Prop, h, ComponentInterface, Watch, Listen, Element, Fragment } from '@stencil/core';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n handleColor,\n isEventFromElement,\n loc,\n overrideFocus,\n handleDeprecationWarning,\n} from 'src/utils';\n\n@Component({ tag: 'q2-btn', shadow: true, styleUrl: 'q2-btn.scss' })\nexport class Q2Btn implements ComponentInterface {\n // #region Own Properties\n\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconPosition: 'left' | 'right' | 'only';\n\n // #endregion\n // #region Public Property API\n\n /**\n * @private\n * Role attribute for better semantic accessibility support\n */\n @Prop({ reflect: true })\n _role: string;\n\n /**\n * Displays the component in an active state.\n *\n * @info\n * Only intended for use with the `badge` property.\n * @deprecated\n */\n @Prop({ reflect: true })\n active: boolean;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHasPopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaPressed: string;\n\n @Prop()\n ariaSelected: string;\n\n /**\n * Displays the component in a smaller, badge style.\n * @deprecated\n */\n @Prop({ reflect: true })\n badge: boolean;\n\n /** The component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n color: string; // deprecated but need it to use utils/handleColor\n\n @Prop()\n description: string;\n\n /** Marks the component as disabled and displays a `not-allowed` cursor on hover. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n fab: boolean;\n\n /**\n * Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Indicates the role of the component in the workflow, which will apply appropriate styling to the component.\n */\n @Prop({ reflect: true, mutable: true })\n intent:\n | 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary';\n\n /**\n * Defines the text content of the button if it is not provided in the `<slot>` of the element.\n * Also used for the `aria-label` of the `<button>` element when only displaying an icon.\n *\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** Displays the button with a loading spinner to indicate something is happening in the background and the user should not click again. */\n @Prop({ reflect: true })\n loading: boolean;\n\n /**\n * Defines the size of q2-btn, it renders as default size if not provided.\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n @Prop()\n tabIndex: number;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true })\n type: string = 'button';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcons();\n handleAriaLabel(this);\n handleColor(this);\n }\n\n componentDidLoad(): void {\n this.handleButtonSize();\n overrideFocus(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click', { capture: true })\n handleClick(event: Event) {\n if (this.loading || this.disabled) {\n event.stopImmediatePropagation();\n }\n this.primaryBtn.focus();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('size')\n sizeObserver() {\n this.handleButtonSize();\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonAttributes() {\n return {\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHasPopup: getAriaValueFromProp(this.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,\n ariaSelected: getAriaValueFromProp(this.ariaSelected, ['true', 'false']),\n ariaPressed: getAriaValueFromProp(this.ariaPressed, ['true', 'false']),\n description: this.description !== undefined ? this.description : undefined,\n disabled: this.disabled || false,\n type: this.type,\n tabindex: this.tabIndex || undefined,\n };\n }\n\n get buttonClasses() {\n const classes = [];\n if (this.iconPosition) {\n classes.push(`icon-${this.iconPosition}`);\n }\n if (this.intent === 'coin') {\n classes.push('intent-coin');\n }\n\n return classes.join(' ');\n }\n\n get coinLabelClasses() {\n const classes = ['coin-label'];\n if (this.disabled) {\n classes.push('disabled');\n }\n\n return classes.join(' ');\n }\n\n handleButtonSize = () => {\n if (Number(this.size) <= 4) {\n handleDeprecationWarning(this, 'size', 'prop');\n }\n };\n\n handleIcons = () => {\n // Only allow one icon in the button\n const icon = Array.from(this.hostElement.querySelectorAll(':scope > q2-icon')).reduce((acc, element) => {\n if (acc) element.remove();\n else acc = element;\n return acc;\n }, null);\n\n const hasIcon = !!icon;\n const hasLoc = !!this.hostElement.querySelector('q2-loc');\n const hasText = !!this.hostElement.textContent.trim();\n const hasIconLeft = (hasLoc || hasText) && hasIcon && this.hostElement.firstElementChild === icon;\n const hasIconRight = (hasLoc || hasText) && hasIcon && this.hostElement.lastElementChild === icon;\n const hasIconOnly = !hasIconLeft && !hasIconRight && hasIcon;\n\n let iconPosition;\n if (hasIconOnly) iconPosition = 'only';\n else if (hasIconLeft) iconPosition = 'left';\n else if (hasIconRight) iconPosition = 'right';\n this.iconPosition = iconPosition;\n };\n\n handleSlotChange = () => {\n this.handleIcons();\n };\n\n // #endregion\n // #region Render Methods\n\n renderButton() {\n const { ariaExpanded, ariaHasPopup, ariaSelected, ariaPressed, description, disabled, type, tabindex } =\n this.buttonAttributes;\n const { iconPosition, loading, badge, label, hideLabel } = this;\n const renderLoadingSpinner = iconPosition || loading;\n const isLoadingSpinnerInline = !iconPosition || badge;\n return (\n <Fragment>\n <button\n ref={el => (this.primaryBtn = el ?? this.primaryBtn)}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={hideLabel && loc(label)}\n aria-selected={ariaSelected}\n aria-pressed={ariaPressed}\n disabled={disabled}\n type={type}\n tabindex={tabindex}\n test-id=\"q2BtnInnerButton\"\n class={this.buttonClasses}\n aria-describedby={!!description ? 'hidden-description' : undefined}\n aria-labelledby={this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined}\n role={this._role || undefined}\n >\n <div>\n {renderLoadingSpinner && (\n <q2-loading\n hidden={!loading}\n modifiers={isLoadingSpinnerInline ? 'inline' : undefined}\n />\n )}\n {this.renderDefaultLabel()}\n {this.renderDefaultCoinSlot()}\n </div>\n </button>\n {this.renderCoinLabel()}\n {!!description && (\n <div\n id=\"hidden-description\"\n aria-hidden=\"true\"\n class=\"sr\"\n >\n {description}\n </div>\n )}\n </Fragment>\n );\n }\n\n renderCoinLabel() {\n if (this.intent !== 'coin' || this.hideLabel) return;\n return (\n <div\n id=\"coin-label\"\n class={this.coinLabelClasses}\n >\n {this.label ? (\n loc(this.label)\n ) : (\n <slot\n name=\"coin-label\"\n onSlotchange={this.handleSlotChange}\n />\n )}\n </div>\n );\n }\n\n renderDefaultCoinSlot() {\n if (this.intent !== 'coin') return;\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n renderDefaultLabel() {\n if (this.intent === 'coin') return;\n if (!this.hideLabel && this.label) return loc(this.label);\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n render() {\n return this.size === 'small' || this.intent === 'coin' ? (\n // wrap only for small sized and coin intent\n <div\n class={this.size === 'small' ? 'btn-height-wrapper' : 'coin-wrapper'}\n ref={el => (this.primaryBtnWrapper = el ?? this.primaryBtnWrapper)}\n tabIndex={this.size === 'small' ? -1 : undefined}\n >\n {this.renderButton()}\n </div>\n ) : (\n this.renderButton()\n );\n }\n\n // #endregion\n}\n"]}
|
|
1
|
+
{"version":3,"file":"q2-btn.js","sourceRoot":"","sources":["../../../src/components/q2-btn/q2-btn.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,EAAsB,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAChH,OAAO,EACH,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,kBAAkB,EAClB,GAAG,EACH,aAAa,EACb,wBAAwB,GAC3B,MAAM,WAAW,CAAC;AAGnB,MAAM,OAAO,KAAK;;QA0Nd,qBAAgB,GAAG,GAAG,EAAE;YACpB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;YACnD,CAAC;QACL,CAAC,CAAC;QAEF,gBAAW,GAAG,GAAG,EAAE;YACf,oCAAoC;YACpC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBACnG,IAAI,GAAG;oBAAE,OAAO,CAAC,MAAM,EAAE,CAAC;;oBACrB,GAAG,GAAG,OAAO,CAAC;gBACnB,OAAO,GAAG,CAAC;YACf,CAAC,EAAE,IAAI,CAAC,CAAC;YAET,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACvB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YACtD,MAAM,WAAW,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,iBAAiB,KAAK,IAAI,CAAC;YAClG,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,CAAC,WAAW,CAAC,gBAAgB,KAAK,IAAI,CAAC;YAClG,MAAM,WAAW,GAAG,CAAC,WAAW,IAAI,CAAC,YAAY,IAAI,OAAO,CAAC;YAE7D,IAAI,YAAY,CAAC;YACjB,IAAI,WAAW;gBAAE,YAAY,GAAG,MAAM,CAAC;iBAClC,IAAI,WAAW;gBAAE,YAAY,GAAG,MAAM,CAAC;iBACvC,IAAI,YAAY;gBAAE,YAAY,GAAG,OAAO,CAAC;YAC9C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACrC,CAAC,CAAC;QAEF,qBAAgB,GAAG,GAAG,EAAE;YACpB,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;;oBA1Ha,QAAQ;;IAEvB,aAAa;IACb,qCAAqC;IAErC,iBAAiB;QACb,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,eAAe,CAAC,IAAI,CAAC,CAAC;QACtB,WAAW,CAAC,IAAI,CAAC,CAAC;IACtB,CAAC;IAED,gBAAgB;QACZ,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACpC,CAAC;IAED,aAAa;IACb,oBAAoB;IAGpB,WAAW,CAAC,KAAY;QACpB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,KAAK,CAAC,wBAAwB,EAAE,CAAC;QACrC,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAGD,aAAa,CAAC,KAAiB;QAC3B,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO;QACzD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa;IACb,mBAAmB;IAGnB,iBAAiB;QACb,eAAe,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAGD,YAAY;QACR,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC5B,CAAC;IAED,aAAa;IACb,wBAAwB;IAExB,IAAI,gBAAgB;QAChB,OAAO;YACH,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE;gBAClD,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,SAAS;gBACT,MAAM;gBACN,MAAM;gBACN,QAAQ;aACX,CAAC;YACF,SAAS,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YACrE,YAAY,EAAE,oBAAoB,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,WAAW,EAAE,oBAAoB,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACtE,WAAW,EAAE,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS;YAC1E,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK;YAChC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,SAAS;SACvC,CAAC;IACN,CAAC;IAED,IAAI,aAAa;QACb,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED,IAAI,gBAAgB;QAChB,MAAM,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC;QAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAkCD,aAAa;IACb,yBAAyB;IAEzB,YAAY;QACR,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAClG,IAAI,CAAC,gBAAgB,CAAC;QAC1B,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;QAChE,MAAM,oBAAoB,GAAG,YAAY,IAAI,OAAO,CAAC;QACrD,MAAM,sBAAsB,GAAG,CAAC,YAAY,IAAI,KAAK,CAAC;QACtD,OAAO,CACH,EAAC,QAAQ;YACL,cACI,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,CAAC,UAAU,CAAC,mBACrC,YAAY,mBACZ,YAAY,gBACf,SAAS,IAAI,GAAG,CAAC,KAAK,CAAC,mBACpB,YAAY,kBACb,WAAW,EACzB,QAAQ,EAAE,QAAQ,EAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,aACV,kBAAkB,EAC1B,KAAK,EAAE,IAAI,CAAC,aAAa,sBACP,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,SAAS,qBACjD,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAChF,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,SAAS;gBAE7B,WAAK,KAAK,EAAC,gBAAgB;oBACtB,oBAAoB,IAAI,CACrB,kBACI,MAAM,EAAE,CAAC,OAAO,EAChB,SAAS,EAAE,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,GAC1D,CACL;oBACA,IAAI,CAAC,kBAAkB,EAAE;oBACzB,IAAI,CAAC,qBAAqB,EAAE,CAC3B,CACD;YACR,IAAI,CAAC,eAAe,EAAE;YACtB,CAAC,CAAC,WAAW,IAAI,CACd,WACI,EAAE,EAAC,oBAAoB,iBACX,MAAM,EAClB,KAAK,EAAC,IAAI,IAET,WAAW,CACV,CACT,CACM,CACd,CAAC;IACN,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QACrD,OAAO,CACH,WACI,EAAE,EAAC,YAAY,EACf,KAAK,EAAE,IAAI,CAAC,gBAAgB,IAE3B,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACV,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAClB,CAAC,CAAC,CAAC,CACA,YACI,IAAI,EAAC,YAAY,EACjB,YAAY,EAAE,IAAI,CAAC,gBAAgB,GACrC,CACL,CACC,CACT,CAAC;IACN,CAAC;IAED,qBAAqB;QACjB,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,OAAO,YAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAI,CAAC;IACzD,CAAC;IAED,kBAAkB;QACd,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO;QACnC,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1D,OAAO,YAAM,YAAY,EAAE,IAAI,CAAC,gBAAgB,GAAI,CAAC;IACzD,CAAC;IAED,MAAM;QACF,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC;QACvF,4CAA4C;QAC5C,WACI,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,cAAc,EACpE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,CAAC,iBAAiB,CAAC,EAClE,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,IAE/C,IAAI,CAAC,YAAY,EAAE,CAClB,CACT,CAAC,CAAC,CAAC,CACA,IAAI,CAAC,YAAY,EAAE,CACtB,CAAC;IACN,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGJ","sourcesContent":["import { Component, State, Prop, h, ComponentInterface, Watch, Listen, Element, Fragment } from '@stencil/core';\nimport {\n getAriaValueFromProp,\n handleAriaLabel,\n handleColor,\n isEventFromElement,\n loc,\n overrideFocus,\n handleDeprecationWarning,\n} from 'src/utils';\n\n@Component({ tag: 'q2-btn', shadow: true, styleUrl: 'q2-btn.scss' })\nexport class Q2Btn implements ComponentInterface {\n // #region Own Properties\n\n primaryBtn: HTMLButtonElement;\n primaryBtnWrapper: HTMLElement;\n\n // #endregion\n // #region Host HTML Element\n\n @Element()\n hostElement: HTMLElement;\n\n // #endregion\n // #region State Properties\n\n @State()\n iconPosition: 'left' | 'right' | 'only';\n\n // #endregion\n // #region Public Property API\n\n /**\n * @private\n * Role attribute for better semantic accessibility support\n */\n @Prop({ reflect: true })\n _role: string;\n\n /**\n * Displays the component in an active state.\n *\n * @info\n * Only intended for use with the `badge` property.\n * @deprecated\n */\n @Prop({ reflect: true })\n active: boolean;\n\n @Prop()\n ariaControls: string;\n\n @Prop()\n ariaExpanded: string;\n\n @Prop()\n ariaHasPopup: string;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n ariaLabel: string;\n\n @Prop()\n ariaPressed: string;\n\n @Prop()\n ariaSelected: string;\n\n /**\n * Displays the component in a smaller, badge style.\n * @deprecated\n */\n @Prop({ reflect: true })\n badge: boolean;\n\n /** The component expands to fill the width of its parent element. */\n @Prop({ reflect: true })\n block: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true, mutable: true })\n color: string; // deprecated but need it to use utils/handleColor\n\n @Prop()\n description: string;\n\n /** Marks the component as disabled and displays a `not-allowed` cursor on hover. */\n @Prop({ reflect: true })\n disabled: boolean;\n\n /** @deprecated */\n @Prop({ reflect: true })\n fab: boolean;\n\n /**\n * Hides the `label`, and assigns its value to the `aria-label` attribute on the `<button>` element.\n */\n @Prop({ reflect: true, mutable: true })\n hideLabel: boolean;\n\n /**\n * Indicates the role of the component in the workflow, which will apply appropriate styling to the component.\n */\n @Prop({ reflect: true, mutable: true })\n intent:\n | 'coin'\n | 'neutral-text'\n | 'neutral'\n | 'workflow-destroy'\n | 'workflow-escape'\n | 'workflow-primary'\n | 'workflow-secondary';\n\n /**\n * Defines the text content of the button if it is not provided in the `<slot>` of the element.\n * Also used for the `aria-label` of the `<button>` element when only displaying an icon.\n *\n * @localizable\n */\n @Prop({ reflect: true, mutable: true })\n label: string;\n\n /** Displays the button with a loading spinner to indicate something is happening in the background and the user should not click again. */\n @Prop({ reflect: true })\n loading: boolean;\n\n /**\n * Defines the size of q2-btn, it renders as default size if not provided.\n */\n @Prop({ reflect: true })\n size: 'small' | 'medium' | 'large';\n\n @Prop()\n tabIndex: number;\n\n /** The default behavior of the button. */\n @Prop({ reflect: true })\n type: string = 'button';\n\n // #endregion\n // #region Component Lifecycle Events\n\n componentWillLoad() {\n this.handleIcons();\n handleAriaLabel(this);\n handleColor(this);\n }\n\n componentDidLoad(): void {\n this.handleButtonSize();\n overrideFocus(this.hostElement);\n }\n\n // #endregion\n // #region Listeners\n\n @Listen('click', { capture: true })\n handleClick(event: Event) {\n if (this.loading || this.disabled) {\n event.stopImmediatePropagation();\n }\n this.primaryBtn.focus();\n }\n\n @Listen('focus')\n delegateFocus(event: FocusEvent) {\n if (!isEventFromElement(event, this.hostElement)) return;\n this.primaryBtn.focus();\n }\n\n // #endregion\n // #region Watchers\n\n @Watch('ariaLabel')\n ariaLabelObserver() {\n handleAriaLabel(this);\n }\n\n @Watch('size')\n sizeObserver() {\n this.handleButtonSize();\n }\n\n // #endregion\n // #region Local Methods\n\n get buttonAttributes() {\n return {\n ariaExpanded: getAriaValueFromProp(this.ariaExpanded, ['true', 'false']),\n ariaHasPopup: getAriaValueFromProp(this.ariaHasPopup, [\n 'true',\n 'false',\n 'menu',\n 'listbox',\n 'tree',\n 'grid',\n 'dialog',\n ]),\n ariaLabel: this.label && this.hideLabel ? loc(this.label) : undefined,\n ariaSelected: getAriaValueFromProp(this.ariaSelected, ['true', 'false']),\n ariaPressed: getAriaValueFromProp(this.ariaPressed, ['true', 'false']),\n description: this.description !== undefined ? this.description : undefined,\n disabled: this.disabled || false,\n type: this.type,\n tabindex: this.tabIndex || undefined,\n };\n }\n\n get buttonClasses() {\n const classes = [];\n if (this.iconPosition) {\n classes.push(`icon-${this.iconPosition}`);\n }\n if (this.intent === 'coin') {\n classes.push('intent-coin');\n }\n\n return classes.join(' ');\n }\n\n get coinLabelClasses() {\n const classes = ['coin-label'];\n if (this.disabled) {\n classes.push('disabled');\n }\n\n return classes.join(' ');\n }\n\n handleButtonSize = () => {\n if (Number(this.size) <= 4) {\n handleDeprecationWarning(this, 'size', 'prop');\n }\n };\n\n handleIcons = () => {\n // Only allow one icon in the button\n const icon = Array.from(this.hostElement.querySelectorAll(':scope > q2-icon')).reduce((acc, element) => {\n if (acc) element.remove();\n else acc = element;\n return acc;\n }, null);\n\n const hasIcon = !!icon;\n const hasLoc = !!this.hostElement.querySelector('q2-loc');\n const hasText = !!this.hostElement.textContent.trim();\n const hasIconLeft = (hasLoc || hasText) && hasIcon && this.hostElement.firstElementChild === icon;\n const hasIconRight = (hasLoc || hasText) && hasIcon && this.hostElement.lastElementChild === icon;\n const hasIconOnly = !hasIconLeft && !hasIconRight && hasIcon;\n\n let iconPosition;\n if (hasIconOnly) iconPosition = 'only';\n else if (hasIconLeft) iconPosition = 'left';\n else if (hasIconRight) iconPosition = 'right';\n this.iconPosition = iconPosition;\n };\n\n handleSlotChange = () => {\n this.handleIcons();\n };\n\n // #endregion\n // #region Render Methods\n\n renderButton() {\n const { ariaExpanded, ariaHasPopup, ariaSelected, ariaPressed, description, disabled, type, tabindex } =\n this.buttonAttributes;\n const { iconPosition, loading, badge, label, hideLabel } = this;\n const renderLoadingSpinner = iconPosition || loading;\n const isLoadingSpinnerInline = !iconPosition || badge;\n return (\n <Fragment>\n <button\n ref={el => (this.primaryBtn = el ?? this.primaryBtn)}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-label={hideLabel && loc(label)}\n aria-selected={ariaSelected}\n aria-pressed={ariaPressed}\n disabled={disabled}\n type={type}\n tabindex={tabindex}\n test-id=\"q2BtnInnerButton\"\n class={this.buttonClasses}\n aria-describedby={!!description ? 'hidden-description' : undefined}\n aria-labelledby={this.intent === 'coin' && !hideLabel ? 'coin-label' : undefined}\n role={this._role || undefined}\n >\n <div class=\"slot-container\">\n {renderLoadingSpinner && (\n <q2-loading\n hidden={!loading}\n modifiers={isLoadingSpinnerInline ? 'inline' : undefined}\n />\n )}\n {this.renderDefaultLabel()}\n {this.renderDefaultCoinSlot()}\n </div>\n </button>\n {this.renderCoinLabel()}\n {!!description && (\n <div\n id=\"hidden-description\"\n aria-hidden=\"true\"\n class=\"sr\"\n >\n {description}\n </div>\n )}\n </Fragment>\n );\n }\n\n renderCoinLabel() {\n if (this.intent !== 'coin' || this.hideLabel) return;\n return (\n <div\n id=\"coin-label\"\n class={this.coinLabelClasses}\n >\n {this.label ? (\n loc(this.label)\n ) : (\n <slot\n name=\"coin-label\"\n onSlotchange={this.handleSlotChange}\n />\n )}\n </div>\n );\n }\n\n renderDefaultCoinSlot() {\n if (this.intent !== 'coin') return;\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n renderDefaultLabel() {\n if (this.intent === 'coin') return;\n if (!this.hideLabel && this.label) return loc(this.label);\n return <slot onSlotchange={this.handleSlotChange} />;\n }\n\n render() {\n return (this.size === 'small' && this.iconPosition !== 'only') || this.intent === 'coin' ? (\n // wrap only for small sized and coin intent\n <div\n class={this.size === 'small' ? 'btn-height-wrapper' : 'coin-wrapper'}\n ref={el => (this.primaryBtnWrapper = el ?? this.primaryBtnWrapper)}\n tabIndex={this.size === 'small' ? -1 : undefined}\n >\n {this.renderButton()}\n </div>\n ) : (\n this.renderButton()\n );\n }\n\n // #endregion\n}\n"]}
|
|
@@ -89,10 +89,78 @@ describe('q2-btn', () => {
|
|
|
89
89
|
});
|
|
90
90
|
});
|
|
91
91
|
describe('icons', () => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
92
|
+
describe('icon-only', () => {
|
|
93
|
+
it('renders icon-only', async () => {
|
|
94
|
+
page = await setup({ html: `<q2-btn><q2-icon type="edit"></q2-icon></q2-btn>` });
|
|
95
|
+
innerButton = await page.find('q2-btn >>> button');
|
|
96
|
+
const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();
|
|
97
|
+
expect(iconStyles.height).toEqual('44px');
|
|
98
|
+
expect(iconStyles.width).toEqual('44px');
|
|
99
|
+
expect(iconStyles.padding).toEqual('0px');
|
|
100
|
+
expect(innerButton).toHaveClass('icon-only');
|
|
101
|
+
});
|
|
102
|
+
it('uses default styles when no intent and ignores size padding', async () => {
|
|
103
|
+
page = await setup({ html: `<q2-btn size="small"><q2-icon type="edit"></q2-icon></q2-btn>` });
|
|
104
|
+
innerButton = await page.find('q2-btn >>> button');
|
|
105
|
+
const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();
|
|
106
|
+
expect(iconStyles.height).toEqual('44px');
|
|
107
|
+
expect(iconStyles.width).toEqual('44px');
|
|
108
|
+
expect(iconStyles.padding).toEqual('0px');
|
|
109
|
+
expect(innerButton).toHaveClass('icon-only');
|
|
110
|
+
});
|
|
111
|
+
it('updates to use 10px padding when given intent and ignores size padding', async () => {
|
|
112
|
+
page = await setup({
|
|
113
|
+
html: `<q2-btn size="small" intent="primary"><q2-icon type="edit"></q2-icon></q2-btn>`,
|
|
114
|
+
});
|
|
115
|
+
const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();
|
|
116
|
+
expect(iconStyles.height).toEqual('44px');
|
|
117
|
+
expect(iconStyles.width).toEqual('44px');
|
|
118
|
+
expect(iconStyles.padding).toEqual('10px');
|
|
119
|
+
});
|
|
120
|
+
it('uses q2-icon default size', async () => {
|
|
121
|
+
page = await setup({
|
|
122
|
+
html: `<q2-btn><q2-icon type="edit"></q2-icon></q2-btn>`,
|
|
123
|
+
});
|
|
124
|
+
const iconStyles = await (await page.find('q2-icon')).getComputedStyle();
|
|
125
|
+
expect(iconStyles.height).toEqual('24px');
|
|
126
|
+
expect(iconStyles.width).toEqual('24px');
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('icon size styling', () => {
|
|
130
|
+
beforeEach(async () => {
|
|
131
|
+
page = await setup({
|
|
132
|
+
html: `<q2-btn><q2-icon type="edit"></q2-icon><span>My Button</span></q2-btn>`,
|
|
133
|
+
});
|
|
134
|
+
button = await page.find('q2-btn');
|
|
135
|
+
});
|
|
136
|
+
describe('standard button', () => {
|
|
137
|
+
it('sets --tct-icon-size to 18px when no size', async () => {
|
|
138
|
+
const iconStyles = await (await page.find('q2-icon')).getComputedStyle();
|
|
139
|
+
expect(iconStyles.height).toEqual('18px');
|
|
140
|
+
expect(iconStyles.width).toEqual('18px');
|
|
141
|
+
});
|
|
142
|
+
it('sets --tct-icon-size to 16px when size is small', async () => {
|
|
143
|
+
button.setProperty('size', 'small');
|
|
144
|
+
await page.waitForChanges();
|
|
145
|
+
const iconStyles = await (await page.find('q2-icon')).getComputedStyle();
|
|
146
|
+
expect(iconStyles.height).toEqual('16px');
|
|
147
|
+
expect(iconStyles.width).toEqual('16px');
|
|
148
|
+
});
|
|
149
|
+
it('uses q2-icon default when size is medium', async () => {
|
|
150
|
+
button.setProperty('size', 'medium');
|
|
151
|
+
await page.waitForChanges();
|
|
152
|
+
const iconStyles = await (await page.find('q2-icon')).getComputedStyle();
|
|
153
|
+
expect(iconStyles.height).toEqual('24px');
|
|
154
|
+
expect(iconStyles.width).toEqual('24px');
|
|
155
|
+
});
|
|
156
|
+
it('uses q2-icon default when size is large', async () => {
|
|
157
|
+
button.setProperty('size', 'medium');
|
|
158
|
+
await page.waitForChanges();
|
|
159
|
+
const iconStyles = await (await page.find('q2-icon')).getComputedStyle();
|
|
160
|
+
expect(iconStyles.height).toEqual('24px');
|
|
161
|
+
expect(iconStyles.width).toEqual('24px');
|
|
162
|
+
});
|
|
163
|
+
});
|
|
96
164
|
});
|
|
97
165
|
it('renders icon-left', async () => {
|
|
98
166
|
page = await setup({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"q2-btn-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-btn/test/q2-btn-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage } from '@stencil/core/testing';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-btn', () => {\n let page: E2EPage;\n let button: E2EElement;\n let innerButton: E2EElement;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-btn></q2-btn>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-btn')).toHaveLength(0);\n });\n\n it('clicks', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).toHaveReceivedEvent();\n });\n\n it('stops immediate propagation if disabled', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn disabled>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).not.toHaveReceivedEvent();\n });\n\n it('does not emit click event when loading property is true', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn loading>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).not.toHaveReceivedEvent();\n });\n\n it('localizes aria-label', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n\n await setTestStrings(page, {\n 'button.ariaLabel': 'q2-btn aria-label',\n });\n\n button = await page.find('q2-btn');\n const innerBtn = await page.find('q2-btn >>> button');\n\n button.setProperty('ariaLabel', 'button.ariaLabel');\n\n await page.waitForChanges();\n\n expect(innerBtn).toEqualAttribute('aria-label', 'q2-btn aria-label');\n });\n\n it('supports label and slot', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn label=\"Hello World\"></q2-btn>` });\n const q2Btn = await page.find('q2-btn');\n const innerBtn = await page.find('q2-btn >>> button');\n let innerSlot = await page.find('q2-btn >>> slot');\n\n expect(innerBtn).toEqualText('Hello World');\n expect(innerSlot).toBeNull();\n\n q2Btn.setProperty('label', null);\n await page.waitForChanges();\n\n innerSlot = await page.find('q2-btn >>> slot');\n expect(innerBtn).toEqualText('');\n expect(innerSlot).toBeTruthy();\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let btn: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n btn = await page.find('q2-btn');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-btn', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await btn.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await btn.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n });\n\n it('reflects some properties as attributes', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n button = await page.find('q2-btn');\n\n button.setProperty('type', 'submit');\n button.setProperty('disabled', true);\n button.setProperty('ariaLabel', 'Hello');\n\n await page.waitForChanges();\n\n expect(await page.find('q2-btn')).toEqualAttributes({\n type: 'submit',\n disabled: '',\n label: 'Hello',\n 'hide-label': '',\n });\n });\n\n describe('icons', () => {\n it('renders icon-only', async () => {\n page = await setup({ html: `<q2-btn><q2-icon type=\"edit\"></q2-icon></q2-btn>` });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-only');\n });\n\n it('renders icon-left', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"edit\"></q2-icon>\n <span>Edit</span>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-left');\n });\n\n it('renders icon-right', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <span>Edit</span>\n <q2-icon type=\"edit\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-right');\n });\n\n it('renders icon-left when q2-loc is in place of text', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"edit\"></q2-icon>\n <q2-loc value=\"test\"></q2-loc>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-left');\n });\n\n it('renders icon-right when q2-loc is in place of text', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-loc value=\"test\"></q2-loc>\n <q2-icon type=\"edit\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-right');\n });\n\n it('only allows the first icon', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"first\"></q2-icon>\n <span>Edit</span>\n <q2-icon type=\"second\"></q2-icon>\n <q2-icon type=\"third\"></q2-icon>\n <q2-icon type=\"fourth\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n const allIcons = await page.findAll('q2-icon');\n\n expect(innerButton).toHaveClass('icon-left');\n expect(allIcons).toHaveLength(1);\n expect(allIcons[0]).toEqualAttribute('type', 'first');\n });\n\n it('does not assess nested icons', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <div>\n <q2-icon type=\"first\"></q2-icon>\n </div>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).not.toHaveClass('icon-left');\n expect(innerButton).not.toHaveClass('icon-only');\n expect(innerButton).not.toHaveClass('icon-right');\n });\n });\n\n describe('Props', () => {\n describe('_role', () => {\n it('is \"undefined\" when not provided (default)', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('role');\n });\n\n it('applies the role to the inner button when provided', async () => {\n page = await setup({\n html: `<q2-btn _role=\"menuitem\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('role', 'menuitem');\n });\n });\n\n describe('ariaExpanded', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-expanded');\n });\n\n it('no value unless explicitly set', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', '');\n });\n });\n\n describe('ariaHasPopup', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-haspopup');\n });\n\n it('translates to empty string if not passed a value', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', '');\n });\n\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(async value => {\n it(`sets aria-haspopup to \"${value}\" when passed value \"${value}\"`, async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup='${value}'></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', value);\n });\n });\n\n it('sets aria-haspopup to `null` when not provided a valid string', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup='foo'></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', null);\n });\n });\n\n describe('ariaSelected', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-selected=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-selected=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-selected');\n });\n\n it('translates to empty string if not passed a value', async () => {\n page = await setup({\n html: `<q2-btn aria-selected></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', '');\n });\n });\n\n describe('ariaPressed', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n it('is not added when it is not provided', async () => {\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-pressed');\n });\n\n it('uses \"true\" as value when provided', async () => {\n await button.setProperty('ariaPressed', 'true');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n await button.setProperty('ariaPressed', 'false');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'false');\n });\n\n it('converts boolean attributes to strings', async () => {\n await button.setProperty('ariaPressed', true);\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'true');\n });\n });\n\n describe('intent', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn intent='coin' ></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('when set to \"coin\"', () => {\n it('displays an external label', async () => {\n const coinLabel = await page.find('q2-btn >>> .coin-label');\n expect(coinLabel).not.toBeNull();\n });\n\n it('does not displays an external label when label hidden', async () => {\n button.setProperty('hideLabel', true);\n await page.waitForChanges();\n const coinLabel = await page.find('q2-btn >>> .coin-label');\n expect(coinLabel).toBeNull();\n });\n\n it('is wrapped in a coin wrapper', async () => {\n const coinContainer = await page.find('q2-btn >>> .coin-wrapper');\n expect(coinContainer).not.toBeNull();\n });\n\n it('supports a coin label slot', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn intent=\"coin\"><div slot=\"coin-label\">Coin Label</q2-btn>` });\n const coinLabelSlot = await page.find('q2-btn >>> .coin-label');\n expect(coinLabelSlot).not.toBeNull();\n });\n });\n });\n\n describe('size', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn size='small' ></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('does not have font size overwritten', () => {\n it(' when size set to small', async () => {\n button.setProperty('size', 'small');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n\n const buttonCss = await innerButton.getComputedStyle();\n\n expect(buttonCss.fontSize).toEqual('14px');\n });\n it(' when size set to medium', async () => {\n button.setProperty('size', 'medium');\n\n await page.waitForChanges();\n\n innerButton = await page.find('q2-btn >>> button');\n const buttonCss = await innerButton.getComputedStyle();\n\n expect(buttonCss.fontSize).toEqual('16px');\n });\n it(' when size set to large', async () => {\n button.setProperty('size', 'large');\n await page.waitForChanges();\n\n innerButton = await page.find('q2-btn >>> button');\n const buttonCss = await innerButton.getComputedStyle();\n expect(buttonCss.fontSize).toEqual('20px');\n });\n });\n\n describe('button height should be same with or without icon', () => {\n it('when size set to small', async () => {\n const pageWIcon = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\" size=\"small\">\n <q2-icon type=\"edit\"></q2-icon>\n <span>My Button</span>\n </q2-btn>\n `,\n });\n\n const pageWOIcon = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\" size=\"small\">\n <span>My Button</span>\n </q2-btn>\n `,\n });\n\n const buttonWIcon = await pageWIcon.find('q2-btn');\n const buttonWOIcon = await pageWOIcon.find('q2-btn');\n\n async function compareHeight(size) {\n buttonWIcon.setProperty('size', size);\n await pageWIcon.waitForChanges();\n const innerButtonWIcon = await pageWIcon.find('q2-btn >>> button');\n const buttonCssWIcon = await innerButtonWIcon.getComputedStyle();\n\n buttonWOIcon.setProperty('size', size);\n await pageWOIcon.waitForChanges();\n const innerButtonWOIcon = await pageWOIcon.find('q2-btn >>> button');\n const buttonCssWOIcon = await innerButtonWOIcon.getComputedStyle();\n\n expect(buttonCssWIcon.height).toEqual(buttonCssWOIcon.height);\n }\n\n await compareHeight('small');\n await compareHeight('medium');\n await compareHeight('large');\n });\n });\n });\n });\n\n describe('description', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('when provided', () => {\n it('aria-describedby is set to \"hidden-description\" on inner button', async () => {\n button.setProperty('description', 'test description');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-describedby', 'hidden-description');\n });\n\n it('generates an element with description as innerText and aria-hidden set to true', async () => {\n button.setProperty('description', 'test description');\n await page.waitForChanges();\n const hiddenElement = await page.find('q2-btn >>> [id=hidden-description]');\n expect(hiddenElement.innerText).toEqual('test description');\n expect(hiddenElement).toEqualAttribute('aria-hidden', 'true');\n });\n });\n\n describe('when not provided', () => {\n it('aria-describedby attribute is not found on inner button', async () => {\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-describedby');\n });\n\n it('does not generate an element with description', async () => {\n const hiddenElement = await page.find('q2-btn >>> [id=hidden-description]');\n expect(hiddenElement).toBe(null);\n });\n });\n });\n\n describe('Deprecations', () => {\n describe('handles deprecated `color` prop', () => {\n it('sets the color of the button', async () => {\n page = await setup({\n html: `<q2-btn color=\"primary\">Test</q2-btn>`,\n });\n await page.waitForChanges();\n const button = await page.find('q2-btn');\n expect(button).toEqualAttribute('intent', 'workflow-primary');\n expect(await button.getProperty('color')).toBeUndefined();\n });\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({ html: `<q2-btn aria-label=\"${label}\"></q2-btn>` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-btn'), label);\n expect(await page.find('q2-btn >>> button')).toEqualAttribute('aria-label', label);\n });\n\n describe('calls console.warn for deprecated `size` prop', () => {\n it('if set to number 1-4 by using handleDeprecationWarning', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn size='1'></q2-btn>` });\n await page.waitForChanges();\n expect(warnMock).toHaveBeenCalledTimes(1);\n warnMock.mockReset();\n });\n it('if set to number 1-4 after componentDidLoad by using handleDeprecationWarning', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn></q2-btn>` });\n button = await page.find('q2-btn');\n expect(warnMock).toHaveBeenCalledTimes(0);\n button.setProperty('size', '3');\n await page.waitForChanges();\n expect(warnMock).toHaveBeenCalledTimes(1);\n warnMock.mockReset();\n });\n });\n describe('does not call console.warn for deprecated `size` prop', () => {\n it('if number never set on component prop', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn></q2-btn>` });\n button = await page.find('q2-btn');\n expect(warnMock).toHaveBeenCalledTimes(0);\n warnMock.mockReset();\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-btn intent=\"workflow-primary\">My Button</q2-btn>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"q2-btn-test.e2e.js","sourceRoot":"","sources":["../../../../src/components/q2-btn/test/q2-btn-test.e2e.ts"],"names":[],"mappings":"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","sourcesContent":["import { E2EElement, E2EPage } from '@stencil/core/testing';\nimport {\n setTestStrings,\n setup,\n dispatchEvent,\n testDeprecatedAriaLabel,\n getListOfStyleCompilationIssues,\n evaluateA11y,\n} from '@/utils/helpers';\n\ndescribe('q2-btn', () => {\n let page: E2EPage;\n let button: E2EElement;\n let innerButton: E2EElement;\n\n it('properly compiles CSS vars and functions', async () => {\n const page = await setup({ html: '<q2-btn></q2-btn>' });\n expect(await getListOfStyleCompilationIssues(page, 'q2-btn')).toHaveLength(0);\n });\n\n it('clicks', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).toHaveReceivedEvent();\n });\n\n it('stops immediate propagation if disabled', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn disabled>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).not.toHaveReceivedEvent();\n });\n\n it('does not emit click event when loading property is true', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn loading>Hello</q2-btn>` });\n\n button = await page.find('q2-btn');\n const spy = await button.spyOnEvent('click');\n\n await dispatchEvent(page, 'q2-btn', 'click');\n\n expect(spy).not.toHaveReceivedEvent();\n });\n\n it('localizes aria-label', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n\n await setTestStrings(page, {\n 'button.ariaLabel': 'q2-btn aria-label',\n });\n\n button = await page.find('q2-btn');\n const innerBtn = await page.find('q2-btn >>> button');\n\n button.setProperty('ariaLabel', 'button.ariaLabel');\n\n await page.waitForChanges();\n\n expect(innerBtn).toEqualAttribute('aria-label', 'q2-btn aria-label');\n });\n\n it('supports label and slot', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn label=\"Hello World\"></q2-btn>` });\n const q2Btn = await page.find('q2-btn');\n const innerBtn = await page.find('q2-btn >>> button');\n let innerSlot = await page.find('q2-btn >>> slot');\n\n expect(innerBtn).toEqualText('Hello World');\n expect(innerSlot).toBeNull();\n\n q2Btn.setProperty('label', null);\n await page.waitForChanges();\n\n innerSlot = await page.find('q2-btn >>> slot');\n expect(innerBtn).toEqualText('');\n expect(innerSlot).toBeTruthy();\n });\n\n describe('focus', () => {\n let page: E2EPage;\n let btn: E2EElement;\n beforeEach(async () => {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n btn = await page.find('q2-btn');\n\n expect(await innerActiveTestId(page)).toBeUndefined();\n });\n\n const innerActiveTestId = async (page: E2EPage) => {\n return page.$eval('q2-btn', el => el.shadowRoot.activeElement?.getAttribute('test-id'));\n };\n\n it('focuses inner button when focus event is dispatched', async function (): Promise<void> {\n await btn.triggerEvent('focus');\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n\n it('focuses inner button when element.focus() is called', async function (): Promise<void> {\n await btn.focus();\n await page.waitForChanges();\n\n expect(await innerActiveTestId(page)).toEqual('q2BtnInnerButton');\n });\n });\n\n it('reflects some properties as attributes', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn>Hello</q2-btn>` });\n button = await page.find('q2-btn');\n\n button.setProperty('type', 'submit');\n button.setProperty('disabled', true);\n button.setProperty('ariaLabel', 'Hello');\n\n await page.waitForChanges();\n\n expect(await page.find('q2-btn')).toEqualAttributes({\n type: 'submit',\n disabled: '',\n label: 'Hello',\n 'hide-label': '',\n });\n });\n\n describe('icons', () => {\n describe('icon-only', () => {\n it('renders icon-only', async () => {\n page = await setup({ html: `<q2-btn><q2-icon type=\"edit\"></q2-icon></q2-btn>` });\n innerButton = await page.find('q2-btn >>> button');\n const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();\n\n expect(iconStyles.height).toEqual('44px');\n expect(iconStyles.width).toEqual('44px');\n expect(iconStyles.padding).toEqual('0px');\n expect(innerButton).toHaveClass('icon-only');\n });\n\n it('uses default styles when no intent and ignores size padding', async () => {\n page = await setup({ html: `<q2-btn size=\"small\"><q2-icon type=\"edit\"></q2-icon></q2-btn>` });\n innerButton = await page.find('q2-btn >>> button');\n const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();\n\n expect(iconStyles.height).toEqual('44px');\n expect(iconStyles.width).toEqual('44px');\n expect(iconStyles.padding).toEqual('0px');\n expect(innerButton).toHaveClass('icon-only');\n });\n\n it('updates to use 10px padding when given intent and ignores size padding', async () => {\n page = await setup({\n html: `<q2-btn size=\"small\" intent=\"primary\"><q2-icon type=\"edit\"></q2-icon></q2-btn>`,\n });\n const iconStyles = await (await page.find('q2-btn >>> .icon-only')).getComputedStyle();\n expect(iconStyles.height).toEqual('44px');\n expect(iconStyles.width).toEqual('44px');\n expect(iconStyles.padding).toEqual('10px');\n });\n\n it('uses q2-icon default size', async () => {\n page = await setup({\n html: `<q2-btn><q2-icon type=\"edit\"></q2-icon></q2-btn>`,\n });\n const iconStyles = await (await page.find('q2-icon')).getComputedStyle();\n expect(iconStyles.height).toEqual('24px');\n expect(iconStyles.width).toEqual('24px');\n });\n });\n\n describe('icon size styling', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn><q2-icon type=\"edit\"></q2-icon><span>My Button</span></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n describe('standard button', () => {\n it('sets --tct-icon-size to 18px when no size', async () => {\n const iconStyles = await (await page.find('q2-icon')).getComputedStyle();\n\n expect(iconStyles.height).toEqual('18px');\n expect(iconStyles.width).toEqual('18px');\n });\n\n it('sets --tct-icon-size to 16px when size is small', async () => {\n button.setProperty('size', 'small');\n await page.waitForChanges();\n const iconStyles = await (await page.find('q2-icon')).getComputedStyle();\n expect(iconStyles.height).toEqual('16px');\n expect(iconStyles.width).toEqual('16px');\n });\n\n it('uses q2-icon default when size is medium', async () => {\n button.setProperty('size', 'medium');\n await page.waitForChanges();\n const iconStyles = await (await page.find('q2-icon')).getComputedStyle();\n expect(iconStyles.height).toEqual('24px');\n expect(iconStyles.width).toEqual('24px');\n });\n\n it('uses q2-icon default when size is large', async () => {\n button.setProperty('size', 'medium');\n await page.waitForChanges();\n const iconStyles = await (await page.find('q2-icon')).getComputedStyle();\n expect(iconStyles.height).toEqual('24px');\n expect(iconStyles.width).toEqual('24px');\n });\n });\n });\n\n it('renders icon-left', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"edit\"></q2-icon>\n <span>Edit</span>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-left');\n });\n\n it('renders icon-right', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <span>Edit</span>\n <q2-icon type=\"edit\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-right');\n });\n\n it('renders icon-left when q2-loc is in place of text', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"edit\"></q2-icon>\n <q2-loc value=\"test\"></q2-loc>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-left');\n });\n\n it('renders icon-right when q2-loc is in place of text', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-loc value=\"test\"></q2-loc>\n <q2-icon type=\"edit\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).toHaveClass('icon-right');\n });\n\n it('only allows the first icon', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <q2-icon type=\"first\"></q2-icon>\n <span>Edit</span>\n <q2-icon type=\"second\"></q2-icon>\n <q2-icon type=\"third\"></q2-icon>\n <q2-icon type=\"fourth\"></q2-icon>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n const allIcons = await page.findAll('q2-icon');\n\n expect(innerButton).toHaveClass('icon-left');\n expect(allIcons).toHaveLength(1);\n expect(allIcons[0]).toEqualAttribute('type', 'first');\n });\n\n it('does not assess nested icons', async () => {\n page = await setup({\n html: `\n <q2-btn>\n <div>\n <q2-icon type=\"first\"></q2-icon>\n </div>\n </q2-btn>\n `,\n });\n innerButton = await page.find('q2-btn >>> button');\n\n expect(innerButton).not.toHaveClass('icon-left');\n expect(innerButton).not.toHaveClass('icon-only');\n expect(innerButton).not.toHaveClass('icon-right');\n });\n });\n\n describe('Props', () => {\n describe('_role', () => {\n it('is \"undefined\" when not provided (default)', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('role');\n });\n\n it('applies the role to the inner button when provided', async () => {\n page = await setup({\n html: `<q2-btn _role=\"menuitem\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('role', 'menuitem');\n });\n });\n\n describe('ariaExpanded', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-expanded');\n });\n\n it('no value unless explicitly set', async () => {\n page = await setup({\n html: `<q2-btn aria-expanded></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-expanded', '');\n });\n });\n\n describe('ariaHasPopup', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-haspopup');\n });\n\n it('translates to empty string if not passed a value', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', '');\n });\n\n const hasPopupValues = ['true', 'false', 'menu', 'listbox', 'tree', 'grid', 'dialog'];\n hasPopupValues.forEach(async value => {\n it(`sets aria-haspopup to \"${value}\" when passed value \"${value}\"`, async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup='${value}'></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', value);\n });\n });\n\n it('sets aria-haspopup to `null` when not provided a valid string', async () => {\n page = await setup({\n html: `<q2-btn aria-has-popup='foo'></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-haspopup', null);\n });\n });\n\n describe('ariaSelected', () => {\n it('uses \"true\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-selected=\"true\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n page = await setup({\n html: `<q2-btn aria-selected=\"false\"></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', 'false');\n });\n\n it('is not added when it is not provided', async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-selected');\n });\n\n it('translates to empty string if not passed a value', async () => {\n page = await setup({\n html: `<q2-btn aria-selected></q2-btn>`,\n });\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-selected', '');\n });\n });\n\n describe('ariaPressed', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n it('is not added when it is not provided', async () => {\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-pressed');\n });\n\n it('uses \"true\" as value when provided', async () => {\n await button.setProperty('ariaPressed', 'true');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'true');\n });\n\n it('uses \"false\" as value when provided', async () => {\n await button.setProperty('ariaPressed', 'false');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'false');\n });\n\n it('converts boolean attributes to strings', async () => {\n await button.setProperty('ariaPressed', true);\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-pressed', 'true');\n });\n });\n\n describe('intent', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn intent='coin' ></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('when set to \"coin\"', () => {\n it('displays an external label', async () => {\n const coinLabel = await page.find('q2-btn >>> .coin-label');\n expect(coinLabel).not.toBeNull();\n });\n\n it('does not displays an external label when label hidden', async () => {\n button.setProperty('hideLabel', true);\n await page.waitForChanges();\n const coinLabel = await page.find('q2-btn >>> .coin-label');\n expect(coinLabel).toBeNull();\n });\n\n it('is wrapped in a coin wrapper', async () => {\n const coinContainer = await page.find('q2-btn >>> .coin-wrapper');\n expect(coinContainer).not.toBeNull();\n });\n\n it('supports a coin label slot', async function (): Promise<void> {\n page = await setup({ html: `<q2-btn intent=\"coin\"><div slot=\"coin-label\">Coin Label</q2-btn>` });\n const coinLabelSlot = await page.find('q2-btn >>> .coin-label');\n expect(coinLabelSlot).not.toBeNull();\n });\n });\n });\n\n describe('size', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn size='small' ></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('does not have font size overwritten', () => {\n it(' when size set to small', async () => {\n button.setProperty('size', 'small');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n\n const buttonCss = await innerButton.getComputedStyle();\n\n expect(buttonCss.fontSize).toEqual('14px');\n });\n it(' when size set to medium', async () => {\n button.setProperty('size', 'medium');\n\n await page.waitForChanges();\n\n innerButton = await page.find('q2-btn >>> button');\n const buttonCss = await innerButton.getComputedStyle();\n\n expect(buttonCss.fontSize).toEqual('16px');\n });\n it(' when size set to large', async () => {\n button.setProperty('size', 'large');\n await page.waitForChanges();\n\n innerButton = await page.find('q2-btn >>> button');\n const buttonCss = await innerButton.getComputedStyle();\n expect(buttonCss.fontSize).toEqual('20px');\n });\n });\n\n describe('button height should be same with or without icon', () => {\n it('when size set to small', async () => {\n const pageWIcon = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\" size=\"small\">\n <q2-icon type=\"edit\"></q2-icon>\n <span>My Button</span>\n </q2-btn>\n `,\n });\n\n const pageWOIcon = await setup({\n html: `\n <q2-btn intent=\"workflow-primary\" size=\"small\">\n <span>My Button</span>\n </q2-btn>\n `,\n });\n\n const buttonWIcon = await pageWIcon.find('q2-btn');\n const buttonWOIcon = await pageWOIcon.find('q2-btn');\n\n async function compareHeight(size) {\n buttonWIcon.setProperty('size', size);\n await pageWIcon.waitForChanges();\n const innerButtonWIcon = await pageWIcon.find('q2-btn >>> button');\n const buttonCssWIcon = await innerButtonWIcon.getComputedStyle();\n\n buttonWOIcon.setProperty('size', size);\n await pageWOIcon.waitForChanges();\n const innerButtonWOIcon = await pageWOIcon.find('q2-btn >>> button');\n const buttonCssWOIcon = await innerButtonWOIcon.getComputedStyle();\n\n expect(buttonCssWIcon.height).toEqual(buttonCssWOIcon.height);\n }\n\n await compareHeight('small');\n await compareHeight('medium');\n await compareHeight('large');\n });\n });\n });\n });\n\n describe('description', () => {\n beforeEach(async () => {\n page = await setup({\n html: `<q2-btn></q2-btn>`,\n });\n button = await page.find('q2-btn');\n });\n\n describe('when provided', () => {\n it('aria-describedby is set to \"hidden-description\" on inner button', async () => {\n button.setProperty('description', 'test description');\n await page.waitForChanges();\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).toEqualAttribute('aria-describedby', 'hidden-description');\n });\n\n it('generates an element with description as innerText and aria-hidden set to true', async () => {\n button.setProperty('description', 'test description');\n await page.waitForChanges();\n const hiddenElement = await page.find('q2-btn >>> [id=hidden-description]');\n expect(hiddenElement.innerText).toEqual('test description');\n expect(hiddenElement).toEqualAttribute('aria-hidden', 'true');\n });\n });\n\n describe('when not provided', () => {\n it('aria-describedby attribute is not found on inner button', async () => {\n innerButton = await page.find('q2-btn >>> button');\n expect(innerButton).not.toHaveAttribute('aria-describedby');\n });\n\n it('does not generate an element with description', async () => {\n const hiddenElement = await page.find('q2-btn >>> [id=hidden-description]');\n expect(hiddenElement).toBe(null);\n });\n });\n });\n\n describe('Deprecations', () => {\n describe('handles deprecated `color` prop', () => {\n it('sets the color of the button', async () => {\n page = await setup({\n html: `<q2-btn color=\"primary\">Test</q2-btn>`,\n });\n await page.waitForChanges();\n const button = await page.find('q2-btn');\n expect(button).toEqualAttribute('intent', 'workflow-primary');\n expect(await button.getProperty('color')).toBeUndefined();\n });\n });\n\n it('handles deprecated `ariaLabel` prop', async () => {\n const label = 'My Label';\n page = await setup({ html: `<q2-btn aria-label=\"${label}\"></q2-btn>` });\n await page.waitForChanges();\n await testDeprecatedAriaLabel(await page.find('q2-btn'), label);\n expect(await page.find('q2-btn >>> button')).toEqualAttribute('aria-label', label);\n });\n\n describe('calls console.warn for deprecated `size` prop', () => {\n it('if set to number 1-4 by using handleDeprecationWarning', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn size='1'></q2-btn>` });\n await page.waitForChanges();\n expect(warnMock).toHaveBeenCalledTimes(1);\n warnMock.mockReset();\n });\n it('if set to number 1-4 after componentDidLoad by using handleDeprecationWarning', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn></q2-btn>` });\n button = await page.find('q2-btn');\n expect(warnMock).toHaveBeenCalledTimes(0);\n button.setProperty('size', '3');\n await page.waitForChanges();\n expect(warnMock).toHaveBeenCalledTimes(1);\n warnMock.mockReset();\n });\n });\n describe('does not call console.warn for deprecated `size` prop', () => {\n it('if number never set on component prop', async () => {\n const warnMock = jest.spyOn(console, 'warn');\n page = await setup({ html: `<q2-btn></q2-btn>` });\n button = await page.find('q2-btn');\n expect(warnMock).toHaveBeenCalledTimes(0);\n warnMock.mockReset();\n });\n });\n });\n\n describe('Accessibility', () => {\n describe('aXe DevTools', () => {\n it('does not have accessibility violations', async () => {\n const page = await setup({\n html: `<q2-btn intent=\"workflow-primary\">My Button</q2-btn>`,\n });\n const hasViolations = await evaluateA11y(page);\n expect(hasViolations).toBe(false);\n });\n });\n describe('Accessibility Tree', () => {});\n describe('Keyboard Controls', () => {});\n describe('Other', () => {});\n });\n});\n"]}
|