@spectrum-web-components/picker 1.1.0 → 1.2.0-beta.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/package.json +16 -16
- package/sp-picker.d.ts +6 -0
- package/sp-picker.dev.js +5 -0
- package/sp-picker.dev.js.map +7 -0
- package/sp-picker.js +2 -0
- package/sp-picker.js.map +7 -0
- 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 +44 -0
- package/src/InteractionController.dev.js +122 -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 +8 -0
- package/src/MobileController.dev.js +51 -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 +139 -0
- package/src/Picker.dev.js +717 -0
- package/src/Picker.dev.js.map +7 -0
- package/src/Picker.js +116 -0
- package/src/Picker.js.map +7 -0
- package/src/index.d.ts +1 -0
- package/src/index.dev.js +3 -0
- package/src/index.dev.js.map +7 -0
- package/src/index.js +2 -0
- package/src/index.js.map +7 -0
- package/src/picker-overrides.css.d.ts +2 -0
- package/src/picker-overrides.css.dev.js +7 -0
- package/src/picker-overrides.css.dev.js.map +7 -0
- package/src/picker-overrides.css.js +4 -0
- package/src/picker-overrides.css.js.map +7 -0
- package/src/picker.css.d.ts +2 -0
- package/src/picker.css.dev.js +7 -0
- package/src/picker.css.dev.js.map +7 -0
- package/src/picker.css.js +4 -0
- package/src/picker.css.js.map +7 -0
- package/src/spectrum-picker.css.d.ts +2 -0
- package/src/spectrum-picker.css.dev.js +7 -0
- package/src/spectrum-picker.css.dev.js.map +7 -0
- package/src/spectrum-picker.css.js +4 -0
- package/src/spectrum-picker.css.js.map +7 -0
- 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/stories/args.js +56 -0
- package/stories/args.js.map +7 -0
- package/stories/picker-pending.stories.js +16 -0
- package/stories/picker-pending.stories.js.map +7 -0
- package/stories/picker-sizes.stories.js +75 -0
- package/stories/picker-sizes.stories.js.map +7 -0
- package/stories/picker.stories.js +689 -0
- package/stories/picker.stories.js.map +7 -0
- package/stories/states.js +228 -0
- package/stories/states.js.map +7 -0
- package/stories/template.js +32 -0
- package/stories/template.js.map +7 -0
- package/sync/index.d.ts +3 -0
- package/sync/index.dev.js +5 -0
- package/sync/index.dev.js.map +7 -0
- package/sync/index.js +2 -0
- package/sync/index.js.map +7 -0
- package/sync/sp-picker.d.ts +2 -0
- package/sync/sp-picker.dev.js +4 -0
- package/sync/sp-picker.dev.js.map +7 -0
- package/sync/sp-picker.js +2 -0
- package/sync/sp-picker.js.map +7 -0
- package/test/benchmark/basic-test.js +269 -0
- package/test/benchmark/basic-test.js.map +7 -0
- package/test/index.js +1680 -0
- package/test/index.js.map +7 -0
- package/test/picker-memory.test.js +5 -0
- package/test/picker-memory.test.js.map +7 -0
- package/test/picker-pending.test-vrt.js +5 -0
- package/test/picker-pending.test-vrt.js.map +7 -0
- package/test/picker-reparenting.test.js +92 -0
- package/test/picker-reparenting.test.js.map +7 -0
- package/test/picker-responsive.test.js +125 -0
- package/test/picker-responsive.test.js.map +7 -0
- package/test/picker-sizes.test-vrt.js +5 -0
- package/test/picker-sizes.test-vrt.js.map +7 -0
- package/test/picker-sync.test.js +7 -0
- package/test/picker-sync.test.js.map +7 -0
- package/test/picker.test-vrt.js +5 -0
- package/test/picker.test-vrt.js.map +7 -0
- package/test/picker.test.js +7 -0
- package/test/picker.test.js.map +7 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@spectrum-web-components/picker",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0-beta.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -82,20 +82,20 @@
|
|
|
82
82
|
"lit-html"
|
|
83
83
|
],
|
|
84
84
|
"dependencies": {
|
|
85
|
-
"@spectrum-web-components/base": "^1.
|
|
86
|
-
"@spectrum-web-components/button": "^1.
|
|
87
|
-
"@spectrum-web-components/field-label": "^1.
|
|
88
|
-
"@spectrum-web-components/icon": "^1.
|
|
89
|
-
"@spectrum-web-components/icons-ui": "^1.
|
|
90
|
-
"@spectrum-web-components/icons-workflow": "^1.
|
|
91
|
-
"@spectrum-web-components/menu": "^1.
|
|
92
|
-
"@spectrum-web-components/overlay": "^1.
|
|
93
|
-
"@spectrum-web-components/popover": "^1.
|
|
94
|
-
"@spectrum-web-components/progress-circle": "^1.
|
|
95
|
-
"@spectrum-web-components/reactive-controllers": "^1.
|
|
96
|
-
"@spectrum-web-components/shared": "^1.
|
|
97
|
-
"@spectrum-web-components/tooltip": "^1.
|
|
98
|
-
"@spectrum-web-components/tray": "^1.
|
|
85
|
+
"@spectrum-web-components/base": "^1.2.0-beta.0",
|
|
86
|
+
"@spectrum-web-components/button": "^1.2.0-beta.0",
|
|
87
|
+
"@spectrum-web-components/field-label": "^1.2.0-beta.0",
|
|
88
|
+
"@spectrum-web-components/icon": "^1.2.0-beta.0",
|
|
89
|
+
"@spectrum-web-components/icons-ui": "^1.2.0-beta.0",
|
|
90
|
+
"@spectrum-web-components/icons-workflow": "^1.2.0-beta.0",
|
|
91
|
+
"@spectrum-web-components/menu": "^1.2.0-beta.0",
|
|
92
|
+
"@spectrum-web-components/overlay": "^1.2.0-beta.0",
|
|
93
|
+
"@spectrum-web-components/popover": "^1.2.0-beta.0",
|
|
94
|
+
"@spectrum-web-components/progress-circle": "^1.2.0-beta.0",
|
|
95
|
+
"@spectrum-web-components/reactive-controllers": "^1.2.0-beta.0",
|
|
96
|
+
"@spectrum-web-components/shared": "^1.2.0-beta.0",
|
|
97
|
+
"@spectrum-web-components/tooltip": "^1.2.0-beta.0",
|
|
98
|
+
"@spectrum-web-components/tray": "^1.2.0-beta.0"
|
|
99
99
|
},
|
|
100
100
|
"devDependencies": {
|
|
101
101
|
"@spectrum-css/picker": "9.0.0-s2-foundations.15"
|
|
@@ -108,5 +108,5 @@
|
|
|
108
108
|
"./sync/index.js",
|
|
109
109
|
"./sync/sp-*.js"
|
|
110
110
|
],
|
|
111
|
-
"gitHead": "
|
|
111
|
+
"gitHead": "809bd734313fe289067108bf1dea2a48cc103a9f"
|
|
112
112
|
}
|
package/sp-picker.d.ts
ADDED
package/sp-picker.dev.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-picker.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 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 { Picker } from './src/Picker.dev.js'\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-picker', Picker);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-picker': Picker;\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAYA,SAAS,cAAc;AACvB,SAAS,qBAAqB;AAE9B,cAAc,aAAa,MAAM;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/sp-picker.js
ADDED
package/sp-picker.js.map
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["sp-picker.ts"],
|
|
4
|
+
"sourcesContent": ["/*\nCopyright 2020 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 { Picker } from './src/Picker.js';\nimport { defineElement } from '@spectrum-web-components/base/src/define-element.js';\n\ndefineElement('sp-picker', Picker);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'sp-picker': Picker;\n }\n}\n"],
|
|
5
|
+
"mappings": "aAYA,OAAS,UAAAA,MAAc,kBACvB,OAAS,iBAAAC,MAAqB,sDAE9BA,EAAc,YAAaD,CAAM",
|
|
6
|
+
"names": ["Picker", "defineElement"]
|
|
7
|
+
}
|
|
@@ -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 || event.pointerType === "touch") {
|
|
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 || event.pointerType === 'touch') {\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,KAAK,MAAM,gBAAgB,SAAS;AACrD;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 o}from"./InteractionController.js";export class DesktopController extends i{constructor(){super(...arguments);this.type=o.desktop}handlePointerdown(e){if(e.button!==0||e.pointerType==="touch")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 || event.pointerType === 'touch') {\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,GAAKA,EAAM,cAAgB,QAC5C,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,44 @@
|
|
|
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 const SAFARI_FOCUS_RING_CLASS = "remove-focus-ring-safari-hack";
|
|
10
|
+
export declare class InteractionController implements ReactiveController {
|
|
11
|
+
target: HTMLElement;
|
|
12
|
+
host: PickerBase;
|
|
13
|
+
abortController: AbortController;
|
|
14
|
+
preventNextToggle: 'no' | 'maybe' | 'yes';
|
|
15
|
+
pointerdownState: boolean;
|
|
16
|
+
enterKeydownOn: EventTarget | null;
|
|
17
|
+
container: TemplateResult;
|
|
18
|
+
get activelyOpening(): boolean;
|
|
19
|
+
private _open;
|
|
20
|
+
get open(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Set `open`
|
|
23
|
+
*/
|
|
24
|
+
set open(open: boolean);
|
|
25
|
+
private _overlay;
|
|
26
|
+
get overlay(): AbstractOverlay;
|
|
27
|
+
set overlay(overlay: AbstractOverlay | undefined);
|
|
28
|
+
type: InteractionTypes;
|
|
29
|
+
constructor(target: HTMLElement, host: PickerBase);
|
|
30
|
+
releaseDescription(): void;
|
|
31
|
+
protected handleBeforetoggle(event: Event & {
|
|
32
|
+
target: Overlay;
|
|
33
|
+
newState: 'open' | 'closed';
|
|
34
|
+
}): void;
|
|
35
|
+
initOverlay(): void;
|
|
36
|
+
handlePointerdown(_event: PointerEvent): void;
|
|
37
|
+
handleButtonFocus(event: FocusEvent): void;
|
|
38
|
+
handleActivate(_event: Event): void;
|
|
39
|
+
init(): void;
|
|
40
|
+
abort(): void;
|
|
41
|
+
hostConnected(): void;
|
|
42
|
+
hostDisconnected(): void;
|
|
43
|
+
hostUpdated(): void;
|
|
44
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
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 const SAFARI_FOCUS_RING_CLASS = "remove-focus-ring-safari-hack";
|
|
8
|
+
export class InteractionController {
|
|
9
|
+
constructor(target, host) {
|
|
10
|
+
this.target = target;
|
|
11
|
+
this.host = host;
|
|
12
|
+
this.preventNextToggle = "no";
|
|
13
|
+
this.pointerdownState = false;
|
|
14
|
+
this.enterKeydownOn = null;
|
|
15
|
+
this._open = false;
|
|
16
|
+
this.target = target;
|
|
17
|
+
this.host = host;
|
|
18
|
+
this.host.addController(this);
|
|
19
|
+
this.init();
|
|
20
|
+
}
|
|
21
|
+
get activelyOpening() {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
get open() {
|
|
25
|
+
return this._open;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Set `open`
|
|
29
|
+
*/
|
|
30
|
+
set open(open) {
|
|
31
|
+
if (this._open === open) return;
|
|
32
|
+
this._open = open;
|
|
33
|
+
if (this.overlay) {
|
|
34
|
+
this.host.open = open;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
customElements.whenDefined("sp-overlay").then(async () => {
|
|
38
|
+
const { Overlay: Overlay2 } = await import("@spectrum-web-components/overlay/src/Overlay.js");
|
|
39
|
+
this.overlay = new Overlay2();
|
|
40
|
+
this.host.open = true;
|
|
41
|
+
this.host.requestUpdate();
|
|
42
|
+
});
|
|
43
|
+
import("@spectrum-web-components/overlay/sp-overlay.js");
|
|
44
|
+
}
|
|
45
|
+
get overlay() {
|
|
46
|
+
return this._overlay;
|
|
47
|
+
}
|
|
48
|
+
set overlay(overlay) {
|
|
49
|
+
if (!overlay) return;
|
|
50
|
+
if (this.overlay === overlay) return;
|
|
51
|
+
this._overlay = overlay;
|
|
52
|
+
this.initOverlay();
|
|
53
|
+
}
|
|
54
|
+
releaseDescription() {
|
|
55
|
+
}
|
|
56
|
+
handleBeforetoggle(event) {
|
|
57
|
+
var _a;
|
|
58
|
+
if (event.composedPath()[0] !== event.target) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
if (event.newState === "closed") {
|
|
62
|
+
if (this.preventNextToggle === "no") {
|
|
63
|
+
this.open = false;
|
|
64
|
+
} else if (!this.pointerdownState) {
|
|
65
|
+
(_a = this.overlay) == null ? void 0 : _a.manuallyKeepOpen();
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
if (!this.open) {
|
|
69
|
+
this.host.optionsMenu.updateSelectedItemIndex();
|
|
70
|
+
this.host.optionsMenu.closeDescendentOverlays();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
initOverlay() {
|
|
74
|
+
if (this.overlay) {
|
|
75
|
+
this.overlay.addEventListener("beforetoggle", (event) => {
|
|
76
|
+
this.handleBeforetoggle(
|
|
77
|
+
event
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
this.overlay.type = this.host.isMobile.matches ? "modal" : "auto";
|
|
81
|
+
this.overlay.triggerElement = this.host;
|
|
82
|
+
this.overlay.placement = this.host.isMobile.matches && !this.host.forcePopover ? void 0 : "bottom";
|
|
83
|
+
this.overlay.receivesFocus = "true";
|
|
84
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no" && this.open;
|
|
85
|
+
this.overlay.addEventListener(
|
|
86
|
+
"slottable-request",
|
|
87
|
+
this.host.handleSlottableRequest
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
handlePointerdown(_event) {
|
|
92
|
+
}
|
|
93
|
+
handleButtonFocus(event) {
|
|
94
|
+
if (this.preventNextToggle === "maybe" && event.relatedTarget === this.host.optionsMenu) {
|
|
95
|
+
this.preventNextToggle = "yes";
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
handleActivate(_event) {
|
|
99
|
+
}
|
|
100
|
+
/* c8 ignore next 3 */
|
|
101
|
+
init() {
|
|
102
|
+
}
|
|
103
|
+
abort() {
|
|
104
|
+
var _a;
|
|
105
|
+
this.releaseDescription();
|
|
106
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
107
|
+
}
|
|
108
|
+
hostConnected() {
|
|
109
|
+
this.init();
|
|
110
|
+
}
|
|
111
|
+
hostDisconnected() {
|
|
112
|
+
var _a;
|
|
113
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
114
|
+
}
|
|
115
|
+
hostUpdated() {
|
|
116
|
+
if (this.overlay && this.host.dependencyManager.loaded && this.host.open !== this.overlay.open) {
|
|
117
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no";
|
|
118
|
+
this.overlay.open = this.host.open;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# 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}\nexport const SAFARI_FOCUS_RING_CLASS = 'remove-focus-ring-safari-hack';\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 this.overlay.type = this.host.isMobile.matches ? 'modal' : 'auto';\n this.overlay.triggerElement = this.host as HTMLElement;\n this.overlay.placement =\n this.host.isMobile.matches && !this.host.forcePopover\n ? undefined\n : 'bottom';\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 const SAFARI_FOCUS_RING_CLASS="remove-focus-ring-safari-hack";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.type=this.host.isMobile.matches?"modal":"auto",this.overlay.triggerElement=this.host,this.overlay.placement=this.host.isMobile.matches&&!this.host.forcePopover?void 0:"bottom",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}\nexport const SAFARI_FOCUS_RING_CLASS = 'remove-focus-ring-safari-hack';\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 this.overlay.type = this.host.isMobile.matches ? 'modal' : 'auto';\n this.overlay.triggerElement = this.host as HTMLElement;\n this.overlay.placement =\n this.host.isMobile.matches && !this.host.forcePopover\n ? undefined\n : 'bottom';\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,sBAIL,aAAM,wBAA0B,gCAEhC,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,CAxGZ,IAAAC,EAyGYD,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,EACD,KAAK,QAAQ,KAAO,KAAK,KAAK,SAAS,QAAU,QAAU,OAC3D,KAAK,QAAQ,eAAiB,KAAK,KACnC,KAAK,QAAQ,UACT,KAAK,KAAK,SAAS,SAAW,CAAC,KAAK,KAAK,aACnC,OACA,SACV,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,CAvKlB,IAAAD,EAwKQ,KAAK,mBAAmB,GACxBA,EAAA,KAAK,kBAAL,MAAAA,EAAsB,OAC1B,CAEA,eAAsB,CAClB,KAAK,KAAK,CACd,CAEA,kBAAyB,CAhL7B,IAAAA,GAiLQA,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,8 @@
|
|
|
1
|
+
import { InteractionController, InteractionTypes } from './InteractionController.js';
|
|
2
|
+
export declare class MobileController extends InteractionController {
|
|
3
|
+
type: InteractionTypes;
|
|
4
|
+
handleClick(): void;
|
|
5
|
+
handlePointerdown(): void;
|
|
6
|
+
private handleFocusOut;
|
|
7
|
+
init(): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import {
|
|
3
|
+
InteractionController,
|
|
4
|
+
InteractionTypes,
|
|
5
|
+
SAFARI_FOCUS_RING_CLASS
|
|
6
|
+
} from "./InteractionController.dev.js";
|
|
7
|
+
import { isWebKit } from "@spectrum-web-components/shared";
|
|
8
|
+
export class MobileController extends InteractionController {
|
|
9
|
+
constructor() {
|
|
10
|
+
super(...arguments);
|
|
11
|
+
this.type = InteractionTypes.mobile;
|
|
12
|
+
}
|
|
13
|
+
handleClick() {
|
|
14
|
+
if (this.preventNextToggle == "no") {
|
|
15
|
+
this.open = !this.open;
|
|
16
|
+
}
|
|
17
|
+
this.preventNextToggle = "no";
|
|
18
|
+
}
|
|
19
|
+
handlePointerdown() {
|
|
20
|
+
this.preventNextToggle = this.open ? "yes" : "no";
|
|
21
|
+
if (isWebKit()) {
|
|
22
|
+
this.target.classList.add(SAFARI_FOCUS_RING_CLASS);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
handleFocusOut() {
|
|
26
|
+
if (this.host.open) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
if (isWebKit() && this.target.classList.contains(SAFARI_FOCUS_RING_CLASS)) {
|
|
30
|
+
this.target.classList.remove(SAFARI_FOCUS_RING_CLASS);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
init() {
|
|
34
|
+
var _a;
|
|
35
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
36
|
+
this.abortController = new AbortController();
|
|
37
|
+
const { signal } = this.abortController;
|
|
38
|
+
this.target.addEventListener("click", () => this.handleClick(), {
|
|
39
|
+
signal
|
|
40
|
+
});
|
|
41
|
+
this.target.addEventListener(
|
|
42
|
+
"pointerdown",
|
|
43
|
+
() => this.handlePointerdown(),
|
|
44
|
+
{ signal }
|
|
45
|
+
);
|
|
46
|
+
this.target.addEventListener("focusout", () => this.handleFocusOut(), {
|
|
47
|
+
signal
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# 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 SAFARI_FOCUS_RING_CLASS,\n} from './InteractionController.dev.js'\nimport { isWebKit } from '@spectrum-web-components/shared';\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 if (isWebKit()) {\n this.target.classList.add(SAFARI_FOCUS_RING_CLASS);\n }\n }\n\n private handleFocusOut(): void {\n if (this.host.open) {\n return;\n }\n if (\n isWebKit() &&\n this.target.classList.contains(SAFARI_FOCUS_RING_CLASS)\n ) {\n this.target.classList.remove(SAFARI_FOCUS_RING_CLASS);\n }\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('focusout', () => this.handleFocusOut(), {\n signal,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": ";AAWA;AAAA,EACI;AAAA,EACA;AAAA,EACA;AAAA,OACG;AACP,SAAS,gBAAgB;AAElB,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;AAC7C,QAAI,SAAS,GAAG;AACZ,WAAK,OAAO,UAAU,IAAI,uBAAuB;AAAA,IACrD;AAAA,EACJ;AAAA,EAEQ,iBAAuB;AAC3B,QAAI,KAAK,KAAK,MAAM;AAChB;AAAA,IACJ;AACA,QACI,SAAS,KACT,KAAK,OAAO,UAAU,SAAS,uBAAuB,GACxD;AACE,WAAK,OAAO,UAAU,OAAO,uBAAuB;AAAA,IACxD;AAAA,EACJ;AAAA,EAES,OAAa;AA/C1B;AAiDQ,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,iBAAiB,YAAY,MAAM,KAAK,eAAe,GAAG;AAAA,MAClE;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";import{InteractionController as r,InteractionTypes as n,SAFARI_FOCUS_RING_CLASS as e}from"./InteractionController.js";import{isWebKit as i}from"@spectrum-web-components/shared";export class MobileController extends r{constructor(){super(...arguments);this.type=n.mobile}handleClick(){this.preventNextToggle=="no"&&(this.open=!this.open),this.preventNextToggle="no"}handlePointerdown(){this.preventNextToggle=this.open?"yes":"no",i()&&this.target.classList.add(e)}handleFocusOut(){this.host.open||i()&&this.target.classList.contains(e)&&this.target.classList.remove(e)}init(){var o;(o=this.abortController)==null||o.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("focusout",()=>this.handleFocusOut(),{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 SAFARI_FOCUS_RING_CLASS,\n} from './InteractionController.js';\nimport { isWebKit } from '@spectrum-web-components/shared';\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 if (isWebKit()) {\n this.target.classList.add(SAFARI_FOCUS_RING_CLASS);\n }\n }\n\n private handleFocusOut(): void {\n if (this.host.open) {\n return;\n }\n if (\n isWebKit() &&\n this.target.classList.contains(SAFARI_FOCUS_RING_CLASS)\n ) {\n this.target.classList.remove(SAFARI_FOCUS_RING_CLASS);\n }\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('focusout', () => this.handleFocusOut(), {\n signal,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "aAWA,OACI,yBAAAA,EACA,oBAAAC,EACA,2BAAAC,MACG,6BACP,OAAS,YAAAC,MAAgB,kCAElB,aAAM,yBAAyBH,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,KACzCE,EAAS,GACT,KAAK,OAAO,UAAU,IAAID,CAAuB,CAEzD,CAEQ,gBAAuB,CACvB,KAAK,KAAK,MAIVC,EAAS,GACT,KAAK,OAAO,UAAU,SAASD,CAAuB,GAEtD,KAAK,OAAO,UAAU,OAAOA,CAAuB,CAE5D,CAES,MAAa,CA/C1B,IAAAE,GAiDQA,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,iBAAiB,WAAY,IAAM,KAAK,eAAe,EAAG,CAClE,OAAAA,CACJ,CAAC,CACL,CACJ",
|
|
6
|
+
"names": ["InteractionController", "InteractionTypes", "SAFARI_FOCUS_RING_CLASS", "isWebKit", "_a", "signal"]
|
|
7
|
+
}
|