@joist/element 4.0.0-next.2 → 4.0.0-next.3

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 (43) hide show
  1. package/README.md +17 -19
  2. package/package.json +1 -1
  3. package/src/lib/attr.test.ts +16 -0
  4. package/src/lib/attr.ts +12 -4
  5. package/src/lib/element.test.ts +38 -2
  6. package/src/lib/element.ts +45 -28
  7. package/src/lib/listen.ts +10 -4
  8. package/src/lib/metadata.ts +4 -1
  9. package/src/lib/result.ts +12 -16
  10. package/src/lib/tags.ts +9 -66
  11. package/src/lib.ts +1 -2
  12. package/target/lib/attr.d.ts +4 -1
  13. package/target/lib/attr.js +7 -3
  14. package/target/lib/attr.js.map +1 -1
  15. package/target/lib/attr.test.js +38 -0
  16. package/target/lib/attr.test.js.map +1 -1
  17. package/target/lib/element.d.ts +4 -2
  18. package/target/lib/element.js +31 -16
  19. package/target/lib/element.js.map +1 -1
  20. package/target/lib/element.test.js +70 -3
  21. package/target/lib/element.test.js.map +1 -1
  22. package/target/lib/listen.d.ts +2 -1
  23. package/target/lib/listen.js +6 -3
  24. package/target/lib/listen.js.map +1 -1
  25. package/target/lib/metadata.d.ts +6 -1
  26. package/target/lib/metadata.js.map +1 -1
  27. package/target/lib/result.d.ts +6 -3
  28. package/target/lib/result.js +7 -4
  29. package/target/lib/result.js.map +1 -1
  30. package/target/lib/tags.d.ts +5 -17
  31. package/target/lib/tags.js +5 -11
  32. package/target/lib/tags.js.map +1 -1
  33. package/target/lib.d.ts +1 -2
  34. package/target/lib.js +1 -2
  35. package/target/lib.js.map +1 -1
  36. package/src/lib/shadow.test.ts +0 -40
  37. package/src/lib/shadow.ts +0 -16
  38. package/target/lib/shadow.d.ts +0 -2
  39. package/target/lib/shadow.js +0 -10
  40. package/target/lib/shadow.js.map +0 -1
  41. package/target/lib/shadow.test.d.ts +0 -1
  42. package/target/lib/shadow.test.js +0 -69
  43. package/target/lib/shadow.test.js.map +0 -1
package/README.md CHANGED
@@ -11,30 +11,28 @@ npm i @joist/element
11
11
  #### Example:
12
12
 
13
13
  ```TS
14
- import { tagName, shadow, css, html, attr, listen, element } from '@joist/element';
14
+ import { tagName, css, html, attr, listen, element } from '@joist/element';
15
15
 
16
16
  @element({
17
- tagName: 'my-element'
17
+ tagName: 'my-element',
18
+ shadow: [
19
+ css`
20
+ :host {
21
+ display: block;
22
+ color: red;
23
+ }
24
+ `,
25
+ html`
26
+ <slot></slot>
27
+ `
28
+ ]
18
29
  })
19
30
  export class MyElement extends HTMLElement {
20
- // apply styles to shadow dom
21
- @shadow styles = css`
22
- :host {
23
- display: block;
24
- color: red;
25
- }
26
- `;
31
+ @attr()
32
+ accessor value = 0;
27
33
 
28
- // apply html to shadow dom
29
- @shadow template = html`
30
- <slot></slot>
31
- `;
32
-
33
- // define attributes
34
- @attr() accessor value = 0;
35
-
36
- // listen for events
37
- @listen('click') onClick() {
34
+ @listen('click')
35
+ onClick() {
38
36
  console.log('clicked!')
39
37
  }
40
38
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joist/element",
3
- "version": "4.0.0-next.2",
3
+ "version": "4.0.0-next.3",
4
4
  "type": "module",
5
5
  "main": "./target/lib.js",
6
6
  "module": "./target/lib.js",
@@ -110,4 +110,20 @@ describe('@attr()', () => {
110
110
  'value-from-symbol'
111
111
  ]);
112
112
  });
113
+
114
+ it('should throw an error for symbols with no description', async () => {
115
+ expect(() => {
116
+ const value = Symbol();
117
+
118
+ @element({
119
+ tagName: 'attr-test-4'
120
+ })
121
+ class MyElement extends HTMLElement {
122
+ @attr()
123
+ accessor [value] = true;
124
+ }
125
+
126
+ new MyElement();
127
+ }).to.throw('Cannot handle Symbol property without description');
128
+ });
113
129
  });
package/src/lib/attr.ts CHANGED
@@ -1,14 +1,22 @@
1
1
  import { metadataStore } from './metadata.js';
2
2
 
3
- export function attr() {
4
- return <This extends HTMLElement>(
3
+ export interface AttrOpts {
4
+ observe?: boolean;
5
+ }
6
+
7
+ export function attr(opts?: AttrOpts) {
8
+ return function attrDecorator<This extends HTMLElement>(
5
9
  { get, set }: ClassAccessorDecoratorTarget<This, unknown>,
6
10
  ctx: ClassAccessorDecoratorContext<This>
7
- ): ClassAccessorDecoratorResult<This, any> => {
11
+ ): ClassAccessorDecoratorResult<This, any> {
8
12
  const attrName = parseAttrName(ctx.name);
9
13
  const meta = metadataStore.read(ctx.metadata);
10
14
 
11
- meta.attrs.push({ propName: ctx.name, attrName });
15
+ meta.attrs.push({
16
+ propName: ctx.name,
17
+ attrName,
18
+ observe: opts?.observe ?? true
19
+ });
12
20
 
13
21
  return {
14
22
  set(value: unknown) {
@@ -1,7 +1,8 @@
1
- import { expect, fixture, html } from '@open-wc/testing';
1
+ import { expect, fixture, html as litHtml } from '@open-wc/testing';
2
2
 
3
3
  import { attr } from './attr.js';
4
4
  import { element } from './element.js';
5
+ import { css, html } from './tags.js';
5
6
 
6
7
  describe('@element()', () => {
7
8
  it('should write default value to attribute', async () => {
@@ -19,7 +20,7 @@ describe('@element()', () => {
19
20
  accessor value3 = true; // boolean
20
21
  }
21
22
 
22
- const el = await fixture<MyElement>(html`<element-1></element-1>`);
23
+ const el = await fixture<MyElement>(litHtml`<element-1></element-1>`);
23
24
 
24
25
  expect(el.getAttribute('value1')).to.equal('hello');
25
26
  expect(el.getAttribute('value2')).to.equal('0');
@@ -39,6 +40,9 @@ describe('@element()', () => {
39
40
 
40
41
  @attr()
41
42
  accessor value3 = true; // boolean
43
+
44
+ @attr({ observe: false }) // should be filtered out
45
+ accessor value4 = 'hello world';
42
46
  }
43
47
 
44
48
  expect(Reflect.get(MyElement, 'observedAttributes')).to.deep.equal([
@@ -47,4 +51,36 @@ describe('@element()', () => {
47
51
  'value3'
48
52
  ]);
49
53
  });
54
+
55
+ it('should attach shadow root when the shadow property exists', async () => {
56
+ @element({
57
+ tagName: 'element-3',
58
+ shadow: []
59
+ })
60
+ class MyElement extends HTMLElement {}
61
+
62
+ const el = new MyElement();
63
+
64
+ expect(el.shadowRoot).to.be.instanceOf(ShadowRoot);
65
+ });
66
+
67
+ it('should apply html and css', async () => {
68
+ @element({
69
+ tagName: 'element-4',
70
+ shadow: [
71
+ css`
72
+ :host {
73
+ display: contents;
74
+ }
75
+ `,
76
+ html`<slot></slot>`
77
+ ]
78
+ })
79
+ class MyElement extends HTMLElement {}
80
+
81
+ const el = new MyElement();
82
+
83
+ expect(el.shadowRoot!.adoptedStyleSheets.length).to.equal(1);
84
+ expect(el.shadowRoot!.innerHTML).to.equal(`<slot></slot>`);
85
+ });
50
86
  });
@@ -1,14 +1,16 @@
1
- import { metadataStore } from './metadata.js';
1
+ import { AttrDef, metadataStore } from './metadata.js';
2
+ import { ShadowResult } from './result.js';
2
3
 
3
- export interface ElementOpts {
4
+ export interface ElementOpts<T> {
4
5
  tagName?: string;
6
+ shadow?: Array<ShadowResult | ((el: T) => void)>;
5
7
  }
6
8
 
7
- export function element(opts?: ElementOpts) {
8
- return <Target extends CustomElementConstructor>(
9
- Base: Target,
10
- ctx: ClassDecoratorContext<Target>
11
- ) => {
9
+ export function element<
10
+ Target extends CustomElementConstructor,
11
+ Instance extends InstanceType<Target>
12
+ >(opts?: ElementOpts<Instance>) {
13
+ return function elementDecorator(Base: Target, ctx: ClassDecoratorContext<Target>) {
12
14
  const meta = metadataStore.read(ctx.metadata);
13
15
 
14
16
  ctx.addInitializer(function (this: Target) {
@@ -20,37 +22,33 @@ export function element(opts?: ElementOpts) {
20
22
  });
21
23
 
22
24
  return class JoistElement extends Base {
23
- // make all attrs observable
24
- static observedAttributes = meta.attrs.map(({ attrName }) => attrName);
25
+ static observedAttributes = meta.attrs
26
+ .filter(({ observe }) => observe) // filter out attributes that are not to be observed
27
+ .map(({ attrName }) => attrName);
25
28
 
26
29
  constructor(...args: any[]) {
27
30
  super(...args);
28
31
 
29
- const root = this.shadowRoot || this;
32
+ if (opts?.shadow) {
33
+ this.attachShadow({ mode: 'open' });
30
34
 
31
- for (let [event, listener] of meta.listeners) {
32
- root.addEventListener(event, listener.bind(this));
33
- }
34
- }
35
-
36
- connectedCallback() {
37
- for (let { propName, attrName } of meta.attrs) {
38
- const value = Reflect.get(this, propName);
39
-
40
- // reflect values back to attributes
41
- if (value !== null && value !== undefined && value !== '') {
42
- if (typeof value === 'boolean') {
43
- if (value === true) {
44
- // set boolean attribute
45
- this.setAttribute(attrName, '');
46
- }
35
+ for (let res of opts.shadow) {
36
+ if (typeof res === 'function') {
37
+ res(this as unknown as Instance);
47
38
  } else {
48
- // set key/value attribute
49
- this.setAttribute(attrName, String(value));
39
+ res.run(this);
50
40
  }
51
41
  }
52
42
  }
53
43
 
44
+ for (let [event, { cb, root }] of meta.listeners) {
45
+ root(this).addEventListener(event, cb.bind(this));
46
+ }
47
+ }
48
+
49
+ connectedCallback() {
50
+ reflectAttributeValues(this, meta.attrs);
51
+
54
52
  if (super.connectedCallback) {
55
53
  super.connectedCallback();
56
54
  }
@@ -58,3 +56,22 @@ export function element(opts?: ElementOpts) {
58
56
  };
59
57
  };
60
58
  }
59
+
60
+ function reflectAttributeValues(el: HTMLElement, attrs: AttrDef[]) {
61
+ for (let { propName, attrName } of attrs) {
62
+ const value = Reflect.get(el, propName);
63
+
64
+ // reflect values back to attributes
65
+ if (value !== null && value !== undefined && value !== '') {
66
+ if (typeof value === 'boolean') {
67
+ if (value === true) {
68
+ // set boolean attribute
69
+ el.setAttribute(attrName, '');
70
+ }
71
+ } else {
72
+ // set key/value attribute
73
+ el.setAttribute(attrName, String(value));
74
+ }
75
+ }
76
+ }
77
+ }
package/src/lib/listen.ts CHANGED
@@ -1,9 +1,15 @@
1
- import { metadataStore } from './metadata.js';
1
+ import { ListenerRootSelector, metadataStore } from './metadata.js';
2
2
 
3
- export function listen<This extends HTMLElement>(event: string) {
4
- return (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => {
3
+ export function listen<This extends HTMLElement>(event: string, root?: ListenerRootSelector) {
4
+ return function listenDecorator(
5
+ value: (e: Event) => void,
6
+ ctx: ClassMethodDecoratorContext<This>
7
+ ) {
5
8
  const metadata = metadataStore.read(ctx.metadata);
6
9
 
7
- metadata.listeners.set(event, value);
10
+ metadata.listeners.set(event, {
11
+ cb: value,
12
+ root: root ?? ((el: HTMLElement) => el.shadowRoot ?? el)
13
+ });
8
14
  };
9
15
  }
@@ -3,11 +3,14 @@
3
3
  export interface AttrDef {
4
4
  propName: string | symbol;
5
5
  attrName: string;
6
+ observe: boolean;
6
7
  }
7
8
 
9
+ export type ListenerRootSelector = (el: HTMLElement) => HTMLElement | ShadowRoot;
10
+
8
11
  export class ElementMetadata {
9
12
  attrs: AttrDef[] = [];
10
- listeners = new Map<string, (e: Event) => void>();
13
+ listeners = new Map<string, { cb: (e: Event) => void; root: ListenerRootSelector }>();
11
14
  }
12
15
 
13
16
  export class MetadataStore extends WeakMap<object, ElementMetadata> {
package/src/lib/result.ts CHANGED
@@ -1,27 +1,23 @@
1
- export abstract class ShadowResult {
2
- strings: TemplateStringsArray;
3
- values: any[];
4
-
5
- #shadow: ShadowRoot | undefined = undefined;
6
-
7
- get shadow() {
8
- if (!this.#shadow) {
9
- throw new Error('ShadowResult has not been applied');
10
- }
1
+ export interface ShadowResult {
2
+ run(el: HTMLElement): void;
3
+ }
11
4
 
12
- return this.#shadow;
13
- }
5
+ export abstract class JoistShadowResult implements ShadowResult {
6
+ strings;
7
+ values;
14
8
 
15
9
  constructor(raw: TemplateStringsArray, ...values: any[]) {
16
10
  this.strings = raw;
17
11
  this.values = values;
18
12
  }
19
13
 
20
- execute(root: ShadowRoot) {
21
- this.#shadow = root;
14
+ run(el: HTMLElement) {
15
+ if (!el.shadowRoot) {
16
+ throw new Error('ShadowResult has not been applied');
17
+ }
22
18
 
23
- this.apply(root);
19
+ this.setup(el.shadowRoot);
24
20
  }
25
21
 
26
- abstract apply(root: ShadowRoot): void;
22
+ abstract setup(root: ShadowRoot): void;
27
23
  }
package/src/lib/tags.ts CHANGED
@@ -1,57 +1,9 @@
1
- /**
2
- * NOTE: TemplateStringsArray can be used to cache via a WeakMap.
3
- *
4
- * function html(strs: TemplateStringsArray) {
5
- * return strs
6
- * }
7
- *
8
- * class Foo {
9
- * hello = html`world`;
10
- * }
11
- *
12
- * // these will be the same instance of TemplateStringsArray
13
- * new Foo().hello === new Foo().hello
14
- */
1
+ import { JoistShadowResult } from './result.js';
15
2
 
16
- import { ShadowResult } from './result.js';
17
-
18
- type Tags = keyof HTMLElementTagNameMap;
19
- type SVGTags = keyof SVGElementTagNameMap;
20
- type MathTags = keyof MathMLElementTagNameMap;
21
-
22
- export const htmlTemplateCache = new WeakMap<TemplateStringsArray, HTMLTemplateElement>();
23
-
24
- export class HTMLResult extends ShadowResult {
25
- query<K extends Tags>(selectors: K): HTMLElementTagNameMap[K] | null;
26
- query<K extends SVGTags>(selectors: K): SVGElementTagNameMap[K] | null;
27
- query<K extends MathTags>(selectors: K): MathMLElementTagNameMap[K] | null;
28
- query<E extends Element = Element>(selectors: string): E | null;
29
- query<K extends Tags>(query: K) {
30
- return this.shadow.querySelector<K>(query);
31
- }
32
-
33
- queryAll<K extends Tags>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
34
- queryAll<K extends SVGTags>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
35
- queryAll<K extends MathTags>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
36
- queryAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
37
- queryAll<K extends Tags>(query: K) {
38
- return this.shadow.querySelectorAll<K>(query);
39
- }
40
-
41
- /**
42
- * THe HTMLTemplateElement itself will be cached but a new instance of the result returned
43
- */
44
- apply(root: ShadowRoot): void {
45
- let template: HTMLTemplateElement;
46
-
47
- if (htmlTemplateCache.has(this.strings)) {
48
- template = htmlTemplateCache.get(this.strings) as HTMLTemplateElement;
49
- } else {
50
- template = document.createElement('template');
51
-
52
- template.innerHTML = concat(this.strings);
53
- htmlTemplateCache.set(this.strings, template);
54
- }
3
+ export class HTMLResult extends JoistShadowResult {
4
+ setup(root: ShadowRoot): void {
5
+ let template = document.createElement('template');
6
+ template.innerHTML = concat(this.strings);
55
7
 
56
8
  root.append(template.content.cloneNode(true));
57
9
  }
@@ -61,19 +13,10 @@ export function html(strings: TemplateStringsArray, ...values: any[]): HTMLResul
61
13
  return new HTMLResult(strings, ...values);
62
14
  }
63
15
 
64
- export const styleSheetCache = new WeakMap<TemplateStringsArray, CSSStyleSheet>();
65
-
66
- export class CSSResult extends ShadowResult {
67
- apply(root: ShadowRoot): void {
68
- let sheet: CSSStyleSheet;
69
-
70
- if (styleSheetCache.has(this.strings)) {
71
- sheet = styleSheetCache.get(this.strings) as CSSStyleSheet;
72
- } else {
73
- sheet = new CSSStyleSheet();
74
-
75
- sheet.replaceSync(concat(this.strings));
76
- }
16
+ export class CSSResult extends JoistShadowResult {
17
+ setup(root: ShadowRoot): void {
18
+ let sheet = new CSSStyleSheet();
19
+ sheet.replaceSync(concat(this.strings));
77
20
 
78
21
  root.adoptedStyleSheets = [...root.adoptedStyleSheets, sheet];
79
22
  }
package/src/lib.ts CHANGED
@@ -1,6 +1,5 @@
1
- export { ShadowResult as TemplateResult } from './lib/result.js';
1
+ export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
2
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
- export { shadow } from './lib/shadow.js';
4
3
  export { attr } from './lib/attr.js';
5
4
  export { listen } from './lib/listen.js';
6
5
  export { element } from './lib/element.js';
@@ -1 +1,4 @@
1
- export declare function attr(): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
1
+ export interface AttrOpts {
2
+ observe?: boolean;
3
+ }
4
+ export declare function attr(opts?: AttrOpts): <This extends HTMLElement>({ get, set }: ClassAccessorDecoratorTarget<This, unknown>, ctx: ClassAccessorDecoratorContext<This>) => ClassAccessorDecoratorResult<This, any>;
@@ -1,9 +1,13 @@
1
1
  import { metadataStore } from './metadata.js';
2
- export function attr() {
3
- return ({ get, set }, ctx) => {
2
+ export function attr(opts) {
3
+ return function attrDecorator({ get, set }, ctx) {
4
4
  const attrName = parseAttrName(ctx.name);
5
5
  const meta = metadataStore.read(ctx.metadata);
6
- meta.attrs.push({ propName: ctx.name, attrName });
6
+ meta.attrs.push({
7
+ propName: ctx.name,
8
+ attrName,
9
+ observe: opts?.observe ?? true
10
+ });
7
11
  return {
8
12
  set(value) {
9
13
  if (value === true) {
@@ -1 +1 @@
1
- {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,IAAI;IAClB,OAAO,CACL,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC,EACC,EAAE;QAC3C,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,GAAG,CAAC,KAAc;gBAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,GAAG;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAGD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"attr.js","sourceRoot":"","sources":["../../src/lib/attr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,UAAU,IAAI,CAAC,IAAe;IAClC,OAAO,SAAS,aAAa,CAC3B,EAAE,GAAG,EAAE,GAAG,EAA+C,EACzD,GAAwC;QAExC,MAAM,QAAQ,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YACd,QAAQ,EAAE,GAAG,CAAC,IAAI;YAClB,QAAQ;YACR,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,IAAI;SAC/B,CAAC,CAAC;QAEH,OAAO;YACL,GAAG,CAAC,KAAc;gBAChB,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;gBACjC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAED,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,GAAG;gBACD,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEzC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAElB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,OAAO,IAAI,CAAC;oBACd,CAAC;oBAGD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;wBAChC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;oBACtB,CAAC;oBAGD,OAAO,IAAI,CAAC;gBACd,CAAC;gBAGD,OAAO,OAAO,CAAC;YACjB,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,GAAoB;IACzC,IAAI,KAAa,CAAC;IAElB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,KAAK,GAAG,GAAG,CAAC,WAAW,CAAC;QAC1B,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,GAAG,CAAC;IACd,CAAC;IAED,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC"}
@@ -242,5 +242,43 @@ describe('@attr()', () => {
242
242
  'value-from-symbol'
243
243
  ]);
244
244
  });
245
+ it('should throw an error for symbols with no description', async () => {
246
+ expect(() => {
247
+ const value = Symbol();
248
+ let MyElement = (() => {
249
+ var _a;
250
+ let _classDecorators = [element({
251
+ tagName: 'attr-test-4'
252
+ })];
253
+ let _classDescriptor;
254
+ let _classExtraInitializers = [];
255
+ let _classThis;
256
+ let _classSuper = HTMLElement;
257
+ let _member_decorators;
258
+ let _member_initializers = [];
259
+ let _member_extraInitializers = [];
260
+ var MyElement = class extends _classSuper {
261
+ static { _classThis = this; }
262
+ static {
263
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
264
+ __esDecorate(this, null, _member_decorators, { kind: "accessor", name: _a, static: false, private: false, access: { has: obj => _a in obj, get: obj => obj[_a], set: (obj, value) => { obj[_a] = value; } }, metadata: _metadata }, _member_initializers, _member_extraInitializers);
265
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
266
+ MyElement = _classThis = _classDescriptor.value;
267
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
268
+ __runInitializers(_classThis, _classExtraInitializers);
269
+ }
270
+ #_a_accessor_storage = __runInitializers(this, _member_initializers, true);
271
+ get [(_member_decorators = [attr()], _a = __propKey(value))]() { return this.#_a_accessor_storage; }
272
+ set [_a](value) { this.#_a_accessor_storage = value; }
273
+ constructor() {
274
+ super(...arguments);
275
+ __runInitializers(this, _member_extraInitializers);
276
+ }
277
+ };
278
+ return MyElement = _classThis;
279
+ })();
280
+ new MyElement();
281
+ }).to.throw('Cannot handle Symbol property without description');
282
+ });
245
283
  });
246
284
  //# sourceMappingURL=attr.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"attr.test.js","sourceRoot":"","sources":["../../src/lib/attr.test.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- export interface ElementOpts {
1
+ import { ShadowResult } from './result.js';
2
+ export interface ElementOpts<T> {
2
3
  tagName?: string;
4
+ shadow?: Array<ShadowResult | ((el: T) => void)>;
3
5
  }
4
- export declare function element(opts?: ElementOpts): <Target extends CustomElementConstructor>(Base: Target, ctx: ClassDecoratorContext<Target>) => {
6
+ export declare function element<Target extends CustomElementConstructor, Instance extends InstanceType<Target>>(opts?: ElementOpts<Instance>): (Base: Target, ctx: ClassDecoratorContext<Target>) => {
5
7
  new (...args: any[]): {
6
8
  connectedCallback(): void;
7
9
  accessKey: string;
@@ -1,6 +1,6 @@
1
1
  import { metadataStore } from './metadata.js';
2
2
  export function element(opts) {
3
- return (Base, ctx) => {
3
+ return function elementDecorator(Base, ctx) {
4
4
  const meta = metadataStore.read(ctx.metadata);
5
5
  ctx.addInitializer(function () {
6
6
  if (opts?.tagName) {
@@ -10,28 +10,28 @@ export function element(opts) {
10
10
  }
11
11
  });
12
12
  return class JoistElement extends Base {
13
- static observedAttributes = meta.attrs.map(({ attrName }) => attrName);
13
+ static observedAttributes = meta.attrs
14
+ .filter(({ observe }) => observe)
15
+ .map(({ attrName }) => attrName);
14
16
  constructor(...args) {
15
17
  super(...args);
16
- const root = this.shadowRoot || this;
17
- for (let [event, listener] of meta.listeners) {
18
- root.addEventListener(event, listener.bind(this));
19
- }
20
- }
21
- connectedCallback() {
22
- for (let { propName, attrName } of meta.attrs) {
23
- const value = Reflect.get(this, propName);
24
- if (value !== null && value !== undefined && value !== '') {
25
- if (typeof value === 'boolean') {
26
- if (value === true) {
27
- this.setAttribute(attrName, '');
28
- }
18
+ if (opts?.shadow) {
19
+ this.attachShadow({ mode: 'open' });
20
+ for (let res of opts.shadow) {
21
+ if (typeof res === 'function') {
22
+ res(this);
29
23
  }
30
24
  else {
31
- this.setAttribute(attrName, String(value));
25
+ res.run(this);
32
26
  }
33
27
  }
34
28
  }
29
+ for (let [event, { cb, root }] of meta.listeners) {
30
+ root(this).addEventListener(event, cb.bind(this));
31
+ }
32
+ }
33
+ connectedCallback() {
34
+ reflectAttributeValues(this, meta.attrs);
35
35
  if (super.connectedCallback) {
36
36
  super.connectedCallback();
37
37
  }
@@ -39,4 +39,19 @@ export function element(opts) {
39
39
  };
40
40
  };
41
41
  }
42
+ function reflectAttributeValues(el, attrs) {
43
+ for (let { propName, attrName } of attrs) {
44
+ const value = Reflect.get(el, propName);
45
+ if (value !== null && value !== undefined && value !== '') {
46
+ if (typeof value === 'boolean') {
47
+ if (value === true) {
48
+ el.setAttribute(attrName, '');
49
+ }
50
+ }
51
+ else {
52
+ el.setAttribute(attrName, String(value));
53
+ }
54
+ }
55
+ }
56
+ }
42
57
  //# sourceMappingURL=element.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAM9C,MAAM,UAAU,OAAO,CAAC,IAAkB;IACxC,OAAO,CACL,IAAY,EACZ,GAAkC,EAClC,EAAE;QACF,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,GAAG,CAAC,cAAc,CAAC;YACjB,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;YAEpC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEvE,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;gBAErC,KAAK,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC7C,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,iBAAiB;gBACf,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAG1C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;wBAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;4BAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gCAEnB,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;4BAClC,CAAC;wBACH,CAAC;6BAAM,CAAC;4BAEN,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAC7C,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"element.js","sourceRoot":"","sources":["../../src/lib/element.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,aAAa,EAAE,MAAM,eAAe,CAAC;AAQvD,MAAM,UAAU,OAAO,CAGrB,IAA4B;IAC5B,OAAO,SAAS,gBAAgB,CAAC,IAAY,EAAE,GAAkC;QAC/E,MAAM,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE9C,GAAG,CAAC,cAAc,CAAC;YACjB,IAAI,IAAI,EAAE,OAAO,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;oBACtC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,YAAa,SAAQ,IAAI;YACpC,MAAM,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK;iBACnC,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC;iBAChC,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;YAEnC,YAAY,GAAG,IAAW;gBACxB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;oBACjB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;oBAEpC,KAAK,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC5B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;4BAC9B,GAAG,CAAC,IAA2B,CAAC,CAAC;wBACnC,CAAC;6BAAM,CAAC;4BACN,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;wBAChB,CAAC;oBACH,CAAC;gBACH,CAAC;gBAED,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACjD,IAAI,CAAC,IAAI,CAAC,CAAC,gBAAgB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,iBAAiB;gBACf,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAEzC,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAC;oBAC5B,KAAK,CAAC,iBAAiB,EAAE,CAAC;gBAC5B,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,EAAe,EAAE,KAAgB;IAC/D,KAAK,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,KAAK,EAAE,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAGxC,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,EAAE,EAAE,CAAC;YAC1D,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC/B,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;oBAEnB,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,CAAC;gBAEN,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -1,7 +1,8 @@
1
1
  import { __esDecorate, __runInitializers } from "tslib";
2
- import { expect, fixture, html } from '@open-wc/testing';
2
+ import { expect, fixture, html as litHtml } from '@open-wc/testing';
3
3
  import { attr } from './attr.js';
4
4
  import { element } from './element.js';
5
+ import { css, html } from './tags.js';
5
6
  describe('@element()', () => {
6
7
  it('should write default value to attribute', async () => {
7
8
  let MyElement = (() => {
@@ -52,7 +53,7 @@ describe('@element()', () => {
52
53
  };
53
54
  return MyElement = _classThis;
54
55
  })();
55
- const el = await fixture(html `<element-1></element-1>`);
56
+ const el = await fixture(litHtml `<element-1></element-1>`);
56
57
  expect(el.getAttribute('value1')).to.equal('hello');
57
58
  expect(el.getAttribute('value2')).to.equal('0');
58
59
  expect(el.getAttribute('value3')).to.equal('');
@@ -75,6 +76,9 @@ describe('@element()', () => {
75
76
  let _value3_decorators;
76
77
  let _value3_initializers = [];
77
78
  let _value3_extraInitializers = [];
79
+ let _value4_decorators;
80
+ let _value4_initializers = [];
81
+ let _value4_extraInitializers = [];
78
82
  var MyElement = class extends _classSuper {
79
83
  static { _classThis = this; }
80
84
  static {
@@ -82,9 +86,11 @@ describe('@element()', () => {
82
86
  _value1_decorators = [attr()];
83
87
  _value2_decorators = [attr()];
84
88
  _value3_decorators = [attr()];
89
+ _value4_decorators = [attr({ observe: false })];
85
90
  __esDecorate(this, null, _value1_decorators, { kind: "accessor", name: "value1", static: false, private: false, access: { has: obj => "value1" in obj, get: obj => obj.value1, set: (obj, value) => { obj.value1 = value; } }, metadata: _metadata }, _value1_initializers, _value1_extraInitializers);
86
91
  __esDecorate(this, null, _value2_decorators, { kind: "accessor", name: "value2", static: false, private: false, access: { has: obj => "value2" in obj, get: obj => obj.value2, set: (obj, value) => { obj.value2 = value; } }, metadata: _metadata }, _value2_initializers, _value2_extraInitializers);
87
92
  __esDecorate(this, null, _value3_decorators, { kind: "accessor", name: "value3", static: false, private: false, access: { has: obj => "value3" in obj, get: obj => obj.value3, set: (obj, value) => { obj.value3 = value; } }, metadata: _metadata }, _value3_initializers, _value3_extraInitializers);
93
+ __esDecorate(this, null, _value4_decorators, { kind: "accessor", name: "value4", static: false, private: false, access: { has: obj => "value4" in obj, get: obj => obj.value4, set: (obj, value) => { obj.value4 = value; } }, metadata: _metadata }, _value4_initializers, _value4_extraInitializers);
88
94
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
89
95
  MyElement = _classThis = _classDescriptor.value;
90
96
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
@@ -99,9 +105,12 @@ describe('@element()', () => {
99
105
  #value3_accessor_storage = (__runInitializers(this, _value2_extraInitializers), __runInitializers(this, _value3_initializers, true));
100
106
  get value3() { return this.#value3_accessor_storage; }
101
107
  set value3(value) { this.#value3_accessor_storage = value; }
108
+ #value4_accessor_storage = (__runInitializers(this, _value3_extraInitializers), __runInitializers(this, _value4_initializers, 'hello world'));
109
+ get value4() { return this.#value4_accessor_storage; }
110
+ set value4(value) { this.#value4_accessor_storage = value; }
102
111
  constructor() {
103
112
  super(...arguments);
104
- __runInitializers(this, _value3_extraInitializers);
113
+ __runInitializers(this, _value4_extraInitializers);
105
114
  }
106
115
  };
107
116
  return MyElement = _classThis;
@@ -112,5 +121,63 @@ describe('@element()', () => {
112
121
  'value3'
113
122
  ]);
114
123
  });
124
+ it('should attach shadow root when the shadow property exists', async () => {
125
+ let MyElement = (() => {
126
+ let _classDecorators = [element({
127
+ tagName: 'element-3',
128
+ shadow: []
129
+ })];
130
+ let _classDescriptor;
131
+ let _classExtraInitializers = [];
132
+ let _classThis;
133
+ let _classSuper = HTMLElement;
134
+ var MyElement = class extends _classSuper {
135
+ static { _classThis = this; }
136
+ static {
137
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
138
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
139
+ MyElement = _classThis = _classDescriptor.value;
140
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
141
+ __runInitializers(_classThis, _classExtraInitializers);
142
+ }
143
+ };
144
+ return MyElement = _classThis;
145
+ })();
146
+ const el = new MyElement();
147
+ expect(el.shadowRoot).to.be.instanceOf(ShadowRoot);
148
+ });
149
+ it('should apply html and css', async () => {
150
+ let MyElement = (() => {
151
+ let _classDecorators = [element({
152
+ tagName: 'element-4',
153
+ shadow: [
154
+ css `
155
+ :host {
156
+ display: contents;
157
+ }
158
+ `,
159
+ html `<slot></slot>`
160
+ ]
161
+ })];
162
+ let _classDescriptor;
163
+ let _classExtraInitializers = [];
164
+ let _classThis;
165
+ let _classSuper = HTMLElement;
166
+ var MyElement = class extends _classSuper {
167
+ static { _classThis = this; }
168
+ static {
169
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
170
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
171
+ MyElement = _classThis = _classDescriptor.value;
172
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
173
+ __runInitializers(_classThis, _classExtraInitializers);
174
+ }
175
+ };
176
+ return MyElement = _classThis;
177
+ })();
178
+ const el = new MyElement();
179
+ expect(el.shadowRoot.adoptedStyleSheets.length).to.equal(1);
180
+ expect(el.shadowRoot.innerHTML).to.equal(`<slot></slot>`);
181
+ });
115
182
  });
116
183
  //# sourceMappingURL=element.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"element.test.js","sourceRoot":"","sources":["../../src/lib/element.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAEzD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;YAIjD,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,WAAW;iBACrB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBALP,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBARzB,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAG1B,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBAGpB,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;;;;;;;;QAGzB,MAAM,EAAE,GAAG,MAAM,OAAO,CAAY,IAAI,CAAA,yBAAyB,CAAC,CAAC;QAEnE,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4BAA4B,EAAE,KAAK,IAAI,EAAE;YAIpC,SAAS;oCAHd,OAAO,CAAC;oBACP,OAAO,EAAE,WAAW;iBACrB,CAAC;;;;8BACsB,WAAW;;;;;;;;;;iCAAnB,SAAQ,WAAW;;;;0CAChC,IAAI,EAAE;0CAGN,IAAI,EAAE;0CAGN,IAAI,EAAE;oBALP,uKAAS,MAAM,6BAAN,MAAM,uFAAW;oBAG1B,uKAAS,MAAM,6BAAN,MAAM,uFAAK;oBAGpB,uKAAS,MAAM,6BAAN,MAAM,uFAAQ;oBARzB,6KASC;;;oBATK,uDAAS;;gBAEb,yEAAkB,OAAO,EAAC;gBAA1B,IAAS,MAAM,4CAAW;gBAA1B,IAAS,MAAM,kDAAW;gBAG1B,8HAAkB,CAAC,GAAC;gBAApB,IAAS,MAAM,4CAAK;gBAApB,IAAS,MAAM,kDAAK;gBAGpB,8HAAkB,IAAI,GAAC;gBAAvB,IAAS,MAAM,4CAAQ;gBAAvB,IAAS,MAAM,kDAAQ;;;;;;;;QAGzB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC;YACjE,QAAQ;YACR,QAAQ;YACR,QAAQ;SACT,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"element.test.js","sourceRoot":"","sources":["../../src/lib/element.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
- export declare function listen<This extends HTMLElement>(event: string): (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => void;
1
+ import { ListenerRootSelector } from './metadata.js';
2
+ export declare function listen<This extends HTMLElement>(event: string, root?: ListenerRootSelector): (value: (e: Event) => void, ctx: ClassMethodDecoratorContext<This>) => void;
@@ -1,8 +1,11 @@
1
1
  import { metadataStore } from './metadata.js';
2
- export function listen(event) {
3
- return (value, ctx) => {
2
+ export function listen(event, root) {
3
+ return function listenDecorator(value, ctx) {
4
4
  const metadata = metadataStore.read(ctx.metadata);
5
- metadata.listeners.set(event, value);
5
+ metadata.listeners.set(event, {
6
+ cb: value,
7
+ root: root ?? ((el) => el.shadowRoot ?? el)
8
+ });
6
9
  };
7
10
  }
8
11
  //# sourceMappingURL=listen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,MAAM,UAAU,MAAM,CAA2B,KAAa;IAC5D,OAAO,CAAC,KAAyB,EAAE,GAAsC,EAAE,EAAE;QAC3E,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"listen.js","sourceRoot":"","sources":["../../src/lib/listen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,aAAa,EAAE,MAAM,eAAe,CAAC;AAEpE,MAAM,UAAU,MAAM,CAA2B,KAAa,EAAE,IAA2B;IACzF,OAAO,SAAS,eAAe,CAC7B,KAAyB,EACzB,GAAsC;QAEtC,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAElD,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE;YAC5B,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,EAAe,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,IAAI,EAAE,CAAC;SACzD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,10 +1,15 @@
1
1
  export interface AttrDef {
2
2
  propName: string | symbol;
3
3
  attrName: string;
4
+ observe: boolean;
4
5
  }
6
+ export type ListenerRootSelector = (el: HTMLElement) => HTMLElement | ShadowRoot;
5
7
  export declare class ElementMetadata {
6
8
  attrs: AttrDef[];
7
- listeners: Map<string, (e: Event) => void>;
9
+ listeners: Map<string, {
10
+ cb: (e: Event) => void;
11
+ root: ListenerRootSelector;
12
+ }>;
8
13
  }
9
14
  export declare class MetadataStore extends WeakMap<object, ElementMetadata> {
10
15
  read(value: object): ElementMetadata;
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAOvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAc,EAAE,CAAC;IACtB,SAAS,GAAG,IAAI,GAAG,EAA8B,CAAC;CACnD;AAED,MAAM,OAAO,aAAc,SAAQ,OAAgC;IACjE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
1
+ {"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/lib/metadata.ts"],"names":[],"mappings":"AAAC,MAAc,CAAC,QAAQ,KAAK,MAAM,CAAC,iBAAiB,CAAC,CAAC;AAUvD,MAAM,OAAO,eAAe;IAC1B,KAAK,GAAc,EAAE,CAAC;IACtB,SAAS,GAAG,IAAI,GAAG,EAAkE,CAAC;CACvF;AAED,MAAM,OAAO,aAAc,SAAQ,OAAgC;IACjE,IAAI,CAAC,KAAa;QAChB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,eAAe,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC"}
@@ -1,9 +1,12 @@
1
- export declare abstract class ShadowResult {
1
+ export interface ShadowResult {
2
+ run(el: HTMLElement): void;
3
+ }
4
+ export declare abstract class JoistShadowResult implements ShadowResult {
2
5
  #private;
3
6
  strings: TemplateStringsArray;
4
7
  values: any[];
5
8
  get shadow(): ShadowRoot;
6
9
  constructor(raw: TemplateStringsArray, ...values: any[]);
7
- execute(root: ShadowRoot): void;
8
- abstract apply(root: ShadowRoot): void;
10
+ run(el: HTMLElement): void;
11
+ abstract setup(root: ShadowRoot): void;
9
12
  }
@@ -1,4 +1,4 @@
1
- export class ShadowResult {
1
+ export class JoistShadowResult {
2
2
  strings;
3
3
  values;
4
4
  #shadow = undefined;
@@ -12,9 +12,12 @@ export class ShadowResult {
12
12
  this.strings = raw;
13
13
  this.values = values;
14
14
  }
15
- execute(root) {
16
- this.#shadow = root;
17
- this.apply(root);
15
+ run(el) {
16
+ if (!el.shadowRoot) {
17
+ throw new Error('ShadowResult has not been applied');
18
+ }
19
+ this.#shadow = el.shadowRoot;
20
+ this.setup(this.#shadow);
18
21
  }
19
22
  }
20
23
  //# sourceMappingURL=result.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAAA,MAAM,OAAgB,YAAY;IAChC,OAAO,CAAuB;IAC9B,MAAM,CAAQ;IAEd,OAAO,GAA2B,SAAS,CAAC;IAE5C,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,GAAyB,EAAE,GAAG,MAAa;QACrD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,OAAO,CAAC,IAAgB;QACtB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QAEpB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CAGF"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/lib/result.ts"],"names":[],"mappings":"AAIA,MAAM,OAAgB,iBAAiB;IACrC,OAAO,CAAC;IACR,MAAM,CAAC;IAEP,OAAO,GAA2B,SAAS,CAAC;IAE5C,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,YAAY,GAAyB,EAAE,GAAG,MAAa;QACrD,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC;QACnB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,GAAG,CAAC,EAAe;QACjB,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACvD,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC;QAE7B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;CAGF"}
@@ -1,23 +1,11 @@
1
- import { ShadowResult } from './result.js';
2
- type Tags = keyof HTMLElementTagNameMap;
3
- type SVGTags = keyof SVGElementTagNameMap;
4
- type MathTags = keyof MathMLElementTagNameMap;
1
+ import { JoistShadowResult } from './result.js';
5
2
  export declare const htmlTemplateCache: WeakMap<TemplateStringsArray, HTMLTemplateElement>;
6
- export declare class HTMLResult extends ShadowResult {
7
- query<K extends Tags>(selectors: K): HTMLElementTagNameMap[K] | null;
8
- query<K extends SVGTags>(selectors: K): SVGElementTagNameMap[K] | null;
9
- query<K extends MathTags>(selectors: K): MathMLElementTagNameMap[K] | null;
10
- query<E extends Element = Element>(selectors: string): E | null;
11
- queryAll<K extends Tags>(selectors: K): NodeListOf<HTMLElementTagNameMap[K]>;
12
- queryAll<K extends SVGTags>(selectors: K): NodeListOf<SVGElementTagNameMap[K]>;
13
- queryAll<K extends MathTags>(selectors: K): NodeListOf<MathMLElementTagNameMap[K]>;
14
- queryAll<E extends Element = Element>(selectors: string): NodeListOf<E>;
15
- apply(root: ShadowRoot): void;
3
+ export declare class HTMLResult extends JoistShadowResult {
4
+ setup(root: ShadowRoot): void;
16
5
  }
17
6
  export declare function html(strings: TemplateStringsArray, ...values: any[]): HTMLResult;
18
7
  export declare const styleSheetCache: WeakMap<TemplateStringsArray, CSSStyleSheet>;
19
- export declare class CSSResult extends ShadowResult {
20
- apply(root: ShadowRoot): void;
8
+ export declare class CSSResult extends JoistShadowResult {
9
+ setup(root: ShadowRoot): void;
21
10
  }
22
11
  export declare function css(strings: TemplateStringsArray): CSSResult;
23
- export {};
@@ -1,13 +1,7 @@
1
- import { ShadowResult } from './result.js';
1
+ import { JoistShadowResult } from './result.js';
2
2
  export const htmlTemplateCache = new WeakMap();
3
- export class HTMLResult extends ShadowResult {
4
- query(query) {
5
- return this.shadow.querySelector(query);
6
- }
7
- queryAll(query) {
8
- return this.shadow.querySelectorAll(query);
9
- }
10
- apply(root) {
3
+ export class HTMLResult extends JoistShadowResult {
4
+ setup(root) {
11
5
  let template;
12
6
  if (htmlTemplateCache.has(this.strings)) {
13
7
  template = htmlTemplateCache.get(this.strings);
@@ -24,8 +18,8 @@ export function html(strings, ...values) {
24
18
  return new HTMLResult(strings, ...values);
25
19
  }
26
20
  export const styleSheetCache = new WeakMap();
27
- export class CSSResult extends ShadowResult {
28
- apply(root) {
21
+ export class CSSResult extends JoistShadowResult {
22
+ setup(root) {
29
23
  let sheet;
30
24
  if (styleSheetCache.has(this.strings)) {
31
25
  sheet = styleSheetCache.get(this.strings);
@@ -1 +1 @@
1
- {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA6C,CAAC;AAE1F,MAAM,OAAO,UAAW,SAAQ,YAAY;IAK1C,KAAK,CAAiB,KAAQ;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,CAAI,KAAK,CAAC,CAAC;IAC7C,CAAC;IAMD,QAAQ,CAAiB,KAAQ;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAI,KAAK,CAAC,CAAC;IAChD,CAAC;IAKD,KAAK,CAAC,IAAgB;QACpB,IAAI,QAA6B,CAAC;QAElC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAwB,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAE9C,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAa;IAClE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAuC,CAAC;AAElF,MAAM,OAAO,SAAU,SAAQ,YAAY;IACzC,KAAK,CAAC,IAAgB;QACpB,IAAI,KAAoB,CAAC;QAEzB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAkB,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAE5B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAC,OAA6B;IAC/C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,OAA6B;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"tags.js","sourceRoot":"","sources":["../../src/lib/tags.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAA6C,CAAC;AAE1F,MAAM,OAAO,UAAW,SAAQ,iBAAiB;IAC/C,KAAK,CAAC,IAAgB;QACpB,IAAI,QAA6B,CAAC;QAElC,IAAI,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,QAAQ,GAAG,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAwB,CAAC;QACxE,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;YAE9C,QAAQ,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1C,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChD,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAC,OAA6B,EAAE,GAAG,MAAa;IAClE,OAAO,IAAI,UAAU,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,EAAuC,CAAC;AAElF,MAAM,OAAO,SAAU,SAAQ,iBAAiB;IAC9C,KAAK,CAAC,IAAgB;QACpB,IAAI,KAAoB,CAAC;QAEzB,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YACtC,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAkB,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,aAAa,EAAE,CAAC;YAE5B,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,kBAAkB,GAAG,CAAC,GAAG,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;IAChE,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAC,OAA6B;IAC/C,OAAO,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,MAAM,CAAC,OAA6B;IAC3C,IAAI,GAAG,GAAG,EAAE,CAAC;IAEb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
package/target/lib.d.ts CHANGED
@@ -1,6 +1,5 @@
1
- export { ShadowResult as TemplateResult } from './lib/result.js';
1
+ export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
2
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
- export { shadow } from './lib/shadow.js';
4
3
  export { attr } from './lib/attr.js';
5
4
  export { listen } from './lib/listen.js';
6
5
  export { element } from './lib/element.js';
package/target/lib.js CHANGED
@@ -1,6 +1,5 @@
1
- export { ShadowResult as TemplateResult } from './lib/result.js';
1
+ export { JoistShadowResult as TemplateResult } from './lib/result.js';
2
2
  export { css, html, HTMLResult, CSSResult } from './lib/tags.js';
3
- export { shadow } from './lib/shadow.js';
4
3
  export { attr } from './lib/attr.js';
5
4
  export { listen } from './lib/listen.js';
6
5
  export { element } from './lib/element.js';
package/target/lib.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,IAAI,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC"}
@@ -1,40 +0,0 @@
1
- import { expect } from '@open-wc/testing';
2
-
3
- import { css, html } from './tags.js';
4
- import { shadow } from './shadow.js';
5
-
6
- describe('template', () => {
7
- it('should apply a stylesheet', () => {
8
- class MyElement extends HTMLElement {
9
- @shadow styles = css`
10
- :host {
11
- display: flex;
12
- }
13
- `;
14
- }
15
-
16
- customElements.define('template-1', MyElement);
17
-
18
- const el = new MyElement();
19
-
20
- expect(el.shadowRoot!.adoptedStyleSheets.length).to.eq(1);
21
- });
22
-
23
- it('should apply html', () => {
24
- class MyElement extends HTMLElement {
25
- @shadow styles = css`
26
- :host {
27
- display: flex;
28
- }
29
- `;
30
-
31
- @shadow template = html`<slot></slot>`;
32
- }
33
-
34
- customElements.define('template-2', MyElement);
35
-
36
- const el = new MyElement();
37
-
38
- expect(el.shadowRoot?.innerHTML).to.eq('<slot></slot>');
39
- });
40
- });
package/src/lib/shadow.ts DELETED
@@ -1,16 +0,0 @@
1
- import { ShadowResult } from './result.js';
2
-
3
- export function shadow<This extends HTMLElement, T extends ShadowResult>(
4
- _: undefined,
5
- _ctx: ClassFieldDecoratorContext<This, T>
6
- ) {
7
- return function (this: This, result: T) {
8
- if (!this.shadowRoot) {
9
- this.attachShadow({ mode: 'open' });
10
- }
11
-
12
- result.execute(this.shadowRoot!);
13
-
14
- return result;
15
- };
16
- }
@@ -1,2 +0,0 @@
1
- import { ShadowResult } from './result.js';
2
- export declare function shadow<This extends HTMLElement, T extends ShadowResult>(_: undefined, _ctx: ClassFieldDecoratorContext<This, T>): (this: This, result: T) => T;
@@ -1,10 +0,0 @@
1
- export function shadow(_, _ctx) {
2
- return function (result) {
3
- if (!this.shadowRoot) {
4
- this.attachShadow({ mode: 'open' });
5
- }
6
- result.execute(this.shadowRoot);
7
- return result;
8
- };
9
- }
10
- //# sourceMappingURL=shadow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shadow.js","sourceRoot":"","sources":["../../src/lib/shadow.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CACpB,CAAY,EACZ,IAAyC;IAEzC,OAAO,UAAsB,MAAS;QACpC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;QAEjC,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,69 +0,0 @@
1
- import { __esDecorate, __runInitializers } from "tslib";
2
- import { expect } from '@open-wc/testing';
3
- import { css, html } from './tags.js';
4
- import { shadow } from './shadow.js';
5
- describe('template', () => {
6
- it('should apply a stylesheet', () => {
7
- let MyElement = (() => {
8
- let _classSuper = HTMLElement;
9
- let _styles_decorators;
10
- let _styles_initializers = [];
11
- let _styles_extraInitializers = [];
12
- return class MyElement extends _classSuper {
13
- static {
14
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
15
- _styles_decorators = [shadow];
16
- __esDecorate(null, null, _styles_decorators, { kind: "field", name: "styles", static: false, private: false, access: { has: obj => "styles" in obj, get: obj => obj.styles, set: (obj, value) => { obj.styles = value; } }, metadata: _metadata }, _styles_initializers, _styles_extraInitializers);
17
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
18
- }
19
- styles = __runInitializers(this, _styles_initializers, css `
20
- :host {
21
- display: flex;
22
- }
23
- `);
24
- constructor() {
25
- super(...arguments);
26
- __runInitializers(this, _styles_extraInitializers);
27
- }
28
- };
29
- })();
30
- customElements.define('template-1', MyElement);
31
- const el = new MyElement();
32
- expect(el.shadowRoot.adoptedStyleSheets.length).to.eq(1);
33
- });
34
- it('should apply html', () => {
35
- let MyElement = (() => {
36
- let _classSuper = HTMLElement;
37
- let _styles_decorators;
38
- let _styles_initializers = [];
39
- let _styles_extraInitializers = [];
40
- let _template_decorators;
41
- let _template_initializers = [];
42
- let _template_extraInitializers = [];
43
- return class MyElement extends _classSuper {
44
- static {
45
- const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
46
- _styles_decorators = [shadow];
47
- _template_decorators = [shadow];
48
- __esDecorate(null, null, _styles_decorators, { kind: "field", name: "styles", static: false, private: false, access: { has: obj => "styles" in obj, get: obj => obj.styles, set: (obj, value) => { obj.styles = value; } }, metadata: _metadata }, _styles_initializers, _styles_extraInitializers);
49
- __esDecorate(null, null, _template_decorators, { kind: "field", name: "template", static: false, private: false, access: { has: obj => "template" in obj, get: obj => obj.template, set: (obj, value) => { obj.template = value; } }, metadata: _metadata }, _template_initializers, _template_extraInitializers);
50
- if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
51
- }
52
- styles = __runInitializers(this, _styles_initializers, css `
53
- :host {
54
- display: flex;
55
- }
56
- `);
57
- template = (__runInitializers(this, _styles_extraInitializers), __runInitializers(this, _template_initializers, html `<slot></slot>`));
58
- constructor() {
59
- super(...arguments);
60
- __runInitializers(this, _template_extraInitializers);
61
- }
62
- };
63
- })();
64
- customElements.define('template-2', MyElement);
65
- const el = new MyElement();
66
- expect(el.shadowRoot?.innerHTML).to.eq('<slot></slot>');
67
- });
68
- });
69
- //# sourceMappingURL=shadow.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shadow.test.js","sourceRoot":"","sources":["../../src/lib/shadow.test.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;YAC7B,SAAS;8BAAS,WAAW;;;;yBAA7B,SAAU,SAAQ,WAAW;;;0CAChC,MAAM;oBAAC,oKAAA,MAAM,6BAAN,MAAM,uFAIZ;;;gBAJM,MAAM,iDAAG,GAAG,CAAA;;;;OAInB,EAAC;;;;;;;QAGJ,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,UAAW,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mBAAmB,EAAE,GAAG,EAAE;YACrB,SAAS;8BAAS,WAAW;;;;;;;yBAA7B,SAAU,SAAQ,WAAW;;;0CAChC,MAAM;4CAMN,MAAM;oBANC,oKAAA,MAAM,6BAAN,MAAM,uFAIZ;oBAEM,0KAAA,QAAQ,6BAAR,QAAQ,2FAAuB;;;gBAN/B,MAAM,iDAAG,GAAG,CAAA;;;;OAInB,EAAC;gBAEM,QAAQ,wGAAG,IAAI,CAAA,eAAe,GAAC;;;;;;;QAGzC,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;QAE/C,MAAM,EAAE,GAAG,IAAI,SAAS,EAAE,CAAC;QAE3B,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC;IAC1D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}