@furystack/shades 11.1.0 → 12.0.1

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 (166) hide show
  1. package/CHANGELOG.md +312 -0
  2. package/README.md +13 -13
  3. package/esm/component-factory.spec.js +13 -5
  4. package/esm/component-factory.spec.js.map +1 -1
  5. package/esm/components/index.d.ts +4 -1
  6. package/esm/components/index.d.ts.map +1 -1
  7. package/esm/components/index.js +4 -1
  8. package/esm/components/index.js.map +1 -1
  9. package/esm/components/lazy-load.d.ts +2 -4
  10. package/esm/components/lazy-load.d.ts.map +1 -1
  11. package/esm/components/lazy-load.js +40 -24
  12. package/esm/components/lazy-load.js.map +1 -1
  13. package/esm/components/lazy-load.spec.js +57 -50
  14. package/esm/components/lazy-load.spec.js.map +1 -1
  15. package/esm/components/link-to-route.d.ts +2 -0
  16. package/esm/components/link-to-route.d.ts.map +1 -1
  17. package/esm/components/link-to-route.js +3 -2
  18. package/esm/components/link-to-route.js.map +1 -1
  19. package/esm/components/link-to-route.spec.js +13 -9
  20. package/esm/components/link-to-route.spec.js.map +1 -1
  21. package/esm/components/nested-route-link.d.ts +62 -0
  22. package/esm/components/nested-route-link.d.ts.map +1 -0
  23. package/esm/components/nested-route-link.js +66 -0
  24. package/esm/components/nested-route-link.js.map +1 -0
  25. package/esm/components/nested-route-link.spec.d.ts +2 -0
  26. package/esm/components/nested-route-link.spec.d.ts.map +1 -0
  27. package/esm/components/nested-route-link.spec.js +179 -0
  28. package/esm/components/nested-route-link.spec.js.map +1 -0
  29. package/esm/components/nested-route-types.d.ts +37 -0
  30. package/esm/components/nested-route-types.d.ts.map +1 -0
  31. package/esm/components/nested-route-types.js +2 -0
  32. package/esm/components/nested-route-types.js.map +1 -0
  33. package/esm/components/nested-router.d.ts +103 -0
  34. package/esm/components/nested-router.d.ts.map +1 -0
  35. package/esm/components/nested-router.js +183 -0
  36. package/esm/components/nested-router.js.map +1 -0
  37. package/esm/components/nested-router.spec.d.ts +2 -0
  38. package/esm/components/nested-router.spec.d.ts.map +1 -0
  39. package/esm/components/nested-router.spec.js +737 -0
  40. package/esm/components/nested-router.spec.js.map +1 -0
  41. package/esm/components/route-link.d.ts +4 -0
  42. package/esm/components/route-link.d.ts.map +1 -1
  43. package/esm/components/route-link.js +5 -5
  44. package/esm/components/route-link.js.map +1 -1
  45. package/esm/components/route-link.spec.js +16 -12
  46. package/esm/components/route-link.spec.js.map +1 -1
  47. package/esm/components/router.d.ts +20 -2
  48. package/esm/components/router.d.ts.map +1 -1
  49. package/esm/components/router.js +12 -7
  50. package/esm/components/router.js.map +1 -1
  51. package/esm/components/router.spec.js +141 -74
  52. package/esm/components/router.spec.js.map +1 -1
  53. package/esm/initialize.d.ts +11 -0
  54. package/esm/initialize.d.ts.map +1 -1
  55. package/esm/initialize.js +5 -0
  56. package/esm/initialize.js.map +1 -1
  57. package/esm/jsx.d.ts +83 -2
  58. package/esm/jsx.d.ts.map +1 -1
  59. package/esm/models/children-list.d.ts +5 -1
  60. package/esm/models/children-list.d.ts.map +1 -1
  61. package/esm/models/partial-element.d.ts +12 -2
  62. package/esm/models/partial-element.d.ts.map +1 -1
  63. package/esm/models/render-options.d.ts +89 -3
  64. package/esm/models/render-options.d.ts.map +1 -1
  65. package/esm/models/selection-state.d.ts +4 -0
  66. package/esm/models/selection-state.d.ts.map +1 -1
  67. package/esm/services/location-service.d.ts +11 -0
  68. package/esm/services/location-service.d.ts.map +1 -1
  69. package/esm/services/location-service.js +11 -0
  70. package/esm/services/location-service.js.map +1 -1
  71. package/esm/services/resource-manager.d.ts +24 -0
  72. package/esm/services/resource-manager.d.ts.map +1 -1
  73. package/esm/services/resource-manager.js +36 -1
  74. package/esm/services/resource-manager.js.map +1 -1
  75. package/esm/services/resource-manager.spec.js +102 -0
  76. package/esm/services/resource-manager.spec.js.map +1 -1
  77. package/esm/services/screen-service.d.ts +81 -4
  78. package/esm/services/screen-service.d.ts.map +1 -1
  79. package/esm/services/screen-service.js +75 -4
  80. package/esm/services/screen-service.js.map +1 -1
  81. package/esm/services/screen-service.spec.js +91 -7
  82. package/esm/services/screen-service.spec.js.map +1 -1
  83. package/esm/shade-component.d.ts +17 -4
  84. package/esm/shade-component.d.ts.map +1 -1
  85. package/esm/shade-component.js +67 -5
  86. package/esm/shade-component.js.map +1 -1
  87. package/esm/shade-host-props-ref.integration.spec.d.ts +2 -0
  88. package/esm/shade-host-props-ref.integration.spec.d.ts.map +1 -0
  89. package/esm/shade-host-props-ref.integration.spec.js +381 -0
  90. package/esm/shade-host-props-ref.integration.spec.js.map +1 -0
  91. package/esm/shade-resources.integration.spec.js +208 -39
  92. package/esm/shade-resources.integration.spec.js.map +1 -1
  93. package/esm/shade.d.ts +20 -17
  94. package/esm/shade.d.ts.map +1 -1
  95. package/esm/shade.js +172 -33
  96. package/esm/shade.js.map +1 -1
  97. package/esm/shade.spec.js +31 -30
  98. package/esm/shade.spec.js.map +1 -1
  99. package/esm/shades.integration.spec.js +135 -72
  100. package/esm/shades.integration.spec.js.map +1 -1
  101. package/esm/style-manager.d.ts +2 -2
  102. package/esm/style-manager.js +2 -2
  103. package/esm/svg-types.d.ts +389 -0
  104. package/esm/svg-types.d.ts.map +1 -0
  105. package/esm/svg-types.js +9 -0
  106. package/esm/svg-types.js.map +1 -0
  107. package/esm/svg.d.ts +15 -0
  108. package/esm/svg.d.ts.map +1 -0
  109. package/esm/svg.js +76 -0
  110. package/esm/svg.js.map +1 -0
  111. package/esm/svg.spec.d.ts +2 -0
  112. package/esm/svg.spec.d.ts.map +1 -0
  113. package/esm/svg.spec.js +80 -0
  114. package/esm/svg.spec.js.map +1 -0
  115. package/esm/vnode.d.ts +103 -0
  116. package/esm/vnode.d.ts.map +1 -0
  117. package/esm/vnode.integration.spec.d.ts +2 -0
  118. package/esm/vnode.integration.spec.d.ts.map +1 -0
  119. package/esm/vnode.integration.spec.js +494 -0
  120. package/esm/vnode.integration.spec.js.map +1 -0
  121. package/esm/vnode.js +453 -0
  122. package/esm/vnode.js.map +1 -0
  123. package/esm/vnode.spec.d.ts +2 -0
  124. package/esm/vnode.spec.d.ts.map +1 -0
  125. package/esm/vnode.spec.js +473 -0
  126. package/esm/vnode.spec.js.map +1 -0
  127. package/package.json +8 -9
  128. package/src/component-factory.spec.tsx +18 -5
  129. package/src/components/index.ts +4 -1
  130. package/src/components/lazy-load.spec.tsx +82 -75
  131. package/src/components/lazy-load.tsx +49 -27
  132. package/src/components/link-to-route.spec.tsx +25 -21
  133. package/src/components/link-to-route.tsx +4 -2
  134. package/src/components/nested-route-link.spec.tsx +303 -0
  135. package/src/components/nested-route-link.tsx +100 -0
  136. package/src/components/nested-route-types.ts +42 -0
  137. package/src/components/nested-router.spec.tsx +918 -0
  138. package/src/components/nested-router.tsx +260 -0
  139. package/src/components/route-link.spec.tsx +22 -18
  140. package/src/components/route-link.tsx +6 -5
  141. package/src/components/router.spec.tsx +196 -108
  142. package/src/components/router.tsx +21 -8
  143. package/src/initialize.ts +12 -0
  144. package/src/jsx.ts +129 -2
  145. package/src/models/children-list.ts +7 -1
  146. package/src/models/partial-element.ts +13 -2
  147. package/src/models/render-options.ts +90 -3
  148. package/src/models/selection-state.ts +4 -0
  149. package/src/services/location-service.tsx +11 -0
  150. package/src/services/resource-manager.spec.ts +128 -0
  151. package/src/services/resource-manager.ts +36 -1
  152. package/src/services/screen-service.spec.ts +109 -7
  153. package/src/services/screen-service.ts +81 -4
  154. package/src/shade-component.ts +72 -6
  155. package/src/shade-host-props-ref.integration.spec.tsx +460 -0
  156. package/src/shade-resources.integration.spec.tsx +276 -52
  157. package/src/shade.spec.tsx +40 -39
  158. package/src/shade.ts +186 -58
  159. package/src/shades.integration.spec.tsx +154 -80
  160. package/src/style-manager.ts +2 -2
  161. package/src/svg-types.ts +437 -0
  162. package/src/svg.spec.ts +89 -0
  163. package/src/svg.ts +78 -0
  164. package/src/vnode.integration.spec.tsx +657 -0
  165. package/src/vnode.spec.ts +579 -0
  166. package/src/vnode.ts +508 -0
@@ -1,6 +1,22 @@
1
1
  import { isShadeComponent } from './models/shade-component.js';
2
+ import { SVG_NS, isSvgTag } from './svg.js';
3
+ import { createVNode } from './vnode.js';
4
+ // ---------------------------------------------------------------------------
5
+ // Render-mode toggle
6
+ // ---------------------------------------------------------------------------
7
+ let renderMode = false;
2
8
  /**
3
- * Appends a list of items to a HTML element
9
+ * When true, the JSX factory produces VNode descriptors instead of real DOM elements.
10
+ * Set to true by `_performUpdate` before calling `render()`, then back to false after.
11
+ */
12
+ export const setRenderMode = (mode) => {
13
+ renderMode = mode;
14
+ };
15
+ // ---------------------------------------------------------------------------
16
+ // Real-DOM helpers (used outside render mode)
17
+ // ---------------------------------------------------------------------------
18
+ /**
19
+ * Appends a list of items to an element
4
20
  * @param el the root element
5
21
  * @param children array of items to append
6
22
  */
@@ -10,7 +26,7 @@ export const appendChild = (el, children) => {
10
26
  el.appendChild(document.createTextNode(child));
11
27
  }
12
28
  else {
13
- if (child instanceof HTMLElement || child instanceof DocumentFragment) {
29
+ if (child instanceof Element || child instanceof DocumentFragment) {
14
30
  el.appendChild(child);
15
31
  }
16
32
  else if (child instanceof Array) {
@@ -39,7 +55,7 @@ export const attachStyles = (el, props) => {
39
55
  export const attachDataAttributes = (el, props) => {
40
56
  if (props) {
41
57
  Object.entries(props)
42
- .filter(([key]) => key.startsWith('data-'))
58
+ .filter(([key]) => key.startsWith('data-') || key.startsWith('aria-'))
43
59
  .forEach(([key, value]) => el.setAttribute(key, value || ''));
44
60
  }
45
61
  };
@@ -62,14 +78,50 @@ export const attachProps = (el, props) => {
62
78
  }
63
79
  attachDataAttributes(el, props);
64
80
  };
81
+ /**
82
+ * Attaches properties to an SVG element via setAttribute.
83
+ * SVG attributes are XML-based and must be set via setAttribute,
84
+ * not via property assignment like HTML elements.
85
+ * @param el The target SVG element
86
+ * @param props The props to attach
87
+ */
88
+ export const attachSvgProps = (el, props) => {
89
+ if (!props) {
90
+ return;
91
+ }
92
+ for (const [key, value] of Object.entries(props)) {
93
+ if (key === 'style' && typeof value === 'object' && value !== null) {
94
+ for (const [sk, sv] of Object.entries(value)) {
95
+ ;
96
+ el.style[sk] = sv;
97
+ }
98
+ }
99
+ else if (key === 'className') {
100
+ el.setAttribute('class', String(value));
101
+ }
102
+ else if (key.startsWith('on') && typeof value === 'function') {
103
+ ;
104
+ el[key] = value;
105
+ }
106
+ else if (value !== null && value !== undefined && value !== false) {
107
+ el.setAttribute(key, String(value));
108
+ }
109
+ }
110
+ };
65
111
  /**
66
112
  * Factory method that creates a component. This should be configured as a default JSX Factory in tsconfig.
67
113
  * @returns the created JSX element
68
114
  */
69
115
  export const createComponentInner = (...[elementType, props, ...children]) => {
70
116
  if (typeof elementType === 'string') {
71
- const el = document.createElement(elementType);
72
- attachProps(el, props);
117
+ const isSvg = isSvgTag(elementType);
118
+ const el = isSvg ? document.createElementNS(SVG_NS, elementType) : document.createElement(elementType);
119
+ if (isSvg) {
120
+ attachSvgProps(el, props);
121
+ }
122
+ else {
123
+ attachProps(el, props);
124
+ }
73
125
  if (children) {
74
126
  appendChild(el, children);
75
127
  }
@@ -88,6 +140,16 @@ export const createFragmentInner = (...[_props, ...children]) => {
88
140
  return fragment;
89
141
  };
90
142
  export const createComponent = (...args) => {
143
+ // In render mode, produce VNode descriptors instead of real DOM elements
144
+ if (renderMode) {
145
+ const [type, props, ...children] = args;
146
+ // When jsxFragmentFactory === jsxFactory (both "createComponent"), the compiler
147
+ // passes createComponent itself as the first arg for fragments: createComponent(createComponent, null, ...)
148
+ if (type === null || type === createComponent) {
149
+ return createVNode(null, null, ...children);
150
+ }
151
+ return createVNode(type, props, ...children);
152
+ }
91
153
  if (args[0] === null) {
92
154
  return createFragmentInner(...args);
93
155
  }
@@ -1 +1 @@
1
- {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shade-host-props-ref.integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade-host-props-ref.integration.spec.d.ts","sourceRoot":"","sources":["../src/shade-host-props-ref.integration.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,381 @@
1
+ import { Injector } from '@furystack/inject';
2
+ import { ObservableValue, 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 { flushUpdates, Shade } from './shade.js';
7
+ describe('useHostProps integration tests', () => {
8
+ beforeEach(() => {
9
+ document.body.innerHTML = '<div id="root"></div>';
10
+ });
11
+ afterEach(() => {
12
+ document.body.innerHTML = '';
13
+ });
14
+ it('should set data attributes on the host element', async () => {
15
+ await usingAsync(new Injector(), async (injector) => {
16
+ const rootElement = document.getElementById('root');
17
+ const ExampleComponent = Shade({
18
+ shadowDomName: 'host-props-data-attr-test',
19
+ render: ({ props, useHostProps }) => {
20
+ useHostProps({
21
+ 'data-variant': props.variant,
22
+ });
23
+ return createComponent("div", null, "content");
24
+ },
25
+ });
26
+ initializeShadeRoot({
27
+ injector,
28
+ rootElement,
29
+ jsxElement: createComponent(ExampleComponent, { variant: "primary" }),
30
+ });
31
+ await flushUpdates();
32
+ const el = document.querySelector('host-props-data-attr-test');
33
+ expect(el).toBeTruthy();
34
+ expect(el.getAttribute('data-variant')).toBe('primary');
35
+ });
36
+ });
37
+ it('should set aria attributes on the host element', async () => {
38
+ await usingAsync(new Injector(), async (injector) => {
39
+ const rootElement = document.getElementById('root');
40
+ const ExampleComponent = Shade({
41
+ shadowDomName: 'host-props-aria-test',
42
+ render: ({ useHostProps }) => {
43
+ useHostProps({
44
+ role: 'progressbar',
45
+ 'aria-valuenow': '50',
46
+ 'aria-valuemin': '0',
47
+ 'aria-valuemax': '100',
48
+ });
49
+ return createComponent("div", null, "progress");
50
+ },
51
+ });
52
+ initializeShadeRoot({
53
+ injector,
54
+ rootElement,
55
+ jsxElement: createComponent(ExampleComponent, null),
56
+ });
57
+ await flushUpdates();
58
+ const el = document.querySelector('host-props-aria-test');
59
+ expect(el.getAttribute('role')).toBe('progressbar');
60
+ expect(el.getAttribute('aria-valuenow')).toBe('50');
61
+ expect(el.getAttribute('aria-valuemin')).toBe('0');
62
+ expect(el.getAttribute('aria-valuemax')).toBe('100');
63
+ });
64
+ });
65
+ it('should apply CSS custom properties via style', async () => {
66
+ await usingAsync(new Injector(), async (injector) => {
67
+ const rootElement = document.getElementById('root');
68
+ const ExampleComponent = Shade({
69
+ shadowDomName: 'host-props-css-vars-test',
70
+ render: ({ useHostProps }) => {
71
+ useHostProps({
72
+ style: {
73
+ '--my-color': 'red',
74
+ '--my-size': '16px',
75
+ },
76
+ });
77
+ return createComponent("div", null, "styled");
78
+ },
79
+ });
80
+ initializeShadeRoot({
81
+ injector,
82
+ rootElement,
83
+ jsxElement: createComponent(ExampleComponent, null),
84
+ });
85
+ await flushUpdates();
86
+ const el = document.querySelector('host-props-css-vars-test');
87
+ expect(el.style.getPropertyValue('--my-color')).toBe('red');
88
+ expect(el.style.getPropertyValue('--my-size')).toBe('16px');
89
+ });
90
+ });
91
+ it('should apply standard inline styles', async () => {
92
+ await usingAsync(new Injector(), async (injector) => {
93
+ const rootElement = document.getElementById('root');
94
+ const ExampleComponent = Shade({
95
+ shadowDomName: 'host-props-inline-style-test',
96
+ render: ({ useHostProps }) => {
97
+ useHostProps({
98
+ style: {
99
+ display: 'flex',
100
+ gap: '8px',
101
+ },
102
+ });
103
+ return createComponent("div", null, "styled");
104
+ },
105
+ });
106
+ initializeShadeRoot({
107
+ injector,
108
+ rootElement,
109
+ jsxElement: createComponent(ExampleComponent, null),
110
+ });
111
+ await flushUpdates();
112
+ const el = document.querySelector('host-props-inline-style-test');
113
+ expect(el.style.display).toBe('flex');
114
+ expect(el.style.gap).toBe('8px');
115
+ });
116
+ });
117
+ it('should merge multiple useHostProps calls', async () => {
118
+ await usingAsync(new Injector(), async (injector) => {
119
+ const rootElement = document.getElementById('root');
120
+ const ExampleComponent = Shade({
121
+ shadowDomName: 'host-props-merge-test',
122
+ render: ({ useHostProps }) => {
123
+ useHostProps({
124
+ 'data-first': 'one',
125
+ style: { '--color-a': 'red' },
126
+ });
127
+ useHostProps({
128
+ 'data-second': 'two',
129
+ style: { '--color-b': 'blue' },
130
+ });
131
+ return createComponent("div", null, "merged");
132
+ },
133
+ });
134
+ initializeShadeRoot({
135
+ injector,
136
+ rootElement,
137
+ jsxElement: createComponent(ExampleComponent, null),
138
+ });
139
+ await flushUpdates();
140
+ const el = document.querySelector('host-props-merge-test');
141
+ expect(el.getAttribute('data-first')).toBe('one');
142
+ expect(el.getAttribute('data-second')).toBe('two');
143
+ expect(el.style.getPropertyValue('--color-a')).toBe('red');
144
+ expect(el.style.getPropertyValue('--color-b')).toBe('blue');
145
+ });
146
+ });
147
+ it('should remove attributes when they are no longer set on re-render', async () => {
148
+ await usingAsync(new Injector(), async (injector) => {
149
+ const rootElement = document.getElementById('root');
150
+ const showExtra = new ObservableValue(true);
151
+ const ExampleComponent = Shade({
152
+ shadowDomName: 'host-props-remove-attr-test',
153
+ render: ({ useHostProps, useObservable }) => {
154
+ const [show] = useObservable('showExtra', showExtra);
155
+ useHostProps({
156
+ 'data-always': 'yes',
157
+ ...(show ? { 'data-extra': 'present' } : {}),
158
+ });
159
+ return createComponent("div", null, "content");
160
+ },
161
+ });
162
+ initializeShadeRoot({
163
+ injector,
164
+ rootElement,
165
+ jsxElement: createComponent(ExampleComponent, null),
166
+ });
167
+ await flushUpdates();
168
+ const el = document.querySelector('host-props-remove-attr-test');
169
+ expect(el.getAttribute('data-always')).toBe('yes');
170
+ expect(el.getAttribute('data-extra')).toBe('present');
171
+ showExtra.setValue(false);
172
+ await flushUpdates();
173
+ expect(el.getAttribute('data-always')).toBe('yes');
174
+ expect(el.getAttribute('data-extra')).toBeNull();
175
+ });
176
+ });
177
+ it('should remove CSS custom properties when they are no longer set', async () => {
178
+ await usingAsync(new Injector(), async (injector) => {
179
+ const rootElement = document.getElementById('root');
180
+ const showColor = new ObservableValue(true);
181
+ const ExampleComponent = Shade({
182
+ shadowDomName: 'host-props-remove-css-var-test',
183
+ render: ({ useHostProps, useObservable }) => {
184
+ const [show] = useObservable('showColor', showColor);
185
+ useHostProps({
186
+ style: {
187
+ display: 'block',
188
+ ...(show ? { '--my-color': 'red' } : {}),
189
+ },
190
+ });
191
+ return createComponent("div", null, "content");
192
+ },
193
+ });
194
+ initializeShadeRoot({
195
+ injector,
196
+ rootElement,
197
+ jsxElement: createComponent(ExampleComponent, null),
198
+ });
199
+ await flushUpdates();
200
+ const el = document.querySelector('host-props-remove-css-var-test');
201
+ expect(el.style.getPropertyValue('--my-color')).toBe('red');
202
+ expect(el.style.display).toBe('block');
203
+ showColor.setValue(false);
204
+ await flushUpdates();
205
+ expect(el.style.getPropertyValue('--my-color')).toBe('');
206
+ expect(el.style.display).toBe('block');
207
+ });
208
+ });
209
+ it('should set event handlers on the host element', async () => {
210
+ await usingAsync(new Injector(), async (injector) => {
211
+ const rootElement = document.getElementById('root');
212
+ let clicked = false;
213
+ const ExampleComponent = Shade({
214
+ shadowDomName: 'host-props-event-test',
215
+ render: ({ useHostProps }) => {
216
+ useHostProps({
217
+ onclick: () => {
218
+ clicked = true;
219
+ },
220
+ });
221
+ return createComponent("div", null, "clickable");
222
+ },
223
+ });
224
+ initializeShadeRoot({
225
+ injector,
226
+ rootElement,
227
+ jsxElement: createComponent(ExampleComponent, null),
228
+ });
229
+ await flushUpdates();
230
+ const el = document.querySelector('host-props-event-test');
231
+ el.click();
232
+ expect(clicked).toBe(true);
233
+ });
234
+ });
235
+ });
236
+ describe('useRef integration tests', () => {
237
+ beforeEach(() => {
238
+ document.body.innerHTML = '<div id="root"></div>';
239
+ });
240
+ afterEach(() => {
241
+ document.body.innerHTML = '';
242
+ });
243
+ it('should set ref.current to the mounted element', async () => {
244
+ await usingAsync(new Injector(), async (injector) => {
245
+ const rootElement = document.getElementById('root');
246
+ let capturedRef;
247
+ const ExampleComponent = Shade({
248
+ shadowDomName: 'use-ref-basic-test',
249
+ render: ({ useRef }) => {
250
+ const divRef = useRef('myDiv');
251
+ capturedRef = divRef;
252
+ return (createComponent("div", { ref: divRef, id: "target" }, "hello"));
253
+ },
254
+ });
255
+ initializeShadeRoot({
256
+ injector,
257
+ rootElement,
258
+ jsxElement: createComponent(ExampleComponent, null),
259
+ });
260
+ await flushUpdates();
261
+ expect(capturedRef).toBeTruthy();
262
+ expect(capturedRef.current).toBeTruthy();
263
+ expect(capturedRef.current).toBe(document.getElementById('target'));
264
+ expect(capturedRef.current?.textContent).toBe('hello');
265
+ });
266
+ });
267
+ it('should return the same ref object across re-renders', async () => {
268
+ await usingAsync(new Injector(), async (injector) => {
269
+ const rootElement = document.getElementById('root');
270
+ const counter = new ObservableValue(0);
271
+ const capturedRefs = [];
272
+ const ExampleComponent = Shade({
273
+ shadowDomName: 'use-ref-stable-test',
274
+ render: ({ useRef, useObservable }) => {
275
+ const [count] = useObservable('counter', counter);
276
+ const divRef = useRef('myDiv');
277
+ capturedRefs.push(divRef);
278
+ return createComponent("div", { ref: divRef }, count);
279
+ },
280
+ });
281
+ initializeShadeRoot({
282
+ injector,
283
+ rootElement,
284
+ jsxElement: createComponent(ExampleComponent, null),
285
+ });
286
+ await flushUpdates();
287
+ counter.setValue(1);
288
+ await flushUpdates();
289
+ counter.setValue(2);
290
+ await flushUpdates();
291
+ expect(capturedRefs.length).toBe(3);
292
+ expect(capturedRefs[0]).toBe(capturedRefs[1]);
293
+ expect(capturedRefs[1]).toBe(capturedRefs[2]);
294
+ });
295
+ });
296
+ it('should set ref.current on nested child elements', async () => {
297
+ await usingAsync(new Injector(), async (injector) => {
298
+ const rootElement = document.getElementById('root');
299
+ let capturedInputRef;
300
+ const ExampleComponent = Shade({
301
+ shadowDomName: 'use-ref-nested-test',
302
+ render: ({ useRef }) => {
303
+ const inputRef = useRef('input');
304
+ capturedInputRef = inputRef;
305
+ return (createComponent("div", null,
306
+ createComponent("label", null,
307
+ createComponent("input", { ref: inputRef, type: "text", id: "my-input" }))));
308
+ },
309
+ });
310
+ initializeShadeRoot({
311
+ injector,
312
+ rootElement,
313
+ jsxElement: createComponent(ExampleComponent, null),
314
+ });
315
+ await flushUpdates();
316
+ expect(capturedInputRef).toBeTruthy();
317
+ expect(capturedInputRef.current).toBeTruthy();
318
+ expect(capturedInputRef.current).toBe(document.getElementById('my-input'));
319
+ expect(capturedInputRef.current?.type).toBe('text');
320
+ });
321
+ });
322
+ it('should clear ref.current when element is unmounted', async () => {
323
+ await usingAsync(new Injector(), async (injector) => {
324
+ const rootElement = document.getElementById('root');
325
+ const showChild = new ObservableValue(true);
326
+ let capturedRef;
327
+ const ExampleComponent = Shade({
328
+ shadowDomName: 'use-ref-unmount-test',
329
+ render: ({ useRef, useObservable }) => {
330
+ const [show] = useObservable('showChild', showChild);
331
+ const spanRef = useRef('span');
332
+ capturedRef = spanRef;
333
+ return createComponent("div", null, show ? createComponent("span", { ref: spanRef }, "visible") : null);
334
+ },
335
+ });
336
+ initializeShadeRoot({
337
+ injector,
338
+ rootElement,
339
+ jsxElement: createComponent(ExampleComponent, null),
340
+ });
341
+ await flushUpdates();
342
+ expect(capturedRef.current).toBeTruthy();
343
+ expect(capturedRef.current?.textContent).toBe('visible');
344
+ showChild.setValue(false);
345
+ await flushUpdates();
346
+ expect(capturedRef.current).toBeNull();
347
+ });
348
+ });
349
+ it('should work with useRef in onChange callbacks', async () => {
350
+ await usingAsync(new Injector(), async (injector) => {
351
+ const rootElement = document.getElementById('root');
352
+ const counter = new ObservableValue(0);
353
+ const ExampleComponent = Shade({
354
+ shadowDomName: 'use-ref-onchange-test',
355
+ render: ({ useRef, useObservable }) => {
356
+ const spanRef = useRef('counterSpan');
357
+ useObservable('counter', counter, {
358
+ onChange: (value) => {
359
+ if (spanRef.current) {
360
+ spanRef.current.textContent = String(value);
361
+ }
362
+ },
363
+ });
364
+ return (createComponent("span", { ref: spanRef, id: "counter-span" }, "0"));
365
+ },
366
+ });
367
+ initializeShadeRoot({
368
+ injector,
369
+ rootElement,
370
+ jsxElement: createComponent(ExampleComponent, null),
371
+ });
372
+ await flushUpdates();
373
+ const span = document.getElementById('counter-span');
374
+ expect(span?.textContent).toBe('0');
375
+ counter.setValue(42);
376
+ await flushUpdates();
377
+ expect(span?.textContent).toBe('42');
378
+ });
379
+ });
380
+ });
381
+ //# sourceMappingURL=shade-host-props-ref.integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade-host-props-ref.integration.spec.js","sourceRoot":"","sources":["../src/shade-host-props-ref.integration.spec.tsx"],"names":[],"mappings":"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"}