apprun 3.36.0 → 3.36.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 (57) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/README.md +133 -20
  3. package/WHATSNEW.md +20 -12
  4. package/apprun-book.jpg +0 -0
  5. package/apprun.d.ts +5 -2
  6. package/cli/app.js +29 -0
  7. package/cli/index.html +13 -0
  8. package/{apprun-cli.js → cli/index.js} +8 -14
  9. package/dist/apprun-dev-tools.js +1 -2
  10. package/dist/apprun-dev-tools.js.map +1 -1
  11. package/dist/apprun-html.esm.js +7 -7
  12. package/dist/apprun-html.esm.js.map +1 -1
  13. package/dist/apprun-html.js +1 -1
  14. package/dist/apprun-html.js.map +1 -1
  15. package/dist/apprun-play-html.esm.js +7 -7
  16. package/dist/apprun-play-html.esm.js.map +1 -1
  17. package/dist/apprun-play.js +1 -1
  18. package/dist/apprun-play.js.map +1 -1
  19. package/dist/apprun.esm.js +1 -1
  20. package/dist/apprun.esm.js.map +1 -1
  21. package/dist/apprun.js +1 -1
  22. package/dist/apprun.js.map +1 -1
  23. package/esm/app.js +10 -6
  24. package/esm/app.js.map +1 -1
  25. package/esm/apprun-dev-tools.js +1 -7
  26. package/esm/apprun-dev-tools.js.map +1 -1
  27. package/esm/apprun.js +18 -4
  28. package/esm/apprun.js.map +1 -1
  29. package/esm/component.js +4 -0
  30. package/esm/component.js.map +1 -1
  31. package/esm/router.js +241 -18
  32. package/esm/router.js.map +1 -1
  33. package/esm/vdom-my-new.js +329 -0
  34. package/esm/vdom-my-new.js.map +1 -0
  35. package/esm/vdom-my-prop-attr.js +227 -0
  36. package/esm/vdom-my-prop-attr.js.map +1 -0
  37. package/esm/vdom-my.js +109 -143
  38. package/esm/vdom-my.js.map +1 -1
  39. package/esm/version.js +1 -1
  40. package/index.html +1 -1
  41. package/jest.config.js +2 -1
  42. package/jest.setup.js +29 -3
  43. package/jsx-runtime.js +1 -1
  44. package/jsx-runtime.js.map +1 -1
  45. package/package.json +7 -7
  46. package/src/app.ts +11 -6
  47. package/src/apprun-dev-tools.tsx +1 -7
  48. package/src/apprun.ts +22 -4
  49. package/src/component.ts +4 -0
  50. package/src/router.ts +259 -15
  51. package/src/vdom-my-new.ts +311 -0
  52. package/src/vdom-my-prop-attr.ts +241 -0
  53. package/src/vdom-my.ts +109 -134
  54. package/src/version.ts +1 -1
  55. package/cli/export.js +0 -92
  56. package/cli/import.js +0 -68
  57. package/plan/plan-apprun-bugfixes.md +0 -207
@@ -0,0 +1,329 @@
1
+ import directive from './directive';
2
+ export function Fragment(props, ...children) {
3
+ return collect(children);
4
+ }
5
+ const ATTR_PROPS = '_props';
6
+ function collect(children) {
7
+ const ch = [];
8
+ const push = (c) => {
9
+ if (c !== null && c !== undefined && c !== '' && c !== false) {
10
+ ch.push((typeof c === 'function' || typeof c === 'object') ? c : `${c}`);
11
+ }
12
+ };
13
+ children && children.forEach(c => {
14
+ if (Array.isArray(c)) {
15
+ c.forEach(i => push(i));
16
+ }
17
+ else {
18
+ push(c);
19
+ }
20
+ });
21
+ return ch;
22
+ }
23
+ export function createElement(tag, props, ...children) {
24
+ const ch = collect(children);
25
+ if (typeof tag === 'string')
26
+ return { tag, props, children: ch };
27
+ else if (Array.isArray(tag))
28
+ return tag; // JSX fragments - babel
29
+ else if (tag === undefined && children)
30
+ return ch; // JSX fragments - typescript
31
+ else if (Object.getPrototypeOf(tag).__isAppRunComponent)
32
+ return { tag, props, children: ch }; // createComponent(tag, { ...props, children });
33
+ else if (typeof tag === 'function')
34
+ return tag(props, ch);
35
+ else
36
+ throw new Error(`Unknown tag in vdom ${tag}`);
37
+ }
38
+ ;
39
+ const keyCache = {};
40
+ export const updateElement = (element, nodes, component = {}) => {
41
+ // tslint:disable-next-line
42
+ if (nodes == null || nodes === false)
43
+ return;
44
+ const el = (typeof element === 'string' && element) ?
45
+ document.getElementById(element) || document.querySelector(element) : element;
46
+ nodes = directive(nodes, component);
47
+ render(el, nodes, component);
48
+ };
49
+ function render(element, nodes, parent = {}) {
50
+ // tslint:disable-next-line
51
+ if (nodes == null || nodes === false)
52
+ return;
53
+ nodes = createComponent(nodes, parent);
54
+ if (!element)
55
+ return;
56
+ const isSvg = element.nodeName === "SVG";
57
+ if (Array.isArray(nodes)) {
58
+ updateChildren(element, nodes, isSvg);
59
+ }
60
+ else {
61
+ updateChildren(element, [nodes], isSvg);
62
+ }
63
+ }
64
+ function same(el, node) {
65
+ // if (!el || !node) return false;
66
+ const key1 = el.nodeName;
67
+ const key2 = `${node.tag || ''}`;
68
+ return key1.toUpperCase() === key2.toUpperCase();
69
+ }
70
+ function update(element, node, isSvg) {
71
+ // console.assert(!!element);
72
+ isSvg = isSvg || node.tag === "svg";
73
+ if (!same(element, node)) {
74
+ element.parentNode.replaceChild(create(node, isSvg), element);
75
+ return;
76
+ }
77
+ updateChildren(element, node.children, isSvg);
78
+ updateProps(element, node.props, isSvg);
79
+ }
80
+ function updateChildren(element, children, isSvg) {
81
+ var _a;
82
+ const old_len = ((_a = element.childNodes) === null || _a === void 0 ? void 0 : _a.length) || 0;
83
+ const new_len = (children === null || children === void 0 ? void 0 : children.length) || 0;
84
+ // Handle key-based reordering first if any children have keys
85
+ const hasKeysInNewChildren = children === null || children === void 0 ? void 0 : children.some(child => child && typeof child === 'object' && child.props && child.props.key !== undefined);
86
+ if (hasKeysInNewChildren) {
87
+ // Create a map of existing keyed elements
88
+ const existingKeyedElements = new Map();
89
+ for (let i = 0; i < old_len; i++) {
90
+ const el = element.childNodes[i];
91
+ if (el && el.key) {
92
+ existingKeyedElements.set(el.key, el);
93
+ }
94
+ }
95
+ // Build new DOM structure
96
+ const fragment = document.createDocumentFragment();
97
+ for (let i = 0; i < new_len; i++) {
98
+ const child = children[i];
99
+ if (child == null)
100
+ continue;
101
+ const key = child.props && child.props['key'];
102
+ if (key && existingKeyedElements.has(key)) {
103
+ // Reuse existing element
104
+ const existingEl = existingKeyedElements.get(key);
105
+ update(existingEl, child, isSvg);
106
+ fragment.appendChild(existingEl);
107
+ existingKeyedElements.delete(key); // Mark as used
108
+ }
109
+ else {
110
+ // Create new element
111
+ fragment.appendChild(create(child, isSvg));
112
+ }
113
+ }
114
+ // Clear current children and append new structure
115
+ while (element.firstChild) {
116
+ element.removeChild(element.firstChild);
117
+ }
118
+ element.appendChild(fragment);
119
+ return;
120
+ }
121
+ // Original non-keyed logic
122
+ const len = Math.min(old_len, new_len);
123
+ for (let i = 0; i < len; i++) {
124
+ const child = children[i];
125
+ if (child == null)
126
+ continue;
127
+ const el = element.childNodes[i];
128
+ if (!el)
129
+ continue; // Safety check for undefined childNodes
130
+ if (typeof child === 'string') {
131
+ if (el.nodeType === 3) {
132
+ if (el.nodeValue !== child) {
133
+ el.nodeValue = child;
134
+ }
135
+ }
136
+ else {
137
+ element.replaceChild(createText(child), el);
138
+ }
139
+ }
140
+ else if (child instanceof HTMLElement || child instanceof SVGElement) {
141
+ element.replaceChild(child, el);
142
+ }
143
+ else if (child && typeof child === 'object') {
144
+ update(element.childNodes[i], child, isSvg);
145
+ }
146
+ }
147
+ // Remove extra old nodes
148
+ while (element.childNodes.length > len) {
149
+ element.removeChild(element.lastChild);
150
+ }
151
+ if (new_len > len) {
152
+ const d = document.createDocumentFragment();
153
+ for (let i = len; i < children.length; i++) {
154
+ const child = children[i];
155
+ if (child != null) {
156
+ d.appendChild(create(child, isSvg));
157
+ }
158
+ }
159
+ element.appendChild(d);
160
+ }
161
+ }
162
+ export const safeHTML = (html) => {
163
+ const div = document.createElement('section');
164
+ div.insertAdjacentHTML('afterbegin', html);
165
+ return Array.from(div.children);
166
+ };
167
+ function createText(node) {
168
+ if ((node === null || node === void 0 ? void 0 : node.indexOf('_html:')) === 0) { // ?
169
+ const div = document.createElement('div');
170
+ div.insertAdjacentHTML('afterbegin', node.substring(6));
171
+ return div;
172
+ }
173
+ else {
174
+ return document.createTextNode(node !== null && node !== void 0 ? node : '');
175
+ }
176
+ }
177
+ function create(node, isSvg) {
178
+ // console.assert(node !== null && node !== undefined);
179
+ if ((node instanceof HTMLElement) || (node instanceof SVGElement))
180
+ return node;
181
+ if (typeof node === "string")
182
+ return createText(node);
183
+ // Type guard for VNode objects - handle invalid node types gracefully
184
+ if (!node || typeof node !== 'object' || !node.tag || (typeof node.tag === 'function')) {
185
+ return createText(typeof node === 'object' ? JSON.stringify(node) : String(node !== null && node !== void 0 ? node : ''));
186
+ }
187
+ isSvg = isSvg || node.tag === "svg";
188
+ const element = isSvg
189
+ ? document.createElementNS("http://www.w3.org/2000/svg", node.tag)
190
+ : document.createElement(node.tag);
191
+ updateProps(element, node.props, isSvg);
192
+ if (node.children)
193
+ node.children.forEach(child => element.appendChild(create(child, isSvg)));
194
+ return element;
195
+ }
196
+ function mergeProps(oldProps, newProps) {
197
+ newProps['class'] = newProps['class'] || newProps['className'];
198
+ delete newProps['className'];
199
+ const props = {};
200
+ if (oldProps)
201
+ Object.keys(oldProps).forEach(p => props[p] = null);
202
+ if (newProps)
203
+ Object.keys(newProps).forEach(p => props[p] = newProps[p]);
204
+ return props;
205
+ }
206
+ export function updateProps(element, props, isSvg) {
207
+ // console.assert(!!element);
208
+ const cached = element[ATTR_PROPS] || {};
209
+ props = mergeProps(cached, props || {});
210
+ element[ATTR_PROPS] = props;
211
+ for (const name in props) {
212
+ const value = props[name];
213
+ // if (cached[name] === value) continue;
214
+ // console.log('updateProps', name, value);
215
+ if (name.startsWith('data-')) {
216
+ const dname = name.substring(5);
217
+ const cname = dname.replace(/-(\w)/g, (match) => match[1].toUpperCase());
218
+ if (element.dataset[cname] !== value) {
219
+ if (value || value === "")
220
+ element.dataset[cname] = value;
221
+ else
222
+ delete element.dataset[cname];
223
+ }
224
+ }
225
+ else if (name === 'style') {
226
+ if (element.style.cssText)
227
+ element.style.cssText = '';
228
+ if (typeof value === 'string')
229
+ element.style.cssText = value;
230
+ else {
231
+ for (const s in value) {
232
+ if (element.style[s] !== value[s])
233
+ element.style[s] = value[s];
234
+ }
235
+ }
236
+ }
237
+ else if (name.startsWith('xlink')) {
238
+ const xname = name.replace('xlink', '').toLowerCase();
239
+ if (value == null || value === false) {
240
+ element.removeAttributeNS('http://www.w3.org/1999/xlink', xname);
241
+ }
242
+ else {
243
+ element.setAttributeNS('http://www.w3.org/1999/xlink', xname, value);
244
+ }
245
+ }
246
+ else if (name.startsWith('on')) {
247
+ if (!value || typeof value === 'function') {
248
+ element[name] = value;
249
+ }
250
+ else if (typeof value === 'string') {
251
+ if (value)
252
+ element.setAttribute(name, value);
253
+ else
254
+ element.removeAttribute(name);
255
+ }
256
+ }
257
+ else if (/^id$|^class$|^list$|^readonly$|^contenteditable$|^role|-|^for$/g.test(name) || isSvg) {
258
+ if (element.getAttribute(name) !== value) {
259
+ if (value)
260
+ element.setAttribute(name, value);
261
+ else
262
+ element.removeAttribute(name);
263
+ }
264
+ }
265
+ else if (element[name] !== value) {
266
+ element[name] = value;
267
+ }
268
+ if (name === 'key' && value !== undefined) {
269
+ keyCache[value] = element;
270
+ element.key = value; // Set key property on the DOM element
271
+ }
272
+ }
273
+ if (props && typeof props['ref'] === 'function') {
274
+ window.requestAnimationFrame(() => props['ref'](element));
275
+ }
276
+ }
277
+ function render_component(node, parent, idx) {
278
+ const { tag, props, children } = node;
279
+ let key = `_${idx}`;
280
+ let id = props && props['id'];
281
+ if (!id)
282
+ id = `_${idx}${Date.now()}`;
283
+ else
284
+ key = id;
285
+ let asTag = 'section';
286
+ if (props && props['as']) {
287
+ asTag = props['as'];
288
+ delete props['as'];
289
+ }
290
+ if (!parent.__componentCache)
291
+ parent.__componentCache = {};
292
+ let component = parent.__componentCache[key];
293
+ if (!component || !(component instanceof tag) || !component.element) {
294
+ const element = document.createElement(asTag);
295
+ component = parent.__componentCache[key] = new tag(Object.assign(Object.assign({}, props), { children })).mount(element, { render: true });
296
+ }
297
+ else {
298
+ component.renderState(component.state);
299
+ }
300
+ if (component.mounted) {
301
+ const new_state = component.mounted(props, children, component.state);
302
+ (typeof new_state !== 'undefined') && component.setState(new_state);
303
+ }
304
+ updateProps(component.element, props, false);
305
+ return component.element;
306
+ }
307
+ function createComponent(node, parent, idx = 0) {
308
+ var _a;
309
+ if (typeof node === 'string')
310
+ return node;
311
+ if (Array.isArray(node))
312
+ return node.map(child => createComponent(child, parent, idx++));
313
+ let vdom = node;
314
+ if (node && typeof node.tag === 'function' && Object.getPrototypeOf(node.tag).__isAppRunComponent) {
315
+ vdom = render_component(node, parent, idx);
316
+ }
317
+ if (vdom && Array.isArray(vdom.children)) {
318
+ const new_parent = (_a = vdom.props) === null || _a === void 0 ? void 0 : _a._component;
319
+ if (new_parent) {
320
+ let i = 0;
321
+ vdom.children = vdom.children.map(child => createComponent(child, new_parent, i++));
322
+ }
323
+ else {
324
+ vdom.children = vdom.children.map(child => createComponent(child, parent, idx++));
325
+ }
326
+ }
327
+ return vdom;
328
+ }
329
+ //# sourceMappingURL=vdom-my-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdom-my-new.js","sourceRoot":"","sources":["../src/vdom-my-new.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,227 @@
1
+ /**
2
+ * VDOM Property and Attribute Handler
3
+ * Standards-compliant property/attribute handling with caching and special element support
4
+ * Features: Skip logic for preserving user interactions during VDOM reconciliation
5
+ * Exports: updateProps - Main function for DOM element property updates
6
+ * Updated: 2025-01-14 - Added skip logic for focus-sensitive, scroll, and media properties
7
+ */
8
+ import { find, html, svg } from 'property-information';
9
+ const ATTR_PROPS = '_props';
10
+ const propertyInfoCache = new Map();
11
+ // Merge old and new props, handling className -> class conversion and null cleanup
12
+ function mergeProps(oldProps, newProps) {
13
+ if (newProps) {
14
+ newProps['class'] = newProps['class'] || newProps['className'];
15
+ delete newProps['className'];
16
+ }
17
+ if (!oldProps || Object.keys(oldProps).length === 0)
18
+ return newProps || {};
19
+ if (!newProps || Object.keys(newProps).length === 0) {
20
+ const props = {};
21
+ Object.keys(oldProps).forEach(p => props[p] = null);
22
+ return props;
23
+ }
24
+ const props = {};
25
+ Object.keys(oldProps).forEach(p => {
26
+ if (!(p in newProps))
27
+ props[p] = null;
28
+ });
29
+ Object.keys(newProps).forEach(p => props[p] = newProps[p]);
30
+ return props;
31
+ }
32
+ // Convert kebab-case to camelCase for dataset keys
33
+ function convertKebabToCamelCase(str) {
34
+ if (str.length <= 1)
35
+ return str.toLowerCase();
36
+ return str.split('-').map((word, index) => index === 0 ? word.toLowerCase() : word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join('');
37
+ }
38
+ // Cached property information lookup
39
+ function getPropertyInfo(name, isSvg) {
40
+ const cacheKey = `${name}:${isSvg}`;
41
+ let info = propertyInfoCache.get(cacheKey);
42
+ if (info === undefined) {
43
+ info = find(isSvg ? svg : html, name) || null;
44
+ propertyInfoCache.set(cacheKey, info);
45
+ }
46
+ return info;
47
+ }
48
+ // Specialized handlers for different attribute types
49
+ function setDatasetAttribute(element, attributeName, value) {
50
+ const camelKey = convertKebabToCamelCase(attributeName.slice(5));
51
+ if (value == null) {
52
+ delete element.dataset[camelKey];
53
+ }
54
+ else {
55
+ element.dataset[camelKey] = String(value);
56
+ }
57
+ }
58
+ function setEventHandler(element, name, value) {
59
+ if (!name.startsWith('on'))
60
+ return;
61
+ if (!value || typeof value === 'function') {
62
+ element[name] = value;
63
+ }
64
+ else if (typeof value === 'string') {
65
+ if (value)
66
+ element.setAttribute(name, value);
67
+ else
68
+ element.removeAttribute(name);
69
+ }
70
+ }
71
+ function setBooleanAttribute(element, attributeName, value) {
72
+ if (shouldSetBooleanAttribute(value)) {
73
+ element.setAttribute(attributeName, attributeName);
74
+ }
75
+ else {
76
+ element.removeAttribute(attributeName);
77
+ }
78
+ }
79
+ function setElementProperty(element, propertyName, value) {
80
+ try {
81
+ element[propertyName] = value;
82
+ }
83
+ catch (error) {
84
+ setElementAttribute(element, propertyName, value, false);
85
+ }
86
+ }
87
+ function setElementAttribute(element, attributeName, value, isSvg) {
88
+ if (value == null) {
89
+ element.removeAttribute(attributeName);
90
+ return;
91
+ }
92
+ const stringValue = String(value);
93
+ if (isSvg && attributeName.includes(':')) {
94
+ const [prefix] = attributeName.split(':');
95
+ if (prefix === 'xlink') {
96
+ element.setAttributeNS('http://www.w3.org/1999/xlink', attributeName, stringValue);
97
+ }
98
+ else {
99
+ element.setAttribute(attributeName, stringValue);
100
+ }
101
+ }
102
+ else {
103
+ element.setAttribute(attributeName, stringValue);
104
+ }
105
+ }
106
+ function shouldSetBooleanAttribute(value) {
107
+ if (value == null || value === false || value === '')
108
+ return false;
109
+ if (value === true)
110
+ return true;
111
+ if (typeof value === 'string') {
112
+ const lowerValue = value.toLowerCase();
113
+ return lowerValue !== 'false' && value !== '0';
114
+ }
115
+ return Boolean(value);
116
+ }
117
+ // Core property/attribute setting function - handles all property types with skip logic
118
+ function setAttributeOrProperty(element, name, value, isSvg) {
119
+ // Check if we should skip this property update to preserve user interaction
120
+ if (shouldSkipPatch(element, name)) {
121
+ return;
122
+ }
123
+ // Special cases with dedicated handling
124
+ if (name === 'style') {
125
+ if (element.style.cssText)
126
+ element.style.cssText = '';
127
+ if (typeof value === 'string')
128
+ element.style.cssText = value;
129
+ else if (value && typeof value === 'object') {
130
+ for (const s in value) {
131
+ if (element.style[s] !== value[s])
132
+ element.style[s] = value[s];
133
+ }
134
+ }
135
+ return;
136
+ }
137
+ if (name === 'key') {
138
+ if (value !== undefined && value !== null)
139
+ element.key = value;
140
+ return;
141
+ }
142
+ if (name.startsWith('data-')) {
143
+ setDatasetAttribute(element, name, value);
144
+ return;
145
+ }
146
+ if (name.startsWith('on')) {
147
+ setEventHandler(element, name, value);
148
+ return;
149
+ }
150
+ // Form elements with special property requirements
151
+ if ((element.tagName === 'INPUT' || element.tagName === 'TEXTAREA' || element.tagName === 'SELECT') &&
152
+ (name === 'value' || name === 'selected' || name === 'selectedIndex')) {
153
+ setElementProperty(element, name, value);
154
+ return;
155
+ }
156
+ // Input checked needs both property and attribute
157
+ if (element.tagName === 'INPUT' && name === 'checked') {
158
+ setElementProperty(element, name, value);
159
+ setBooleanAttribute(element, name, value);
160
+ return;
161
+ }
162
+ // Use property information for standard attributes
163
+ const info = getPropertyInfo(name, isSvg);
164
+ if (info) {
165
+ if (info.boolean || info.overloadedBoolean) {
166
+ setBooleanAttribute(element, info.attribute, value);
167
+ }
168
+ else if (info.mustUseProperty && !isSvg) {
169
+ setElementProperty(element, info.property, value);
170
+ }
171
+ else {
172
+ setElementAttribute(element, info.attribute, value, isSvg);
173
+ }
174
+ }
175
+ else {
176
+ // Fallback handling for unknown attributes
177
+ if (name.startsWith('aria-') || name === 'role') {
178
+ setElementAttribute(element, name, value, isSvg);
179
+ }
180
+ else if (name in element || element[name] !== undefined) {
181
+ setElementProperty(element, name, value);
182
+ }
183
+ else {
184
+ setElementAttribute(element, name, value, isSvg);
185
+ }
186
+ }
187
+ }
188
+ // Skip logic for preventing user interaction disruption during VDOM reconciliation
189
+ function shouldSkipPatch(dom, prop) {
190
+ if (document.activeElement === dom) {
191
+ return ['value', 'selectionStart', 'selectionEnd', 'selectionDirection']
192
+ .includes(prop);
193
+ }
194
+ if (prop === 'scrollTop' || prop === 'scrollLeft') {
195
+ return true;
196
+ }
197
+ if (dom instanceof HTMLMediaElement &&
198
+ ['currentTime', 'paused', 'playbackRate', 'volume'].includes(prop)) {
199
+ return true;
200
+ }
201
+ return false; // default: allow normal diff logic
202
+ }
203
+ function isValidAttributeName(name) {
204
+ return /^[a-zA-Z_:][\w\-:.]*$/.test(name) &&
205
+ !name.includes('<') && !name.includes('>') && !name.includes('"') && !name.includes("'");
206
+ }
207
+ // Main exported function for updating element properties
208
+ export function updateProps(element, props, isSvg) {
209
+ // console.assert(!!element);
210
+ const cached = element[ATTR_PROPS] || {};
211
+ const merged = mergeProps(cached, props);
212
+ element[ATTR_PROPS] = props || {};
213
+ applyPropertiesToElement(element, merged, props, isSvg);
214
+ }
215
+ // Apply merged properties to element with ref handling
216
+ function applyPropertiesToElement(element, mergedProps, originalProps, isSvg) {
217
+ for (const name in mergedProps) {
218
+ if (isValidAttributeName(name)) {
219
+ setAttributeOrProperty(element, name, mergedProps[name], isSvg);
220
+ }
221
+ }
222
+ // Handle ref callback
223
+ if (mergedProps && typeof mergedProps['ref'] === 'function') {
224
+ window.requestAnimationFrame(() => mergedProps['ref'](element));
225
+ }
226
+ }
227
+ //# sourceMappingURL=vdom-my-prop-attr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vdom-my-prop-attr.js","sourceRoot":"","sources":["../src/vdom-my-prop-attr.ts"],"names":[],"mappings":"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"}