@spectrum-web-components/picker 0.44.0 → 0.46.0
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/custom-elements.json +1067 -199
- package/package.json +32 -16
- package/src/DesktopController.d.ts +7 -0
- package/src/DesktopController.dev.js +72 -0
- package/src/DesktopController.dev.js.map +7 -0
- package/src/DesktopController.js +2 -0
- package/src/DesktopController.js.map +7 -0
- package/src/InteractionController.d.ts +43 -0
- package/src/InteractionController.dev.js +120 -0
- package/src/InteractionController.dev.js.map +7 -0
- package/src/InteractionController.js +2 -0
- package/src/InteractionController.js.map +7 -0
- package/src/MobileController.d.ts +7 -0
- package/src/MobileController.dev.js +42 -0
- package/src/MobileController.dev.js.map +7 -0
- package/src/MobileController.js +2 -0
- package/src/MobileController.js.map +7 -0
- package/src/Picker.d.ts +12 -14
- package/src/Picker.dev.js +62 -86
- package/src/Picker.dev.js.map +2 -2
- package/src/Picker.js +16 -33
- package/src/Picker.js.map +3 -3
- package/src/picker.css.dev.js +1 -1
- package/src/picker.css.dev.js.map +1 -1
- package/src/picker.css.js +1 -1
- package/src/picker.css.js.map +1 -1
- package/src/spectrum-picker.css.dev.js +1 -1
- package/src/spectrum-picker.css.dev.js.map +1 -1
- package/src/spectrum-picker.css.js +1 -1
- package/src/spectrum-picker.css.js.map +1 -1
- package/src/strategies.d.ts +6 -0
- package/src/strategies.dev.js +8 -0
- package/src/strategies.dev.js.map +7 -0
- package/src/strategies.js +2 -0
- package/src/strategies.js.map +7 -0
- package/test/index.js +3 -0
- package/test/index.js.map +2 -2
- package/test/picker-responsive.test.js +33 -25
- package/test/picker-responsive.test.js.map +2 -2
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.46.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -25,6 +25,18 @@
|
|
|
25
25
|
"default": "./src/index.js"
|
|
26
26
|
},
|
|
27
27
|
"./package.json": "./package.json",
|
|
28
|
+
"./src/DesktopController.js": {
|
|
29
|
+
"development": "./src/DesktopController.dev.js",
|
|
30
|
+
"default": "./src/DesktopController.js"
|
|
31
|
+
},
|
|
32
|
+
"./src/InteractionController.js": {
|
|
33
|
+
"development": "./src/InteractionController.dev.js",
|
|
34
|
+
"default": "./src/InteractionController.js"
|
|
35
|
+
},
|
|
36
|
+
"./src/MobileController.js": {
|
|
37
|
+
"development": "./src/MobileController.dev.js",
|
|
38
|
+
"default": "./src/MobileController.js"
|
|
39
|
+
},
|
|
28
40
|
"./src/Picker.js": {
|
|
29
41
|
"development": "./src/Picker.dev.js",
|
|
30
42
|
"default": "./src/Picker.js"
|
|
@@ -34,6 +46,10 @@
|
|
|
34
46
|
"default": "./src/index.js"
|
|
35
47
|
},
|
|
36
48
|
"./src/picker.css.js": "./src/picker.css.js",
|
|
49
|
+
"./src/strategies.js": {
|
|
50
|
+
"development": "./src/strategies.dev.js",
|
|
51
|
+
"default": "./src/strategies.js"
|
|
52
|
+
},
|
|
37
53
|
"./sync/index.js": {
|
|
38
54
|
"development": "./sync/index.dev.js",
|
|
39
55
|
"default": "./sync/index.js"
|
|
@@ -65,20 +81,20 @@
|
|
|
65
81
|
"lit-html"
|
|
66
82
|
],
|
|
67
83
|
"dependencies": {
|
|
68
|
-
"@spectrum-web-components/base": "^0.
|
|
69
|
-
"@spectrum-web-components/button": "^0.
|
|
70
|
-
"@spectrum-web-components/field-label": "^0.
|
|
71
|
-
"@spectrum-web-components/icon": "^0.
|
|
72
|
-
"@spectrum-web-components/icons-ui": "^0.
|
|
73
|
-
"@spectrum-web-components/icons-workflow": "^0.
|
|
74
|
-
"@spectrum-web-components/menu": "^0.
|
|
75
|
-
"@spectrum-web-components/overlay": "^0.
|
|
76
|
-
"@spectrum-web-components/popover": "^0.
|
|
77
|
-
"@spectrum-web-components/progress-circle": "^0.
|
|
78
|
-
"@spectrum-web-components/reactive-controllers": "^0.
|
|
79
|
-
"@spectrum-web-components/shared": "^0.
|
|
80
|
-
"@spectrum-web-components/tooltip": "^0.
|
|
81
|
-
"@spectrum-web-components/tray": "^0.
|
|
84
|
+
"@spectrum-web-components/base": "^0.46.0",
|
|
85
|
+
"@spectrum-web-components/button": "^0.46.0",
|
|
86
|
+
"@spectrum-web-components/field-label": "^0.46.0",
|
|
87
|
+
"@spectrum-web-components/icon": "^0.46.0",
|
|
88
|
+
"@spectrum-web-components/icons-ui": "^0.46.0",
|
|
89
|
+
"@spectrum-web-components/icons-workflow": "^0.46.0",
|
|
90
|
+
"@spectrum-web-components/menu": "^0.46.0",
|
|
91
|
+
"@spectrum-web-components/overlay": "^0.46.0",
|
|
92
|
+
"@spectrum-web-components/popover": "^0.46.0",
|
|
93
|
+
"@spectrum-web-components/progress-circle": "^0.46.0",
|
|
94
|
+
"@spectrum-web-components/reactive-controllers": "^0.46.0",
|
|
95
|
+
"@spectrum-web-components/shared": "^0.46.0",
|
|
96
|
+
"@spectrum-web-components/tooltip": "^0.46.0",
|
|
97
|
+
"@spectrum-web-components/tray": "^0.46.0"
|
|
82
98
|
},
|
|
83
99
|
"devDependencies": {
|
|
84
100
|
"@spectrum-css/picker": "^8.1.0"
|
|
@@ -91,5 +107,5 @@
|
|
|
91
107
|
"./sync/index.js",
|
|
92
108
|
"./sync/sp-*.js"
|
|
93
109
|
],
|
|
94
|
-
"gitHead": "
|
|
110
|
+
"gitHead": "ab84b447210de593649b086a1605abf1be1d64f2"
|
|
95
111
|
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { InteractionController, InteractionTypes } from './InteractionController.js';
|
|
2
|
+
export declare class DesktopController extends InteractionController {
|
|
3
|
+
type: InteractionTypes;
|
|
4
|
+
handlePointerdown(event: PointerEvent): void;
|
|
5
|
+
handleActivate(event?: Event): void;
|
|
6
|
+
init(): void;
|
|
7
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import {
|
|
3
|
+
InteractionController,
|
|
4
|
+
InteractionTypes
|
|
5
|
+
} from "./InteractionController.dev.js";
|
|
6
|
+
export class DesktopController extends InteractionController {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.type = InteractionTypes.desktop;
|
|
10
|
+
}
|
|
11
|
+
handlePointerdown(event) {
|
|
12
|
+
if (event.button !== 0) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
this.pointerdownState = this.open;
|
|
16
|
+
this.preventNextToggle = "maybe";
|
|
17
|
+
let cleanupAction = 0;
|
|
18
|
+
const cleanup = () => {
|
|
19
|
+
cancelAnimationFrame(cleanupAction);
|
|
20
|
+
cleanupAction = requestAnimationFrame(async () => {
|
|
21
|
+
document.removeEventListener("pointerup", cleanup);
|
|
22
|
+
document.removeEventListener("pointercancel", cleanup);
|
|
23
|
+
this.target.removeEventListener("click", cleanup);
|
|
24
|
+
requestAnimationFrame(() => {
|
|
25
|
+
this.preventNextToggle = "no";
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
document.addEventListener("pointerup", cleanup);
|
|
30
|
+
document.addEventListener("pointercancel", cleanup);
|
|
31
|
+
this.target.addEventListener("click", cleanup);
|
|
32
|
+
this.handleActivate();
|
|
33
|
+
}
|
|
34
|
+
handleActivate(event) {
|
|
35
|
+
if (this.enterKeydownOn && this.enterKeydownOn !== this.target) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (this.preventNextToggle === "yes") {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
if ((event == null ? void 0 : event.type) === "click" && this.open !== this.pointerdownState) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
this.host.toggle();
|
|
45
|
+
}
|
|
46
|
+
init() {
|
|
47
|
+
var _a;
|
|
48
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
49
|
+
this.abortController = new AbortController();
|
|
50
|
+
const { signal } = this.abortController;
|
|
51
|
+
this.target.addEventListener(
|
|
52
|
+
"click",
|
|
53
|
+
(event) => this.handleActivate(event),
|
|
54
|
+
{
|
|
55
|
+
signal
|
|
56
|
+
}
|
|
57
|
+
);
|
|
58
|
+
this.target.addEventListener(
|
|
59
|
+
"pointerdown",
|
|
60
|
+
(event) => this.handlePointerdown(event),
|
|
61
|
+
{ signal }
|
|
62
|
+
);
|
|
63
|
+
this.target.addEventListener(
|
|
64
|
+
"focus",
|
|
65
|
+
(event) => this.handleButtonFocus(event),
|
|
66
|
+
{
|
|
67
|
+
signal
|
|
68
|
+
}
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=DesktopController.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["DesktopController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.dev.js'\n\nexport class DesktopController extends InteractionController {\n override type = InteractionTypes.desktop;\n\n public override handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.pointerdownState = this.open;\n this.preventNextToggle = 'maybe';\n let cleanupAction = 0;\n const cleanup = (): void => {\n cancelAnimationFrame(cleanupAction);\n cleanupAction = requestAnimationFrame(async () => {\n document.removeEventListener('pointerup', cleanup);\n document.removeEventListener('pointercancel', cleanup);\n this.target.removeEventListener('click', cleanup);\n requestAnimationFrame(() => {\n // Complete cleanup on the second animation frame so that `click` can go first.\n this.preventNextToggle = 'no';\n });\n });\n };\n // Ensure that however the pointer goes up we do `cleanup()`.\n document.addEventListener('pointerup', cleanup);\n document.addEventListener('pointercancel', cleanup);\n this.target.addEventListener('click', cleanup);\n this.handleActivate();\n }\n\n public override handleActivate(event?: Event): void {\n if (this.enterKeydownOn && this.enterKeydownOn !== this.target) {\n return;\n }\n if (this.preventNextToggle === 'yes') {\n return;\n }\n if (event?.type === 'click' && this.open !== this.pointerdownState) {\n // When activation comes from a `click` event ensure that the `pointerup`\n // event didn't already toggle the Picker state before doing so.\n return;\n }\n this.host.toggle();\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener(\n 'click',\n (event: Event) => this.handleActivate(event),\n {\n signal,\n }\n );\n this.target.addEventListener(\n 'pointerdown',\n (event: PointerEvent) => this.handlePointerdown(event),\n { signal }\n );\n this.target.addEventListener(\n 'focus',\n (event: FocusEvent) => this.handleButtonFocus(event),\n {\n signal,\n }\n );\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAYA;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEA,aAAM,0BAA0B,sBAAsB;AAAA,EAAtD;AAAA;AACH,SAAS,OAAO,iBAAiB;AAAA;AAAA,EAEjB,kBAAkB,OAA2B;AACzD,QAAI,MAAM,WAAW,GAAG;AACpB;AAAA,IACJ;AACA,SAAK,mBAAmB,KAAK;AAC7B,SAAK,oBAAoB;AACzB,QAAI,gBAAgB;AACpB,UAAM,UAAU,MAAY;AACxB,2BAAqB,aAAa;AAClC,sBAAgB,sBAAsB,YAAY;AAC9C,iBAAS,oBAAoB,aAAa,OAAO;AACjD,iBAAS,oBAAoB,iBAAiB,OAAO;AACrD,aAAK,OAAO,oBAAoB,SAAS,OAAO;AAChD,8BAAsB,MAAM;AAExB,eAAK,oBAAoB;AAAA,QAC7B,CAAC;AAAA,MACL,CAAC;AAAA,IACL;AAEA,aAAS,iBAAiB,aAAa,OAAO;AAC9C,aAAS,iBAAiB,iBAAiB,OAAO;AAClD,SAAK,OAAO,iBAAiB,SAAS,OAAO;AAC7C,SAAK,eAAe;AAAA,EACxB;AAAA,EAEgB,eAAe,OAAqB;AAChD,QAAI,KAAK,kBAAkB,KAAK,mBAAmB,KAAK,QAAQ;AAC5D;AAAA,IACJ;AACA,QAAI,KAAK,sBAAsB,OAAO;AAClC;AAAA,IACJ;AACA,SAAI,+BAAO,UAAS,WAAW,KAAK,SAAS,KAAK,kBAAkB;AAGhE;AAAA,IACJ;AACA,SAAK,KAAK,OAAO;AAAA,EACrB;AAAA,EAES,OAAa;AA7D1B;AA+DQ,eAAK,oBAAL,mBAAsB;AACtB,SAAK,kBAAkB,IAAI,gBAAgB;AAC3C,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAK,OAAO;AAAA,MACR;AAAA,MACA,CAAC,UAAiB,KAAK,eAAe,KAAK;AAAA,MAC3C;AAAA,QACI;AAAA,MACJ;AAAA,IACJ;AACA,SAAK,OAAO;AAAA,MACR;AAAA,MACA,CAAC,UAAwB,KAAK,kBAAkB,KAAK;AAAA,MACrD,EAAE,OAAO;AAAA,IACb;AACA,SAAK,OAAO;AAAA,MACR;AAAA,MACA,CAAC,UAAsB,KAAK,kBAAkB,KAAK;AAAA,MACnD;AAAA,QACI;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";import{InteractionController as i,InteractionTypes as r}from"./InteractionController.js";export class DesktopController extends i{constructor(){super(...arguments);this.type=r.desktop}handlePointerdown(e){if(e.button!==0)return;this.pointerdownState=this.open,this.preventNextToggle="maybe";let n=0;const t=()=>{cancelAnimationFrame(n),n=requestAnimationFrame(async()=>{document.removeEventListener("pointerup",t),document.removeEventListener("pointercancel",t),this.target.removeEventListener("click",t),requestAnimationFrame(()=>{this.preventNextToggle="no"})})};document.addEventListener("pointerup",t),document.addEventListener("pointercancel",t),this.target.addEventListener("click",t),this.handleActivate()}handleActivate(e){this.enterKeydownOn&&this.enterKeydownOn!==this.target||this.preventNextToggle!=="yes"&&((e==null?void 0:e.type)==="click"&&this.open!==this.pointerdownState||this.host.toggle())}init(){var n;(n=this.abortController)==null||n.abort(),this.abortController=new AbortController;const{signal:e}=this.abortController;this.target.addEventListener("click",t=>this.handleActivate(t),{signal:e}),this.target.addEventListener("pointerdown",t=>this.handlePointerdown(t),{signal:e}),this.target.addEventListener("focus",t=>this.handleButtonFocus(t),{signal:e})}}
|
|
2
|
+
//# sourceMappingURL=DesktopController.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["DesktopController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.js';\n\nexport class DesktopController extends InteractionController {\n override type = InteractionTypes.desktop;\n\n public override handlePointerdown(event: PointerEvent): void {\n if (event.button !== 0) {\n return;\n }\n this.pointerdownState = this.open;\n this.preventNextToggle = 'maybe';\n let cleanupAction = 0;\n const cleanup = (): void => {\n cancelAnimationFrame(cleanupAction);\n cleanupAction = requestAnimationFrame(async () => {\n document.removeEventListener('pointerup', cleanup);\n document.removeEventListener('pointercancel', cleanup);\n this.target.removeEventListener('click', cleanup);\n requestAnimationFrame(() => {\n // Complete cleanup on the second animation frame so that `click` can go first.\n this.preventNextToggle = 'no';\n });\n });\n };\n // Ensure that however the pointer goes up we do `cleanup()`.\n document.addEventListener('pointerup', cleanup);\n document.addEventListener('pointercancel', cleanup);\n this.target.addEventListener('click', cleanup);\n this.handleActivate();\n }\n\n public override handleActivate(event?: Event): void {\n if (this.enterKeydownOn && this.enterKeydownOn !== this.target) {\n return;\n }\n if (this.preventNextToggle === 'yes') {\n return;\n }\n if (event?.type === 'click' && this.open !== this.pointerdownState) {\n // When activation comes from a `click` event ensure that the `pointerup`\n // event didn't already toggle the Picker state before doing so.\n return;\n }\n this.host.toggle();\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener(\n 'click',\n (event: Event) => this.handleActivate(event),\n {\n signal,\n }\n );\n this.target.addEventListener(\n 'pointerdown',\n (event: PointerEvent) => this.handlePointerdown(event),\n { signal }\n );\n this.target.addEventListener(\n 'focus',\n (event: FocusEvent) => this.handleButtonFocus(event),\n {\n signal,\n }\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "aAYA,OACI,yBAAAA,EACA,oBAAAC,MACG,6BAEA,aAAM,0BAA0BD,CAAsB,CAAtD,kCACH,KAAS,KAAOC,EAAiB,QAEjB,kBAAkBC,EAA2B,CACzD,GAAIA,EAAM,SAAW,EACjB,OAEJ,KAAK,iBAAmB,KAAK,KAC7B,KAAK,kBAAoB,QACzB,IAAIC,EAAgB,EACpB,MAAMC,EAAU,IAAY,CACxB,qBAAqBD,CAAa,EAClCA,EAAgB,sBAAsB,SAAY,CAC9C,SAAS,oBAAoB,YAAaC,CAAO,EACjD,SAAS,oBAAoB,gBAAiBA,CAAO,EACrD,KAAK,OAAO,oBAAoB,QAASA,CAAO,EAChD,sBAAsB,IAAM,CAExB,KAAK,kBAAoB,IAC7B,CAAC,CACL,CAAC,CACL,EAEA,SAAS,iBAAiB,YAAaA,CAAO,EAC9C,SAAS,iBAAiB,gBAAiBA,CAAO,EAClD,KAAK,OAAO,iBAAiB,QAASA,CAAO,EAC7C,KAAK,eAAe,CACxB,CAEgB,eAAeF,EAAqB,CAC5C,KAAK,gBAAkB,KAAK,iBAAmB,KAAK,QAGpD,KAAK,oBAAsB,SAG3BA,GAAA,YAAAA,EAAO,QAAS,SAAW,KAAK,OAAS,KAAK,kBAKlD,KAAK,KAAK,OAAO,EACrB,CAES,MAAa,CA7D1B,IAAAG,GA+DQA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,QACtB,KAAK,gBAAkB,IAAI,gBAC3B,KAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,gBACxB,KAAK,OAAO,iBACR,QACCJ,GAAiB,KAAK,eAAeA,CAAK,EAC3C,CACI,OAAAI,CACJ,CACJ,EACA,KAAK,OAAO,iBACR,cACCJ,GAAwB,KAAK,kBAAkBA,CAAK,EACrD,CAAE,OAAAI,CAAO,CACb,EACA,KAAK,OAAO,iBACR,QACCJ,GAAsB,KAAK,kBAAkBA,CAAK,EACnD,CACI,OAAAI,CACJ,CACJ,CACJ,CACJ",
|
|
6
|
+
"names": ["InteractionController", "InteractionTypes", "event", "cleanupAction", "cleanup", "_a", "signal"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ReactiveController, TemplateResult } from '@spectrum-web-components/base';
|
|
2
|
+
import { AbstractOverlay } from '@spectrum-web-components/overlay/src/AbstractOverlay';
|
|
3
|
+
import { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';
|
|
4
|
+
import { PickerBase } from './Picker.js';
|
|
5
|
+
export declare enum InteractionTypes {
|
|
6
|
+
'desktop' = 0,
|
|
7
|
+
'mobile' = 1
|
|
8
|
+
}
|
|
9
|
+
export declare class InteractionController implements ReactiveController {
|
|
10
|
+
target: HTMLElement;
|
|
11
|
+
host: PickerBase;
|
|
12
|
+
abortController: AbortController;
|
|
13
|
+
preventNextToggle: 'no' | 'maybe' | 'yes';
|
|
14
|
+
pointerdownState: boolean;
|
|
15
|
+
enterKeydownOn: EventTarget | null;
|
|
16
|
+
container: TemplateResult;
|
|
17
|
+
get activelyOpening(): boolean;
|
|
18
|
+
private _open;
|
|
19
|
+
get open(): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Set `open`
|
|
22
|
+
*/
|
|
23
|
+
set open(open: boolean);
|
|
24
|
+
private _overlay;
|
|
25
|
+
get overlay(): AbstractOverlay;
|
|
26
|
+
set overlay(overlay: AbstractOverlay | undefined);
|
|
27
|
+
type: InteractionTypes;
|
|
28
|
+
constructor(target: HTMLElement, host: PickerBase);
|
|
29
|
+
releaseDescription(): void;
|
|
30
|
+
protected handleBeforetoggle(event: Event & {
|
|
31
|
+
target: Overlay;
|
|
32
|
+
newState: 'open' | 'closed';
|
|
33
|
+
}): void;
|
|
34
|
+
initOverlay(): void;
|
|
35
|
+
handlePointerdown(_event: PointerEvent): void;
|
|
36
|
+
handleButtonFocus(event: FocusEvent): void;
|
|
37
|
+
handleActivate(_event: Event): void;
|
|
38
|
+
init(): void;
|
|
39
|
+
abort(): void;
|
|
40
|
+
hostConnected(): void;
|
|
41
|
+
hostDisconnected(): void;
|
|
42
|
+
hostUpdated(): void;
|
|
43
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
export var InteractionTypes = /* @__PURE__ */ ((InteractionTypes2) => {
|
|
3
|
+
InteractionTypes2[InteractionTypes2["desktop"] = 0] = "desktop";
|
|
4
|
+
InteractionTypes2[InteractionTypes2["mobile"] = 1] = "mobile";
|
|
5
|
+
return InteractionTypes2;
|
|
6
|
+
})(InteractionTypes || {});
|
|
7
|
+
export class InteractionController {
|
|
8
|
+
constructor(target, host) {
|
|
9
|
+
this.target = target;
|
|
10
|
+
this.host = host;
|
|
11
|
+
this.preventNextToggle = "no";
|
|
12
|
+
this.pointerdownState = false;
|
|
13
|
+
this.enterKeydownOn = null;
|
|
14
|
+
this._open = false;
|
|
15
|
+
this.target = target;
|
|
16
|
+
this.host = host;
|
|
17
|
+
this.host.addController(this);
|
|
18
|
+
this.init();
|
|
19
|
+
}
|
|
20
|
+
get activelyOpening() {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
get open() {
|
|
24
|
+
return this._open;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Set `open`
|
|
28
|
+
*/
|
|
29
|
+
set open(open) {
|
|
30
|
+
if (this._open === open) return;
|
|
31
|
+
this._open = open;
|
|
32
|
+
if (this.overlay) {
|
|
33
|
+
this.host.open = open;
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
customElements.whenDefined("sp-overlay").then(async () => {
|
|
37
|
+
const { Overlay: Overlay2 } = await import("@spectrum-web-components/overlay/src/Overlay.js");
|
|
38
|
+
this.overlay = new Overlay2();
|
|
39
|
+
this.host.open = true;
|
|
40
|
+
this.host.requestUpdate();
|
|
41
|
+
});
|
|
42
|
+
import("@spectrum-web-components/overlay/sp-overlay.js");
|
|
43
|
+
}
|
|
44
|
+
get overlay() {
|
|
45
|
+
return this._overlay;
|
|
46
|
+
}
|
|
47
|
+
set overlay(overlay) {
|
|
48
|
+
if (!overlay) return;
|
|
49
|
+
if (this.overlay === overlay) return;
|
|
50
|
+
this._overlay = overlay;
|
|
51
|
+
this.initOverlay();
|
|
52
|
+
}
|
|
53
|
+
releaseDescription() {
|
|
54
|
+
}
|
|
55
|
+
handleBeforetoggle(event) {
|
|
56
|
+
var _a;
|
|
57
|
+
if (event.composedPath()[0] !== event.target) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
if (event.newState === "closed") {
|
|
61
|
+
if (this.preventNextToggle === "no") {
|
|
62
|
+
this.open = false;
|
|
63
|
+
} else if (!this.pointerdownState) {
|
|
64
|
+
(_a = this.overlay) == null ? void 0 : _a.manuallyKeepOpen();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (!this.open) {
|
|
68
|
+
this.host.optionsMenu.updateSelectedItemIndex();
|
|
69
|
+
this.host.optionsMenu.closeDescendentOverlays();
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
initOverlay() {
|
|
73
|
+
if (this.overlay) {
|
|
74
|
+
this.overlay.addEventListener("beforetoggle", (event) => {
|
|
75
|
+
this.handleBeforetoggle(
|
|
76
|
+
event
|
|
77
|
+
);
|
|
78
|
+
});
|
|
79
|
+
this.overlay.triggerElement = this.host;
|
|
80
|
+
this.overlay.placement = this.host.isMobile.matches ? void 0 : this.host.placement;
|
|
81
|
+
this.overlay.receivesFocus = "true";
|
|
82
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no" && this.open;
|
|
83
|
+
this.overlay.addEventListener(
|
|
84
|
+
"slottable-request",
|
|
85
|
+
this.host.handleSlottableRequest
|
|
86
|
+
);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
handlePointerdown(_event) {
|
|
90
|
+
}
|
|
91
|
+
handleButtonFocus(event) {
|
|
92
|
+
if (this.preventNextToggle === "maybe" && event.relatedTarget === this.host.optionsMenu) {
|
|
93
|
+
this.preventNextToggle = "yes";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
handleActivate(_event) {
|
|
97
|
+
}
|
|
98
|
+
/* c8 ignore next 3 */
|
|
99
|
+
init() {
|
|
100
|
+
}
|
|
101
|
+
abort() {
|
|
102
|
+
var _a;
|
|
103
|
+
this.releaseDescription();
|
|
104
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
105
|
+
}
|
|
106
|
+
hostConnected() {
|
|
107
|
+
this.init();
|
|
108
|
+
}
|
|
109
|
+
hostDisconnected() {
|
|
110
|
+
var _a;
|
|
111
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
112
|
+
}
|
|
113
|
+
hostUpdated() {
|
|
114
|
+
if (this.overlay && this.host.dependencyManager.loaded && this.host.open !== this.overlay.open) {
|
|
115
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no";
|
|
116
|
+
this.overlay.open = this.host.open;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=InteractionController.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["InteractionController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n ReactiveController,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { AbstractOverlay } from '@spectrum-web-components/overlay/src/AbstractOverlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport { PickerBase } from './Picker.dev.js'\n\nexport enum InteractionTypes {\n 'desktop',\n 'mobile',\n}\n\nexport class InteractionController implements ReactiveController {\n abortController!: AbortController;\n\n public preventNextToggle: 'no' | 'maybe' | 'yes' = 'no';\n public pointerdownState = false;\n public enterKeydownOn: EventTarget | null = null;\n\n public container!: TemplateResult;\n\n get activelyOpening(): boolean {\n return false;\n }\n\n private _open = false;\n\n public get open(): boolean {\n return this._open;\n }\n\n /**\n * Set `open`\n */\n public set open(open: boolean) {\n if (this._open === open) return;\n this._open = open;\n\n if (this.overlay) {\n this.host.open = open;\n return;\n }\n\n // When there is no Overlay and `open` is moving to `true`, lazily import/create\n // an Overlay and apply that state to it.\n customElements\n .whenDefined('sp-overlay')\n .then(async (): Promise<void> => {\n const { Overlay } = await import(\n '@spectrum-web-components/overlay/src/Overlay.js'\n );\n this.overlay = new Overlay();\n this.host.open = true;\n this.host.requestUpdate();\n });\n import('@spectrum-web-components/overlay/sp-overlay.js');\n }\n\n private _overlay!: AbstractOverlay;\n\n public get overlay(): AbstractOverlay {\n return this._overlay;\n }\n\n public set overlay(overlay: AbstractOverlay | undefined) {\n if (!overlay) return;\n if (this.overlay === overlay) return;\n this._overlay = overlay;\n this.initOverlay();\n }\n\n type!: InteractionTypes;\n\n constructor(\n public target: HTMLElement,\n public host: PickerBase\n ) {\n this.target = target;\n this.host = host;\n this.host.addController(this);\n this.init();\n }\n\n releaseDescription(): void {}\n\n protected handleBeforetoggle(\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlay?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.host.optionsMenu.updateSelectedItemIndex();\n this.host.optionsMenu.closeDescendentOverlays();\n }\n }\n\n initOverlay(): void {\n if (this.overlay) {\n this.overlay.addEventListener('beforetoggle', (event: Event) => {\n this.handleBeforetoggle(\n event as Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n );\n });\n\n this.overlay.triggerElement = this.host as HTMLElement;\n this.overlay.placement = this.host.isMobile.matches\n ? undefined\n : this.host.placement;\n this.overlay.receivesFocus = 'true';\n this.overlay.willPreventClose =\n this.preventNextToggle !== 'no' && this.open;\n this.overlay.addEventListener(\n 'slottable-request',\n this.host.handleSlottableRequest\n );\n }\n }\n\n public handlePointerdown(_event: PointerEvent): void {}\n\n public handleButtonFocus(event: FocusEvent): void {\n // When focus comes from a pointer event, and the related target is the Menu,\n // we don't want to reopen the Menu.\n if (\n this.preventNextToggle === 'maybe' &&\n event.relatedTarget === this.host.optionsMenu\n ) {\n this.preventNextToggle = 'yes';\n }\n }\n\n public handleActivate(_event: Event): void {}\n\n /* c8 ignore next 3 */\n init(): void {}\n\n abort(): void {\n this.releaseDescription();\n this.abortController?.abort();\n }\n\n hostConnected(): void {\n this.init();\n }\n\n hostDisconnected(): void {\n this.abortController?.abort();\n }\n\n public hostUpdated(): void {\n if (\n this.overlay &&\n this.host.dependencyManager.loaded &&\n this.host.open !== this.overlay.open\n ) {\n this.overlay.willPreventClose = this.preventNextToggle !== 'no';\n this.overlay.open = this.host.open;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["InteractionTypes", "Overlay"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";export var InteractionTypes=(t=>(t[t.desktop=0]="desktop",t[t.mobile=1]="mobile",t))(InteractionTypes||{});export class InteractionController{constructor(e,t){this.target=e;this.host=t;this.preventNextToggle="no";this.pointerdownState=!1;this.enterKeydownOn=null;this._open=!1;this.target=e,this.host=t,this.host.addController(this),this.init()}get activelyOpening(){return!1}get open(){return this._open}set open(e){if(this._open!==e){if(this._open=e,this.overlay){this.host.open=e;return}customElements.whenDefined("sp-overlay").then(async()=>{const{Overlay:t}=await import("@spectrum-web-components/overlay/src/Overlay.js");this.overlay=new t,this.host.open=!0,this.host.requestUpdate()}),import("@spectrum-web-components/overlay/sp-overlay.js")}}get overlay(){return this._overlay}set overlay(e){e&&this.overlay!==e&&(this._overlay=e,this.initOverlay())}releaseDescription(){}handleBeforetoggle(e){var t;e.composedPath()[0]===e.target&&(e.newState==="closed"&&(this.preventNextToggle==="no"?this.open=!1:this.pointerdownState||(t=this.overlay)==null||t.manuallyKeepOpen()),this.open||(this.host.optionsMenu.updateSelectedItemIndex(),this.host.optionsMenu.closeDescendentOverlays()))}initOverlay(){this.overlay&&(this.overlay.addEventListener("beforetoggle",e=>{this.handleBeforetoggle(e)}),this.overlay.triggerElement=this.host,this.overlay.placement=this.host.isMobile.matches?void 0:this.host.placement,this.overlay.receivesFocus="true",this.overlay.willPreventClose=this.preventNextToggle!=="no"&&this.open,this.overlay.addEventListener("slottable-request",this.host.handleSlottableRequest))}handlePointerdown(e){}handleButtonFocus(e){this.preventNextToggle==="maybe"&&e.relatedTarget===this.host.optionsMenu&&(this.preventNextToggle="yes")}handleActivate(e){}init(){}abort(){var e;this.releaseDescription(),(e=this.abortController)==null||e.abort()}hostConnected(){this.init()}hostDisconnected(){var e;(e=this.abortController)==null||e.abort()}hostUpdated(){this.overlay&&this.host.dependencyManager.loaded&&this.host.open!==this.overlay.open&&(this.overlay.willPreventClose=this.preventNextToggle!=="no",this.overlay.open=this.host.open)}}
|
|
2
|
+
//# sourceMappingURL=InteractionController.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["InteractionController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n ReactiveController,\n TemplateResult,\n} from '@spectrum-web-components/base';\nimport { AbstractOverlay } from '@spectrum-web-components/overlay/src/AbstractOverlay';\nimport { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';\nimport { PickerBase } from './Picker.js';\n\nexport enum InteractionTypes {\n 'desktop',\n 'mobile',\n}\n\nexport class InteractionController implements ReactiveController {\n abortController!: AbortController;\n\n public preventNextToggle: 'no' | 'maybe' | 'yes' = 'no';\n public pointerdownState = false;\n public enterKeydownOn: EventTarget | null = null;\n\n public container!: TemplateResult;\n\n get activelyOpening(): boolean {\n return false;\n }\n\n private _open = false;\n\n public get open(): boolean {\n return this._open;\n }\n\n /**\n * Set `open`\n */\n public set open(open: boolean) {\n if (this._open === open) return;\n this._open = open;\n\n if (this.overlay) {\n this.host.open = open;\n return;\n }\n\n // When there is no Overlay and `open` is moving to `true`, lazily import/create\n // an Overlay and apply that state to it.\n customElements\n .whenDefined('sp-overlay')\n .then(async (): Promise<void> => {\n const { Overlay } = await import(\n '@spectrum-web-components/overlay/src/Overlay.js'\n );\n this.overlay = new Overlay();\n this.host.open = true;\n this.host.requestUpdate();\n });\n import('@spectrum-web-components/overlay/sp-overlay.js');\n }\n\n private _overlay!: AbstractOverlay;\n\n public get overlay(): AbstractOverlay {\n return this._overlay;\n }\n\n public set overlay(overlay: AbstractOverlay | undefined) {\n if (!overlay) return;\n if (this.overlay === overlay) return;\n this._overlay = overlay;\n this.initOverlay();\n }\n\n type!: InteractionTypes;\n\n constructor(\n public target: HTMLElement,\n public host: PickerBase\n ) {\n this.target = target;\n this.host = host;\n this.host.addController(this);\n this.init();\n }\n\n releaseDescription(): void {}\n\n protected handleBeforetoggle(\n event: Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n ): void {\n if (event.composedPath()[0] !== event.target) {\n return;\n }\n if (event.newState === 'closed') {\n if (this.preventNextToggle === 'no') {\n this.open = false;\n } else if (!this.pointerdownState) {\n // Prevent browser driven closure while opening the Picker\n // and the expected event series has not completed.\n this.overlay?.manuallyKeepOpen();\n }\n }\n if (!this.open) {\n this.host.optionsMenu.updateSelectedItemIndex();\n this.host.optionsMenu.closeDescendentOverlays();\n }\n }\n\n initOverlay(): void {\n if (this.overlay) {\n this.overlay.addEventListener('beforetoggle', (event: Event) => {\n this.handleBeforetoggle(\n event as Event & {\n target: Overlay;\n newState: 'open' | 'closed';\n }\n );\n });\n\n this.overlay.triggerElement = this.host as HTMLElement;\n this.overlay.placement = this.host.isMobile.matches\n ? undefined\n : this.host.placement;\n this.overlay.receivesFocus = 'true';\n this.overlay.willPreventClose =\n this.preventNextToggle !== 'no' && this.open;\n this.overlay.addEventListener(\n 'slottable-request',\n this.host.handleSlottableRequest\n );\n }\n }\n\n public handlePointerdown(_event: PointerEvent): void {}\n\n public handleButtonFocus(event: FocusEvent): void {\n // When focus comes from a pointer event, and the related target is the Menu,\n // we don't want to reopen the Menu.\n if (\n this.preventNextToggle === 'maybe' &&\n event.relatedTarget === this.host.optionsMenu\n ) {\n this.preventNextToggle = 'yes';\n }\n }\n\n public handleActivate(_event: Event): void {}\n\n /* c8 ignore next 3 */\n init(): void {}\n\n abort(): void {\n this.releaseDescription();\n this.abortController?.abort();\n }\n\n hostConnected(): void {\n this.init();\n }\n\n hostDisconnected(): void {\n this.abortController?.abort();\n }\n\n public hostUpdated(): void {\n if (\n this.overlay &&\n this.host.dependencyManager.loaded &&\n this.host.open !== this.overlay.open\n ) {\n this.overlay.willPreventClose = this.preventNextToggle !== 'no';\n this.overlay.open = this.host.open;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "aAoBO,WAAK,kBAAAA,IACRA,IAAA,qBACAA,IAAA,mBAFQA,IAAA,sBAKL,aAAM,qBAAoD,CA6D7D,YACWC,EACAC,EACT,CAFS,YAAAD,EACA,UAAAC,EA5DX,KAAO,kBAA4C,KACnD,KAAO,iBAAmB,GAC1B,KAAO,eAAqC,KAQ5C,KAAQ,MAAQ,GAoDZ,KAAK,OAASD,EACd,KAAK,KAAOC,EACZ,KAAK,KAAK,cAAc,IAAI,EAC5B,KAAK,KAAK,CACd,CA5DA,IAAI,iBAA2B,CAC3B,MAAO,EACX,CAIA,IAAW,MAAgB,CACvB,OAAO,KAAK,KAChB,CAKA,IAAW,KAAKC,EAAe,CAC3B,GAAI,KAAK,QAAUA,EAGnB,IAFA,KAAK,MAAQA,EAET,KAAK,QAAS,CACd,KAAK,KAAK,KAAOA,EACjB,MACJ,CAIA,eACK,YAAY,YAAY,EACxB,KAAK,SAA2B,CAC7B,KAAM,CAAE,QAAAC,CAAQ,EAAI,KAAM,QACtB,iDACJ,EACA,KAAK,QAAU,IAAIA,EACnB,KAAK,KAAK,KAAO,GACjB,KAAK,KAAK,cAAc,CAC5B,CAAC,EACL,OAAO,gDAAgD,EAC3D,CAIA,IAAW,SAA2B,CAClC,OAAO,KAAK,QAChB,CAEA,IAAW,QAAQC,EAAsC,CAChDA,GACD,KAAK,UAAYA,IACrB,KAAK,SAAWA,EAChB,KAAK,YAAY,EACrB,CAcA,oBAA2B,CAAC,CAElB,mBACNC,EAII,CAvGZ,IAAAC,EAwGYD,EAAM,aAAa,EAAE,CAAC,IAAMA,EAAM,SAGlCA,EAAM,WAAa,WACf,KAAK,oBAAsB,KAC3B,KAAK,KAAO,GACJ,KAAK,mBAGbC,EAAA,KAAK,UAAL,MAAAA,EAAc,oBAGjB,KAAK,OACN,KAAK,KAAK,YAAY,wBAAwB,EAC9C,KAAK,KAAK,YAAY,wBAAwB,GAEtD,CAEA,aAAoB,CACZ,KAAK,UACL,KAAK,QAAQ,iBAAiB,eAAiBD,GAAiB,CAC5D,KAAK,mBACDA,CAIJ,CACJ,CAAC,EAED,KAAK,QAAQ,eAAiB,KAAK,KACnC,KAAK,QAAQ,UAAY,KAAK,KAAK,SAAS,QACtC,OACA,KAAK,KAAK,UAChB,KAAK,QAAQ,cAAgB,OAC7B,KAAK,QAAQ,iBACT,KAAK,oBAAsB,MAAQ,KAAK,KAC5C,KAAK,QAAQ,iBACT,oBACA,KAAK,KAAK,sBACd,EAER,CAEO,kBAAkBE,EAA4B,CAAC,CAE/C,kBAAkBF,EAAyB,CAI1C,KAAK,oBAAsB,SAC3BA,EAAM,gBAAkB,KAAK,KAAK,cAElC,KAAK,kBAAoB,MAEjC,CAEO,eAAeE,EAAqB,CAAC,CAG5C,MAAa,CAAC,CAEd,OAAc,CArKlB,IAAAD,EAsKQ,KAAK,mBAAmB,GACxBA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,OAC1B,CAEA,eAAsB,CAClB,KAAK,KAAK,CACd,CAEA,kBAAyB,CA9K7B,IAAAA,GA+KQA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,OAC1B,CAEO,aAAoB,CAEnB,KAAK,SACL,KAAK,KAAK,kBAAkB,QAC5B,KAAK,KAAK,OAAS,KAAK,QAAQ,OAEhC,KAAK,QAAQ,iBAAmB,KAAK,oBAAsB,KAC3D,KAAK,QAAQ,KAAO,KAAK,KAAK,KAEtC,CACJ",
|
|
6
|
+
"names": ["InteractionTypes", "target", "host", "open", "Overlay", "overlay", "event", "_a", "_event"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import {
|
|
3
|
+
InteractionController,
|
|
4
|
+
InteractionTypes
|
|
5
|
+
} from "./InteractionController.dev.js";
|
|
6
|
+
export class MobileController extends InteractionController {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(...arguments);
|
|
9
|
+
this.type = InteractionTypes.mobile;
|
|
10
|
+
}
|
|
11
|
+
handleClick() {
|
|
12
|
+
if (this.preventNextToggle == "no") {
|
|
13
|
+
this.open = !this.open;
|
|
14
|
+
}
|
|
15
|
+
this.preventNextToggle = "no";
|
|
16
|
+
}
|
|
17
|
+
handlePointerdown() {
|
|
18
|
+
this.preventNextToggle = this.open ? "yes" : "no";
|
|
19
|
+
}
|
|
20
|
+
init() {
|
|
21
|
+
var _a;
|
|
22
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
23
|
+
this.abortController = new AbortController();
|
|
24
|
+
const { signal } = this.abortController;
|
|
25
|
+
this.target.addEventListener("click", () => this.handleClick(), {
|
|
26
|
+
signal
|
|
27
|
+
});
|
|
28
|
+
this.target.addEventListener(
|
|
29
|
+
"pointerdown",
|
|
30
|
+
() => this.handlePointerdown(),
|
|
31
|
+
{ signal }
|
|
32
|
+
);
|
|
33
|
+
this.target.addEventListener(
|
|
34
|
+
"focus",
|
|
35
|
+
(event) => this.handleButtonFocus(event),
|
|
36
|
+
{
|
|
37
|
+
signal
|
|
38
|
+
}
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=MobileController.dev.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["MobileController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.dev.js'\n\nexport class MobileController extends InteractionController {\n override type = InteractionTypes.mobile;\n\n handleClick(): void {\n if (this.preventNextToggle == 'no') {\n this.open = !this.open;\n }\n this.preventNextToggle = 'no';\n }\n\n public override handlePointerdown(): void {\n this.preventNextToggle = this.open ? 'yes' : 'no';\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener('click', () => this.handleClick(), {\n signal,\n });\n this.target.addEventListener(\n 'pointerdown',\n () => this.handlePointerdown(),\n { signal }\n );\n this.target.addEventListener(\n 'focus',\n (event: FocusEvent) => this.handleButtonFocus(event),\n {\n signal,\n }\n );\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,OACG;AAEA,aAAM,yBAAyB,sBAAsB;AAAA,EAArD;AAAA;AACH,SAAS,OAAO,iBAAiB;AAAA;AAAA,EAEjC,cAAoB;AAChB,QAAI,KAAK,qBAAqB,MAAM;AAChC,WAAK,OAAO,CAAC,KAAK;AAAA,IACtB;AACA,SAAK,oBAAoB;AAAA,EAC7B;AAAA,EAEgB,oBAA0B;AACtC,SAAK,oBAAoB,KAAK,OAAO,QAAQ;AAAA,EACjD;AAAA,EAES,OAAa;AA9B1B;AAgCQ,eAAK,oBAAL,mBAAsB;AACtB,SAAK,kBAAkB,IAAI,gBAAgB;AAC3C,UAAM,EAAE,OAAO,IAAI,KAAK;AACxB,SAAK,OAAO,iBAAiB,SAAS,MAAM,KAAK,YAAY,GAAG;AAAA,MAC5D;AAAA,IACJ,CAAC;AACD,SAAK,OAAO;AAAA,MACR;AAAA,MACA,MAAM,KAAK,kBAAkB;AAAA,MAC7B,EAAE,OAAO;AAAA,IACb;AACA,SAAK,OAAO;AAAA,MACR;AAAA,MACA,CAAC,UAAsB,KAAK,kBAAkB,KAAK;AAAA,MACnD;AAAA,QACI;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";import{InteractionController as n,InteractionTypes as i}from"./InteractionController.js";export class MobileController extends n{constructor(){super(...arguments);this.type=i.mobile}handleClick(){this.preventNextToggle=="no"&&(this.open=!this.open),this.preventNextToggle="no"}handlePointerdown(){this.preventNextToggle=this.open?"yes":"no"}init(){var e;(e=this.abortController)==null||e.abort(),this.abortController=new AbortController;const{signal:t}=this.abortController;this.target.addEventListener("click",()=>this.handleClick(),{signal:t}),this.target.addEventListener("pointerdown",()=>this.handlePointerdown(),{signal:t}),this.target.addEventListener("focus",o=>this.handleButtonFocus(o),{signal:t})}}
|
|
2
|
+
//# sourceMappingURL=MobileController.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["MobileController.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2024 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nimport {\n InteractionController,\n InteractionTypes,\n} from './InteractionController.js';\n\nexport class MobileController extends InteractionController {\n override type = InteractionTypes.mobile;\n\n handleClick(): void {\n if (this.preventNextToggle == 'no') {\n this.open = !this.open;\n }\n this.preventNextToggle = 'no';\n }\n\n public override handlePointerdown(): void {\n this.preventNextToggle = this.open ? 'yes' : 'no';\n }\n\n override init(): void {\n // Clean up listeners if they've already been bound\n this.abortController?.abort();\n this.abortController = new AbortController();\n const { signal } = this.abortController;\n this.target.addEventListener('click', () => this.handleClick(), {\n signal,\n });\n this.target.addEventListener(\n 'pointerdown',\n () => this.handlePointerdown(),\n { signal }\n );\n this.target.addEventListener(\n 'focus',\n (event: FocusEvent) => this.handleButtonFocus(event),\n {\n signal,\n }\n );\n }\n}\n"],
|
|
5
|
+
"mappings": "aAWA,OACI,yBAAAA,EACA,oBAAAC,MACG,6BAEA,aAAM,yBAAyBD,CAAsB,CAArD,kCACH,KAAS,KAAOC,EAAiB,OAEjC,aAAoB,CACZ,KAAK,mBAAqB,OAC1B,KAAK,KAAO,CAAC,KAAK,MAEtB,KAAK,kBAAoB,IAC7B,CAEgB,mBAA0B,CACtC,KAAK,kBAAoB,KAAK,KAAO,MAAQ,IACjD,CAES,MAAa,CA9B1B,IAAAC,GAgCQA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,QACtB,KAAK,gBAAkB,IAAI,gBAC3B,KAAM,CAAE,OAAAC,CAAO,EAAI,KAAK,gBACxB,KAAK,OAAO,iBAAiB,QAAS,IAAM,KAAK,YAAY,EAAG,CAC5D,OAAAA,CACJ,CAAC,EACD,KAAK,OAAO,iBACR,cACA,IAAM,KAAK,kBAAkB,EAC7B,CAAE,OAAAA,CAAO,CACb,EACA,KAAK,OAAO,iBACR,QACCC,GAAsB,KAAK,kBAAkBA,CAAK,EACnD,CACI,OAAAD,CACJ,CACJ,CACJ,CACJ",
|
|
6
|
+
"names": ["InteractionController", "InteractionTypes", "_a", "signal", "event"]
|
|
7
|
+
}
|
package/src/Picker.d.ts
CHANGED
|
@@ -8,19 +8,23 @@ import '@spectrum-web-components/menu/sp-menu.js';
|
|
|
8
8
|
import type { Menu, MenuItem, MenuItemChildren } from '@spectrum-web-components/menu';
|
|
9
9
|
import { Placement } from '@spectrum-web-components/overlay';
|
|
10
10
|
import { MatchMediaController } from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';
|
|
11
|
+
import { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';
|
|
11
12
|
import { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';
|
|
12
13
|
import type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';
|
|
13
14
|
import type { FieldLabel } from '@spectrum-web-components/field-label';
|
|
15
|
+
import { DesktopController } from './DesktopController.js';
|
|
16
|
+
import { MobileController } from './MobileController.js';
|
|
14
17
|
export declare const DESCRIPTION_ID = "option-picker";
|
|
15
18
|
declare const PickerBase_base: typeof Focusable & {
|
|
16
19
|
new (...args: any[]): import("@spectrum-web-components/base").SizedElementInterface;
|
|
17
20
|
prototype: import("@spectrum-web-components/base").SizedElementInterface;
|
|
18
21
|
};
|
|
19
22
|
export declare class PickerBase extends PickerBase_base {
|
|
20
|
-
|
|
23
|
+
isMobile: MatchMediaController;
|
|
24
|
+
strategy: DesktopController | MobileController;
|
|
21
25
|
appliedLabel?: string;
|
|
22
26
|
button: HTMLButtonElement;
|
|
23
|
-
|
|
27
|
+
dependencyManager: DependencyManagerController;
|
|
24
28
|
private deprecatedMenu;
|
|
25
29
|
disabled: boolean;
|
|
26
30
|
focused: boolean;
|
|
@@ -36,10 +40,10 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
36
40
|
selects: undefined | 'single';
|
|
37
41
|
labelAlignment?: 'inline';
|
|
38
42
|
protected get menuItems(): MenuItem[];
|
|
39
|
-
|
|
43
|
+
optionsMenu: Menu;
|
|
40
44
|
private _selfManageFocusElement;
|
|
41
45
|
get selfManageFocusElement(): boolean;
|
|
42
|
-
|
|
46
|
+
overlayElement: Overlay;
|
|
43
47
|
protected tooltipEl?: Tooltip;
|
|
44
48
|
/**
|
|
45
49
|
* @type {"top" | "top-start" | "top-end" | "right" | "right-start" | "right-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end"}
|
|
@@ -57,14 +61,10 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
57
61
|
forceFocusVisible(): void;
|
|
58
62
|
click(): void;
|
|
59
63
|
handleButtonBlur(): void;
|
|
60
|
-
protected preventNextToggle: 'no' | 'maybe' | 'yes';
|
|
61
|
-
private pointerdownState;
|
|
62
|
-
protected handleButtonPointerdown(event: PointerEvent): void;
|
|
63
|
-
protected handleButtonFocus(event: FocusEvent): void;
|
|
64
|
-
protected handleActivate(event?: Event): void;
|
|
65
64
|
focus(options?: FocusOptions): void;
|
|
66
65
|
handleHelperFocus(): void;
|
|
67
66
|
handleChange(event: Event): void;
|
|
67
|
+
handleButtonFocus(event: FocusEvent): void;
|
|
68
68
|
protected handleKeydown: (event: KeyboardEvent) => void;
|
|
69
69
|
protected setValueFromItem(item: MenuItem, menuChangeEvent?: Event): Promise<void>;
|
|
70
70
|
protected setMenuItemSelected(item: MenuItem, value: boolean): void;
|
|
@@ -77,11 +77,7 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
77
77
|
protected handleTooltipSlotchange(event: Event & {
|
|
78
78
|
target: HTMLSlotElement;
|
|
79
79
|
}): void;
|
|
80
|
-
|
|
81
|
-
target: Overlay;
|
|
82
|
-
newState: 'open' | 'closed';
|
|
83
|
-
}): void;
|
|
84
|
-
protected handleSlottableRequest: (_event: SlottableRequestEvent) => void;
|
|
80
|
+
handleSlottableRequest: (_event: SlottableRequestEvent) => void;
|
|
85
81
|
protected renderLabelContent(content: Node[]): TemplateResult | Node[];
|
|
86
82
|
protected get buttonContent(): TemplateResult[];
|
|
87
83
|
applyFocusElementLabel: (value: string, labelElement: FieldLabel) => void;
|
|
@@ -90,6 +86,7 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
90
86
|
protected render(): TemplateResult;
|
|
91
87
|
protected update(changes: PropertyValues<this>): void;
|
|
92
88
|
protected bindButtonKeydownListener(): void;
|
|
89
|
+
protected updated(changes: PropertyValues<this>): void;
|
|
93
90
|
protected firstUpdated(changes: PropertyValues<this>): void;
|
|
94
91
|
protected get dismissHelper(): TemplateResult;
|
|
95
92
|
protected renderContainer(menu: TemplateResult): TemplateResult;
|
|
@@ -105,6 +102,7 @@ export declare class PickerBase extends PickerBase_base {
|
|
|
105
102
|
private recentlyConnected;
|
|
106
103
|
private enterKeydownOn;
|
|
107
104
|
protected handleEnterKeydown: (event: KeyboardEvent) => void;
|
|
105
|
+
bindEvents(): void;
|
|
108
106
|
connectedCallback(): void;
|
|
109
107
|
disconnectedCallback(): void;
|
|
110
108
|
}
|