@ionic/core 7.5.8-dev.11701806358.1ca1b519 → 7.5.8-dev.11701894917.1c1465bd
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/components/data.js +1 -1
- package/components/ion-datetime.js +30 -39
- package/components/ion-picker-column-internal.d.ts +11 -0
- package/components/ion-picker-column-internal.js +9 -0
- package/components/ion-picker-column.js +2 -2
- package/components/{ion-picker-legacy.d.ts → ion-picker-internal.d.ts} +4 -4
- package/components/ion-picker-internal.js +9 -0
- package/components/ion-picker.js +309 -1
- package/components/overlays.js +3 -6
- package/components/picker-column-internal.js +390 -0
- package/components/picker-column.js +317 -363
- package/components/{picker.js → picker-internal.js} +16 -16
- package/dist/cjs/{data-e7526b58.js → data-36b9094e.js} +1 -1
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/ion-action-sheet.cjs.entry.js +1 -1
- package/dist/cjs/ion-alert.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime-button.cjs.entry.js +1 -1
- package/dist/cjs/ion-datetime_3.cjs.entry.js +35 -29
- package/dist/cjs/ion-loading.cjs.entry.js +1 -1
- package/dist/cjs/ion-menu_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-modal.cjs.entry.js +1 -1
- package/dist/cjs/{ion-picker-column.cjs.entry.js → ion-picker-column-internal.cjs.entry.js} +72 -105
- package/dist/cjs/{ion-picker.cjs.entry.js → ion-picker-internal.cjs.entry.js} +13 -13
- package/dist/cjs/ion-popover.cjs.entry.js +1 -1
- package/dist/cjs/ion-select_3.cjs.entry.js +1 -1
- package/dist/cjs/ion-toast.cjs.entry.js +1 -1
- package/dist/cjs/ionic.cjs.js +1 -1
- package/dist/cjs/loader.cjs.js +1 -1
- package/dist/cjs/{overlays-e8e05b0e.js → overlays-2c6b1072.js} +3 -6
- package/dist/collection/collection-manifest.json +6 -7
- package/dist/collection/components/datetime/datetime.ios.css +13 -0
- package/dist/collection/components/datetime/datetime.js +16 -19
- package/dist/collection/components/datetime/datetime.md.css +13 -0
- package/dist/collection/components/datetime/test/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/disabled/datetime.spec.js +4 -4
- package/dist/collection/components/datetime/test/locale/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/minmax/datetime.e2e.js +6 -6
- package/dist/collection/components/datetime/test/prefer-wheel/datetime.e2e.js +41 -43
- package/dist/collection/components/datetime/test/presentation/datetime.e2e.js +1 -1
- package/dist/collection/components/datetime/test/readonly/datetime.e2e.js +2 -2
- package/dist/collection/components/datetime/test/values/datetime.e2e.js +12 -15
- package/dist/collection/components/datetime/utils/data.js +1 -1
- package/dist/collection/components/picker/picker.ios.css +205 -100
- package/dist/collection/components/picker/picker.js +743 -461
- package/dist/collection/components/picker/picker.md.css +194 -98
- package/dist/collection/components/picker/test/basic/picker.e2e.js +13 -99
- package/dist/collection/components/{picker-legacy → picker}/test/is-open/picker.e2e.js +4 -4
- package/dist/collection/components/{picker-legacy → picker}/test/picker-id.spec.js +5 -5
- package/dist/collection/components/{picker-legacy → picker}/test/trigger/picker.e2e.js +1 -1
- package/dist/collection/components/picker-column/picker-column.ios.css +160 -120
- package/dist/collection/components/picker-column/picker-column.js +329 -514
- package/dist/collection/components/picker-column/picker-column.md.css +107 -134
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-aria.spec.js +3 -3
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column-dynamic.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/picker-column.spec.js +2 -2
- package/dist/collection/components/{picker-legacy-column → picker-column}/test/standalone/picker-column.e2e.js +3 -3
- package/dist/collection/components/{picker-column-option/picker-column-option.md.css → picker-column-internal/picker-column-internal.ios.css} +53 -6
- package/dist/collection/components/picker-column-internal/picker-column-internal.js +565 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.md.css → picker-column-internal/picker-column-internal.md.css} +63 -113
- package/dist/collection/components/{picker-column/test/basic/picker-column.e2e.js → picker-column-internal/test/basic/picker-column-internal.e2e.js} +8 -8
- package/dist/collection/components/picker-column-internal/test/disabled/picker-column-internal.e2e.js +162 -0
- package/dist/collection/components/{picker-legacy/picker.md.css → picker-internal/picker-internal.ios.css} +100 -192
- package/dist/collection/components/picker-internal/picker-internal.js +544 -0
- package/dist/collection/components/{picker-legacy-column/picker-column.ios.css → picker-internal/picker-internal.md.css} +101 -98
- package/dist/collection/components/{picker/test/a11y/picker.e2e.js → picker-internal/test/a11y/picker-internal.e2e.js} +2 -2
- package/dist/collection/components/picker-internal/test/basic/picker-internal.e2e.js +118 -0
- package/dist/collection/components/{picker/test/keyboard-entry/picker.e2e.js → picker-internal/test/keyboard-entry/picker-internal.e2e.js} +22 -23
- package/dist/collection/utils/overlays.js +3 -6
- package/dist/docs.json +23 -487
- package/dist/esm/{data-4b9508c9.js → data-f5c75b4e.js} +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/ion-action-sheet.entry.js +1 -1
- package/dist/esm/ion-alert.entry.js +1 -1
- package/dist/esm/ion-datetime-button.entry.js +1 -1
- package/dist/esm/ion-datetime_3.entry.js +34 -28
- package/dist/esm/ion-loading.entry.js +1 -1
- package/dist/esm/ion-menu_3.entry.js +1 -1
- package/dist/esm/ion-modal.entry.js +1 -1
- package/dist/esm/{ion-picker-column.entry.js → ion-picker-column-internal.entry.js} +72 -105
- package/dist/esm/{ion-picker.entry.js → ion-picker-internal.entry.js} +13 -13
- package/dist/esm/ion-popover.entry.js +1 -1
- package/dist/esm/ion-select_3.entry.js +1 -1
- package/dist/esm/ion-toast.entry.js +1 -1
- package/dist/esm/ionic.js +1 -1
- package/dist/esm/loader.js +1 -1
- package/dist/esm/{overlays-fbc5cab5.js → overlays-d23ea6e1.js} +3 -6
- package/dist/esm-es5/index.js +1 -1
- package/dist/esm-es5/ion-action-sheet.entry.js +1 -1
- package/dist/esm-es5/ion-alert.entry.js +1 -1
- package/dist/esm-es5/ion-datetime-button.entry.js +1 -1
- package/dist/esm-es5/ion-datetime_3.entry.js +1 -1
- package/dist/esm-es5/ion-loading.entry.js +1 -1
- package/dist/esm-es5/ion-menu_3.entry.js +1 -1
- package/dist/esm-es5/ion-modal.entry.js +1 -1
- package/dist/esm-es5/ion-picker-column-internal.entry.js +4 -0
- package/dist/esm-es5/ion-picker-internal.entry.js +4 -0
- package/dist/esm-es5/ion-popover.entry.js +1 -1
- package/dist/esm-es5/ion-select_3.entry.js +1 -1
- package/dist/esm-es5/ion-toast.entry.js +1 -1
- package/dist/esm-es5/ionic.js +1 -1
- package/dist/esm-es5/loader.js +1 -1
- package/dist/esm-es5/overlays-d23ea6e1.js +4 -0
- package/dist/html.html-data.json +1 -152
- package/dist/ionic/index.esm.js +1 -1
- package/dist/ionic/ionic.esm.js +1 -1
- package/dist/ionic/{p-846ee227.entry.js → p-1e57bd24.entry.js} +1 -1
- package/dist/ionic/{p-26798a7b.system.entry.js → p-1f620cd4.system.entry.js} +1 -1
- package/dist/ionic/{p-5d42b6b4.entry.js → p-27ea6f4e.entry.js} +1 -1
- package/dist/ionic/{p-6b7c55cd.entry.js → p-2dc43d20.entry.js} +1 -1
- package/dist/ionic/{p-4a36430f.system.entry.js → p-2f2293da.system.entry.js} +1 -1
- package/dist/ionic/{p-21c3515a.entry.js → p-2f300cca.entry.js} +1 -1
- package/dist/ionic/{p-8017aad2.system.entry.js → p-39a335b6.system.entry.js} +1 -1
- package/dist/ionic/{p-4a081ea9.entry.js → p-3b568d18.entry.js} +1 -1
- package/dist/ionic/{p-c18de88a.system.entry.js → p-3e3d06a6.system.entry.js} +1 -1
- package/dist/ionic/{p-96dbbac1.system.entry.js → p-4df97e3c.system.entry.js} +1 -1
- package/dist/ionic/p-60502e3f.system.entry.js +4 -0
- package/dist/ionic/{p-563c41f0.system.entry.js → p-60b386c9.system.entry.js} +1 -1
- package/dist/ionic/p-67da080d.entry.js +4 -0
- package/dist/ionic/p-73ea8f82.system.entry.js +4 -0
- package/dist/ionic/p-80fa068e.entry.js +4 -0
- package/dist/ionic/{p-a8baa23e.entry.js → p-8780cc2a.entry.js} +1 -1
- package/dist/ionic/{p-f910cc73.system.entry.js → p-9eec42cc.system.entry.js} +1 -1
- package/dist/ionic/p-ab11130c.system.js +4 -0
- package/dist/ionic/p-af16fe62.entry.js +4 -0
- package/dist/ionic/{p-73aa7604.entry.js → p-af19a573.entry.js} +1 -1
- package/dist/ionic/p-c14f8ac8.js +4 -0
- package/dist/ionic/p-cce9f61a.system.entry.js +4 -0
- package/dist/ionic/{p-b133e9b4.entry.js → p-ddb30596.entry.js} +1 -1
- package/dist/ionic/{p-27bcbbc7.system.entry.js → p-e1e5afe1.system.entry.js} +1 -1
- package/dist/ionic/p-e3584231.system.js +1 -1
- package/dist/ionic/{p-fbf3a689.system.entry.js → p-e3ad9607.system.entry.js} +1 -1
- package/dist/ionic/{p-73190c5f.entry.js → p-f78efbd1.entry.js} +1 -1
- package/dist/ionic/{p-54dfc9b5.system.js → p-fff7a57e.system.js} +1 -1
- package/dist/types/components/datetime/utils/data.d.ts +2 -2
- package/dist/types/components/picker/picker.d.ts +131 -74
- package/dist/types/components/picker-column/picker-column.d.ts +39 -105
- package/dist/types/components/picker-column-internal/picker-column-internal.d.ts +102 -0
- package/dist/types/components/picker-internal/picker-internal-interfaces.d.ts +8 -0
- package/dist/types/components/picker-internal/picker-internal.d.ts +102 -0
- package/dist/types/components.d.ts +122 -163
- package/dist/types/interface.d.ts +1 -1
- package/dist/types/utils/config.d.ts +2 -2
- package/dist/types/utils/overlays.d.ts +2 -5
- package/hydrate/index.js +1151 -1287
- package/package.json +1 -1
- package/components/ion-picker-column-option.d.ts +0 -11
- package/components/ion-picker-column-option.js +0 -9
- package/components/ion-picker-legacy-column.d.ts +0 -11
- package/components/ion-picker-legacy-column.js +0 -9
- package/components/ion-picker-legacy.js +0 -309
- package/components/picker-column-option.js +0 -122
- package/components/picker-column2.js +0 -379
- package/dist/cjs/ion-picker-column-option.cjs.entry.js +0 -104
- package/dist/collection/components/picker-column/test/disabled/picker-column.e2e.js +0 -113
- package/dist/collection/components/picker-column/test/slots/picker-column.e2e.js +0 -39
- package/dist/collection/components/picker-column-option/picker-column-option.ios.css +0 -87
- package/dist/collection/components/picker-column-option/picker-column-option.js +0 -173
- package/dist/collection/components/picker-column-option/test/a11y/picker-column-option.e2e.js +0 -18
- package/dist/collection/components/picker-column-option/test/basic/picker-column-option.e2e.js +0 -37
- package/dist/collection/components/picker-legacy/picker.ios.css +0 -367
- package/dist/collection/components/picker-legacy/picker.js +0 -817
- package/dist/collection/components/picker-legacy/test/basic/picker.e2e.js +0 -25
- package/dist/collection/components/picker-legacy-column/picker-column.js +0 -419
- package/dist/esm/ion-picker-column-option.entry.js +0 -100
- package/dist/esm-es5/ion-picker-column-option.entry.js +0 -4
- package/dist/esm-es5/ion-picker-column.entry.js +0 -4
- package/dist/esm-es5/ion-picker.entry.js +0 -4
- package/dist/esm-es5/overlays-fbc5cab5.js +0 -4
- package/dist/ionic/p-23672c82.system.entry.js +0 -4
- package/dist/ionic/p-8fa6583d.system.js +0 -4
- package/dist/ionic/p-9282b16f.entry.js +0 -4
- package/dist/ionic/p-9ba90516.system.entry.js +0 -4
- package/dist/ionic/p-afcf4620.entry.js +0 -4
- package/dist/ionic/p-c2910c78.entry.js +0 -4
- package/dist/ionic/p-c8f0a036.entry.js +0 -4
- package/dist/ionic/p-ca8938f4.js +0 -4
- package/dist/ionic/p-ca9d1792.system.entry.js +0 -4
- package/dist/ionic/p-ffd5dba4.system.entry.js +0 -4
- package/dist/types/components/picker/picker-interfaces.d.ts +0 -8
- package/dist/types/components/picker-column-option/picker-column-option.d.ts +0 -66
- package/dist/types/components/picker-legacy/picker.d.ts +0 -158
- package/dist/types/components/picker-legacy-column/picker-column.d.ts +0 -46
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.enter.js +0 -0
- /package/dist/collection/components/{picker-legacy → picker}/animations/ios.leave.js +0 -0
- /package/dist/collection/components/picker/{picker-interfaces.js → picker-interface.js} +0 -0
- /package/dist/collection/components/{picker-legacy-column → picker-column}/test/test.utils.js +0 -0
- /package/dist/collection/components/{picker-column/picker-column-interfaces.js → picker-column-internal/picker-column-internal-interfaces.js} +0 -0
- /package/dist/collection/components/{picker-legacy/picker-interface.js → picker-internal/picker-internal-interfaces.js} +0 -0
- /package/dist/esm-es5/{data-4b9508c9.js → data-f5c75b4e.js} +0 -0
- /package/dist/ionic/{p-368f5215.js → p-2aea8b1e.js} +0 -0
- /package/dist/ionic/{p-f58981c2.system.js → p-82e3d633.system.js} +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.enter.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/animations/ios.leave.d.ts +0 -0
- /package/dist/types/components/{picker-legacy → picker}/picker-interface.d.ts +0 -0
- /package/dist/types/components/{picker-legacy-column → picker-column}/test/test.utils.d.ts +0 -0
- /package/dist/types/components/{picker-column/picker-column-interfaces.d.ts → picker-column-internal/picker-column-internal-interfaces.d.ts} +0 -0
|
@@ -1,379 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { proxyCustomElement, HTMLElement, createEvent, h, Host } from '@stencil/core/internal/client';
|
|
5
|
-
import { m as clamp } from './helpers.js';
|
|
6
|
-
import { b as hapticSelectionChanged, h as hapticSelectionEnd, a as hapticSelectionStart } from './haptic.js';
|
|
7
|
-
import { g as getClassMap } from './theme.js';
|
|
8
|
-
import { b as getIonMode } from './ionic-global.js';
|
|
9
|
-
|
|
10
|
-
const pickerColumnIosCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:4px;padding-inline-start:4px;-webkit-padding-end:4px;padding-inline-end:4px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:20px;line-height:42px;pointer-events:none}.picker-opt{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;-webkit-transform-origin:center center;transform-origin:center center;height:46px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:20px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}:host-context([dir=rtl]) .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}[dir=rtl] .picker-opt{-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){-webkit-transform-origin:calc(100% - center) center;transform-origin:calc(100% - center) center}}";
|
|
11
|
-
|
|
12
|
-
const pickerColumnMdCss = ".picker-col{display:-ms-flexbox;display:flex;position:relative;-ms-flex:1;flex:1;-ms-flex-pack:center;justify-content:center;height:100%;-webkit-box-sizing:content-box;box-sizing:content-box;contain:content}.picker-opts{position:relative;-ms-flex:1;flex:1;max-width:100%}.picker-opt{top:0;display:block;position:absolute;width:100%;border:0;text-align:center;text-overflow:ellipsis;white-space:nowrap;contain:strict;overflow:hidden;will-change:transform}@supports (inset-inline-start: 0){.picker-opt{inset-inline-start:0}}@supports not (inset-inline-start: 0){.picker-opt{left:0}:host-context([dir=rtl]) .picker-opt{left:unset;right:unset;right:0}[dir=rtl] .picker-opt{left:unset;right:unset;right:0}@supports selector(:dir(rtl)){.picker-opt:dir(rtl){left:unset;right:unset;right:0}}}.picker-opt.picker-opt-disabled{pointer-events:none}.picker-opt-disabled{opacity:0}.picker-opts-left{-ms-flex-pack:start;justify-content:flex-start}.picker-opts-right{-ms-flex-pack:end;justify-content:flex-end}.picker-opt:active,.picker-opt:focus{outline:none}.picker-prefix{position:relative;-ms-flex:1;flex:1;text-align:end;white-space:nowrap}.picker-suffix{position:relative;-ms-flex:1;flex:1;text-align:start;white-space:nowrap}.picker-col{-webkit-padding-start:8px;padding-inline-start:8px;-webkit-padding-end:8px;padding-inline-end:8px;padding-top:0;padding-bottom:0;-webkit-transform-style:preserve-3d;transform-style:preserve-3d}.picker-prefix,.picker-suffix,.picker-opts{top:77px;-webkit-transform-style:preserve-3d;transform-style:preserve-3d;color:inherit;font-size:22px;line-height:42px;pointer-events:none}.picker-opt{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;height:43px;-webkit-transition-timing-function:ease-out;transition-timing-function:ease-out;background:transparent;color:inherit;font-size:22px;line-height:42px;-webkit-backface-visibility:hidden;backface-visibility:hidden;pointer-events:auto}.picker-prefix,.picker-suffix,.picker-opt.picker-opt-selected{color:var(--ion-color-primary, #3880ff)}";
|
|
13
|
-
|
|
14
|
-
const PickerColumnCmp = /*@__PURE__*/ proxyCustomElement(class PickerColumnCmp extends HTMLElement {
|
|
15
|
-
constructor() {
|
|
16
|
-
super();
|
|
17
|
-
this.__registerHost();
|
|
18
|
-
this.ionPickerColChange = createEvent(this, "ionPickerColChange", 7);
|
|
19
|
-
this.optHeight = 0;
|
|
20
|
-
this.rotateFactor = 0;
|
|
21
|
-
this.scaleFactor = 1;
|
|
22
|
-
this.velocity = 0;
|
|
23
|
-
this.y = 0;
|
|
24
|
-
this.noAnimate = true;
|
|
25
|
-
// `colDidChange` is a flag that gets set when the column is changed
|
|
26
|
-
// dynamically. When this flag is set, the column will refresh
|
|
27
|
-
// after the component re-renders to incorporate the new column data.
|
|
28
|
-
// This is necessary because `this.refresh` queries for the option elements,
|
|
29
|
-
// so it needs to wait for the latest elements to be available in the DOM.
|
|
30
|
-
// Ex: column is created with 3 options. User updates the column data
|
|
31
|
-
// to have 5 options. The column will still think it only has 3 options.
|
|
32
|
-
this.colDidChange = false;
|
|
33
|
-
this.col = undefined;
|
|
34
|
-
}
|
|
35
|
-
colChanged() {
|
|
36
|
-
this.colDidChange = true;
|
|
37
|
-
}
|
|
38
|
-
async connectedCallback() {
|
|
39
|
-
let pickerRotateFactor = 0;
|
|
40
|
-
let pickerScaleFactor = 0.81;
|
|
41
|
-
const mode = getIonMode(this);
|
|
42
|
-
if (mode === 'ios') {
|
|
43
|
-
pickerRotateFactor = -0.46;
|
|
44
|
-
pickerScaleFactor = 1;
|
|
45
|
-
}
|
|
46
|
-
this.rotateFactor = pickerRotateFactor;
|
|
47
|
-
this.scaleFactor = pickerScaleFactor;
|
|
48
|
-
this.gesture = (await import('./index3.js')).createGesture({
|
|
49
|
-
el: this.el,
|
|
50
|
-
gestureName: 'picker-swipe',
|
|
51
|
-
gesturePriority: 100,
|
|
52
|
-
threshold: 0,
|
|
53
|
-
passive: false,
|
|
54
|
-
onStart: (ev) => this.onStart(ev),
|
|
55
|
-
onMove: (ev) => this.onMove(ev),
|
|
56
|
-
onEnd: (ev) => this.onEnd(ev),
|
|
57
|
-
});
|
|
58
|
-
this.gesture.enable();
|
|
59
|
-
// Options have not been initialized yet
|
|
60
|
-
// Animation must be disabled through the `noAnimate` flag
|
|
61
|
-
// Otherwise, the options will render
|
|
62
|
-
// at the top of the column and transition down
|
|
63
|
-
this.tmrId = setTimeout(() => {
|
|
64
|
-
this.noAnimate = false;
|
|
65
|
-
// After initialization, `refresh()` will be called
|
|
66
|
-
// At this point, animation will be enabled. The options will
|
|
67
|
-
// animate as they are being selected.
|
|
68
|
-
this.refresh(true);
|
|
69
|
-
}, 250);
|
|
70
|
-
}
|
|
71
|
-
componentDidLoad() {
|
|
72
|
-
this.onDomChange();
|
|
73
|
-
}
|
|
74
|
-
componentDidUpdate() {
|
|
75
|
-
// Options may have changed since last update.
|
|
76
|
-
if (this.colDidChange) {
|
|
77
|
-
// Animation must be disabled through the `onDomChange` parameter.
|
|
78
|
-
// Otherwise, the recently added options will render
|
|
79
|
-
// at the top of the column and transition down
|
|
80
|
-
this.onDomChange(true, false);
|
|
81
|
-
this.colDidChange = false;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
disconnectedCallback() {
|
|
85
|
-
if (this.rafId !== undefined)
|
|
86
|
-
cancelAnimationFrame(this.rafId);
|
|
87
|
-
if (this.tmrId)
|
|
88
|
-
clearTimeout(this.tmrId);
|
|
89
|
-
if (this.gesture) {
|
|
90
|
-
this.gesture.destroy();
|
|
91
|
-
this.gesture = undefined;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
emitColChange() {
|
|
95
|
-
this.ionPickerColChange.emit(this.col);
|
|
96
|
-
}
|
|
97
|
-
setSelected(selectedIndex, duration) {
|
|
98
|
-
// if there is a selected index, then figure out it's y position
|
|
99
|
-
// if there isn't a selected index, then just use the top y position
|
|
100
|
-
const y = selectedIndex > -1 ? -(selectedIndex * this.optHeight) : 0;
|
|
101
|
-
this.velocity = 0;
|
|
102
|
-
// set what y position we're at
|
|
103
|
-
if (this.rafId !== undefined)
|
|
104
|
-
cancelAnimationFrame(this.rafId);
|
|
105
|
-
this.update(y, duration, true);
|
|
106
|
-
this.emitColChange();
|
|
107
|
-
}
|
|
108
|
-
update(y, duration, saveY) {
|
|
109
|
-
if (!this.optsEl) {
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
// ensure we've got a good round number :)
|
|
113
|
-
let translateY = 0;
|
|
114
|
-
let translateZ = 0;
|
|
115
|
-
const { col, rotateFactor } = this;
|
|
116
|
-
const prevSelected = col.selectedIndex;
|
|
117
|
-
const selectedIndex = (col.selectedIndex = this.indexForY(-y));
|
|
118
|
-
const durationStr = duration === 0 ? '' : duration + 'ms';
|
|
119
|
-
const scaleStr = `scale(${this.scaleFactor})`;
|
|
120
|
-
const children = this.optsEl.children;
|
|
121
|
-
for (let i = 0; i < children.length; i++) {
|
|
122
|
-
const button = children[i];
|
|
123
|
-
const opt = col.options[i];
|
|
124
|
-
const optOffset = i * this.optHeight + y;
|
|
125
|
-
let transform = '';
|
|
126
|
-
if (rotateFactor !== 0) {
|
|
127
|
-
const rotateX = optOffset * rotateFactor;
|
|
128
|
-
if (Math.abs(rotateX) <= 90) {
|
|
129
|
-
translateY = 0;
|
|
130
|
-
translateZ = 90;
|
|
131
|
-
transform = `rotateX(${rotateX}deg) `;
|
|
132
|
-
}
|
|
133
|
-
else {
|
|
134
|
-
translateY = -9999;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
translateZ = 0;
|
|
139
|
-
translateY = optOffset;
|
|
140
|
-
}
|
|
141
|
-
const selected = selectedIndex === i;
|
|
142
|
-
transform += `translate3d(0px,${translateY}px,${translateZ}px) `;
|
|
143
|
-
if (this.scaleFactor !== 1 && !selected) {
|
|
144
|
-
transform += scaleStr;
|
|
145
|
-
}
|
|
146
|
-
// Update transition duration
|
|
147
|
-
if (this.noAnimate) {
|
|
148
|
-
opt.duration = 0;
|
|
149
|
-
button.style.transitionDuration = '';
|
|
150
|
-
}
|
|
151
|
-
else if (duration !== opt.duration) {
|
|
152
|
-
opt.duration = duration;
|
|
153
|
-
button.style.transitionDuration = durationStr;
|
|
154
|
-
}
|
|
155
|
-
// Update transform
|
|
156
|
-
if (transform !== opt.transform) {
|
|
157
|
-
opt.transform = transform;
|
|
158
|
-
}
|
|
159
|
-
button.style.transform = transform;
|
|
160
|
-
/**
|
|
161
|
-
* Ensure that the select column
|
|
162
|
-
* item has the selected class
|
|
163
|
-
*/
|
|
164
|
-
opt.selected = selected;
|
|
165
|
-
if (selected) {
|
|
166
|
-
button.classList.add(PICKER_OPT_SELECTED);
|
|
167
|
-
}
|
|
168
|
-
else {
|
|
169
|
-
button.classList.remove(PICKER_OPT_SELECTED);
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
this.col.prevSelected = prevSelected;
|
|
173
|
-
if (saveY) {
|
|
174
|
-
this.y = y;
|
|
175
|
-
}
|
|
176
|
-
if (this.lastIndex !== selectedIndex) {
|
|
177
|
-
// have not set a last index yet
|
|
178
|
-
hapticSelectionChanged();
|
|
179
|
-
this.lastIndex = selectedIndex;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
decelerate() {
|
|
183
|
-
if (this.velocity !== 0) {
|
|
184
|
-
// still decelerating
|
|
185
|
-
this.velocity *= DECELERATION_FRICTION;
|
|
186
|
-
// do not let it go slower than a velocity of 1
|
|
187
|
-
this.velocity = this.velocity > 0 ? Math.max(this.velocity, 1) : Math.min(this.velocity, -1);
|
|
188
|
-
let y = this.y + this.velocity;
|
|
189
|
-
if (y > this.minY) {
|
|
190
|
-
// whoops, it's trying to scroll up farther than the options we have!
|
|
191
|
-
y = this.minY;
|
|
192
|
-
this.velocity = 0;
|
|
193
|
-
}
|
|
194
|
-
else if (y < this.maxY) {
|
|
195
|
-
// gahh, it's trying to scroll down farther than we can!
|
|
196
|
-
y = this.maxY;
|
|
197
|
-
this.velocity = 0;
|
|
198
|
-
}
|
|
199
|
-
this.update(y, 0, true);
|
|
200
|
-
const notLockedIn = Math.round(y) % this.optHeight !== 0 || Math.abs(this.velocity) > 1;
|
|
201
|
-
if (notLockedIn) {
|
|
202
|
-
// isn't locked in yet, keep decelerating until it is
|
|
203
|
-
this.rafId = requestAnimationFrame(() => this.decelerate());
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
this.velocity = 0;
|
|
207
|
-
this.emitColChange();
|
|
208
|
-
hapticSelectionEnd();
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
else if (this.y % this.optHeight !== 0) {
|
|
212
|
-
// needs to still get locked into a position so options line up
|
|
213
|
-
const currentPos = Math.abs(this.y % this.optHeight);
|
|
214
|
-
// create a velocity in the direction it needs to scroll
|
|
215
|
-
this.velocity = currentPos > this.optHeight / 2 ? 1 : -1;
|
|
216
|
-
this.decelerate();
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
indexForY(y) {
|
|
220
|
-
return Math.min(Math.max(Math.abs(Math.round(y / this.optHeight)), 0), this.col.options.length - 1);
|
|
221
|
-
}
|
|
222
|
-
onStart(detail) {
|
|
223
|
-
// We have to prevent default in order to block scrolling under the picker
|
|
224
|
-
// but we DO NOT have to stop propagation, since we still want
|
|
225
|
-
// some "click" events to capture
|
|
226
|
-
if (detail.event.cancelable) {
|
|
227
|
-
detail.event.preventDefault();
|
|
228
|
-
}
|
|
229
|
-
detail.event.stopPropagation();
|
|
230
|
-
hapticSelectionStart();
|
|
231
|
-
// reset everything
|
|
232
|
-
if (this.rafId !== undefined)
|
|
233
|
-
cancelAnimationFrame(this.rafId);
|
|
234
|
-
const options = this.col.options;
|
|
235
|
-
let minY = options.length - 1;
|
|
236
|
-
let maxY = 0;
|
|
237
|
-
for (let i = 0; i < options.length; i++) {
|
|
238
|
-
if (!options[i].disabled) {
|
|
239
|
-
minY = Math.min(minY, i);
|
|
240
|
-
maxY = Math.max(maxY, i);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
this.minY = -(minY * this.optHeight);
|
|
244
|
-
this.maxY = -(maxY * this.optHeight);
|
|
245
|
-
}
|
|
246
|
-
onMove(detail) {
|
|
247
|
-
if (detail.event.cancelable) {
|
|
248
|
-
detail.event.preventDefault();
|
|
249
|
-
}
|
|
250
|
-
detail.event.stopPropagation();
|
|
251
|
-
// update the scroll position relative to pointer start position
|
|
252
|
-
let y = this.y + detail.deltaY;
|
|
253
|
-
if (y > this.minY) {
|
|
254
|
-
// scrolling up higher than scroll area
|
|
255
|
-
y = Math.pow(y, 0.8);
|
|
256
|
-
this.bounceFrom = y;
|
|
257
|
-
}
|
|
258
|
-
else if (y < this.maxY) {
|
|
259
|
-
// scrolling down below scroll area
|
|
260
|
-
y += Math.pow(this.maxY - y, 0.9);
|
|
261
|
-
this.bounceFrom = y;
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
this.bounceFrom = 0;
|
|
265
|
-
}
|
|
266
|
-
this.update(y, 0, false);
|
|
267
|
-
}
|
|
268
|
-
onEnd(detail) {
|
|
269
|
-
if (this.bounceFrom > 0) {
|
|
270
|
-
// bounce back up
|
|
271
|
-
this.update(this.minY, 100, true);
|
|
272
|
-
this.emitColChange();
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
else if (this.bounceFrom < 0) {
|
|
276
|
-
// bounce back down
|
|
277
|
-
this.update(this.maxY, 100, true);
|
|
278
|
-
this.emitColChange();
|
|
279
|
-
return;
|
|
280
|
-
}
|
|
281
|
-
this.velocity = clamp(-MAX_PICKER_SPEED, detail.velocityY * 23, MAX_PICKER_SPEED);
|
|
282
|
-
if (this.velocity === 0 && detail.deltaY === 0) {
|
|
283
|
-
const opt = detail.event.target.closest('.picker-opt');
|
|
284
|
-
if (opt === null || opt === void 0 ? void 0 : opt.hasAttribute('opt-index')) {
|
|
285
|
-
this.setSelected(parseInt(opt.getAttribute('opt-index'), 10), TRANSITION_DURATION);
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
this.y += detail.deltaY;
|
|
290
|
-
if (Math.abs(detail.velocityY) < 0.05) {
|
|
291
|
-
const isScrollingUp = detail.deltaY > 0;
|
|
292
|
-
const optHeightFraction = (Math.abs(this.y) % this.optHeight) / this.optHeight;
|
|
293
|
-
if (isScrollingUp && optHeightFraction > 0.5) {
|
|
294
|
-
this.velocity = Math.abs(this.velocity) * -1;
|
|
295
|
-
}
|
|
296
|
-
else if (!isScrollingUp && optHeightFraction <= 0.5) {
|
|
297
|
-
this.velocity = Math.abs(this.velocity);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
this.decelerate();
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
refresh(forceRefresh, animated) {
|
|
304
|
-
var _a;
|
|
305
|
-
let min = this.col.options.length - 1;
|
|
306
|
-
let max = 0;
|
|
307
|
-
const options = this.col.options;
|
|
308
|
-
for (let i = 0; i < options.length; i++) {
|
|
309
|
-
if (!options[i].disabled) {
|
|
310
|
-
min = Math.min(min, i);
|
|
311
|
-
max = Math.max(max, i);
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Only update selected value if column has a
|
|
316
|
-
* velocity of 0. If it does not, then the
|
|
317
|
-
* column is animating might land on
|
|
318
|
-
* a value different than the value at
|
|
319
|
-
* selectedIndex
|
|
320
|
-
*/
|
|
321
|
-
if (this.velocity !== 0) {
|
|
322
|
-
return;
|
|
323
|
-
}
|
|
324
|
-
const selectedIndex = clamp(min, (_a = this.col.selectedIndex) !== null && _a !== void 0 ? _a : 0, max);
|
|
325
|
-
if (this.col.prevSelected !== selectedIndex || forceRefresh) {
|
|
326
|
-
const y = selectedIndex * this.optHeight * -1;
|
|
327
|
-
const duration = animated ? TRANSITION_DURATION : 0;
|
|
328
|
-
this.velocity = 0;
|
|
329
|
-
this.update(y, duration, true);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
onDomChange(forceRefresh, animated) {
|
|
333
|
-
const colEl = this.optsEl;
|
|
334
|
-
if (colEl) {
|
|
335
|
-
// DOM READ
|
|
336
|
-
// We perfom a DOM read over a rendered item, this needs to happen after the first render or after the the column has changed
|
|
337
|
-
this.optHeight = colEl.firstElementChild ? colEl.firstElementChild.clientHeight : 0;
|
|
338
|
-
}
|
|
339
|
-
this.refresh(forceRefresh, animated);
|
|
340
|
-
}
|
|
341
|
-
render() {
|
|
342
|
-
const col = this.col;
|
|
343
|
-
const mode = getIonMode(this);
|
|
344
|
-
return (h(Host, { class: Object.assign({ [mode]: true, 'picker-col': true, 'picker-opts-left': this.col.align === 'left', 'picker-opts-right': this.col.align === 'right' }, getClassMap(col.cssClass)), style: {
|
|
345
|
-
'max-width': this.col.columnWidth,
|
|
346
|
-
} }, col.prefix && (h("div", { class: "picker-prefix", style: { width: col.prefixWidth } }, col.prefix)), h("div", { class: "picker-opts", style: { maxWidth: col.optionsWidth }, ref: (el) => (this.optsEl = el) }, col.options.map((o, index) => (h("button", { "aria-label": o.ariaLabel, class: { 'picker-opt': true, 'picker-opt-disabled': !!o.disabled }, "opt-index": index }, o.text)))), col.suffix && (h("div", { class: "picker-suffix", style: { width: col.suffixWidth } }, col.suffix))));
|
|
347
|
-
}
|
|
348
|
-
get el() { return this; }
|
|
349
|
-
static get watchers() { return {
|
|
350
|
-
"col": ["colChanged"]
|
|
351
|
-
}; }
|
|
352
|
-
static get style() { return {
|
|
353
|
-
ios: pickerColumnIosCss,
|
|
354
|
-
md: pickerColumnMdCss
|
|
355
|
-
}; }
|
|
356
|
-
}, [32, "ion-picker-legacy-column", {
|
|
357
|
-
"col": [16]
|
|
358
|
-
}, undefined, {
|
|
359
|
-
"col": ["colChanged"]
|
|
360
|
-
}]);
|
|
361
|
-
const PICKER_OPT_SELECTED = 'picker-opt-selected';
|
|
362
|
-
const DECELERATION_FRICTION = 0.97;
|
|
363
|
-
const MAX_PICKER_SPEED = 90;
|
|
364
|
-
const TRANSITION_DURATION = 150;
|
|
365
|
-
function defineCustomElement() {
|
|
366
|
-
if (typeof customElements === "undefined") {
|
|
367
|
-
return;
|
|
368
|
-
}
|
|
369
|
-
const components = ["ion-picker-legacy-column"];
|
|
370
|
-
components.forEach(tagName => { switch (tagName) {
|
|
371
|
-
case "ion-picker-legacy-column":
|
|
372
|
-
if (!customElements.get(tagName)) {
|
|
373
|
-
customElements.define(tagName, PickerColumnCmp);
|
|
374
|
-
}
|
|
375
|
-
break;
|
|
376
|
-
} });
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
export { PickerColumnCmp as P, defineCustomElement as d };
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
'use strict';
|
|
5
|
-
|
|
6
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
7
|
-
|
|
8
|
-
const index = require('./index-bbb4336c.js');
|
|
9
|
-
const helpers = require('./helpers-76bb7efb.js');
|
|
10
|
-
const theme = require('./theme-d1c573d2.js');
|
|
11
|
-
const ionicGlobal = require('./ionic-global-f4a2093b.js');
|
|
12
|
-
|
|
13
|
-
const pickerColumnOptionIosCss = "button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) button{cursor:default}";
|
|
14
|
-
|
|
15
|
-
const pickerColumnOptionMdCss = "button{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:100%;height:34px;border:0px;outline:none;background:transparent;color:inherit;font-family:var(--ion-font-family, inherit);font-size:inherit;line-height:34px;text-align:inherit;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;overflow:hidden}:host(.option-disabled){opacity:0.4}:host(.option-disabled) button{cursor:default}:host(.option-active){color:var(--ion-color-base)}";
|
|
16
|
-
|
|
17
|
-
const PickerColumnOption = class {
|
|
18
|
-
constructor(hostRef) {
|
|
19
|
-
index.registerInstance(this, hostRef);
|
|
20
|
-
/**
|
|
21
|
-
* We keep track of the parent picker column
|
|
22
|
-
* so we can update the value of it when
|
|
23
|
-
* clicking an enable option.
|
|
24
|
-
*/
|
|
25
|
-
this.pickerColumn = null;
|
|
26
|
-
this.ariaLabel = null;
|
|
27
|
-
this.disabled = false;
|
|
28
|
-
this.value = undefined;
|
|
29
|
-
this.color = 'primary';
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* The aria-label of the option has changed after the
|
|
33
|
-
* first render and needs to be updated within the component.
|
|
34
|
-
*
|
|
35
|
-
* @param ariaLbl The new aria-label value.
|
|
36
|
-
*/
|
|
37
|
-
onAriaLabelChange(ariaLbl) {
|
|
38
|
-
this.ariaLabel = ariaLbl;
|
|
39
|
-
}
|
|
40
|
-
componentWillLoad() {
|
|
41
|
-
const inheritedAttributes = helpers.inheritAttributes(this.el, ['aria-label']);
|
|
42
|
-
/**
|
|
43
|
-
* The initial value of `aria-label` needs to be set for
|
|
44
|
-
* the first render.
|
|
45
|
-
|
|
46
|
-
*/
|
|
47
|
-
this.ariaLabel = inheritedAttributes['aria-label'] || null;
|
|
48
|
-
}
|
|
49
|
-
connectedCallback() {
|
|
50
|
-
this.pickerColumn = this.el.closest('ion-picker-column');
|
|
51
|
-
}
|
|
52
|
-
disconnectedCallback() {
|
|
53
|
-
this.pickerColumn = null;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* The column options can load at any time
|
|
57
|
-
* so the options needs to tell the
|
|
58
|
-
* parent picker column when it is loaded
|
|
59
|
-
* so the picker column can ensure it is
|
|
60
|
-
* centered in the view.
|
|
61
|
-
*
|
|
62
|
-
* We intentionally run this for every
|
|
63
|
-
* option. If we only ran this from
|
|
64
|
-
* the selected option then if the newly
|
|
65
|
-
* loaded options were not selected then
|
|
66
|
-
* scrollActiveItemIntoView would not be called.
|
|
67
|
-
*/
|
|
68
|
-
componentDidLoad() {
|
|
69
|
-
const { pickerColumn } = this;
|
|
70
|
-
if (pickerColumn !== null) {
|
|
71
|
-
pickerColumn.scrollActiveItemIntoView();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* When an option is clicked update the
|
|
76
|
-
* parent picker column value. This
|
|
77
|
-
* component will handle centering the option
|
|
78
|
-
* in the column view.
|
|
79
|
-
*/
|
|
80
|
-
onClick() {
|
|
81
|
-
const { pickerColumn } = this;
|
|
82
|
-
if (pickerColumn !== null) {
|
|
83
|
-
pickerColumn.setValue(this.value);
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
render() {
|
|
87
|
-
const { color, disabled, ariaLabel } = this;
|
|
88
|
-
const mode = ionicGlobal.getIonMode(this);
|
|
89
|
-
return (index.h(index.Host, { class: theme.createColorClasses(color, {
|
|
90
|
-
[mode]: true,
|
|
91
|
-
['option-disabled']: disabled,
|
|
92
|
-
}) }, index.h("button", { tabindex: "-1", "aria-label": ariaLabel, disabled: disabled, onClick: () => this.onClick() }, index.h("slot", null))));
|
|
93
|
-
}
|
|
94
|
-
get el() { return index.getElement(this); }
|
|
95
|
-
static get watchers() { return {
|
|
96
|
-
"aria-label": ["onAriaLabelChange"]
|
|
97
|
-
}; }
|
|
98
|
-
};
|
|
99
|
-
PickerColumnOption.style = {
|
|
100
|
-
ios: pickerColumnOptionIosCss,
|
|
101
|
-
md: pickerColumnOptionMdCss
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
exports.ion_picker_column_option = PickerColumnOption;
|
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { expect } from "@playwright/test";
|
|
5
|
-
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
-
/**
|
|
7
|
-
* This behavior does not vary across modes/directions.
|
|
8
|
-
*/
|
|
9
|
-
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
10
|
-
test.describe(title('picker-column: disabled items'), () => {
|
|
11
|
-
// TODO FW-5580 move this to a spec test in picker-column-option
|
|
12
|
-
test('all picker items should be enabled by default', async ({ page }) => {
|
|
13
|
-
await page.setContent(`
|
|
14
|
-
<ion-picker>
|
|
15
|
-
<ion-picker-column>
|
|
16
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
17
|
-
<ion-picker-column-option value="b">B</ion-picker-column-option>
|
|
18
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
19
|
-
</ion-picker-column>
|
|
20
|
-
</ion-picker>
|
|
21
|
-
`, config);
|
|
22
|
-
const pickerItems = page.locator('ion-picker-column ion-picker-column-option button:not([disabled])');
|
|
23
|
-
expect(await pickerItems.count()).toBe(3);
|
|
24
|
-
});
|
|
25
|
-
// TODO FW-5580 move this to a spec test in picker-column-option
|
|
26
|
-
test('disabled picker item should not be interactive', async ({ page }) => {
|
|
27
|
-
await page.setContent(`
|
|
28
|
-
<ion-picker>
|
|
29
|
-
<ion-picker-column>
|
|
30
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
31
|
-
<ion-picker-column-option value="b" disabled="true">B</ion-picker-column-option>
|
|
32
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
33
|
-
</ion-picker-column>
|
|
34
|
-
</ion-picker>
|
|
35
|
-
`, config);
|
|
36
|
-
const disabledItem = page.locator('ion-picker-column ion-picker-column-option button').nth(1);
|
|
37
|
-
await expect(disabledItem).not.toBeEnabled();
|
|
38
|
-
});
|
|
39
|
-
test('disabled picker item should not be considered active', async ({ page }) => {
|
|
40
|
-
await page.setContent(`
|
|
41
|
-
<ion-picker>
|
|
42
|
-
<ion-picker-column value="b">
|
|
43
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
44
|
-
<ion-picker-column-option value="b" disabled="true">B</ion-picker-column-option>
|
|
45
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
46
|
-
</ion-picker-column>
|
|
47
|
-
</ion-picker>
|
|
48
|
-
`, config);
|
|
49
|
-
const disabledItem = page.locator('ion-picker-column-option').nth(1);
|
|
50
|
-
await expect(disabledItem).not.toHaveClass(/option-active/);
|
|
51
|
-
});
|
|
52
|
-
test('setting the value to a disabled item should not cause that item to be active', async ({ page }) => {
|
|
53
|
-
await page.setContent(`
|
|
54
|
-
<ion-picker>
|
|
55
|
-
<ion-picker-column>
|
|
56
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
57
|
-
<ion-picker-column-option value="b" disabled="true">B</ion-picker-column-option>
|
|
58
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
59
|
-
</ion-picker-column>
|
|
60
|
-
</ion-picker>
|
|
61
|
-
`, config);
|
|
62
|
-
const pickerColumn = page.locator('ion-picker-column');
|
|
63
|
-
await pickerColumn.evaluate((el) => (el.value = 'b'));
|
|
64
|
-
await page.waitForChanges();
|
|
65
|
-
const disabledItem = page.locator('ion-picker-column ion-picker-column-option').nth(1);
|
|
66
|
-
await expect(disabledItem).not.toHaveClass(/option-active/);
|
|
67
|
-
});
|
|
68
|
-
test('defaulting the value to a disabled item should not cause that item to be active', async ({ page }) => {
|
|
69
|
-
await page.setContent(`
|
|
70
|
-
<ion-picker>
|
|
71
|
-
<ion-picker-column value="b">
|
|
72
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
73
|
-
<ion-picker-column-option value="b" disabled="true">B</ion-picker-column-option>
|
|
74
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
75
|
-
</ion-picker-column>
|
|
76
|
-
</ion-picker>
|
|
77
|
-
`, config);
|
|
78
|
-
const disabledItem = page.locator('ion-picker-column ion-picker-column-option').nth(1);
|
|
79
|
-
await expect(disabledItem).not.toHaveClass(/option-active/);
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
/**
|
|
84
|
-
* This behavior does not vary across directions.
|
|
85
|
-
*/
|
|
86
|
-
// TODO FW-5580 fix this
|
|
87
|
-
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
88
|
-
test.describe.skip(title('picker-column: disabled column rendering'), () => {
|
|
89
|
-
test.beforeEach(async ({ page }) => {
|
|
90
|
-
await page.goto('/src/components/picker-column/test/disabled', config);
|
|
91
|
-
});
|
|
92
|
-
test('disabled column should not have visual regressions', async ({ page }) => {
|
|
93
|
-
const disabledColumn = page.locator('#column-disabled');
|
|
94
|
-
await page.waitForChanges();
|
|
95
|
-
await expect(disabledColumn).toHaveScreenshot(screenshot('picker-disabled-column'));
|
|
96
|
-
});
|
|
97
|
-
});
|
|
98
|
-
});
|
|
99
|
-
/**
|
|
100
|
-
* This behavior does not vary across modes/directions.
|
|
101
|
-
*/
|
|
102
|
-
// TODO FW-5580 fix this
|
|
103
|
-
configs({ modes: ['ios'], directions: ['ltr'] }).forEach(({ title, config }) => {
|
|
104
|
-
test.describe.skip(title('picker-column: disabled column'), () => {
|
|
105
|
-
test.beforeEach(async ({ page }) => {
|
|
106
|
-
await page.goto('/src/components/picker-column/test/disabled', config);
|
|
107
|
-
});
|
|
108
|
-
test('item in disabled column should not be interactive', async ({ page }) => {
|
|
109
|
-
const secondItem = page.locator('#column-disabled .picker-item:not(.picker-item-empty)').nth(1);
|
|
110
|
-
await expect(secondItem).toBeDisabled();
|
|
111
|
-
});
|
|
112
|
-
});
|
|
113
|
-
});
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* (C) Ionic http://ionicframework.com - MIT License
|
|
3
|
-
*/
|
|
4
|
-
import { expect } from "@playwright/test";
|
|
5
|
-
import { configs, test } from "../../../../utils/test/playwright/index";
|
|
6
|
-
configs({ directions: ['ltr'] }).forEach(({ title, screenshot, config }) => {
|
|
7
|
-
test.describe(title('picker-column: slots'), () => {
|
|
8
|
-
test('should not have visual regressions with prefix and suffix', async ({ page }) => {
|
|
9
|
-
await page.setContent(`
|
|
10
|
-
<ion-picker>
|
|
11
|
-
<ion-picker-column value="b">
|
|
12
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
13
|
-
<ion-picker-column-option value="b">B</ion-picker-column-option>
|
|
14
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
15
|
-
<div slot="prefix">Prefix</div>
|
|
16
|
-
<div slot="suffix">Suffix</div>
|
|
17
|
-
</ion-picker-column>
|
|
18
|
-
</ion-picker>
|
|
19
|
-
`, config);
|
|
20
|
-
const picker = page.locator('ion-picker');
|
|
21
|
-
await expect(picker).toHaveScreenshot(screenshot(`picker-prefix-suffix`));
|
|
22
|
-
});
|
|
23
|
-
test('should not have visual regressions with a long prefix and suffix', async ({ page }) => {
|
|
24
|
-
await page.setContent(`
|
|
25
|
-
<ion-picker>
|
|
26
|
-
<ion-picker-column value="b">
|
|
27
|
-
<ion-picker-column-option value="a">A</ion-picker-column-option>
|
|
28
|
-
<ion-picker-column-option value="b">B</ion-picker-column-option>
|
|
29
|
-
<ion-picker-column-option value="c">C</ion-picker-column-option>
|
|
30
|
-
<div slot="prefix">Long prefix long prefix long prefix</div>
|
|
31
|
-
<div slot="suffix">Long suffix long suffix long suffix</div>
|
|
32
|
-
</ion-picker-column>
|
|
33
|
-
</ion-picker>
|
|
34
|
-
`, config);
|
|
35
|
-
const picker = page.locator('ion-picker');
|
|
36
|
-
await expect(picker).toHaveScreenshot(screenshot(`picker-long-prefix-suffix`));
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
|
-
});
|