@furystack/shades 11.0.35 → 11.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/README.md +86 -0
  3. package/esm/compile-route.spec.d.ts +2 -0
  4. package/esm/compile-route.spec.d.ts.map +1 -0
  5. package/esm/compile-route.spec.js +34 -0
  6. package/esm/compile-route.spec.js.map +1 -0
  7. package/esm/components/route-link.d.ts.map +1 -1
  8. package/esm/components/route-link.js +4 -5
  9. package/esm/components/route-link.js.map +1 -1
  10. package/esm/components/route-link.spec.js +1 -1
  11. package/esm/components/route-link.spec.js.map +1 -1
  12. package/esm/css-generator.d.ts +50 -0
  13. package/esm/css-generator.d.ts.map +1 -0
  14. package/esm/css-generator.js +107 -0
  15. package/esm/css-generator.js.map +1 -0
  16. package/esm/css-generator.spec.d.ts +2 -0
  17. package/esm/css-generator.spec.d.ts.map +1 -0
  18. package/esm/css-generator.spec.js +162 -0
  19. package/esm/css-generator.spec.js.map +1 -0
  20. package/esm/index.d.ts +2 -0
  21. package/esm/index.d.ts.map +1 -1
  22. package/esm/index.js +2 -0
  23. package/esm/index.js.map +1 -1
  24. package/esm/models/css-object.d.ts +33 -0
  25. package/esm/models/css-object.d.ts.map +1 -0
  26. package/esm/models/css-object.js +2 -0
  27. package/esm/models/css-object.js.map +1 -0
  28. package/esm/models/index.d.ts +1 -0
  29. package/esm/models/index.d.ts.map +1 -1
  30. package/esm/models/index.js +1 -0
  31. package/esm/models/index.js.map +1 -1
  32. package/esm/shade.d.ts +18 -2
  33. package/esm/shade.d.ts.map +1 -1
  34. package/esm/shade.js +8 -0
  35. package/esm/shade.js.map +1 -1
  36. package/esm/shade.spec.d.ts +2 -0
  37. package/esm/shade.spec.d.ts.map +1 -0
  38. package/esm/shade.spec.js +197 -0
  39. package/esm/shade.spec.js.map +1 -0
  40. package/esm/style-manager.d.ts +65 -0
  41. package/esm/style-manager.d.ts.map +1 -0
  42. package/esm/style-manager.js +95 -0
  43. package/esm/style-manager.js.map +1 -0
  44. package/esm/style-manager.spec.d.ts +2 -0
  45. package/esm/style-manager.spec.d.ts.map +1 -0
  46. package/esm/style-manager.spec.js +179 -0
  47. package/esm/style-manager.spec.js.map +1 -0
  48. package/esm/styled-element.spec.d.ts +2 -0
  49. package/esm/styled-element.spec.d.ts.map +1 -0
  50. package/esm/styled-element.spec.js +86 -0
  51. package/esm/styled-element.spec.js.map +1 -0
  52. package/esm/styled-shade.spec.d.ts +2 -0
  53. package/esm/styled-shade.spec.d.ts.map +1 -0
  54. package/esm/styled-shade.spec.js +66 -0
  55. package/esm/styled-shade.spec.js.map +1 -0
  56. package/package.json +1 -1
  57. package/src/compile-route.spec.ts +39 -0
  58. package/src/components/route-link.spec.tsx +1 -1
  59. package/src/components/route-link.tsx +4 -5
  60. package/src/css-generator.spec.ts +183 -0
  61. package/src/css-generator.ts +117 -0
  62. package/src/index.ts +2 -0
  63. package/src/models/css-object.ts +34 -0
  64. package/src/models/index.ts +1 -0
  65. package/src/shade.spec.tsx +238 -0
  66. package/src/shade.ts +29 -2
  67. package/src/style-manager.spec.ts +229 -0
  68. package/src/style-manager.ts +104 -0
  69. package/src/styled-element.spec.tsx +117 -0
  70. package/src/styled-shade.spec.ts +86 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Base CSS properties - subset of CSSStyleDeclaration
3
+ */
4
+ export type CSSProperties = Partial<CSSStyleDeclaration>;
5
+ /**
6
+ * Selector key pattern for pseudo-classes and nested selectors
7
+ * Examples: '&:hover', '&:active', '& .className', '& > div'
8
+ */
9
+ export type SelectorKey = `&${string}`;
10
+ /**
11
+ * CSS object supporting nested selectors for component-level styling.
12
+ *
13
+ * Use this type for the `css` property in Shade components to define
14
+ * styles that are injected as a stylesheet during component registration.
15
+ *
16
+ * @example
17
+ * ```typescript
18
+ * const styles: CSSObject = {
19
+ * padding: '16px',
20
+ * backgroundColor: 'white',
21
+ * '&:hover': {
22
+ * backgroundColor: '#f0f0f0'
23
+ * },
24
+ * '& .title': {
25
+ * fontWeight: 'bold'
26
+ * }
27
+ * }
28
+ * ```
29
+ */
30
+ export type CSSObject = CSSProperties & {
31
+ [K in SelectorKey]?: CSSProperties;
32
+ };
33
+ //# sourceMappingURL=css-object.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-object.d.ts","sourceRoot":"","sources":["../../src/models/css-object.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AAExD;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,IAAI,MAAM,EAAE,CAAA;AAEtC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG;KACrC,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,aAAa;CACnC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=css-object.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"css-object.js","sourceRoot":"","sources":["../../src/models/css-object.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  export * from './children-list.js';
2
+ export * from './css-object.js';
2
3
  export * from './partial-element.js';
3
4
  export * from './render-options.js';
4
5
  export * from './selection-state.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA"}
@@ -1,4 +1,5 @@
1
1
  export * from './children-list.js';
2
+ export * from './css-object.js';
2
3
  export * from './partial-element.js';
3
4
  export * from './render-options.js';
4
5
  export * from './selection-state.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,sBAAsB,CAAA;AACpC,cAAc,qBAAqB,CAAA;AACnC,cAAc,sBAAsB,CAAA;AACpC,cAAc,sBAAsB,CAAA"}
package/esm/shade.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import type { Constructable } from '@furystack/inject';
2
- import type { ChildrenList, PartialElement, RenderOptions } from './models/index.js';
2
+ import type { ChildrenList, CSSObject, PartialElement, RenderOptions } from './models/index.js';
3
3
  export type ShadeOptions<TProps, TElementBase extends HTMLElement> = {
4
4
  /**
5
5
  * Explicit shadow dom name. Will fall back to 'shade-{guid}' if not provided
@@ -30,9 +30,25 @@ export type ShadeOptions<TProps, TElementBase extends HTMLElement> = {
30
30
  */
31
31
  elementBase?: Constructable<TElementBase>;
32
32
  /**
33
- * A default style that will be applied to the element. Can be overridden by external styles.
33
+ * A default style that will be applied to the element as inline styles.
34
+ * Can be overridden by external styles on instances.
34
35
  */
35
36
  style?: Partial<CSSStyleDeclaration>;
37
+ /**
38
+ * CSS styles injected as a stylesheet during component registration.
39
+ * Supports pseudo-selectors (&:hover, &:active) and nested selectors (& .class).
40
+ * Use this for component-level styling that doesn't need per-instance overrides.
41
+ *
42
+ * @example
43
+ * ```typescript
44
+ * css: {
45
+ * padding: '16px',
46
+ * '&:hover': { backgroundColor: '#f0f0f0' },
47
+ * '& .title': { fontWeight: 'bold' }
48
+ * }
49
+ * ```
50
+ */
51
+ css?: CSSObject;
36
52
  };
37
53
  /**
38
54
  * Factory method for creating Shade components
@@ -1 +1 @@
1
- {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAKpF,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,YAAY,SAAS,WAAW,IAAI;IACnE;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;IAErF;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KACzC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAE/E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,IAAI,CAAA;IAEjE;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,IAAI,CAAA;IAEjE;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAEzC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;CACrC,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,EAAE,YAAY,SAAS,WAAW,GAAG,WAAW,EAC1E,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MA4N7B,OAAO,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,YAAY,KAY9D,GAAG,CAAC,OAEpB,CAAA"}
1
+ {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAGtD,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAM/F,MAAM,MAAM,YAAY,CAAC,MAAM,EAAE,YAAY,SAAS,WAAW,IAAI;IACnE;;OAEG;IACH,aAAa,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;IAErF;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KACzC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAE/E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,IAAI,CAAA;IAEjE;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,YAAY,CAAC,KAAK,IAAI,CAAA;IAEjE;;OAEG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB;;OAEG;IACH,WAAW,CAAC,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAEzC;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC,CAAA;IAEpC;;;;;;;;;;;;;OAaG;IACH,GAAG,CAAC,EAAE,SAAS,CAAA;CAChB,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,EAAE,YAAY,SAAS,WAAW,GAAG,WAAW,EAC1E,GAAG,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,MAiO7B,OAAO,MAAM,GAAG,cAAc,CAAC,YAAY,CAAC,EAAE,WAAW,YAAY,KAgB9D,GAAG,CAAC,OAEpB,CAAA"}
package/esm/shade.js CHANGED
@@ -3,6 +3,7 @@ import { ObservableValue } from '@furystack/utils';
3
3
  import { LocationService } from './services/location-service.js';
4
4
  import { ResourceManager } from './services/resource-manager.js';
5
5
  import { attachProps, attachStyles } from './shade-component.js';
6
+ import { StyleManager } from './style-manager.js';
6
7
  /**
7
8
  * Factory method for creating Shade components
8
9
  * @param o The options object for component creation
@@ -13,6 +14,10 @@ export const Shade = (o) => {
13
14
  const customElementName = o.shadowDomName;
14
15
  const existing = customElements.get(customElementName);
15
16
  if (!existing) {
17
+ // Register CSS styles if provided
18
+ if (o.css) {
19
+ StyleManager.registerComponentStyles(customElementName, o.css, o.elementBaseName);
20
+ }
16
21
  const ElementBase = o.elementBase || HTMLElement;
17
22
  customElements.define(customElementName, class extends ElementBase {
18
23
  _renderCount = 0;
@@ -189,6 +194,9 @@ export const Shade = (o) => {
189
194
  });
190
195
  el.props = props || {};
191
196
  el.shadeChildren = children;
197
+ if (o.elementBaseName) {
198
+ el.setAttribute('is', customElementName);
199
+ }
192
200
  attachStyles(el, { style: o.style });
193
201
  attachProps(el, props);
194
202
  return el;
package/esm/shade.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shade.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade.spec.d.ts","sourceRoot":"","sources":["../src/shade.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,197 @@
1
+ import { Injector } from '@furystack/inject';
2
+ import { sleepAsync, usingAsync } from '@furystack/utils';
3
+ import { afterEach, beforeEach, describe, expect, it } from 'vitest';
4
+ import { initializeShadeRoot } from './initialize.js';
5
+ import { createComponent } from './shade-component.js';
6
+ import { Shade } from './shade.js';
7
+ describe('Shade edge cases', () => {
8
+ beforeEach(() => {
9
+ document.body.innerHTML = '<div id="root"></div>';
10
+ });
11
+ afterEach(() => {
12
+ document.body.innerHTML = '';
13
+ });
14
+ describe('duplicate shadowDomName error', () => {
15
+ it('should throw an error when registering a duplicate shadowDomName', () => {
16
+ // First registration should succeed
17
+ Shade({
18
+ shadowDomName: 'shade-duplicate-test',
19
+ render: () => createComponent("div", null, "First"),
20
+ });
21
+ // Second registration with the same name should throw
22
+ expect(() => {
23
+ Shade({
24
+ shadowDomName: 'shade-duplicate-test',
25
+ render: () => createComponent("div", null, "Second"),
26
+ });
27
+ }).toThrow("A custom shade with shadow DOM name 'shade-duplicate-test' has already been registered!");
28
+ });
29
+ it('should include the duplicate name in the error message', () => {
30
+ const uniqueName = `shade-duplicate-name-in-error-${Date.now()}`;
31
+ Shade({
32
+ shadowDomName: uniqueName,
33
+ render: () => createComponent("div", null, "First"),
34
+ });
35
+ try {
36
+ Shade({
37
+ shadowDomName: uniqueName,
38
+ render: () => createComponent("div", null, "Second"),
39
+ });
40
+ // Should not reach here
41
+ expect.fail('Expected an error to be thrown');
42
+ }
43
+ catch (e) {
44
+ expect(e.message).toContain(uniqueName);
45
+ }
46
+ });
47
+ });
48
+ describe('injector from props', () => {
49
+ it('should use props injector for child component instead of inheriting from parent', async () => {
50
+ await usingAsync(new Injector(), async (rootInjector) => {
51
+ const propsInjector = new Injector();
52
+ const rootElement = document.getElementById('root');
53
+ let parentCapturedInjector;
54
+ let childCapturedInjector;
55
+ const ChildComponent = Shade({
56
+ shadowDomName: 'shade-injector-child-props-test',
57
+ render: ({ injector }) => {
58
+ childCapturedInjector = injector;
59
+ return createComponent("div", null, "Child");
60
+ },
61
+ });
62
+ const ParentComponent = Shade({
63
+ shadowDomName: 'shade-injector-parent-props-test',
64
+ render: ({ injector, children }) => {
65
+ parentCapturedInjector = injector;
66
+ return createComponent("div", null, children);
67
+ },
68
+ });
69
+ initializeShadeRoot({
70
+ injector: rootInjector,
71
+ rootElement,
72
+ jsxElement: (createComponent(ParentComponent, null,
73
+ createComponent(ChildComponent, { injector: propsInjector }))),
74
+ });
75
+ await sleepAsync(10);
76
+ // Parent should use root injector (inherited from parent)
77
+ expect(parentCapturedInjector).toBe(rootInjector);
78
+ // Child should use the props injector, not the parent's
79
+ expect(childCapturedInjector).toBe(propsInjector);
80
+ expect(childCapturedInjector).not.toBe(rootInjector);
81
+ });
82
+ });
83
+ });
84
+ describe('BroadcastChannel cross-tab communication', () => {
85
+ it('should update stored state when receiving BroadcastChannel message with matching key', async () => {
86
+ const mockedStorage = new Map();
87
+ const store = {
88
+ getItem: (key) => mockedStorage.get(key) || null,
89
+ setItem: (key, value) => mockedStorage.set(key, value),
90
+ length: 0,
91
+ clear: () => mockedStorage.clear(),
92
+ key: (index) => Array.from(mockedStorage.keys())[index] || null,
93
+ removeItem: (key) => mockedStorage.delete(key),
94
+ };
95
+ await usingAsync(new Injector(), async (injector) => {
96
+ const rootElement = document.getElementById('root');
97
+ const stateKey = 'broadcast-test-key';
98
+ const ExampleComponent = Shade({
99
+ shadowDomName: 'shade-broadcast-channel-test',
100
+ render: ({ useStoredState }) => {
101
+ const [value] = useStoredState(stateKey, 'initial', store);
102
+ return createComponent("div", { id: "value" }, value);
103
+ },
104
+ });
105
+ initializeShadeRoot({
106
+ injector,
107
+ rootElement,
108
+ jsxElement: createComponent(ExampleComponent, null),
109
+ });
110
+ await sleepAsync(50);
111
+ expect(document.getElementById('value')?.textContent).toBe('initial');
112
+ // Simulate cross-tab message via BroadcastChannel
113
+ const channel = new BroadcastChannel('useStoredState-broadcast-channel');
114
+ channel.postMessage({ key: stateKey, value: 'updated-from-other-tab' });
115
+ await sleepAsync(50);
116
+ expect(document.getElementById('value')?.textContent).toBe('updated-from-other-tab');
117
+ channel.close();
118
+ });
119
+ });
120
+ it('should ignore BroadcastChannel messages with different key', async () => {
121
+ const mockedStorage = new Map();
122
+ const store = {
123
+ getItem: (key) => mockedStorage.get(key) || null,
124
+ setItem: (key, value) => mockedStorage.set(key, value),
125
+ length: 0,
126
+ clear: () => mockedStorage.clear(),
127
+ key: (index) => Array.from(mockedStorage.keys())[index] || null,
128
+ removeItem: (key) => mockedStorage.delete(key),
129
+ };
130
+ await usingAsync(new Injector(), async (injector) => {
131
+ const rootElement = document.getElementById('root');
132
+ const stateKey = 'broadcast-filter-test-key';
133
+ const ExampleComponent = Shade({
134
+ shadowDomName: 'shade-broadcast-channel-filter-test',
135
+ render: ({ useStoredState }) => {
136
+ const [value] = useStoredState(stateKey, 'initial', store);
137
+ return createComponent("div", { id: "value" }, value);
138
+ },
139
+ });
140
+ initializeShadeRoot({
141
+ injector,
142
+ rootElement,
143
+ jsxElement: createComponent(ExampleComponent, null),
144
+ });
145
+ await sleepAsync(50);
146
+ expect(document.getElementById('value')?.textContent).toBe('initial');
147
+ // Simulate cross-tab message with different key
148
+ const channel = new BroadcastChannel('useStoredState-broadcast-channel');
149
+ channel.postMessage({ key: 'different-key', value: 'should-be-ignored' });
150
+ await sleepAsync(50);
151
+ // Value should remain unchanged
152
+ expect(document.getElementById('value')?.textContent).toBe('initial');
153
+ channel.close();
154
+ });
155
+ });
156
+ it('should cleanup BroadcastChannel on component disposal', async () => {
157
+ const mockedStorage = new Map();
158
+ const store = {
159
+ getItem: (key) => mockedStorage.get(key) || null,
160
+ setItem: (key, value) => mockedStorage.set(key, value),
161
+ length: 0,
162
+ clear: () => mockedStorage.clear(),
163
+ key: (index) => Array.from(mockedStorage.keys())[index] || null,
164
+ removeItem: (key) => mockedStorage.delete(key),
165
+ };
166
+ await usingAsync(new Injector(), async (injector) => {
167
+ const rootElement = document.getElementById('root');
168
+ const stateKey = 'broadcast-cleanup-test-key';
169
+ const ExampleComponent = Shade({
170
+ shadowDomName: 'shade-broadcast-channel-cleanup-test',
171
+ render: ({ useStoredState }) => {
172
+ const [value] = useStoredState(stateKey, 'initial', store);
173
+ return createComponent("div", { id: "value" }, value);
174
+ },
175
+ });
176
+ initializeShadeRoot({
177
+ injector,
178
+ rootElement,
179
+ jsxElement: createComponent(ExampleComponent, null),
180
+ });
181
+ await sleepAsync(50);
182
+ expect(document.getElementById('value')?.textContent).toBe('initial');
183
+ // Remove the component from DOM
184
+ document.body.innerHTML = '';
185
+ await sleepAsync(50);
186
+ // Create a new channel to send a message (simulating another tab)
187
+ const channel = new BroadcastChannel('useStoredState-broadcast-channel');
188
+ // This should not cause any errors since the component's channel should be closed
189
+ channel.postMessage({ key: stateKey, value: 'should-not-crash' });
190
+ await sleepAsync(50);
191
+ channel.close();
192
+ // Test passes if no errors occur
193
+ });
194
+ });
195
+ });
196
+ });
197
+ //# sourceMappingURL=shade.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade.spec.js","sourceRoot":"","sources":["../src/shade.spec.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ import type { CSSObject } from './models/css-object.js';
2
+ /**
3
+ * Singleton that manages component CSS injection.
4
+ * Creates and maintains a shared `<style>` element in the document head,
5
+ * and tracks registered component styles to avoid duplicates.
6
+ */
7
+ declare class StyleManagerClass {
8
+ private styleElement;
9
+ private registeredComponents;
10
+ /**
11
+ * Gets or creates the shared style element
12
+ * @returns The style element for CSS injection
13
+ */
14
+ private getStyleElement;
15
+ /**
16
+ * Registers CSS styles for a component.
17
+ * Styles are only injected once per component (based on shadowDomName).
18
+ *
19
+ * @param shadowDomName - The unique component identifier (used as CSS selector)
20
+ * @param cssObject - The CSSObject containing styles and nested selectors
21
+ * @param elementBaseName - Optional base element name for customized built-in elements (e.g., 'a', 'button').
22
+ * When provided, generates selector like `a[is="component-name"]` instead of `component-name`
23
+ * @returns True if styles were injected, false if already registered
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // Regular custom element
28
+ * StyleManager.registerComponentStyles('my-button', {
29
+ * padding: '12px',
30
+ * '&:hover': { backgroundColor: 'blue' }
31
+ * })
32
+ *
33
+ * // Customized built-in element (extends anchor)
34
+ * StyleManager.registerComponentStyles('my-link', {
35
+ * color: 'blue',
36
+ * '&:hover': { textDecoration: 'underline' }
37
+ * }, 'a')
38
+ * // Generates: a[is="my-link"] { color: blue; }
39
+ * ```
40
+ */
41
+ registerComponentStyles(shadowDomName: string, cssObject: CSSObject, elementBaseName?: string): boolean;
42
+ /**
43
+ * Checks if a component's styles have already been registered
44
+ * @param shadowDomName - The component identifier to check
45
+ * @returns True if styles are already registered
46
+ */
47
+ isRegistered(shadowDomName: string): boolean;
48
+ /**
49
+ * Gets all registered component names (for debugging/testing)
50
+ * @returns Set of registered component names
51
+ */
52
+ getRegisteredComponents(): ReadonlySet<string>;
53
+ /**
54
+ * Clears all registered styles (useful for testing)
55
+ */
56
+ clear(): void;
57
+ }
58
+ /**
59
+ * Singleton instance for managing component CSS styles.
60
+ * Use this to register component-level styles that support
61
+ * pseudo-selectors and nested selectors.
62
+ */
63
+ export declare const StyleManager: StyleManagerClass;
64
+ export {};
65
+ //# sourceMappingURL=style-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-manager.d.ts","sourceRoot":"","sources":["../src/style-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAEvD;;;;GAIG;AACH,cAAM,iBAAiB;IACrB,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,oBAAoB,CAAoB;IAEhD;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,uBAAuB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO;IAiB9G;;;;OAIG;IACI,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO;IAInD;;;OAGG;IACI,uBAAuB,IAAI,WAAW,CAAC,MAAM,CAAC;IAIrD;;OAEG;IACI,KAAK,IAAI,IAAI;CAQrB;AAED;;;;GAIG;AACH,eAAO,MAAM,YAAY,mBAA0B,CAAA"}
@@ -0,0 +1,95 @@
1
+ import { generateCSS } from './css-generator.js';
2
+ /**
3
+ * Singleton that manages component CSS injection.
4
+ * Creates and maintains a shared `<style>` element in the document head,
5
+ * and tracks registered component styles to avoid duplicates.
6
+ */
7
+ class StyleManagerClass {
8
+ styleElement = null;
9
+ registeredComponents = new Set();
10
+ /**
11
+ * Gets or creates the shared style element
12
+ * @returns The style element for CSS injection
13
+ */
14
+ getStyleElement() {
15
+ if (!this.styleElement) {
16
+ this.styleElement = document.createElement('style');
17
+ this.styleElement.setAttribute('data-shades-styles', '');
18
+ document.head.appendChild(this.styleElement);
19
+ }
20
+ return this.styleElement;
21
+ }
22
+ /**
23
+ * Registers CSS styles for a component.
24
+ * Styles are only injected once per component (based on shadowDomName).
25
+ *
26
+ * @param shadowDomName - The unique component identifier (used as CSS selector)
27
+ * @param cssObject - The CSSObject containing styles and nested selectors
28
+ * @param elementBaseName - Optional base element name for customized built-in elements (e.g., 'a', 'button').
29
+ * When provided, generates selector like `a[is="component-name"]` instead of `component-name`
30
+ * @returns True if styles were injected, false if already registered
31
+ *
32
+ * @example
33
+ * ```typescript
34
+ * // Regular custom element
35
+ * StyleManager.registerComponentStyles('my-button', {
36
+ * padding: '12px',
37
+ * '&:hover': { backgroundColor: 'blue' }
38
+ * })
39
+ *
40
+ * // Customized built-in element (extends anchor)
41
+ * StyleManager.registerComponentStyles('my-link', {
42
+ * color: 'blue',
43
+ * '&:hover': { textDecoration: 'underline' }
44
+ * }, 'a')
45
+ * // Generates: a[is="my-link"] { color: blue; }
46
+ * ```
47
+ */
48
+ registerComponentStyles(shadowDomName, cssObject, elementBaseName) {
49
+ if (this.registeredComponents.has(shadowDomName)) {
50
+ return false;
51
+ }
52
+ const selector = elementBaseName ? `${elementBaseName}[is="${shadowDomName}"]` : shadowDomName;
53
+ const css = generateCSS(selector, cssObject);
54
+ if (css) {
55
+ const styleElement = this.getStyleElement();
56
+ styleElement.textContent += `\n/* ${shadowDomName} */\n${css}\n`;
57
+ this.registeredComponents.add(shadowDomName);
58
+ return true;
59
+ }
60
+ return false;
61
+ }
62
+ /**
63
+ * Checks if a component's styles have already been registered
64
+ * @param shadowDomName - The component identifier to check
65
+ * @returns True if styles are already registered
66
+ */
67
+ isRegistered(shadowDomName) {
68
+ return this.registeredComponents.has(shadowDomName);
69
+ }
70
+ /**
71
+ * Gets all registered component names (for debugging/testing)
72
+ * @returns Set of registered component names
73
+ */
74
+ getRegisteredComponents() {
75
+ return this.registeredComponents;
76
+ }
77
+ /**
78
+ * Clears all registered styles (useful for testing)
79
+ */
80
+ clear() {
81
+ this.registeredComponents.clear();
82
+ if (this.styleElement) {
83
+ this.styleElement.textContent = '';
84
+ this.styleElement.remove();
85
+ this.styleElement = null;
86
+ }
87
+ }
88
+ }
89
+ /**
90
+ * Singleton instance for managing component CSS styles.
91
+ * Use this to register component-level styles that support
92
+ * pseudo-selectors and nested selectors.
93
+ */
94
+ export const StyleManager = new StyleManagerClass();
95
+ //# sourceMappingURL=style-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-manager.js","sourceRoot":"","sources":["../src/style-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAGhD;;;;GAIG;AACH,MAAM,iBAAiB;IACb,YAAY,GAA4B,IAAI,CAAA;IAC5C,oBAAoB,GAAG,IAAI,GAAG,EAAU,CAAA;IAEhD;;;OAGG;IACK,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAA;YACxD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC9C,CAAC;QACD,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;OAyBG;IACI,uBAAuB,CAAC,aAAqB,EAAE,SAAoB,EAAE,eAAwB;QAClG,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACjD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,eAAe,QAAQ,aAAa,IAAI,CAAC,CAAC,CAAC,aAAa,CAAA;QAC9F,MAAM,GAAG,GAAG,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAC5C,IAAI,GAAG,EAAE,CAAC;YACR,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;YAC3C,YAAY,CAAC,WAAW,IAAI,QAAQ,aAAa,QAAQ,GAAG,IAAI,CAAA;YAChE,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;YAC5C,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED;;;;OAIG;IACI,YAAY,CAAC,aAAqB;QACvC,OAAO,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;IACrD,CAAC;IAED;;;OAGG;IACI,uBAAuB;QAC5B,OAAO,IAAI,CAAC,oBAAoB,CAAA;IAClC,CAAC;IAED;;OAEG;IACI,KAAK;QACV,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,CAAA;QACjC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,EAAE,CAAA;YAClC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA;YAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QAC1B,CAAC;IACH,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,iBAAiB,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=style-manager.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style-manager.spec.d.ts","sourceRoot":"","sources":["../src/style-manager.spec.ts"],"names":[],"mappings":""}