@spectrum-web-components/picker 0.0.0-20241209155954
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/README.md +464 -0
- package/package.json +111 -0
- 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 +43 -0
- package/src/InteractionController.dev.js +121 -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 +9 -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 +133 -0
- package/src/Picker.dev.js +713 -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-config.js +124 -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/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
|
@@ -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,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,121 @@
|
|
|
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.type = this.host.isMobile.matches ? "modal" : "auto";
|
|
80
|
+
this.overlay.triggerElement = this.host;
|
|
81
|
+
this.overlay.placement = this.host.isMobile.matches ? void 0 : this.host.placement;
|
|
82
|
+
this.overlay.receivesFocus = "true";
|
|
83
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no" && this.open;
|
|
84
|
+
this.overlay.addEventListener(
|
|
85
|
+
"slottable-request",
|
|
86
|
+
this.host.handleSlottableRequest
|
|
87
|
+
);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
handlePointerdown(_event) {
|
|
91
|
+
}
|
|
92
|
+
handleButtonFocus(event) {
|
|
93
|
+
if (this.preventNextToggle === "maybe" && event.relatedTarget === this.host.optionsMenu) {
|
|
94
|
+
this.preventNextToggle = "yes";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
handleActivate(_event) {
|
|
98
|
+
}
|
|
99
|
+
/* c8 ignore next 3 */
|
|
100
|
+
init() {
|
|
101
|
+
}
|
|
102
|
+
abort() {
|
|
103
|
+
var _a;
|
|
104
|
+
this.releaseDescription();
|
|
105
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
106
|
+
}
|
|
107
|
+
hostConnected() {
|
|
108
|
+
this.init();
|
|
109
|
+
}
|
|
110
|
+
hostDisconnected() {
|
|
111
|
+
var _a;
|
|
112
|
+
(_a = this.abortController) == null ? void 0 : _a.abort();
|
|
113
|
+
}
|
|
114
|
+
hostUpdated() {
|
|
115
|
+
if (this.overlay && this.host.dependencyManager.loaded && this.host.open !== this.overlay.open) {
|
|
116
|
+
this.overlay.willPreventClose = this.preventNextToggle !== "no";
|
|
117
|
+
this.overlay.open = this.host.open;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# 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 this.overlay.type = this.host.isMobile.matches ? 'modal' : 'auto';\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.type=this.host.isMobile.matches?"modal":"auto",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 this.overlay.type = this.host.isMobile.matches ? 'modal' : 'auto';\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,EACD,KAAK,QAAQ,KAAO,KAAK,KAAK,SAAS,QAAU,QAAU,OAC3D,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,9 @@
|
|
|
1
|
+
import { InteractionController, InteractionTypes } from './InteractionController.js';
|
|
2
|
+
export declare const SAFARI_FOCUS_RING_CLASS = "remove-focus-ring-safari-hack";
|
|
3
|
+
export declare class MobileController extends InteractionController {
|
|
4
|
+
type: InteractionTypes;
|
|
5
|
+
handleClick(): void;
|
|
6
|
+
handlePointerdown(): void;
|
|
7
|
+
private handleFocusOut;
|
|
8
|
+
init(): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
import {
|
|
3
|
+
InteractionController,
|
|
4
|
+
InteractionTypes
|
|
5
|
+
} from "./InteractionController.dev.js";
|
|
6
|
+
import { isWebKit } from "@spectrum-web-components/shared";
|
|
7
|
+
export const SAFARI_FOCUS_RING_CLASS = "remove-focus-ring-safari-hack";
|
|
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} from './InteractionController.dev.js'\nimport { isWebKit } from '@spectrum-web-components/shared';\n\nexport const SAFARI_FOCUS_RING_CLASS = 'remove-focus-ring-safari-hack';\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,OACG;AACP,SAAS,gBAAgB;AAElB,aAAM,0BAA0B;AAEhC,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;AAhD1B;AAkDQ,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 i,InteractionTypes as r}from"./InteractionController.js";import{isWebKit as o}from"@spectrum-web-components/shared";export const SAFARI_FOCUS_RING_CLASS="remove-focus-ring-safari-hack";export class MobileController extends i{constructor(){super(...arguments);this.type=r.mobile}handleClick(){this.preventNextToggle=="no"&&(this.open=!this.open),this.preventNextToggle="no"}handlePointerdown(){this.preventNextToggle=this.open?"yes":"no",o()&&this.target.classList.add(SAFARI_FOCUS_RING_CLASS)}handleFocusOut(){this.host.open||o()&&this.target.classList.contains(SAFARI_FOCUS_RING_CLASS)&&this.target.classList.remove(SAFARI_FOCUS_RING_CLASS)}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("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} from './InteractionController.js';\nimport { isWebKit } from '@spectrum-web-components/shared';\n\nexport const SAFARI_FOCUS_RING_CLASS = 'remove-focus-ring-safari-hack';\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,MACG,6BACP,OAAS,YAAAC,MAAgB,kCAElB,aAAM,wBAA0B,gCAEhC,aAAM,yBAAyBF,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,KACzCC,EAAS,GACT,KAAK,OAAO,UAAU,IAAI,uBAAuB,CAEzD,CAEQ,gBAAuB,CACvB,KAAK,KAAK,MAIVA,EAAS,GACT,KAAK,OAAO,UAAU,SAAS,uBAAuB,GAEtD,KAAK,OAAO,UAAU,OAAO,uBAAuB,CAE5D,CAES,MAAa,CAhD1B,IAAAC,GAkDQA,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", "isWebKit", "_a", "signal"]
|
|
7
|
+
}
|
package/src/Picker.d.ts
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { CSSResultArray, PropertyValues, TemplateResult } from '@spectrum-web-components/base';
|
|
2
|
+
import { StyleInfo } from '@spectrum-web-components/base/src/directives.js';
|
|
3
|
+
import { Focusable } from '@spectrum-web-components/shared/src/focusable.js';
|
|
4
|
+
import type { Tooltip } from '@spectrum-web-components/tooltip';
|
|
5
|
+
import '@spectrum-web-components/icons-ui/icons/sp-icon-chevron100.js';
|
|
6
|
+
import '@spectrum-web-components/icons-workflow/icons/sp-icon-alert.js';
|
|
7
|
+
import '@spectrum-web-components/menu/sp-menu.js';
|
|
8
|
+
import type { Menu, MenuItem, MenuItemChildren } from '@spectrum-web-components/menu';
|
|
9
|
+
import { Placement } from '@spectrum-web-components/overlay';
|
|
10
|
+
import { MatchMediaController } from '@spectrum-web-components/reactive-controllers/src/MatchMedia.js';
|
|
11
|
+
import { DependencyManagerController } from '@spectrum-web-components/reactive-controllers/src/DependencyManger.js';
|
|
12
|
+
import { PendingStateController } from '@spectrum-web-components/reactive-controllers/src/PendingState.js';
|
|
13
|
+
import { Overlay } from '@spectrum-web-components/overlay/src/Overlay.js';
|
|
14
|
+
import type { SlottableRequestEvent } from '@spectrum-web-components/overlay/src/slottable-request-event.js';
|
|
15
|
+
import type { FieldLabel } from '@spectrum-web-components/field-label';
|
|
16
|
+
import { DesktopController } from './DesktopController.js';
|
|
17
|
+
import { MobileController } from './MobileController.js';
|
|
18
|
+
export declare const DESCRIPTION_ID = "option-picker";
|
|
19
|
+
declare const PickerBase_base: typeof Focusable & {
|
|
20
|
+
new (...args: any[]): import("@spectrum-web-components/base").SizedElementInterface;
|
|
21
|
+
prototype: import("@spectrum-web-components/base").SizedElementInterface;
|
|
22
|
+
};
|
|
23
|
+
export declare class PickerBase extends PickerBase_base {
|
|
24
|
+
isMobile: MatchMediaController;
|
|
25
|
+
strategy: DesktopController | MobileController;
|
|
26
|
+
appliedLabel?: string;
|
|
27
|
+
button: HTMLButtonElement;
|
|
28
|
+
dependencyManager: DependencyManagerController;
|
|
29
|
+
private deprecatedMenu;
|
|
30
|
+
disabled: boolean;
|
|
31
|
+
focused: boolean;
|
|
32
|
+
icons?: 'only' | 'none';
|
|
33
|
+
invalid: boolean;
|
|
34
|
+
/** Whether the items are currently loading. */
|
|
35
|
+
pending: boolean;
|
|
36
|
+
/** Defines a string value that labels the Picker while it is in pending state. */
|
|
37
|
+
pendingLabel: string;
|
|
38
|
+
label?: string;
|
|
39
|
+
open: boolean;
|
|
40
|
+
readonly: boolean;
|
|
41
|
+
selects: undefined | 'single';
|
|
42
|
+
labelAlignment?: 'inline';
|
|
43
|
+
protected get menuItems(): MenuItem[];
|
|
44
|
+
optionsMenu: Menu;
|
|
45
|
+
private _selfManageFocusElement;
|
|
46
|
+
get selfManageFocusElement(): boolean;
|
|
47
|
+
overlayElement: Overlay;
|
|
48
|
+
protected tooltipEl?: Tooltip;
|
|
49
|
+
/**
|
|
50
|
+
* @type {"top" | "top-start" | "top-end" | "right" | "right-start" | "right-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end"}
|
|
51
|
+
* @attr
|
|
52
|
+
*/
|
|
53
|
+
placement: Placement;
|
|
54
|
+
quiet: boolean;
|
|
55
|
+
value: string;
|
|
56
|
+
get selectedItem(): MenuItem | undefined;
|
|
57
|
+
pendingStateController: PendingStateController<this>;
|
|
58
|
+
/**
|
|
59
|
+
* Initializes the `PendingStateController` for the Picker component.
|
|
60
|
+
* The `PendingStateController` manages the pending state of the Picker.
|
|
61
|
+
*/
|
|
62
|
+
constructor();
|
|
63
|
+
set selectedItem(selectedItem: MenuItem | undefined);
|
|
64
|
+
_selectedItem?: MenuItem;
|
|
65
|
+
protected listRole: 'listbox' | 'menu';
|
|
66
|
+
protected itemRole: string;
|
|
67
|
+
get focusElement(): HTMLElement;
|
|
68
|
+
forceFocusVisible(): void;
|
|
69
|
+
click(): void;
|
|
70
|
+
handleButtonBlur(): void;
|
|
71
|
+
focus(options?: FocusOptions): void;
|
|
72
|
+
handleHelperFocus(): void;
|
|
73
|
+
handleChange(event: Event): void;
|
|
74
|
+
handleButtonFocus(event: FocusEvent): void;
|
|
75
|
+
protected handleKeydown: (event: KeyboardEvent) => void;
|
|
76
|
+
protected setValueFromItem(item: MenuItem, menuChangeEvent?: Event): Promise<void>;
|
|
77
|
+
protected setMenuItemSelected(item: MenuItem, value: boolean): void;
|
|
78
|
+
toggle(target?: boolean): void;
|
|
79
|
+
close(): void;
|
|
80
|
+
protected get containerStyles(): StyleInfo;
|
|
81
|
+
protected get selectedItemContent(): MenuItemChildren;
|
|
82
|
+
protected set selectedItemContent(selectedItemContent: MenuItemChildren | undefined);
|
|
83
|
+
_selectedItemContent?: MenuItemChildren;
|
|
84
|
+
protected handleTooltipSlotchange(event: Event & {
|
|
85
|
+
target: HTMLSlotElement;
|
|
86
|
+
}): void;
|
|
87
|
+
handleSlottableRequest: (_event: SlottableRequestEvent) => void;
|
|
88
|
+
protected renderLabelContent(content: Node[]): TemplateResult | Node[];
|
|
89
|
+
protected get buttonContent(): TemplateResult[];
|
|
90
|
+
applyFocusElementLabel: (value: string, labelElement: FieldLabel) => void;
|
|
91
|
+
protected renderOverlay(menu: TemplateResult): TemplateResult;
|
|
92
|
+
protected get renderDescriptionSlot(): TemplateResult;
|
|
93
|
+
protected render(): TemplateResult;
|
|
94
|
+
protected update(changes: PropertyValues<this>): void;
|
|
95
|
+
protected bindButtonKeydownListener(): void;
|
|
96
|
+
protected updated(changes: PropertyValues<this>): void;
|
|
97
|
+
protected firstUpdated(changes: PropertyValues<this>): void;
|
|
98
|
+
protected get dismissHelper(): TemplateResult;
|
|
99
|
+
protected renderContainer(menu: TemplateResult): TemplateResult;
|
|
100
|
+
protected hasRenderedOverlay: boolean;
|
|
101
|
+
private onScroll;
|
|
102
|
+
protected get renderMenu(): TemplateResult;
|
|
103
|
+
private willManageSelection;
|
|
104
|
+
protected shouldScheduleManageSelection(event?: Event): void;
|
|
105
|
+
protected shouldManageSelection(): void;
|
|
106
|
+
protected manageSelection(): Promise<void>;
|
|
107
|
+
private selectionPromise;
|
|
108
|
+
private selectionResolver;
|
|
109
|
+
protected getUpdateComplete(): Promise<boolean>;
|
|
110
|
+
private recentlyConnected;
|
|
111
|
+
private enterKeydownOn;
|
|
112
|
+
protected handleEnterKeydown: (event: KeyboardEvent) => void;
|
|
113
|
+
bindEvents(): void;
|
|
114
|
+
connectedCallback(): void;
|
|
115
|
+
disconnectedCallback(): void;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* @element sp-picker
|
|
119
|
+
*
|
|
120
|
+
* @slot label - The placeholder content for the Picker
|
|
121
|
+
* @slot description - The description content for the Picker
|
|
122
|
+
* @slot tooltip - Tooltip to to be applied to the the Picker Button
|
|
123
|
+
* @slot - menu items to be listed in the Picker
|
|
124
|
+
* @fires change - Announces that the `value` of the element has changed
|
|
125
|
+
* @fires sp-opened - Announces that the overlay has been opened
|
|
126
|
+
* @fires sp-closed - Announces that the overlay has been closed
|
|
127
|
+
*/
|
|
128
|
+
export declare class Picker extends PickerBase {
|
|
129
|
+
static get styles(): CSSResultArray;
|
|
130
|
+
protected get containerStyles(): StyleInfo;
|
|
131
|
+
protected handleKeydown: (event: KeyboardEvent) => void;
|
|
132
|
+
}
|
|
133
|
+
export {};
|