@spectrum-web-components/base 1.1.0 → 1.1.2

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.
Files changed (65) hide show
  1. package/package.json +2 -2
  2. package/src/Base.d.ts +17 -0
  3. package/src/Base.dev.js +174 -0
  4. package/src/Base.dev.js.map +7 -0
  5. package/src/Base.js +2 -0
  6. package/src/Base.js.map +7 -0
  7. package/src/async-directive.d.ts +1 -0
  8. package/src/async-directive.dev.js +3 -0
  9. package/src/async-directive.dev.js.map +7 -0
  10. package/src/async-directive.js +2 -0
  11. package/src/async-directive.js.map +7 -0
  12. package/src/condition-attribute-with-id.d.ts +2 -0
  13. package/src/condition-attribute-with-id.dev.js +27 -0
  14. package/src/condition-attribute-with-id.dev.js.map +7 -0
  15. package/src/condition-attribute-with-id.js +2 -0
  16. package/src/condition-attribute-with-id.js.map +7 -0
  17. package/src/decorators.d.ts +1 -0
  18. package/src/decorators.dev.js +3 -0
  19. package/src/decorators.dev.js.map +7 -0
  20. package/src/decorators.js +2 -0
  21. package/src/decorators.js.map +7 -0
  22. package/src/define-element.d.ts +5 -0
  23. package/src/define-element.dev.js +14 -0
  24. package/src/define-element.dev.js.map +7 -0
  25. package/src/define-element.js +2 -0
  26. package/src/define-element.js.map +7 -0
  27. package/src/directive.d.ts +1 -0
  28. package/src/directive.dev.js +3 -0
  29. package/src/directive.dev.js.map +7 -0
  30. package/src/directive.js +2 -0
  31. package/src/directive.js.map +7 -0
  32. package/src/directives.d.ts +12 -0
  33. package/src/directives.dev.js +12 -0
  34. package/src/directives.dev.js.map +7 -0
  35. package/src/directives.js +2 -0
  36. package/src/directives.js.map +7 -0
  37. package/src/html.d.ts +1 -0
  38. package/src/html.dev.js +3 -0
  39. package/src/html.dev.js.map +7 -0
  40. package/src/html.js +2 -0
  41. package/src/html.js.map +7 -0
  42. package/src/index.d.ts +3 -0
  43. package/src/index.dev.js +5 -0
  44. package/src/index.dev.js.map +7 -0
  45. package/src/index.js +2 -0
  46. package/src/index.js.map +7 -0
  47. package/src/sizedMixin.d.ts +17 -0
  48. package/src/sizedMixin.dev.js +61 -0
  49. package/src/sizedMixin.dev.js.map +7 -0
  50. package/src/sizedMixin.js +2 -0
  51. package/src/sizedMixin.js.map +7 -0
  52. package/src/streaming-listener.d.ts +48 -0
  53. package/src/streaming-listener.dev.js +133 -0
  54. package/src/streaming-listener.dev.js.map +7 -0
  55. package/src/streaming-listener.js +2 -0
  56. package/src/streaming-listener.js.map +7 -0
  57. package/src/version.js +1 -1
  58. package/test/base-devmode.test.js +37 -0
  59. package/test/base-devmode.test.js.map +7 -0
  60. package/test/base.test.js +27 -0
  61. package/test/base.test.js.map +7 -0
  62. package/test/define-element.test.js +128 -0
  63. package/test/define-element.test.js.map +7 -0
  64. package/test/sizedMixin.test.js +60 -0
  65. package/test/sizedMixin.test.js.map +7 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["index.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\n\nexport * from './Base.js';\nexport * from './sizedMixin.js';\nexport * from 'lit';\n"],
5
+ "mappings": "aAYA,WAAc,YACd,WAAc,kBACd,WAAc",
6
+ "names": []
7
+ }
@@ -0,0 +1,17 @@
1
+ import { ReactiveElement } from 'lit';
2
+ type Constructor<T = Record<string, unknown>> = {
3
+ new (...args: any[]): T;
4
+ prototype: T;
5
+ };
6
+ export type ElementSize = 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';
7
+ export declare const ElementSizes: Record<string, ElementSize>;
8
+ export type DefaultElementSize = Exclude<ElementSize, 'xxs' | 'xs' | 'xxl'>;
9
+ export interface SizedElementInterface {
10
+ size: ElementSize;
11
+ }
12
+ export declare function SizedMixin<T extends Constructor<ReactiveElement>>(constructor: T, { validSizes, noDefaultSize, defaultSize, }?: {
13
+ validSizes?: ElementSize[];
14
+ noDefaultSize?: boolean;
15
+ defaultSize?: ElementSize;
16
+ }): T & Constructor<SizedElementInterface>;
17
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __decorateClass = (decorators, target, key, kind) => {
5
+ var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
6
+ for (var i = decorators.length - 1, decorator; i >= 0; i--)
7
+ if (decorator = decorators[i])
8
+ result = (kind ? decorator(target, key, result) : decorator(result)) || result;
9
+ if (kind && result) __defProp(target, key, result);
10
+ return result;
11
+ };
12
+ import { property } from "lit/decorators.js";
13
+ export const ElementSizes = {
14
+ xxs: "xxs",
15
+ xs: "xs",
16
+ s: "s",
17
+ m: "m",
18
+ l: "l",
19
+ xl: "xl",
20
+ xxl: "xxl"
21
+ };
22
+ export function SizedMixin(constructor, {
23
+ validSizes = ["s", "m", "l", "xl"],
24
+ noDefaultSize,
25
+ defaultSize = "m"
26
+ } = {}) {
27
+ class SizedElement extends constructor {
28
+ constructor() {
29
+ super(...arguments);
30
+ this._size = defaultSize;
31
+ }
32
+ get size() {
33
+ return this._size || defaultSize;
34
+ }
35
+ set size(value) {
36
+ const fallbackSize = noDefaultSize ? null : defaultSize;
37
+ const size = value ? value.toLocaleLowerCase() : value;
38
+ const validSize = validSizes.includes(size) ? size : fallbackSize;
39
+ if (validSize) {
40
+ this.setAttribute("size", validSize);
41
+ }
42
+ if (this._size === validSize) {
43
+ return;
44
+ }
45
+ const oldSize = this._size;
46
+ this._size = validSize;
47
+ this.requestUpdate("size", oldSize);
48
+ }
49
+ update(changes) {
50
+ if (!this.hasAttribute("size") && !noDefaultSize) {
51
+ this.setAttribute("size", this.size);
52
+ }
53
+ super.update(changes);
54
+ }
55
+ }
56
+ __decorateClass([
57
+ property({ type: String })
58
+ ], SizedElement.prototype, "size", 1);
59
+ return SizedElement;
60
+ }
61
+ //# sourceMappingURL=sizedMixin.dev.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["sizedMixin.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { PropertyValues, ReactiveElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\ntype Constructor<T = Record<string, unknown>> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: T;\n};\n\nexport type ElementSize = 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';\nexport const ElementSizes: Record<string, ElementSize> = {\n xxs: 'xxs',\n xs: 'xs',\n s: 's',\n m: 'm',\n l: 'l',\n xl: 'xl',\n xxl: 'xxl',\n};\nexport type DefaultElementSize = Exclude<ElementSize, 'xxs' | 'xs' | 'xxl'>;\n\nexport interface SizedElementInterface {\n size: ElementSize;\n}\n\nexport function SizedMixin<T extends Constructor<ReactiveElement>>(\n constructor: T,\n {\n validSizes = ['s', 'm', 'l', 'xl'],\n noDefaultSize,\n defaultSize = 'm',\n }: {\n validSizes?: ElementSize[];\n noDefaultSize?: boolean;\n defaultSize?: ElementSize;\n } = {}\n): T & Constructor<SizedElementInterface> {\n class SizedElement extends constructor {\n @property({ type: String })\n public get size(): ElementSize {\n return this._size || defaultSize;\n }\n\n public set size(value: ElementSize) {\n const fallbackSize = noDefaultSize ? null : defaultSize;\n const size = (\n value ? value.toLocaleLowerCase() : value\n ) as ElementSize;\n const validSize = (\n validSizes.includes(size) ? size : fallbackSize\n ) as ElementSize;\n if (validSize) {\n this.setAttribute('size', validSize);\n }\n if (this._size === validSize) {\n return;\n }\n const oldSize = this._size;\n this._size = validSize;\n this.requestUpdate('size', oldSize);\n }\n\n private _size: ElementSize | null = defaultSize;\n\n protected override update(changes: PropertyValues): void {\n if (!this.hasAttribute('size') && !noDefaultSize) {\n this.setAttribute('size', this.size);\n }\n super.update(changes);\n }\n }\n return SizedElement;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;AAYA,SAAS,gBAAgB;AASlB,aAAM,eAA4C;AAAA,EACrD,KAAK;AAAA,EACL,IAAI;AAAA,EACJ,GAAG;AAAA,EACH,GAAG;AAAA,EACH,GAAG;AAAA,EACH,IAAI;AAAA,EACJ,KAAK;AACT;AAOO,gBAAS,WACZ,aACA;AAAA,EACI,aAAa,CAAC,KAAK,KAAK,KAAK,IAAI;AAAA,EACjC;AAAA,EACA,cAAc;AAClB,IAII,CAAC,GACiC;AAAA,EACtC,MAAM,qBAAqB,YAAY;AAAA,IAAvC;AAAA;AAyBI,WAAQ,QAA4B;AAAA;AAAA,IAvBpC,IAAW,OAAoB;AAC3B,aAAO,KAAK,SAAS;AAAA,IACzB;AAAA,IAEA,IAAW,KAAK,OAAoB;AAChC,YAAM,eAAe,gBAAgB,OAAO;AAC5C,YAAM,OACF,QAAQ,MAAM,kBAAkB,IAAI;AAExC,YAAM,YACF,WAAW,SAAS,IAAI,IAAI,OAAO;AAEvC,UAAI,WAAW;AACX,aAAK,aAAa,QAAQ,SAAS;AAAA,MACvC;AACA,UAAI,KAAK,UAAU,WAAW;AAC1B;AAAA,MACJ;AACA,YAAM,UAAU,KAAK;AACrB,WAAK,QAAQ;AACb,WAAK,cAAc,QAAQ,OAAO;AAAA,IACtC;AAAA,IAImB,OAAO,SAA+B;AACrD,UAAI,CAAC,KAAK,aAAa,MAAM,KAAK,CAAC,eAAe;AAC9C,aAAK,aAAa,QAAQ,KAAK,IAAI;AAAA,MACvC;AACA,YAAM,OAAO,OAAO;AAAA,IACxB;AAAA,EACJ;AA/Be;AAAA,IADV,SAAS,EAAE,MAAM,OAAO,CAAC;AAAA,KADxB,aAES;AAgCf,SAAO;AACX;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";var a=Object.defineProperty;var u=Object.getOwnPropertyDescriptor;var m=(r,i,s,t)=>{for(var e=t>1?void 0:t?u(i,s):i,l=r.length-1,o;l>=0;l--)(o=r[l])&&(e=(t?o(i,s,e):o(e))||e);return t&&e&&a(i,s,e),e};import{property as S}from"lit/decorators.js";export const ElementSizes={xxs:"xxs",xs:"xs",s:"s",m:"m",l:"l",xl:"xl",xxl:"xxl"};export function SizedMixin(r,{validSizes:i=["s","m","l","xl"],noDefaultSize:s,defaultSize:t="m"}={}){class e extends r{constructor(){super(...arguments);this._size=t}get size(){return this._size||t}set size(n){const p=s?null:t,z=n&&n.toLocaleLowerCase(),x=i.includes(z)?z:p;if(x&&this.setAttribute("size",x),this._size===x)return;const c=this._size;this._size=x,this.requestUpdate("size",c)}update(n){!this.hasAttribute("size")&&!s&&this.setAttribute("size",this.size),super.update(n)}}return m([S({type:String})],e.prototype,"size",1),e}
2
+ //# sourceMappingURL=sizedMixin.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["sizedMixin.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { PropertyValues, ReactiveElement } from 'lit';\nimport { property } from 'lit/decorators.js';\n\ntype Constructor<T = Record<string, unknown>> = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n new (...args: any[]): T;\n prototype: T;\n};\n\nexport type ElementSize = 'xxs' | 'xs' | 's' | 'm' | 'l' | 'xl' | 'xxl';\nexport const ElementSizes: Record<string, ElementSize> = {\n xxs: 'xxs',\n xs: 'xs',\n s: 's',\n m: 'm',\n l: 'l',\n xl: 'xl',\n xxl: 'xxl',\n};\nexport type DefaultElementSize = Exclude<ElementSize, 'xxs' | 'xs' | 'xxl'>;\n\nexport interface SizedElementInterface {\n size: ElementSize;\n}\n\nexport function SizedMixin<T extends Constructor<ReactiveElement>>(\n constructor: T,\n {\n validSizes = ['s', 'm', 'l', 'xl'],\n noDefaultSize,\n defaultSize = 'm',\n }: {\n validSizes?: ElementSize[];\n noDefaultSize?: boolean;\n defaultSize?: ElementSize;\n } = {}\n): T & Constructor<SizedElementInterface> {\n class SizedElement extends constructor {\n @property({ type: String })\n public get size(): ElementSize {\n return this._size || defaultSize;\n }\n\n public set size(value: ElementSize) {\n const fallbackSize = noDefaultSize ? null : defaultSize;\n const size = (\n value ? value.toLocaleLowerCase() : value\n ) as ElementSize;\n const validSize = (\n validSizes.includes(size) ? size : fallbackSize\n ) as ElementSize;\n if (validSize) {\n this.setAttribute('size', validSize);\n }\n if (this._size === validSize) {\n return;\n }\n const oldSize = this._size;\n this._size = validSize;\n this.requestUpdate('size', oldSize);\n }\n\n private _size: ElementSize | null = defaultSize;\n\n protected override update(changes: PropertyValues): void {\n if (!this.hasAttribute('size') && !noDefaultSize) {\n this.setAttribute('size', this.size);\n }\n super.update(changes);\n }\n }\n return SizedElement;\n}\n"],
5
+ "mappings": "qNAYA,OAAS,YAAAA,MAAgB,oBASlB,aAAM,aAA4C,CACrD,IAAK,MACL,GAAI,KACJ,EAAG,IACH,EAAG,IACH,EAAG,IACH,GAAI,KACJ,IAAK,KACT,EAOO,gBAAS,WACZC,EACA,CACI,WAAAC,EAAa,CAAC,IAAK,IAAK,IAAK,IAAI,EACjC,cAAAC,EACA,YAAAC,EAAc,GAClB,EAII,CAAC,EACiC,CACtC,MAAMC,UAAqBJ,CAAY,CAAvC,kCAyBI,KAAQ,MAA4BG,EAvBpC,IAAW,MAAoB,CAC3B,OAAO,KAAK,OAASA,CACzB,CAEA,IAAW,KAAKE,EAAoB,CAChC,MAAMC,EAAeJ,EAAgB,KAAOC,EACtCI,EACFF,GAAQA,EAAM,kBAAkB,EAE9BG,EACFP,EAAW,SAASM,CAAI,EAAIA,EAAOD,EAKvC,GAHIE,GACA,KAAK,aAAa,OAAQA,CAAS,EAEnC,KAAK,QAAUA,EACf,OAEJ,MAAMC,EAAU,KAAK,MACrB,KAAK,MAAQD,EACb,KAAK,cAAc,OAAQC,CAAO,CACtC,CAImB,OAAOC,EAA+B,CACjD,CAAC,KAAK,aAAa,MAAM,GAAK,CAACR,GAC/B,KAAK,aAAa,OAAQ,KAAK,IAAI,EAEvC,MAAM,OAAOQ,CAAO,CACxB,CACJ,CA/Be,OAAAC,EAAA,CADVZ,EAAS,CAAE,KAAM,MAAO,CAAC,GADxBK,EAES,oBAgCRA,CACX",
6
+ "names": ["property", "constructor", "validSizes", "noDefaultSize", "defaultSize", "SizedElement", "value", "fallbackSize", "size", "validSize", "oldSize", "changes", "__decorateClass"]
7
+ }
@@ -0,0 +1,48 @@
1
+ import { nothing, Part } from 'lit';
2
+ import { AsyncDirective } from 'lit/async-directive.js';
3
+ import type { DirectiveResult } from 'lit/directive.js';
4
+ type ListenerConfig = [string | string[], (event?: any) => void];
5
+ type ListenerConfigGroup = {
6
+ start: ListenerConfig;
7
+ end: ListenerConfig;
8
+ streamInside?: ListenerConfig;
9
+ streamOutside?: ListenerConfig;
10
+ };
11
+ /**
12
+ * Performantly manage listening to event in a series, like:
13
+ * - `input[type="range"]`: input, input, etc. => change
14
+ * - `sp-color-area`: pointerdown => pointermove, pointermove, etc. => pointerup
15
+ * Lazily bind events to the specific part of the series while
16
+ * throttling streamed events to 1/frame.
17
+ */
18
+ declare class StreamingListenerDirective extends AsyncDirective {
19
+ host: EventTarget | Record<string, unknown> | Element;
20
+ element: Element;
21
+ start: ListenerConfig;
22
+ streamInside: ListenerConfig;
23
+ end: ListenerConfig;
24
+ streamOutside: ListenerConfig;
25
+ state: 'off' | 'on';
26
+ stream?: number;
27
+ render(_configGroup: ListenerConfigGroup): typeof nothing;
28
+ update(part: Part, [{ start, end, streamInside, streamOutside, },]: Parameters<this['render']>): void;
29
+ addListeners(state?: 'on' | 'off'): void;
30
+ callHandler(value: (event: Event) => void | EventListenerObject, event: Event): void;
31
+ handleStream(value: (event: Event) => void | EventListenerObject, event: Event): void;
32
+ clearStream(): void;
33
+ handleStart: (event: Event) => void;
34
+ handleInside: (event: Event) => void;
35
+ handleEnd: (event: Event) => void;
36
+ handleOutside: (event: Event) => void;
37
+ addListener(type: string | string[], fn: (event: Event) => void): void;
38
+ removeListener(type: string | string[], fn: (event: Event) => void): void;
39
+ removeListeners(): void;
40
+ disconnected(): void;
41
+ reconnected(): void;
42
+ }
43
+ export declare const streamingListener: (_configGroup: ListenerConfigGroup) => DirectiveResult<typeof StreamingListenerDirective>;
44
+ /**
45
+ * The type of the class that powers this directive. Necessary for naming the
46
+ * directive's return type.
47
+ */
48
+ export type { StreamingListenerDirective };
@@ -0,0 +1,133 @@
1
+ "use strict";
2
+ import { nothing } from "lit";
3
+ import { AsyncDirective, directive } from "lit/async-directive.js";
4
+ const defaultListener = [
5
+ "",
6
+ () => {
7
+ return;
8
+ }
9
+ ];
10
+ class StreamingListenerDirective extends AsyncDirective {
11
+ constructor() {
12
+ super(...arguments);
13
+ this.start = defaultListener;
14
+ this.streamInside = defaultListener;
15
+ this.end = defaultListener;
16
+ this.streamOutside = defaultListener;
17
+ this.state = "off";
18
+ this.handleStart = (event) => {
19
+ this.clearStream();
20
+ this.callHandler(this.start[1], event);
21
+ if (event.defaultPrevented) {
22
+ return;
23
+ }
24
+ this.removeListeners();
25
+ this.addListeners("on");
26
+ };
27
+ this.handleInside = (event) => {
28
+ this.handleStream(this.streamInside[1], event);
29
+ };
30
+ this.handleEnd = (event) => {
31
+ this.clearStream();
32
+ this.callHandler(this.end[1], event);
33
+ this.removeListeners();
34
+ this.addListeners("off");
35
+ };
36
+ /* c8 ignore next 3 */
37
+ this.handleOutside = (event) => {
38
+ this.handleStream(this.streamOutside[1], event);
39
+ };
40
+ }
41
+ /* c8 ignore next 4 */
42
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
43
+ render(_configGroup) {
44
+ return nothing;
45
+ }
46
+ update(part, [
47
+ {
48
+ start,
49
+ end,
50
+ streamInside = defaultListener,
51
+ streamOutside = defaultListener
52
+ }
53
+ ]) {
54
+ var _a;
55
+ if (this.element !== part.element) {
56
+ this.element = part.element;
57
+ this.removeListeners();
58
+ }
59
+ this.host = ((_a = part.options) == null ? void 0 : _a.host) || this.element;
60
+ this.start = start;
61
+ this.end = end;
62
+ this.streamInside = streamInside;
63
+ this.streamOutside = streamOutside;
64
+ this.addListeners();
65
+ }
66
+ addListeners(state) {
67
+ this.state = state || this.state;
68
+ if (this.state === "off") {
69
+ this.addListener(this.streamOutside[0], this.handleOutside);
70
+ this.addListener(this.start[0], this.handleStart);
71
+ } else if (this.state === "on") {
72
+ this.addListener(this.streamInside[0], this.handleInside);
73
+ this.addListener(this.end[0], this.handleEnd);
74
+ }
75
+ }
76
+ callHandler(value, event) {
77
+ if (typeof value === "function") {
78
+ value.call(this.host, event);
79
+ } else {
80
+ value.handleEvent(event);
81
+ }
82
+ }
83
+ handleStream(value, event) {
84
+ if (this.stream) {
85
+ return;
86
+ }
87
+ this.callHandler(value, event);
88
+ this.stream = requestAnimationFrame(() => {
89
+ this.stream = void 0;
90
+ });
91
+ }
92
+ clearStream() {
93
+ if (this.stream != null) {
94
+ cancelAnimationFrame(this.stream);
95
+ this.stream = void 0;
96
+ }
97
+ }
98
+ addListener(type, fn) {
99
+ if (Array.isArray(type)) {
100
+ type.map((eventName) => {
101
+ this.element.addEventListener(eventName, fn);
102
+ });
103
+ } else {
104
+ this.element.addEventListener(type, fn);
105
+ }
106
+ }
107
+ removeListener(type, fn) {
108
+ if (Array.isArray(type)) {
109
+ type.map((eventName) => {
110
+ this.element.removeEventListener(eventName, fn);
111
+ });
112
+ } else {
113
+ this.element.removeEventListener(type, fn);
114
+ }
115
+ }
116
+ removeListeners() {
117
+ this.removeListener(this.start[0], this.handleStart);
118
+ this.removeListener(this.streamInside[0], this.handleInside);
119
+ this.removeListener(this.end[0], this.handleEnd);
120
+ this.removeListener(this.streamOutside[0], this.handleOutside);
121
+ }
122
+ disconnected() {
123
+ this.removeListeners();
124
+ }
125
+ /* c8 ignore next 3 */
126
+ reconnected() {
127
+ this.addListeners();
128
+ }
129
+ }
130
+ export const streamingListener = directive(
131
+ StreamingListenerDirective
132
+ );
133
+ //# sourceMappingURL=streaming-listener.dev.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["streaming-listener.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { ElementPart, nothing, Part } from 'lit';\nimport { AsyncDirective, directive } from 'lit/async-directive.js';\nimport type { DirectiveResult } from 'lit/directive.js';\n\ntype ListenerConfig = [string | string[], (event?: any) => void];\ntype ListenerConfigGroup = {\n start: ListenerConfig;\n end: ListenerConfig;\n streamInside?: ListenerConfig;\n streamOutside?: ListenerConfig;\n};\n\n/* c8 ignore next 6 */\nconst defaultListener: ListenerConfig = [\n '',\n (): void => {\n return;\n },\n];\n\n/**\n * Performantly manage listening to event in a series, like:\n * - `input[type=\"range\"]`: input, input, etc. => change\n * - `sp-color-area`: pointerdown => pointermove, pointermove, etc. => pointerup\n * Lazily bind events to the specific part of the series while\n * throttling streamed events to 1/frame.\n */\nclass StreamingListenerDirective extends AsyncDirective {\n host!: EventTarget | Record<string, unknown> | Element;\n element!: Element;\n\n start: ListenerConfig = defaultListener;\n streamInside: ListenerConfig = defaultListener;\n end: ListenerConfig = defaultListener;\n streamOutside: ListenerConfig = defaultListener;\n\n state: 'off' | 'on' = 'off';\n // Animation frame that will unlock the next \"stream\" event if/when it is dispatched.\n stream?: number;\n\n /* c8 ignore next 4 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(_configGroup: ListenerConfigGroup): typeof nothing {\n return nothing;\n }\n\n override update(\n part: Part,\n [\n {\n start,\n end,\n streamInside = defaultListener,\n streamOutside = defaultListener,\n },\n ]: Parameters<this['render']>\n ): void {\n if (this.element !== (part as ElementPart).element) {\n this.element = (part as ElementPart).element;\n this.removeListeners();\n }\n this.host =\n (part.options?.host as Record<string, unknown>) || this.element;\n this.start = start;\n this.end = end;\n this.streamInside = streamInside;\n this.streamOutside = streamOutside;\n this.addListeners();\n }\n\n addListeners(state?: 'on' | 'off'): void {\n this.state = state || this.state;\n if (this.state === 'off') {\n this.addListener(this.streamOutside[0], this.handleOutside);\n this.addListener(this.start[0], this.handleStart);\n } else if (this.state === 'on') {\n this.addListener(this.streamInside[0], this.handleInside);\n this.addListener(this.end[0], this.handleEnd);\n }\n }\n\n callHandler(\n value: (event: Event) => void | EventListenerObject,\n event: Event\n ): void {\n if (typeof value === 'function') {\n (value as (event: Event) => void).call(this.host, event);\n } else {\n (value as EventListenerObject).handleEvent(event);\n }\n }\n\n handleStream(\n value: (event: Event) => void | EventListenerObject,\n event: Event\n ): void {\n if (this.stream) {\n return;\n }\n this.callHandler(value, event);\n this.stream = requestAnimationFrame(() => {\n this.stream = undefined;\n });\n }\n\n clearStream(): void {\n if (this.stream != null) {\n // Ensure steam events NEVER go after a start or event event.\n cancelAnimationFrame(this.stream);\n this.stream = undefined;\n }\n }\n\n handleStart = (event: Event): void => {\n this.clearStream();\n this.callHandler(this.start[1], event);\n if (event.defaultPrevented) {\n return;\n }\n this.removeListeners();\n this.addListeners('on');\n };\n\n handleInside = (event: Event): void => {\n this.handleStream(this.streamInside[1], event);\n };\n\n handleEnd = (event: Event): void => {\n this.clearStream();\n this.callHandler(this.end[1], event);\n this.removeListeners();\n this.addListeners('off');\n };\n\n /* c8 ignore next 3 */\n handleOutside = (event: Event): void => {\n this.handleStream(this.streamOutside[1], event);\n };\n\n addListener(type: string | string[], fn: (event: Event) => void): void {\n if (Array.isArray(type)) {\n type.map((eventName) => {\n this.element.addEventListener(eventName, fn);\n });\n } else {\n this.element.addEventListener(type, fn);\n }\n }\n\n removeListener(type: string | string[], fn: (event: Event) => void): void {\n if (Array.isArray(type)) {\n type.map((eventName) => {\n this.element.removeEventListener(eventName, fn);\n });\n } else {\n this.element.removeEventListener(type, fn);\n }\n }\n\n removeListeners(): void {\n this.removeListener(this.start[0], this.handleStart);\n this.removeListener(this.streamInside[0], this.handleInside);\n this.removeListener(this.end[0], this.handleEnd);\n this.removeListener(this.streamOutside[0], this.handleOutside);\n }\n\n override disconnected(): void {\n this.removeListeners();\n }\n\n /* c8 ignore next 3 */\n override reconnected(): void {\n this.addListeners();\n }\n}\n\nexport const streamingListener: (\n _configGroup: ListenerConfigGroup\n) => DirectiveResult<typeof StreamingListenerDirective> = directive(\n StreamingListenerDirective\n);\n\n/**\n * The type of the class that powers this directive. Necessary for naming the\n * directive's return type.\n */\nexport type { StreamingListenerDirective };\n"],
5
+ "mappings": ";AAYA,SAAsB,eAAqB;AAC3C,SAAS,gBAAgB,iBAAiB;AAY1C,MAAM,kBAAkC;AAAA,EACpC;AAAA,EACA,MAAY;AACR;AAAA,EACJ;AACJ;AASA,MAAM,mCAAmC,eAAe;AAAA,EAAxD;AAAA;AAII,iBAAwB;AACxB,wBAA+B;AAC/B,eAAsB;AACtB,yBAAgC;AAEhC,iBAAsB;AA6EtB,uBAAc,CAAC,UAAuB;AAClC,WAAK,YAAY;AACjB,WAAK,YAAY,KAAK,MAAM,CAAC,GAAG,KAAK;AACrC,UAAI,MAAM,kBAAkB;AACxB;AAAA,MACJ;AACA,WAAK,gBAAgB;AACrB,WAAK,aAAa,IAAI;AAAA,IAC1B;AAEA,wBAAe,CAAC,UAAuB;AACnC,WAAK,aAAa,KAAK,aAAa,CAAC,GAAG,KAAK;AAAA,IACjD;AAEA,qBAAY,CAAC,UAAuB;AAChC,WAAK,YAAY;AACjB,WAAK,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK;AACnC,WAAK,gBAAgB;AACrB,WAAK,aAAa,KAAK;AAAA,IAC3B;AAGA;AAAA,yBAAgB,CAAC,UAAuB;AACpC,WAAK,aAAa,KAAK,cAAc,CAAC,GAAG,KAAK;AAAA,IAClD;AAAA;AAAA;AAAA;AAAA,EA/FA,OAAO,cAAmD;AACtD,WAAO;AAAA,EACX;AAAA,EAES,OACL,MACA;AAAA,IACI;AAAA,MACI;AAAA,MACA;AAAA,MACA,eAAe;AAAA,MACf,gBAAgB;AAAA,IACpB;AAAA,EACJ,GACI;AApEZ;AAqEQ,QAAI,KAAK,YAAa,KAAqB,SAAS;AAChD,WAAK,UAAW,KAAqB;AACrC,WAAK,gBAAgB;AAAA,IACzB;AACA,SAAK,SACA,UAAK,YAAL,mBAAc,SAAoC,KAAK;AAC5D,SAAK,QAAQ;AACb,SAAK,MAAM;AACX,SAAK,eAAe;AACpB,SAAK,gBAAgB;AACrB,SAAK,aAAa;AAAA,EACtB;AAAA,EAEA,aAAa,OAA4B;AACrC,SAAK,QAAQ,SAAS,KAAK;AAC3B,QAAI,KAAK,UAAU,OAAO;AACtB,WAAK,YAAY,KAAK,cAAc,CAAC,GAAG,KAAK,aAAa;AAC1D,WAAK,YAAY,KAAK,MAAM,CAAC,GAAG,KAAK,WAAW;AAAA,IACpD,WAAW,KAAK,UAAU,MAAM;AAC5B,WAAK,YAAY,KAAK,aAAa,CAAC,GAAG,KAAK,YAAY;AACxD,WAAK,YAAY,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS;AAAA,IAChD;AAAA,EACJ;AAAA,EAEA,YACI,OACA,OACI;AACJ,QAAI,OAAO,UAAU,YAAY;AAC7B,MAAC,MAAiC,KAAK,KAAK,MAAM,KAAK;AAAA,IAC3D,OAAO;AACH,MAAC,MAA8B,YAAY,KAAK;AAAA,IACpD;AAAA,EACJ;AAAA,EAEA,aACI,OACA,OACI;AACJ,QAAI,KAAK,QAAQ;AACb;AAAA,IACJ;AACA,SAAK,YAAY,OAAO,KAAK;AAC7B,SAAK,SAAS,sBAAsB,MAAM;AACtC,WAAK,SAAS;AAAA,IAClB,CAAC;AAAA,EACL;AAAA,EAEA,cAAoB;AAChB,QAAI,KAAK,UAAU,MAAM;AAErB,2BAAqB,KAAK,MAAM;AAChC,WAAK,SAAS;AAAA,IAClB;AAAA,EACJ;AAAA,EA4BA,YAAY,MAAyB,IAAkC;AACnE,QAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAK,IAAI,CAAC,cAAc;AACpB,aAAK,QAAQ,iBAAiB,WAAW,EAAE;AAAA,MAC/C,CAAC;AAAA,IACL,OAAO;AACH,WAAK,QAAQ,iBAAiB,MAAM,EAAE;AAAA,IAC1C;AAAA,EACJ;AAAA,EAEA,eAAe,MAAyB,IAAkC;AACtE,QAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,WAAK,IAAI,CAAC,cAAc;AACpB,aAAK,QAAQ,oBAAoB,WAAW,EAAE;AAAA,MAClD,CAAC;AAAA,IACL,OAAO;AACH,WAAK,QAAQ,oBAAoB,MAAM,EAAE;AAAA,IAC7C;AAAA,EACJ;AAAA,EAEA,kBAAwB;AACpB,SAAK,eAAe,KAAK,MAAM,CAAC,GAAG,KAAK,WAAW;AACnD,SAAK,eAAe,KAAK,aAAa,CAAC,GAAG,KAAK,YAAY;AAC3D,SAAK,eAAe,KAAK,IAAI,CAAC,GAAG,KAAK,SAAS;AAC/C,SAAK,eAAe,KAAK,cAAc,CAAC,GAAG,KAAK,aAAa;AAAA,EACjE;AAAA,EAES,eAAqB;AAC1B,SAAK,gBAAgB;AAAA,EACzB;AAAA;AAAA,EAGS,cAAoB;AACzB,SAAK,aAAa;AAAA,EACtB;AACJ;AAEO,aAAM,oBAE6C;AAAA,EACtD;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";import{nothing as a}from"lit";import{AsyncDirective as o,directive as h}from"lit/async-directive.js";const i=["",()=>{}];class m extends o{constructor(){super(...arguments);this.start=i;this.streamInside=i;this.end=i;this.streamOutside=i;this.state="off";this.handleStart=e=>{this.clearStream(),this.callHandler(this.start[1],e),!e.defaultPrevented&&(this.removeListeners(),this.addListeners("on"))};this.handleInside=e=>{this.handleStream(this.streamInside[1],e)};this.handleEnd=e=>{this.clearStream(),this.callHandler(this.end[1],e),this.removeListeners(),this.addListeners("off")};this.handleOutside=e=>{this.handleStream(this.streamOutside[1],e)}}render(e){return a}update(e,[{start:t,end:s,streamInside:r=i,streamOutside:d=i}]){var n;this.element!==e.element&&(this.element=e.element,this.removeListeners()),this.host=((n=e.options)==null?void 0:n.host)||this.element,this.start=t,this.end=s,this.streamInside=r,this.streamOutside=d,this.addListeners()}addListeners(e){this.state=e||this.state,this.state==="off"?(this.addListener(this.streamOutside[0],this.handleOutside),this.addListener(this.start[0],this.handleStart)):this.state==="on"&&(this.addListener(this.streamInside[0],this.handleInside),this.addListener(this.end[0],this.handleEnd))}callHandler(e,t){typeof e=="function"?e.call(this.host,t):e.handleEvent(t)}handleStream(e,t){this.stream||(this.callHandler(e,t),this.stream=requestAnimationFrame(()=>{this.stream=void 0}))}clearStream(){this.stream!=null&&(cancelAnimationFrame(this.stream),this.stream=void 0)}addListener(e,t){Array.isArray(e)?e.map(s=>{this.element.addEventListener(s,t)}):this.element.addEventListener(e,t)}removeListener(e,t){Array.isArray(e)?e.map(s=>{this.element.removeEventListener(s,t)}):this.element.removeEventListener(e,t)}removeListeners(){this.removeListener(this.start[0],this.handleStart),this.removeListener(this.streamInside[0],this.handleInside),this.removeListener(this.end[0],this.handleEnd),this.removeListener(this.streamOutside[0],this.handleOutside)}disconnected(){this.removeListeners()}reconnected(){this.addListeners()}}export const streamingListener=h(m);
2
+ //# sourceMappingURL=streaming-listener.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["streaming-listener.ts"],
4
+ "sourcesContent": ["/* eslint-disable @typescript-eslint/no-explicit-any */\n/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software distributed under\nthe License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\nOF ANY KIND, either express or implied. See the License for the specific language\ngoverning permissions and limitations under the License.\n*/\nimport { ElementPart, nothing, Part } from 'lit';\nimport { AsyncDirective, directive } from 'lit/async-directive.js';\nimport type { DirectiveResult } from 'lit/directive.js';\n\ntype ListenerConfig = [string | string[], (event?: any) => void];\ntype ListenerConfigGroup = {\n start: ListenerConfig;\n end: ListenerConfig;\n streamInside?: ListenerConfig;\n streamOutside?: ListenerConfig;\n};\n\n/* c8 ignore next 6 */\nconst defaultListener: ListenerConfig = [\n '',\n (): void => {\n return;\n },\n];\n\n/**\n * Performantly manage listening to event in a series, like:\n * - `input[type=\"range\"]`: input, input, etc. => change\n * - `sp-color-area`: pointerdown => pointermove, pointermove, etc. => pointerup\n * Lazily bind events to the specific part of the series while\n * throttling streamed events to 1/frame.\n */\nclass StreamingListenerDirective extends AsyncDirective {\n host!: EventTarget | Record<string, unknown> | Element;\n element!: Element;\n\n start: ListenerConfig = defaultListener;\n streamInside: ListenerConfig = defaultListener;\n end: ListenerConfig = defaultListener;\n streamOutside: ListenerConfig = defaultListener;\n\n state: 'off' | 'on' = 'off';\n // Animation frame that will unlock the next \"stream\" event if/when it is dispatched.\n stream?: number;\n\n /* c8 ignore next 4 */\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n render(_configGroup: ListenerConfigGroup): typeof nothing {\n return nothing;\n }\n\n override update(\n part: Part,\n [\n {\n start,\n end,\n streamInside = defaultListener,\n streamOutside = defaultListener,\n },\n ]: Parameters<this['render']>\n ): void {\n if (this.element !== (part as ElementPart).element) {\n this.element = (part as ElementPart).element;\n this.removeListeners();\n }\n this.host =\n (part.options?.host as Record<string, unknown>) || this.element;\n this.start = start;\n this.end = end;\n this.streamInside = streamInside;\n this.streamOutside = streamOutside;\n this.addListeners();\n }\n\n addListeners(state?: 'on' | 'off'): void {\n this.state = state || this.state;\n if (this.state === 'off') {\n this.addListener(this.streamOutside[0], this.handleOutside);\n this.addListener(this.start[0], this.handleStart);\n } else if (this.state === 'on') {\n this.addListener(this.streamInside[0], this.handleInside);\n this.addListener(this.end[0], this.handleEnd);\n }\n }\n\n callHandler(\n value: (event: Event) => void | EventListenerObject,\n event: Event\n ): void {\n if (typeof value === 'function') {\n (value as (event: Event) => void).call(this.host, event);\n } else {\n (value as EventListenerObject).handleEvent(event);\n }\n }\n\n handleStream(\n value: (event: Event) => void | EventListenerObject,\n event: Event\n ): void {\n if (this.stream) {\n return;\n }\n this.callHandler(value, event);\n this.stream = requestAnimationFrame(() => {\n this.stream = undefined;\n });\n }\n\n clearStream(): void {\n if (this.stream != null) {\n // Ensure steam events NEVER go after a start or event event.\n cancelAnimationFrame(this.stream);\n this.stream = undefined;\n }\n }\n\n handleStart = (event: Event): void => {\n this.clearStream();\n this.callHandler(this.start[1], event);\n if (event.defaultPrevented) {\n return;\n }\n this.removeListeners();\n this.addListeners('on');\n };\n\n handleInside = (event: Event): void => {\n this.handleStream(this.streamInside[1], event);\n };\n\n handleEnd = (event: Event): void => {\n this.clearStream();\n this.callHandler(this.end[1], event);\n this.removeListeners();\n this.addListeners('off');\n };\n\n /* c8 ignore next 3 */\n handleOutside = (event: Event): void => {\n this.handleStream(this.streamOutside[1], event);\n };\n\n addListener(type: string | string[], fn: (event: Event) => void): void {\n if (Array.isArray(type)) {\n type.map((eventName) => {\n this.element.addEventListener(eventName, fn);\n });\n } else {\n this.element.addEventListener(type, fn);\n }\n }\n\n removeListener(type: string | string[], fn: (event: Event) => void): void {\n if (Array.isArray(type)) {\n type.map((eventName) => {\n this.element.removeEventListener(eventName, fn);\n });\n } else {\n this.element.removeEventListener(type, fn);\n }\n }\n\n removeListeners(): void {\n this.removeListener(this.start[0], this.handleStart);\n this.removeListener(this.streamInside[0], this.handleInside);\n this.removeListener(this.end[0], this.handleEnd);\n this.removeListener(this.streamOutside[0], this.handleOutside);\n }\n\n override disconnected(): void {\n this.removeListeners();\n }\n\n /* c8 ignore next 3 */\n override reconnected(): void {\n this.addListeners();\n }\n}\n\nexport const streamingListener: (\n _configGroup: ListenerConfigGroup\n) => DirectiveResult<typeof StreamingListenerDirective> = directive(\n StreamingListenerDirective\n);\n\n/**\n * The type of the class that powers this directive. Necessary for naming the\n * directive's return type.\n */\nexport type { StreamingListenerDirective };\n"],
5
+ "mappings": "aAYA,OAAsB,WAAAA,MAAqB,MAC3C,OAAS,kBAAAC,EAAgB,aAAAC,MAAiB,yBAY1C,MAAMC,EAAkC,CACpC,GACA,IAAY,CAEZ,CACJ,EASA,MAAMC,UAAmCH,CAAe,CAAxD,kCAII,WAAwBE,EACxB,kBAA+BA,EAC/B,SAAsBA,EACtB,mBAAgCA,EAEhC,WAAsB,MA6EtB,iBAAeE,GAAuB,CAClC,KAAK,YAAY,EACjB,KAAK,YAAY,KAAK,MAAM,CAAC,EAAGA,CAAK,EACjC,CAAAA,EAAM,mBAGV,KAAK,gBAAgB,EACrB,KAAK,aAAa,IAAI,EAC1B,EAEA,kBAAgBA,GAAuB,CACnC,KAAK,aAAa,KAAK,aAAa,CAAC,EAAGA,CAAK,CACjD,EAEA,eAAaA,GAAuB,CAChC,KAAK,YAAY,EACjB,KAAK,YAAY,KAAK,IAAI,CAAC,EAAGA,CAAK,EACnC,KAAK,gBAAgB,EACrB,KAAK,aAAa,KAAK,CAC3B,EAGA,mBAAiBA,GAAuB,CACpC,KAAK,aAAa,KAAK,cAAc,CAAC,EAAGA,CAAK,CAClD,EA/FA,OAAOC,EAAmD,CACtD,OAAON,CACX,CAES,OACLO,EACA,CACI,CACI,MAAAC,EACA,IAAAC,EACA,aAAAC,EAAeP,EACf,cAAAQ,EAAgBR,CACpB,CACJ,EACI,CApEZ,IAAAS,EAqEY,KAAK,UAAaL,EAAqB,UACvC,KAAK,QAAWA,EAAqB,QACrC,KAAK,gBAAgB,GAEzB,KAAK,OACAK,EAAAL,EAAK,UAAL,YAAAK,EAAc,OAAoC,KAAK,QAC5D,KAAK,MAAQJ,EACb,KAAK,IAAMC,EACX,KAAK,aAAeC,EACpB,KAAK,cAAgBC,EACrB,KAAK,aAAa,CACtB,CAEA,aAAaE,EAA4B,CACrC,KAAK,MAAQA,GAAS,KAAK,MACvB,KAAK,QAAU,OACf,KAAK,YAAY,KAAK,cAAc,CAAC,EAAG,KAAK,aAAa,EAC1D,KAAK,YAAY,KAAK,MAAM,CAAC,EAAG,KAAK,WAAW,GACzC,KAAK,QAAU,OACtB,KAAK,YAAY,KAAK,aAAa,CAAC,EAAG,KAAK,YAAY,EACxD,KAAK,YAAY,KAAK,IAAI,CAAC,EAAG,KAAK,SAAS,EAEpD,CAEA,YACIC,EACAT,EACI,CACA,OAAOS,GAAU,WAChBA,EAAiC,KAAK,KAAK,KAAMT,CAAK,EAEtDS,EAA8B,YAAYT,CAAK,CAExD,CAEA,aACIS,EACAT,EACI,CACA,KAAK,SAGT,KAAK,YAAYS,EAAOT,CAAK,EAC7B,KAAK,OAAS,sBAAsB,IAAM,CACtC,KAAK,OAAS,MAClB,CAAC,EACL,CAEA,aAAoB,CACZ,KAAK,QAAU,OAEf,qBAAqB,KAAK,MAAM,EAChC,KAAK,OAAS,OAEtB,CA4BA,YAAYU,EAAyBC,EAAkC,CAC/D,MAAM,QAAQD,CAAI,EAClBA,EAAK,IAAKE,GAAc,CACpB,KAAK,QAAQ,iBAAiBA,EAAWD,CAAE,CAC/C,CAAC,EAED,KAAK,QAAQ,iBAAiBD,EAAMC,CAAE,CAE9C,CAEA,eAAeD,EAAyBC,EAAkC,CAClE,MAAM,QAAQD,CAAI,EAClBA,EAAK,IAAKE,GAAc,CACpB,KAAK,QAAQ,oBAAoBA,EAAWD,CAAE,CAClD,CAAC,EAED,KAAK,QAAQ,oBAAoBD,EAAMC,CAAE,CAEjD,CAEA,iBAAwB,CACpB,KAAK,eAAe,KAAK,MAAM,CAAC,EAAG,KAAK,WAAW,EACnD,KAAK,eAAe,KAAK,aAAa,CAAC,EAAG,KAAK,YAAY,EAC3D,KAAK,eAAe,KAAK,IAAI,CAAC,EAAG,KAAK,SAAS,EAC/C,KAAK,eAAe,KAAK,cAAc,CAAC,EAAG,KAAK,aAAa,CACjE,CAES,cAAqB,CAC1B,KAAK,gBAAgB,CACzB,CAGS,aAAoB,CACzB,KAAK,aAAa,CACtB,CACJ,CAEO,aAAM,kBAE6Cd,EACtDE,CACJ",
6
+ "names": ["nothing", "AsyncDirective", "directive", "defaultListener", "StreamingListenerDirective", "event", "_configGroup", "part", "start", "end", "streamInside", "streamOutside", "_a", "state", "value", "type", "fn", "eventName"]
7
+ }
package/src/version.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // Generated by genversion.
2
- export const version = '1.0.3';
2
+ export const version = '1.1.1';
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ import { expect } from "@open-wc/testing";
3
+ import { stub } from "sinon";
4
+ describe("Dev Mode", () => {
5
+ let consoleWarnStub;
6
+ before(() => {
7
+ window.__swc = {
8
+ ...window.__swc,
9
+ verbose: true
10
+ };
11
+ consoleWarnStub = stub(console, "warn");
12
+ });
13
+ afterEach(() => {
14
+ consoleWarnStub.resetHistory();
15
+ });
16
+ after(() => {
17
+ consoleWarnStub.restore();
18
+ });
19
+ it("announces that Dev Mode is on", async function() {
20
+ const { SpectrumElement } = await import("@spectrum-web-components/base");
21
+ expect(SpectrumElement).to.not.be.undefined;
22
+ expect(consoleWarnStub.called).to.be.true;
23
+ const spyCall = consoleWarnStub.getCall(0);
24
+ expect(
25
+ spyCall.args.at(0),
26
+ 'confirm "dev mode"-centric message'
27
+ ).to.include("dev mode");
28
+ expect(spyCall.args.at(-1), "confirm `data` shape").to.deep.equal({
29
+ data: {
30
+ localName: "base",
31
+ type: "default",
32
+ level: "default"
33
+ }
34
+ });
35
+ });
36
+ });
37
+ //# sourceMappingURL=base-devmode.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["base-devmode.test.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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*/\nimport { expect } from '@open-wc/testing';\nimport { stub } from 'sinon';\n\ndescribe('Dev Mode', () => {\n let consoleWarnStub!: ReturnType<typeof stub>;\n before(() => {\n window.__swc = {\n ...window.__swc,\n verbose: true,\n };\n consoleWarnStub = stub(console, 'warn');\n });\n afterEach(() => {\n consoleWarnStub.resetHistory();\n });\n after(() => {\n consoleWarnStub.restore();\n });\n it('announces that Dev Mode is on', async function () {\n const { SpectrumElement } = await import(\n '@spectrum-web-components/base'\n );\n expect(SpectrumElement).to.not.be.undefined;\n\n expect(consoleWarnStub.called).to.be.true;\n const spyCall = consoleWarnStub.getCall(0);\n expect(\n spyCall.args.at(0) as string,\n 'confirm \"dev mode\"-centric message'\n ).to.include('dev mode');\n expect(spyCall.args.at(-1), 'confirm `data` shape').to.deep.equal({\n data: {\n localName: 'base',\n type: 'default',\n level: 'default',\n },\n });\n });\n});\n"],
5
+ "mappings": ";AAUA,SAAS,cAAc;AACvB,SAAS,YAAY;AAErB,SAAS,YAAY,MAAM;AACvB,MAAI;AACJ,SAAO,MAAM;AACT,WAAO,QAAQ;AAAA,MACX,GAAG,OAAO;AAAA,MACV,SAAS;AAAA,IACb;AACA,sBAAkB,KAAK,SAAS,MAAM;AAAA,EAC1C,CAAC;AACD,YAAU,MAAM;AACZ,oBAAgB,aAAa;AAAA,EACjC,CAAC;AACD,QAAM,MAAM;AACR,oBAAgB,QAAQ;AAAA,EAC5B,CAAC;AACD,KAAG,iCAAiC,iBAAkB;AAClD,UAAM,EAAE,gBAAgB,IAAI,MAAM,OAC9B,+BACJ;AACA,WAAO,eAAe,EAAE,GAAG,IAAI,GAAG;AAElC,WAAO,gBAAgB,MAAM,EAAE,GAAG,GAAG;AACrC,UAAM,UAAU,gBAAgB,QAAQ,CAAC;AACzC;AAAA,MACI,QAAQ,KAAK,GAAG,CAAC;AAAA,MACjB;AAAA,IACJ,EAAE,GAAG,QAAQ,UAAU;AACvB,WAAO,QAAQ,KAAK,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,KAAK,MAAM;AAAA,MAC9D,MAAM;AAAA,QACF,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,MACX;AAAA,IACJ,CAAC;AAAA,EACL,CAAC;AACL,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ import { SpectrumElement } from "@spectrum-web-components/base";
3
+ import { elementUpdated, expect, fixture, html } from "@open-wc/testing";
4
+ import { version } from "@spectrum-web-components/base/src/version.js";
5
+ class DirElement extends SpectrumElement {
6
+ }
7
+ customElements.define("dir-element", DirElement);
8
+ describe("Base", () => {
9
+ after(() => {
10
+ document.dir = "";
11
+ });
12
+ it("sets `dir` from `document`", async () => {
13
+ document.dir = "rtl";
14
+ const el = await fixture(
15
+ html`
16
+ <dir-element></dir-element>
17
+ `
18
+ );
19
+ await elementUpdated(el);
20
+ expect(el.dir).to.equal("rtl");
21
+ expect(el.isLTR).to.be.false;
22
+ });
23
+ it("has a static VERSION property", () => {
24
+ expect(DirElement.VERSION).to.equal(version);
25
+ });
26
+ });
27
+ //# sourceMappingURL=base.test.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["base.test.ts"],
4
+ "sourcesContent": ["/*\nCopyright 2020 Adobe. All rights reserved.\nThis file is licensed to you under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License. You may obtain a copy\nof the License at http://www.apache.org/licenses/LICENSE-2.0\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*/\nimport { SpectrumElement } from '@spectrum-web-components/base';\nimport { elementUpdated, expect, fixture, html } from '@open-wc/testing';\nimport { version } from '@spectrum-web-components/base/src/version.js';\n\nclass DirElement extends SpectrumElement {}\n\ncustomElements.define('dir-element', DirElement);\n\ndescribe('Base', () => {\n after(() => {\n document.dir = '';\n });\n it('sets `dir` from `document`', async () => {\n document.dir = 'rtl';\n const el = await fixture<DirElement>(\n html`\n <dir-element></dir-element>\n `\n );\n\n await elementUpdated(el);\n\n expect(el.dir).to.equal('rtl');\n expect(el.isLTR).to.be.false;\n });\n it('has a static VERSION property', () => {\n expect(DirElement.VERSION).to.equal(version);\n });\n});\n"],
5
+ "mappings": ";AAUA,SAAS,uBAAuB;AAChC,SAAS,gBAAgB,QAAQ,SAAS,YAAY;AACtD,SAAS,eAAe;AAExB,MAAM,mBAAmB,gBAAgB;AAAC;AAE1C,eAAe,OAAO,eAAe,UAAU;AAE/C,SAAS,QAAQ,MAAM;AACnB,QAAM,MAAM;AACR,aAAS,MAAM;AAAA,EACnB,CAAC;AACD,KAAG,8BAA8B,YAAY;AACzC,aAAS,MAAM;AACf,UAAM,KAAK,MAAM;AAAA,MACb;AAAA;AAAA;AAAA,IAGJ;AAEA,UAAM,eAAe,EAAE;AAEvB,WAAO,GAAG,GAAG,EAAE,GAAG,MAAM,KAAK;AAC7B,WAAO,GAAG,KAAK,EAAE,GAAG,GAAG;AAAA,EAC3B,CAAC;AACD,KAAG,iCAAiC,MAAM;AACtC,WAAO,WAAW,OAAO,EAAE,GAAG,MAAM,OAAO;AAAA,EAC/C,CAAC;AACL,CAAC;",
6
+ "names": []
7
+ }
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ import { expect } from "@open-wc/testing";
3
+ import { stub } from "sinon";
4
+ import {
5
+ isFirefox,
6
+ isWebKit
7
+ } from "@spectrum-web-components/shared/src/platform.js";
8
+ import "@spectrum-web-components/base";
9
+ const elements = {
10
+ "sp-accordion-item": () => import("@spectrum-web-components/accordion/sp-accordion-item.js"),
11
+ "sp-accordion": () => import("@spectrum-web-components/accordion/sp-accordion.js"),
12
+ "sp-action-bar": () => import("@spectrum-web-components/action-bar/sp-action-bar.js"),
13
+ "sp-action-menu": () => import("@spectrum-web-components/action-menu/sp-action-menu.js"),
14
+ "sp-action-button": () => import("@spectrum-web-components/action-button/sp-action-button.js"),
15
+ "sp-action-group": () => import("@spectrum-web-components/action-group/sp-action-group.js"),
16
+ "sp-card": () => import("@spectrum-web-components/card/sp-card.js"),
17
+ "sp-asset": () => import("@spectrum-web-components/asset/sp-asset.js"),
18
+ "sp-avatar": () => import("@spectrum-web-components/avatar/sp-avatar.js"),
19
+ "sp-badge": () => import("@spectrum-web-components/badge/sp-badge.js"),
20
+ "sp-dialog-wrapper": () => import("@spectrum-web-components/dialog/sp-dialog-wrapper.js"),
21
+ "sp-dialog": () => import("@spectrum-web-components/dialog/sp-dialog.js"),
22
+ "sp-dialog-base": () => import("@spectrum-web-components/dialog/sp-dialog-base.js"),
23
+ "sp-button": () => import("@spectrum-web-components/button/sp-button.js"),
24
+ "sp-button-group": () => import("@spectrum-web-components/button-group/sp-button-group.js"),
25
+ "sp-checkbox": () => import("@spectrum-web-components/checkbox/sp-checkbox.js"),
26
+ "sp-coachmark": () => import("@spectrum-web-components/coachmark/sp-coachmark.js"),
27
+ "sp-color-area": () => import("@spectrum-web-components/color-area/sp-color-area.js"),
28
+ "sp-color-handle": () => import("@spectrum-web-components/color-handle/sp-color-handle.js"),
29
+ "sp-color-loupe": () => import("@spectrum-web-components/color-loupe/sp-color-loupe.js"),
30
+ "sp-color-slider": () => import("@spectrum-web-components/color-slider/sp-color-slider.js"),
31
+ "sp-color-wheel": () => import("@spectrum-web-components/color-wheel/sp-color-wheel.js"),
32
+ "sp-divider": () => import("@spectrum-web-components/divider/sp-divider.js"),
33
+ "sp-dropzone": () => import("@spectrum-web-components/dropzone/sp-dropzone.js"),
34
+ "sp-meter": () => import("@spectrum-web-components/meter/sp-meter.js"),
35
+ "sp-field-group": () => import("@spectrum-web-components/field-group/sp-field-group.js"),
36
+ "sp-field-label": () => import("@spectrum-web-components/field-label/sp-field-label.js"),
37
+ "sp-help-text": () => import("@spectrum-web-components/help-text/sp-help-text.js"),
38
+ "sp-icon": () => import("@spectrum-web-components/icon/sp-icon.js"),
39
+ "sp-icons-medium": () => import("@spectrum-web-components/icons/sp-icons-medium.js"),
40
+ "sp-icons-large": () => import("@spectrum-web-components/icons/sp-icons-large.js"),
41
+ "sp-illustrated-message": () => import("@spectrum-web-components/illustrated-message/sp-illustrated-message.js"),
42
+ "sp-link": () => import("@spectrum-web-components/link/sp-link.js"),
43
+ "sp-menu-group": () => import("@spectrum-web-components/menu/sp-menu-group.js"),
44
+ "sp-menu-item": () => import("@spectrum-web-components/menu/sp-menu-item.js"),
45
+ "sp-menu": () => import("@spectrum-web-components/menu/sp-menu.js"),
46
+ "overlay-trigger": () => import("@spectrum-web-components/overlay/overlay-trigger.js"),
47
+ "sp-overlay": () => import("@spectrum-web-components/overlay/sp-overlay.js"),
48
+ "sp-picker": () => import("@spectrum-web-components/picker/sp-picker.js"),
49
+ "sp-picker-button": () => import("@spectrum-web-components/picker-button/sp-picker-button.js"),
50
+ "sp-popover": () => import("@spectrum-web-components/popover/sp-popover.js"),
51
+ "sp-progress-bar": () => import("@spectrum-web-components/progress-bar/sp-progress-bar.js"),
52
+ "sp-progress-circle": () => import("@spectrum-web-components/progress-circle/sp-progress-circle.js"),
53
+ "sp-radio-group": () => import("@spectrum-web-components/radio/sp-radio-group.js"),
54
+ "sp-radio": () => import("@spectrum-web-components/radio/sp-radio.js"),
55
+ "sp-search": () => import("@spectrum-web-components/search/sp-search.js"),
56
+ "sp-sidenav-item": () => import("@spectrum-web-components/sidenav/sp-sidenav-item.js"),
57
+ "sp-sidenav": () => import("@spectrum-web-components/sidenav/sp-sidenav.js"),
58
+ "sp-slider": () => import("@spectrum-web-components/slider/sp-slider.js"),
59
+ "sp-slider-handle": () => import("@spectrum-web-components/slider/sp-slider-handle.js"),
60
+ "sp-split-view": () => import("@spectrum-web-components/split-view/sp-split-view.js"),
61
+ "sp-status-light": () => import("@spectrum-web-components/status-light/sp-status-light.js"),
62
+ "sp-swatch-group": () => import("@spectrum-web-components/swatch/sp-swatch-group.js"),
63
+ "sp-swatch": () => import("@spectrum-web-components/swatch/sp-swatch.js"),
64
+ "sp-switch": () => import("@spectrum-web-components/switch/sp-switch.js"),
65
+ "sp-table": () => import("@spectrum-web-components/table/sp-table.js"),
66
+ "sp-table-body": () => import("@spectrum-web-components/table/sp-table-body.js"),
67
+ "sp-table-cell": () => import("@spectrum-web-components/table/sp-table-cell.js"),
68
+ "sp-table-head": () => import("@spectrum-web-components/table/sp-table-head.js"),
69
+ "sp-table-checkbox-cell": () => import("@spectrum-web-components/table/sp-table-checkbox-cell.js"),
70
+ "sp-table-head-cell": () => import("@spectrum-web-components/table/sp-table-head-cell.js"),
71
+ "sp-table-row": () => import("@spectrum-web-components/table/sp-table-row.js"),
72
+ "sp-tab": () => import("@spectrum-web-components/tabs/sp-tab.js"),
73
+ "sp-tabs": () => import("@spectrum-web-components/tabs/sp-tabs.js"),
74
+ "sp-tabs-overflow": () => import("@spectrum-web-components/tabs/sp-tabs-overflow.js"),
75
+ "sp-tag": () => import("@spectrum-web-components/tags/sp-tag.js"),
76
+ "sp-tags": () => import("@spectrum-web-components/tags/sp-tags.js"),
77
+ "sp-textfield": () => import("@spectrum-web-components/textfield/sp-textfield.js"),
78
+ "sp-thumbnail": () => import("@spectrum-web-components/thumbnail/sp-thumbnail.js"),
79
+ "sp-toast": () => import("@spectrum-web-components/toast/sp-toast.js"),
80
+ "sp-tooltip": () => import("@spectrum-web-components/tooltip/sp-tooltip.js"),
81
+ "sp-top-nav": () => import("@spectrum-web-components/top-nav/sp-top-nav.js"),
82
+ "sp-tray": () => import("@spectrum-web-components/tray/sp-tray.js"),
83
+ "sp-underlay": () => import("@spectrum-web-components/underlay/sp-underlay.js")
84
+ };
85
+ const browser = isWebKit() ? "webkit" : isFirefox() ? "firefox" : "chromium";
86
+ describe("define-element", function() {
87
+ this.retries(0);
88
+ beforeEach(function() {
89
+ window.__swc.verbose = true;
90
+ this.warn = stub(console, "warn");
91
+ });
92
+ afterEach(function() {
93
+ this.warn.resetHistory();
94
+ window.__swc.verbose = false;
95
+ this.warn.restore();
96
+ });
97
+ Object.entries(elements).forEach(
98
+ ([name, register]) => it(`'${name}' warns on redefinition`, async function() {
99
+ var _a;
100
+ if (customElements.get(name)) {
101
+ this.skip();
102
+ }
103
+ const error = {
104
+ webkit: "Cannot define multiple custom elements with the same tag name",
105
+ firefox: `'${name}' has already been defined`,
106
+ chromium: `"${name}" has already been used with this registry`
107
+ }[browser];
108
+ let caughtError;
109
+ customElements.define(name, class extends HTMLElement {
110
+ });
111
+ try {
112
+ await register();
113
+ } catch (error2) {
114
+ caughtError = error2;
115
+ }
116
+ expect((_a = caughtError == null ? void 0 : caughtError.message) != null ? _a : "").to.include(error);
117
+ expect(this.warn.called, "should call console.warn()").to.be.true;
118
+ const spyCall = this.warn.getCall(0);
119
+ expect(
120
+ spyCall.args.at(0).includes("redefine"),
121
+ `message should warn about redefining an element, instead got "${spyCall.args.at(
122
+ 0
123
+ )}"`
124
+ ).to.be.true;
125
+ })
126
+ );
127
+ });
128
+ //# sourceMappingURL=define-element.test.js.map