@spectrum-web-components/picker 1.2.0-beta.9 → 1.2.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.
@@ -1056,6 +1056,15 @@
1056
1056
  "description": "",
1057
1057
  "name": "PickerBase",
1058
1058
  "members": [
1059
+ {
1060
+ "kind": "field",
1061
+ "name": "shadowRootOptions",
1062
+ "type": {
1063
+ "text": "object"
1064
+ },
1065
+ "static": true,
1066
+ "default": "{\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n }"
1067
+ },
1059
1068
  {
1060
1069
  "kind": "field",
1061
1070
  "name": "isMobile",
@@ -1243,15 +1252,6 @@
1243
1252
  },
1244
1253
  "privacy": "public"
1245
1254
  },
1246
- {
1247
- "kind": "field",
1248
- "name": "_selfManageFocusElement",
1249
- "type": {
1250
- "text": "boolean"
1251
- },
1252
- "privacy": "private",
1253
- "default": "false"
1254
- },
1255
1255
  {
1256
1256
  "kind": "field",
1257
1257
  "name": "selfManageFocusElement",
@@ -1259,6 +1259,7 @@
1259
1259
  "text": "boolean"
1260
1260
  },
1261
1261
  "privacy": "public",
1262
+ "deprecated": "true",
1262
1263
  "readonly": true
1263
1264
  },
1264
1265
  {
@@ -1379,6 +1380,16 @@
1379
1380
  }
1380
1381
  }
1381
1382
  },
1383
+ {
1384
+ "kind": "method",
1385
+ "name": "handleButtonClick",
1386
+ "privacy": "public",
1387
+ "return": {
1388
+ "type": {
1389
+ "text": "void"
1390
+ }
1391
+ }
1392
+ },
1382
1393
  {
1383
1394
  "kind": "method",
1384
1395
  "name": "handleButtonBlur",
@@ -1412,6 +1423,17 @@
1412
1423
  "kind": "method",
1413
1424
  "name": "handleHelperFocus",
1414
1425
  "privacy": "public",
1426
+ "return": {
1427
+ "type": {
1428
+ "text": "void"
1429
+ }
1430
+ },
1431
+ "deprecated": "- Use `focus` instead."
1432
+ },
1433
+ {
1434
+ "kind": "method",
1435
+ "name": "handleFocus",
1436
+ "privacy": "public",
1415
1437
  "return": {
1416
1438
  "type": {
1417
1439
  "text": "void"
@@ -1454,11 +1476,26 @@
1454
1476
  }
1455
1477
  ]
1456
1478
  },
1479
+ {
1480
+ "kind": "field",
1481
+ "name": "handleEscape",
1482
+ "privacy": "protected"
1483
+ },
1457
1484
  {
1458
1485
  "kind": "field",
1459
1486
  "name": "handleKeydown",
1460
1487
  "privacy": "protected"
1461
1488
  },
1489
+ {
1490
+ "kind": "method",
1491
+ "name": "keyboardOpen",
1492
+ "privacy": "protected",
1493
+ "return": {
1494
+ "type": {
1495
+ "text": "Promise<void>"
1496
+ }
1497
+ }
1498
+ },
1462
1499
  {
1463
1500
  "kind": "method",
1464
1501
  "name": "setValueFromItem",
@@ -1615,6 +1652,26 @@
1615
1652
  "kind": "field",
1616
1653
  "name": "applyFocusElementLabel"
1617
1654
  },
1655
+ {
1656
+ "kind": "method",
1657
+ "name": "hasAccessibleLabel",
1658
+ "privacy": "protected",
1659
+ "return": {
1660
+ "type": {
1661
+ "text": "boolean"
1662
+ }
1663
+ }
1664
+ },
1665
+ {
1666
+ "kind": "method",
1667
+ "name": "warnNoLabel",
1668
+ "privacy": "protected",
1669
+ "return": {
1670
+ "type": {
1671
+ "text": "void"
1672
+ }
1673
+ }
1674
+ },
1618
1675
  {
1619
1676
  "kind": "method",
1620
1677
  "name": "renderOverlay",
@@ -1713,8 +1770,9 @@
1713
1770
  "type": {
1714
1771
  "text": "boolean"
1715
1772
  },
1716
- "privacy": "private",
1717
- "default": "false"
1773
+ "privacy": "public",
1774
+ "default": "false",
1775
+ "description": "whether a selection change is already scheduled"
1718
1776
  },
1719
1777
  {
1720
1778
  "kind": "method",
@@ -1733,7 +1791,8 @@
1733
1791
  "text": "Event"
1734
1792
  }
1735
1793
  }
1736
- ]
1794
+ ],
1795
+ "description": "when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled"
1737
1796
  },
1738
1797
  {
1739
1798
  "kind": "method",
@@ -1743,7 +1802,8 @@
1743
1802
  "type": {
1744
1803
  "text": "void"
1745
1804
  }
1746
- }
1805
+ },
1806
+ "description": "when an item is added or updated, manage the selection, if it's not already scheduled"
1747
1807
  },
1748
1808
  {
1749
1809
  "kind": "method",
@@ -1753,7 +1813,8 @@
1753
1813
  "type": {
1754
1814
  "text": "Promise<void>"
1755
1815
  }
1756
- }
1816
+ },
1817
+ "description": "updates menu selection based on value"
1757
1818
  },
1758
1819
  {
1759
1820
  "kind": "field",
@@ -1941,8 +2002,8 @@
1941
2002
  }
1942
2003
  ],
1943
2004
  "superclass": {
1944
- "name": "Focusable",
1945
- "package": "@spectrum-web-components/shared/src/focusable.js"
2005
+ "name": "SpectrumElement",
2006
+ "package": "@spectrum-web-components/base"
1946
2007
  }
1947
2008
  },
1948
2009
  {
@@ -1990,6 +2051,19 @@
1990
2051
  "module": "src/Picker.js"
1991
2052
  }
1992
2053
  },
2054
+ {
2055
+ "kind": "field",
2056
+ "name": "shadowRootOptions",
2057
+ "type": {
2058
+ "text": "object"
2059
+ },
2060
+ "static": true,
2061
+ "default": "{\n ...SpectrumElement.shadowRootOptions,\n delegatesFocus: true,\n }",
2062
+ "inheritedFrom": {
2063
+ "name": "PickerBase",
2064
+ "module": "src/Picker.js"
2065
+ }
2066
+ },
1993
2067
  {
1994
2068
  "kind": "field",
1995
2069
  "name": "isMobile",
@@ -2257,19 +2331,6 @@
2257
2331
  "module": "src/Picker.js"
2258
2332
  }
2259
2333
  },
2260
- {
2261
- "kind": "field",
2262
- "name": "_selfManageFocusElement",
2263
- "type": {
2264
- "text": "boolean"
2265
- },
2266
- "privacy": "private",
2267
- "default": "false",
2268
- "inheritedFrom": {
2269
- "name": "PickerBase",
2270
- "module": "src/Picker.js"
2271
- }
2272
- },
2273
2334
  {
2274
2335
  "kind": "field",
2275
2336
  "name": "selfManageFocusElement",
@@ -2277,6 +2338,7 @@
2277
2338
  "text": "boolean"
2278
2339
  },
2279
2340
  "privacy": "public",
2341
+ "deprecated": "true",
2280
2342
  "readonly": true,
2281
2343
  "inheritedFrom": {
2282
2344
  "name": "PickerBase",
@@ -2453,6 +2515,20 @@
2453
2515
  "module": "src/Picker.js"
2454
2516
  }
2455
2517
  },
2518
+ {
2519
+ "kind": "method",
2520
+ "name": "handleButtonClick",
2521
+ "privacy": "public",
2522
+ "return": {
2523
+ "type": {
2524
+ "text": "void"
2525
+ }
2526
+ },
2527
+ "inheritedFrom": {
2528
+ "name": "PickerBase",
2529
+ "module": "src/Picker.js"
2530
+ }
2531
+ },
2456
2532
  {
2457
2533
  "kind": "method",
2458
2534
  "name": "handleButtonBlur",
@@ -2499,6 +2575,21 @@
2499
2575
  "text": "void"
2500
2576
  }
2501
2577
  },
2578
+ "deprecated": "- Use `focus` instead.",
2579
+ "inheritedFrom": {
2580
+ "name": "PickerBase",
2581
+ "module": "src/Picker.js"
2582
+ }
2583
+ },
2584
+ {
2585
+ "kind": "method",
2586
+ "name": "handleFocus",
2587
+ "privacy": "public",
2588
+ "return": {
2589
+ "type": {
2590
+ "text": "void"
2591
+ }
2592
+ },
2502
2593
  "inheritedFrom": {
2503
2594
  "name": "PickerBase",
2504
2595
  "module": "src/Picker.js"
@@ -2548,6 +2639,29 @@
2548
2639
  "module": "src/Picker.js"
2549
2640
  }
2550
2641
  },
2642
+ {
2643
+ "kind": "field",
2644
+ "name": "handleEscape",
2645
+ "privacy": "protected",
2646
+ "inheritedFrom": {
2647
+ "name": "PickerBase",
2648
+ "module": "src/Picker.js"
2649
+ }
2650
+ },
2651
+ {
2652
+ "kind": "method",
2653
+ "name": "keyboardOpen",
2654
+ "privacy": "protected",
2655
+ "return": {
2656
+ "type": {
2657
+ "text": "Promise<void>"
2658
+ }
2659
+ },
2660
+ "inheritedFrom": {
2661
+ "name": "PickerBase",
2662
+ "module": "src/Picker.js"
2663
+ }
2664
+ },
2551
2665
  {
2552
2666
  "kind": "method",
2553
2667
  "name": "setValueFromItem",
@@ -2739,6 +2853,34 @@
2739
2853
  "module": "src/Picker.js"
2740
2854
  }
2741
2855
  },
2856
+ {
2857
+ "kind": "method",
2858
+ "name": "hasAccessibleLabel",
2859
+ "privacy": "protected",
2860
+ "return": {
2861
+ "type": {
2862
+ "text": "boolean"
2863
+ }
2864
+ },
2865
+ "inheritedFrom": {
2866
+ "name": "PickerBase",
2867
+ "module": "src/Picker.js"
2868
+ }
2869
+ },
2870
+ {
2871
+ "kind": "method",
2872
+ "name": "warnNoLabel",
2873
+ "privacy": "protected",
2874
+ "return": {
2875
+ "type": {
2876
+ "text": "void"
2877
+ }
2878
+ },
2879
+ "inheritedFrom": {
2880
+ "name": "PickerBase",
2881
+ "module": "src/Picker.js"
2882
+ }
2883
+ },
2742
2884
  {
2743
2885
  "kind": "method",
2744
2886
  "name": "renderOverlay",
@@ -2869,8 +3011,9 @@
2869
3011
  "type": {
2870
3012
  "text": "boolean"
2871
3013
  },
2872
- "privacy": "private",
3014
+ "privacy": "public",
2873
3015
  "default": "false",
3016
+ "description": "whether a selection change is already scheduled",
2874
3017
  "inheritedFrom": {
2875
3018
  "name": "PickerBase",
2876
3019
  "module": "src/Picker.js"
@@ -2894,6 +3037,7 @@
2894
3037
  }
2895
3038
  }
2896
3039
  ],
3040
+ "description": "when the value changes or the menu slot changes, manage the selection on the next frame, if not already scheduled",
2897
3041
  "inheritedFrom": {
2898
3042
  "name": "PickerBase",
2899
3043
  "module": "src/Picker.js"
@@ -2908,6 +3052,7 @@
2908
3052
  "text": "void"
2909
3053
  }
2910
3054
  },
3055
+ "description": "when an item is added or updated, manage the selection, if it's not already scheduled",
2911
3056
  "inheritedFrom": {
2912
3057
  "name": "PickerBase",
2913
3058
  "module": "src/Picker.js"
@@ -2922,6 +3067,7 @@
2922
3067
  "text": "Promise<void>"
2923
3068
  }
2924
3069
  },
3070
+ "description": "updates menu selection based on value",
2925
3071
  "inheritedFrom": {
2926
3072
  "name": "PickerBase",
2927
3073
  "module": "src/Picker.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spectrum-web-components/picker",
3
- "version": "1.2.0-beta.9",
3
+ "version": "1.2.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.2.0-beta.9",
86
- "@spectrum-web-components/button": "^1.2.0-beta.9",
87
- "@spectrum-web-components/field-label": "^1.2.0-beta.9",
88
- "@spectrum-web-components/icon": "^1.2.0-beta.9",
89
- "@spectrum-web-components/icons-ui": "^1.2.0-beta.9",
90
- "@spectrum-web-components/icons-workflow": "^1.2.0-beta.9",
91
- "@spectrum-web-components/menu": "^1.2.0-beta.9",
92
- "@spectrum-web-components/overlay": "^1.2.0-beta.9",
93
- "@spectrum-web-components/popover": "^1.2.0-beta.9",
94
- "@spectrum-web-components/progress-circle": "^1.2.0-beta.9",
95
- "@spectrum-web-components/reactive-controllers": "^1.2.0-beta.9",
96
- "@spectrum-web-components/shared": "^1.2.0-beta.9",
97
- "@spectrum-web-components/tooltip": "^1.2.0-beta.9",
98
- "@spectrum-web-components/tray": "^1.2.0-beta.9"
85
+ "@spectrum-web-components/base": "^1.2.0",
86
+ "@spectrum-web-components/button": "^1.2.0",
87
+ "@spectrum-web-components/field-label": "^1.2.0",
88
+ "@spectrum-web-components/icon": "^1.2.0",
89
+ "@spectrum-web-components/icons-ui": "^1.2.0",
90
+ "@spectrum-web-components/icons-workflow": "^1.2.0",
91
+ "@spectrum-web-components/menu": "^1.2.0",
92
+ "@spectrum-web-components/overlay": "^1.2.0",
93
+ "@spectrum-web-components/popover": "^1.2.0",
94
+ "@spectrum-web-components/progress-circle": "^1.2.0",
95
+ "@spectrum-web-components/reactive-controllers": "^1.2.0",
96
+ "@spectrum-web-components/shared": "^1.2.0",
97
+ "@spectrum-web-components/tooltip": "^1.2.0",
98
+ "@spectrum-web-components/tray": "^1.2.0"
99
99
  },
100
100
  "devDependencies": {
101
101
  "@spectrum-css/picker": "9.0.0-s2-foundations.17"
@@ -108,5 +108,5 @@
108
108
  "./sync/index.js",
109
109
  "./sync/sp-*.js"
110
110
  ],
111
- "gitHead": "1f6549c7e7a8fdb9570a959fc44cef766cd4bee7"
111
+ "gitHead": "e4aec7b389e6209984e4df74f9b86b3ee0c485dd"
112
112
  }
@@ -80,7 +80,7 @@ export class InteractionController {
80
80
  this.overlay.type = this.host.isMobile.matches ? "modal" : "auto";
81
81
  this.overlay.triggerElement = this.host;
82
82
  this.overlay.placement = this.host.isMobile.matches && !this.host.forcePopover ? void 0 : this.host.placement;
83
- this.overlay.receivesFocus = "true";
83
+ this.overlay.receivesFocus = "false";
84
84
  this.overlay.willPreventClose = this.preventNextToggle !== "no" && this.open;
85
85
  this.overlay.addEventListener(
86
86
  "slottable-request",
@@ -94,6 +94,7 @@ export class InteractionController {
94
94
  if (this.preventNextToggle === "maybe" && event.relatedTarget === this.host.optionsMenu) {
95
95
  this.preventNextToggle = "yes";
96
96
  }
97
+ if (this.preventNextToggle === "no") this.host.close();
97
98
  }
98
99
  handleActivate(_event) {
99
100
  }
@@ -107,6 +108,11 @@ export class InteractionController {
107
108
  }
108
109
  hostConnected() {
109
110
  this.init();
111
+ this.host.addEventListener("sp-closed", () => {
112
+ if (!this.open && this.host.optionsMenu.matches(":focus-within") && !this.host.button.matches(":focus")) {
113
+ this.host.button.focus();
114
+ }
115
+ });
110
116
  }
111
117
  hostDisconnected() {
112
118
  var _a;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 : 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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",
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 : this.host.placement;\n // We should not be applying open is set programmatically via the picker's open.property.\n // Focus should only be applied if a user action causes the menu to open. Otherwise,\n // we could be pulling focus from a user when an picker with an open menu loads.\n this.overlay.receivesFocus = 'false';\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 if (this.preventNextToggle === 'no') this.host.close();\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 this.host.addEventListener('sp-closed', ()=> {\n if(!this.open && this.host.optionsMenu.matches(':focus-within') && !this.host.button.matches(':focus')) {\n this.host.button.focus();\n }\n });\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
6
  "names": ["InteractionTypes", "Overlay"]
7
7
  }
@@ -1,2 +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: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)}}
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:this.host.placement,this.overlay.receivesFocus="false",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"),this.preventNextToggle==="no"&&this.host.close()}handleActivate(e){}init(){}abort(){var e;this.releaseDescription(),(e=this.abortController)==null||e.abort()}hostConnected(){this.init(),this.host.addEventListener("sp-closed",()=>{!this.open&&this.host.optionsMenu.matches(":focus-within")&&!this.host.button.matches(":focus")&&this.host.button.focus()})}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
2
  //# sourceMappingURL=InteractionController.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 : 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,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,KAAK,KAAK,UACpB,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",
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 : this.host.placement;\n // We should not be applying open is set programmatically via the picker's open.property.\n // Focus should only be applied if a user action causes the menu to open. Otherwise,\n // we could be pulling focus from a user when an picker with an open menu loads.\n this.overlay.receivesFocus = 'false';\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 if (this.preventNextToggle === 'no') this.host.close();\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 this.host.addEventListener('sp-closed', ()=> {\n if(!this.open && this.host.optionsMenu.matches(':focus-within') && !this.host.button.matches(':focus')) {\n this.host.button.focus();\n }\n });\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
6
  "names": ["InteractionTypes", "target", "host", "open", "Overlay", "overlay", "event", "_a", "_event"]
7
7
  }
@@ -11,8 +11,11 @@ export class MobileController extends InteractionController {
11
11
  this.type = InteractionTypes.mobile;
12
12
  }
13
13
  handleClick() {
14
+ if (this.host.disabled) {
15
+ return;
16
+ }
14
17
  if (this.preventNextToggle == "no") {
15
- this.open = !this.open;
18
+ this.host.toggle();
16
19
  }
17
20
  this.preventNextToggle = "no";
18
21
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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;",
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.host.disabled) {\n return;\n }\n if (this.preventNextToggle == 'no') {\n\n this.host.toggle();\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,KAAK,UAAU;AACpB;AAAA,IACJ;AACA,QAAI,KAAK,qBAAqB,MAAM;AAEhC,WAAK,KAAK,OAAO;AAAA,IACrB;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;AAnD1B;AAqDQ,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
6
  "names": []
7
7
  }
@@ -1,2 +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})}}
1
+ "use strict";import{InteractionController as r,InteractionTypes as s,SAFARI_FOCUS_RING_CLASS as e}from"./InteractionController.js";import{isWebKit as o}from"@spectrum-web-components/shared";export class MobileController extends r{constructor(){super(...arguments);this.type=s.mobile}handleClick(){this.host.disabled||(this.preventNextToggle=="no"&&this.host.toggle(),this.preventNextToggle="no")}handlePointerdown(){this.preventNextToggle=this.open?"yes":"no",o()&&this.target.classList.add(e)}handleFocusOut(){this.host.open||o()&&this.target.classList.contains(e)&&this.target.classList.remove(e)}init(){var i;(i=this.abortController)==null||i.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
2
  //# sourceMappingURL=MobileController.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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",
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.host.disabled) {\n return;\n }\n if (this.preventNextToggle == 'no') {\n\n this.host.toggle();\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,KAAK,WAGV,KAAK,mBAAqB,MAE1B,KAAK,KAAK,OAAO,EAErB,KAAK,kBAAoB,KAC7B,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,CAnD1B,IAAAE,GAqDQA,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
6
  "names": ["InteractionController", "InteractionTypes", "SAFARI_FOCUS_RING_CLASS", "isWebKit", "_a", "signal"]
7
7
  }