@hypen-space/web 0.4.36 → 0.4.37

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 (139) hide show
  1. package/dist/canvas/accessibility.js +174 -174
  2. package/dist/canvas/accessibility.js.map +1 -10
  3. package/dist/canvas/events.js +264 -360
  4. package/dist/canvas/events.js.map +1 -11
  5. package/dist/canvas/index.js +11 -47
  6. package/dist/canvas/index.js.map +1 -9
  7. package/dist/canvas/input.js +178 -289
  8. package/dist/canvas/input.js.map +1 -11
  9. package/dist/canvas/layout.js +349 -547
  10. package/dist/canvas/layout.js.map +1 -12
  11. package/dist/canvas/paint.js +1122 -1146
  12. package/dist/canvas/paint.js.map +1 -12
  13. package/dist/canvas/renderer.js +352 -2259
  14. package/dist/canvas/renderer.js.map +1 -17
  15. package/dist/canvas/text.js +129 -264
  16. package/dist/canvas/text.js.map +1 -11
  17. package/dist/canvas/types.js +7 -2
  18. package/dist/canvas/types.js.map +1 -9
  19. package/dist/canvas/utils.js +158 -161
  20. package/dist/canvas/utils.js.map +1 -10
  21. package/dist/client.js +19 -45
  22. package/dist/client.js.map +1 -9
  23. package/dist/dom/applicators/advanced-layout.js +105 -138
  24. package/dist/dom/applicators/advanced-layout.js.map +1 -10
  25. package/dist/dom/applicators/background.js +36 -76
  26. package/dist/dom/applicators/background.js.map +1 -10
  27. package/dist/dom/applicators/border.js +82 -106
  28. package/dist/dom/applicators/border.js.map +1 -10
  29. package/dist/dom/applicators/color.js +17 -58
  30. package/dist/dom/applicators/color.js.map +1 -10
  31. package/dist/dom/applicators/display.js +39 -79
  32. package/dist/dom/applicators/display.js.map +1 -10
  33. package/dist/dom/applicators/effects.js +121 -147
  34. package/dist/dom/applicators/effects.js.map +1 -10
  35. package/dist/dom/applicators/events.js +413 -450
  36. package/dist/dom/applicators/events.js.map +1 -11
  37. package/dist/dom/applicators/font.js +119 -140
  38. package/dist/dom/applicators/font.js.map +1 -10
  39. package/dist/dom/applicators/index.js +386 -1770
  40. package/dist/dom/applicators/index.js.map +1 -26
  41. package/dist/dom/applicators/layout.js +143 -149
  42. package/dist/dom/applicators/layout.js.map +1 -10
  43. package/dist/dom/applicators/margin.js +64 -105
  44. package/dist/dom/applicators/margin.js.map +1 -10
  45. package/dist/dom/applicators/padding.js +64 -105
  46. package/dist/dom/applicators/padding.js.map +1 -10
  47. package/dist/dom/applicators/size.js +169 -172
  48. package/dist/dom/applicators/size.js.map +1 -10
  49. package/dist/dom/applicators/transform.js +73 -114
  50. package/dist/dom/applicators/transform.js.map +1 -10
  51. package/dist/dom/applicators/transition.js +47 -88
  52. package/dist/dom/applicators/transition.js.map +1 -10
  53. package/dist/dom/applicators/types.js +7 -2
  54. package/dist/dom/applicators/types.js.map +1 -9
  55. package/dist/dom/applicators/typography.js +68 -109
  56. package/dist/dom/applicators/typography.js.map +1 -10
  57. package/dist/dom/canvas/index.js +49 -83
  58. package/dist/dom/canvas/index.js.map +1 -10
  59. package/dist/dom/components/app.js +16 -63
  60. package/dist/dom/components/app.js.map +1 -10
  61. package/dist/dom/components/audio.js +31 -76
  62. package/dist/dom/components/audio.js.map +1 -10
  63. package/dist/dom/components/avatar.js +41 -87
  64. package/dist/dom/components/avatar.js.map +1 -10
  65. package/dist/dom/components/badge.js +35 -83
  66. package/dist/dom/components/badge.js.map +1 -10
  67. package/dist/dom/components/button.js +26 -69
  68. package/dist/dom/components/button.js.map +1 -10
  69. package/dist/dom/components/card.js +13 -63
  70. package/dist/dom/components/card.js.map +1 -10
  71. package/dist/dom/components/center.js +21 -65
  72. package/dist/dom/components/center.js.map +1 -10
  73. package/dist/dom/components/checkbox.js +37 -82
  74. package/dist/dom/components/checkbox.js.map +1 -10
  75. package/dist/dom/components/column.js +16 -62
  76. package/dist/dom/components/column.js.map +1 -10
  77. package/dist/dom/components/container.js +11 -59
  78. package/dist/dom/components/container.js.map +1 -10
  79. package/dist/dom/components/divider.js +27 -73
  80. package/dist/dom/components/divider.js.map +1 -10
  81. package/dist/dom/components/grid.js +41 -80
  82. package/dist/dom/components/grid.js.map +1 -10
  83. package/dist/dom/components/heading.js +28 -74
  84. package/dist/dom/components/heading.js.map +1 -10
  85. package/dist/dom/components/hypenapp.js +291 -288
  86. package/dist/dom/components/hypenapp.js.map +1 -10
  87. package/dist/dom/components/image.js +18 -67
  88. package/dist/dom/components/image.js.map +1 -10
  89. package/dist/dom/components/index.js +109 -1427
  90. package/dist/dom/components/index.js.map +1 -42
  91. package/dist/dom/components/input.js +19 -69
  92. package/dist/dom/components/input.js.map +1 -10
  93. package/dist/dom/components/link.js +23 -70
  94. package/dist/dom/components/link.js.map +1 -10
  95. package/dist/dom/components/list.js +26 -72
  96. package/dist/dom/components/list.js.map +1 -10
  97. package/dist/dom/components/paragraph.js +14 -63
  98. package/dist/dom/components/paragraph.js.map +1 -10
  99. package/dist/dom/components/progressbar.js +38 -85
  100. package/dist/dom/components/progressbar.js.map +1 -10
  101. package/dist/dom/components/route.js +27 -73
  102. package/dist/dom/components/route.js.map +1 -10
  103. package/dist/dom/components/router.js +15 -62
  104. package/dist/dom/components/router.js.map +1 -10
  105. package/dist/dom/components/row.js +25 -70
  106. package/dist/dom/components/row.js.map +1 -10
  107. package/dist/dom/components/select.js +42 -85
  108. package/dist/dom/components/select.js.map +1 -10
  109. package/dist/dom/components/slider.js +31 -76
  110. package/dist/dom/components/slider.js.map +1 -10
  111. package/dist/dom/components/spacer.js +10 -60
  112. package/dist/dom/components/spacer.js.map +1 -10
  113. package/dist/dom/components/spinner.js +41 -88
  114. package/dist/dom/components/spinner.js.map +1 -10
  115. package/dist/dom/components/stack.js +19 -67
  116. package/dist/dom/components/stack.js.map +1 -10
  117. package/dist/dom/components/switch.js +50 -93
  118. package/dist/dom/components/switch.js.map +1 -10
  119. package/dist/dom/components/text.js +24 -69
  120. package/dist/dom/components/text.js.map +1 -10
  121. package/dist/dom/components/textarea.js +35 -79
  122. package/dist/dom/components/textarea.js.map +1 -10
  123. package/dist/dom/components/video.js +35 -79
  124. package/dist/dom/components/video.js.map +1 -10
  125. package/dist/dom/debug.js +159 -160
  126. package/dist/dom/debug.js.map +1 -10
  127. package/dist/dom/element-data.js +181 -143
  128. package/dist/dom/element-data.js.map +1 -10
  129. package/dist/dom/events.js +133 -142
  130. package/dist/dom/events.js.map +1 -10
  131. package/dist/dom/index.js +11 -48
  132. package/dist/dom/index.js.map +1 -9
  133. package/dist/dom/renderer.js +311 -3596
  134. package/dist/dom/renderer.js.map +1 -62
  135. package/dist/hypen.js +385 -3880
  136. package/dist/hypen.js.map +1 -63
  137. package/dist/index.js +36 -53
  138. package/dist/index.js.map +1 -9
  139. package/package.json +2 -2
package/dist/dom/debug.js CHANGED
@@ -1,95 +1,80 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __hasOwnProp = Object.prototype.hasOwnProperty;
5
- function __accessProp(key) {
6
- return this[key];
7
- }
8
- var __toCommonJS = (from) => {
9
- var entry = (__moduleCache ??= new WeakMap).get(from), desc;
10
- if (entry)
11
- return entry;
12
- entry = __defProp({}, "__esModule", { value: true });
13
- if (from && typeof from === "object" || typeof from === "function") {
14
- for (var key of __getOwnPropNames(from))
15
- if (!__hasOwnProp.call(entry, key))
16
- __defProp(entry, key, {
17
- get: __accessProp.bind(from, key),
18
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
- });
20
- }
21
- __moduleCache.set(from, entry);
22
- return entry;
23
- };
24
- var __moduleCache;
25
- var __returnValue = (v) => v;
26
- function __exportSetter(name, newValue) {
27
- this[name] = __returnValue.bind(null, newValue);
28
- }
29
- var __export = (target, all) => {
30
- for (var name in all)
31
- __defProp(target, name, {
32
- get: all[name],
33
- enumerable: true,
34
- configurable: true,
35
- set: __exportSetter.bind(all, name)
36
- });
37
- };
38
- var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
39
-
40
- // src/dom/debug.ts
1
+ /**
2
+ * Debug utilities for DOM rendering visualization
3
+ *
4
+ * Provides heatmap overlays to visualize re-renders
5
+ */
41
6
  import { frameworkLoggers } from "@hypen-space/core/logger";
42
- var log = frameworkLoggers.debug;
43
- var defaultDebugConfig = {
44
- enabled: false,
45
- showHeatmap: true,
46
- heatmapIncrement: 5,
47
- maxOpacity: 0.8,
48
- fadeOutDuration: 2000
7
+ const log = frameworkLoggers.debug;
8
+ export const defaultDebugConfig = {
9
+ enabled: false,
10
+ showHeatmap: true,
11
+ heatmapIncrement: 5,
12
+ maxOpacity: 0.8,
13
+ fadeOutDuration: 2000,
49
14
  };
50
-
51
- class RerenderTracker {
52
- renderCounts = new Map;
53
- overlays = new Map;
54
- config;
55
- constructor(config = defaultDebugConfig) {
56
- this.config = config;
57
- }
58
- setConfig(config) {
59
- this.config = { ...this.config, ...config };
60
- if (!this.config.enabled) {
61
- this.cleanup();
15
+ /**
16
+ * Tracks re-render counts for each element
17
+ */
18
+ export class RerenderTracker {
19
+ renderCounts = new Map();
20
+ overlays = new Map();
21
+ config;
22
+ constructor(config = defaultDebugConfig) {
23
+ this.config = config;
62
24
  }
63
- }
64
- trackRerender(id, element, patchType) {
65
- if (!this.config.enabled || !this.config.showHeatmap) {
66
- return;
25
+ /**
26
+ * Update the configuration
27
+ */
28
+ setConfig(config) {
29
+ this.config = { ...this.config, ...config };
30
+ // If debug mode is disabled, clean up all overlays
31
+ if (!this.config.enabled) {
32
+ this.cleanup();
33
+ }
34
+ }
35
+ /**
36
+ * Track a re-render for an element
37
+ */
38
+ trackRerender(id, element, patchType) {
39
+ if (!this.config.enabled || !this.config.showHeatmap) {
40
+ return;
41
+ }
42
+ log.debug(`Tracking re-render: ${id} - ${patchType}`);
43
+ // Increment render count
44
+ const currentCount = this.renderCounts.get(id) || 0;
45
+ const newCount = currentCount + 1;
46
+ this.renderCounts.set(id, newCount);
47
+ // Create or update heatmap overlay
48
+ this.updateHeatmap(id, element, newCount, patchType);
67
49
  }
68
- log.debug(`Tracking re-render: ${id} - ${patchType}`);
69
- const currentCount = this.renderCounts.get(id) || 0;
70
- const newCount = currentCount + 1;
71
- this.renderCounts.set(id, newCount);
72
- this.updateHeatmap(id, element, newCount, patchType);
73
- }
74
- updateHeatmap(id, element, renderCount, patchType) {
75
- const opacity = Math.min(renderCount * this.config.heatmapIncrement / 100, this.config.maxOpacity);
76
- log.debug(`Updating heatmap for ${id}, count: ${renderCount}, opacity: ${opacity}`);
77
- const isInline = window.getComputedStyle(element).display.includes("inline");
78
- if (isInline || element.tagName === "SPAN") {
79
- if (!element.dataset.hypenDebugOriginalBg) {
80
- element.dataset.hypenDebugOriginalBg = element.style.backgroundColor || "";
81
- element.dataset.hypenDebugOriginalOutline = element.style.outline || "";
82
- element.dataset.hypenDebugOriginalPosition = element.style.position || "";
83
- }
84
- element.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;
85
- element.style.outline = `2px solid rgba(255, 0, 0, ${Math.max(opacity + 0.2, 0.3)})`;
86
- element.style.outlineOffset = "2px";
87
- element.style.position = "relative";
88
- element.setAttribute("data-hypen-renders", `${renderCount}× ${patchType}`);
89
- if (!document.getElementById("hypen-debug-styles")) {
90
- const style = document.createElement("style");
91
- style.id = "hypen-debug-styles";
92
- style.textContent = `
50
+ /**
51
+ * Create or update the heatmap overlay for an element
52
+ */
53
+ updateHeatmap(id, element, renderCount, patchType) {
54
+ // Calculate opacity based on render count (increment by heatmapIncrement% each time)
55
+ const opacity = Math.min((renderCount * this.config.heatmapIncrement) / 100, this.config.maxOpacity);
56
+ log.debug(`Updating heatmap for ${id}, count: ${renderCount}, opacity: ${opacity}`);
57
+ // For inline elements or text, use a simpler approach: background color + outline
58
+ const isInline = window.getComputedStyle(element).display.includes('inline');
59
+ if (isInline || element.tagName === 'SPAN') {
60
+ // Store original styles if not already stored
61
+ if (!element.dataset.hypenDebugOriginalBg) {
62
+ element.dataset.hypenDebugOriginalBg = element.style.backgroundColor || '';
63
+ element.dataset.hypenDebugOriginalOutline = element.style.outline || '';
64
+ element.dataset.hypenDebugOriginalPosition = element.style.position || '';
65
+ }
66
+ // Apply red background and outline directly to the element
67
+ element.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;
68
+ element.style.outline = `2px solid rgba(255, 0, 0, ${Math.max(opacity + 0.2, 0.3)})`;
69
+ element.style.outlineOffset = '2px';
70
+ element.style.position = 'relative';
71
+ // Add count badge as ::before pseudo-element or data attribute
72
+ element.setAttribute('data-hypen-renders', `${renderCount}× ${patchType}`);
73
+ // Add CSS for the badge if not already added
74
+ if (!document.getElementById('hypen-debug-styles')) {
75
+ const style = document.createElement('style');
76
+ style.id = 'hypen-debug-styles';
77
+ style.textContent = `
93
78
  [data-hypen-renders]::before {
94
79
  content: attr(data-hypen-renders);
95
80
  position: absolute;
@@ -108,24 +93,28 @@ class RerenderTracker {
108
93
  text-shadow: none;
109
94
  }
110
95
  `;
111
- document.head.appendChild(style);
112
- }
113
- this.overlays.set(id, element);
114
- if (this.config.fadeOutDuration > 0) {
115
- setTimeout(() => {
116
- const originalBg = element.dataset.hypenDebugOriginalBg || "";
117
- const originalOutline = element.dataset.hypenDebugOriginalOutline || "";
118
- element.style.backgroundColor = originalBg;
119
- element.style.outline = originalOutline;
120
- element.style.opacity = "1";
121
- }, this.config.fadeOutDuration);
122
- }
123
- } else {
124
- let overlay = this.overlays.get(id);
125
- if (!overlay) {
126
- overlay = document.createElement("div");
127
- overlay.className = "hypen-debug-overlay";
128
- overlay.style.cssText = `
96
+ document.head.appendChild(style);
97
+ }
98
+ // Store in overlays map for cleanup
99
+ this.overlays.set(id, element);
100
+ // Fade out after duration if enabled
101
+ if (this.config.fadeOutDuration > 0) {
102
+ setTimeout(() => {
103
+ const originalBg = element.dataset.hypenDebugOriginalBg || '';
104
+ const originalOutline = element.dataset.hypenDebugOriginalOutline || '';
105
+ element.style.backgroundColor = originalBg;
106
+ element.style.outline = originalOutline;
107
+ element.style.opacity = '1';
108
+ }, this.config.fadeOutDuration);
109
+ }
110
+ }
111
+ else {
112
+ // For block elements, use overlay approach
113
+ let overlay = this.overlays.get(id);
114
+ if (!overlay) {
115
+ overlay = document.createElement("div");
116
+ overlay.className = "hypen-debug-overlay";
117
+ overlay.style.cssText = `
129
118
  position: absolute;
130
119
  top: 0;
131
120
  left: 0;
@@ -145,63 +134,73 @@ class RerenderTracker {
145
134
  display: block !important;
146
135
  visibility: visible !important;
147
136
  `;
148
- const currentPosition = window.getComputedStyle(element).position;
149
- if (currentPosition === "static") {
150
- element.style.position = "relative";
137
+ const currentPosition = window.getComputedStyle(element).position;
138
+ if (currentPosition === 'static') {
139
+ element.style.position = 'relative';
140
+ }
141
+ element.appendChild(overlay);
142
+ this.overlays.set(id, overlay);
143
+ }
144
+ overlay.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;
145
+ overlay.style.opacity = '1';
146
+ overlay.textContent = `${renderCount}× ${patchType}`;
147
+ if (this.config.fadeOutDuration > 0) {
148
+ setTimeout(() => {
149
+ if (overlay) {
150
+ overlay.style.opacity = '0.2';
151
+ }
152
+ }, this.config.fadeOutDuration);
153
+ }
151
154
  }
152
- element.appendChild(overlay);
153
- this.overlays.set(id, overlay);
154
- }
155
- overlay.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;
156
- overlay.style.opacity = "1";
157
- overlay.textContent = `${renderCount}× ${patchType}`;
158
- if (this.config.fadeOutDuration > 0) {
159
- setTimeout(() => {
160
- if (overlay) {
161
- overlay.style.opacity = "0.2";
162
- }
163
- }, this.config.fadeOutDuration);
164
- }
165
155
  }
166
- }
167
- reset(id) {
168
- this.renderCounts.delete(id);
169
- const overlay = this.overlays.get(id);
170
- if (overlay) {
171
- overlay.remove();
172
- this.overlays.delete(id);
156
+ /**
157
+ * Reset tracking for a specific element
158
+ */
159
+ reset(id) {
160
+ this.renderCounts.delete(id);
161
+ const overlay = this.overlays.get(id);
162
+ if (overlay) {
163
+ overlay.remove();
164
+ this.overlays.delete(id);
165
+ }
173
166
  }
174
- }
175
- resetAll() {
176
- this.renderCounts.clear();
177
- for (const overlay of this.overlays.values()) {
178
- overlay.remove();
167
+ /**
168
+ * Reset tracking for all elements
169
+ */
170
+ resetAll() {
171
+ this.renderCounts.clear();
172
+ for (const overlay of this.overlays.values()) {
173
+ overlay.remove();
174
+ }
175
+ this.overlays.clear();
179
176
  }
180
- this.overlays.clear();
181
- }
182
- getRenderCount(id) {
183
- return this.renderCounts.get(id) || 0;
184
- }
185
- cleanup() {
186
- for (const overlay of this.overlays.values()) {
187
- overlay.remove();
177
+ /**
178
+ * Get render count for an element
179
+ */
180
+ getRenderCount(id) {
181
+ return this.renderCounts.get(id) || 0;
182
+ }
183
+ /**
184
+ * Clean up all overlays (called when debug mode is disabled)
185
+ */
186
+ cleanup() {
187
+ for (const overlay of this.overlays.values()) {
188
+ overlay.remove();
189
+ }
190
+ this.overlays.clear();
191
+ }
192
+ /**
193
+ * Get statistics about re-renders
194
+ */
195
+ getStats() {
196
+ const totalRerenders = Array.from(this.renderCounts.values()).reduce((sum, count) => sum + count, 0);
197
+ const elementCount = this.renderCounts.size;
198
+ const avgRerenders = elementCount > 0 ? totalRerenders / elementCount : 0;
199
+ return {
200
+ totalRerenders,
201
+ elementCount,
202
+ avgRerenders: Math.round(avgRerenders * 100) / 100,
203
+ };
188
204
  }
189
- this.overlays.clear();
190
- }
191
- getStats() {
192
- const totalRerenders = Array.from(this.renderCounts.values()).reduce((sum, count) => sum + count, 0);
193
- const elementCount = this.renderCounts.size;
194
- const avgRerenders = elementCount > 0 ? totalRerenders / elementCount : 0;
195
- return {
196
- totalRerenders,
197
- elementCount,
198
- avgRerenders: Math.round(avgRerenders * 100) / 100
199
- };
200
- }
201
205
  }
202
- export {
203
- defaultDebugConfig,
204
- RerenderTracker
205
- };
206
-
207
- //# debugId=8C572E0EC0BBC39E64756E2164756E21
206
+ //# sourceMappingURL=debug.js.map
@@ -1,10 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/dom/debug.ts"],
4
- "sourcesContent": [
5
- "/**\n * Debug utilities for DOM rendering visualization\n *\n * Provides heatmap overlays to visualize re-renders\n */\n\nimport { frameworkLoggers } from \"@hypen-space/core/logger\";\n\nconst log = frameworkLoggers.debug;\n\nexport interface DebugConfig {\n /** Enable debug mode */\n enabled: boolean;\n /** Show heatmap overlays on re-renders */\n showHeatmap: boolean;\n /** Increment per re-render (default: 5%) */\n heatmapIncrement: number;\n /** Maximum opacity for heatmap (default: 0.8) */\n maxOpacity: number;\n /** Fade out duration in ms (0 to disable) */\n fadeOutDuration: number;\n}\n\nexport const defaultDebugConfig: DebugConfig = {\n enabled: false,\n showHeatmap: true,\n heatmapIncrement: 5,\n maxOpacity: 0.8,\n fadeOutDuration: 2000,\n};\n\n/**\n * Tracks re-render counts for each element\n */\nexport class RerenderTracker {\n private renderCounts = new Map<string, number>();\n private overlays = new Map<string, HTMLDivElement>();\n private config: DebugConfig;\n\n constructor(config: DebugConfig = defaultDebugConfig) {\n this.config = config;\n }\n\n /**\n * Update the configuration\n */\n setConfig(config: Partial<DebugConfig>): void {\n this.config = { ...this.config, ...config };\n\n // If debug mode is disabled, clean up all overlays\n if (!this.config.enabled) {\n this.cleanup();\n }\n }\n\n /**\n * Track a re-render for an element\n */\n trackRerender(id: string, element: HTMLElement, patchType: string): void {\n if (!this.config.enabled || !this.config.showHeatmap) {\n return;\n }\n\n log.debug(`Tracking re-render: ${id} - ${patchType}`);\n\n // Increment render count\n const currentCount = this.renderCounts.get(id) || 0;\n const newCount = currentCount + 1;\n this.renderCounts.set(id, newCount);\n\n // Create or update heatmap overlay\n this.updateHeatmap(id, element, newCount, patchType);\n }\n\n /**\n * Create or update the heatmap overlay for an element\n */\n private updateHeatmap(id: string, element: HTMLElement, renderCount: number, patchType: string): void {\n // Calculate opacity based on render count (increment by heatmapIncrement% each time)\n const opacity = Math.min(\n (renderCount * this.config.heatmapIncrement) / 100,\n this.config.maxOpacity\n );\n\n log.debug(`Updating heatmap for ${id}, count: ${renderCount}, opacity: ${opacity}`);\n\n // For inline elements or text, use a simpler approach: background color + outline\n const isInline = window.getComputedStyle(element).display.includes('inline');\n\n if (isInline || element.tagName === 'SPAN') {\n // Store original styles if not already stored\n if (!element.dataset.hypenDebugOriginalBg) {\n element.dataset.hypenDebugOriginalBg = element.style.backgroundColor || '';\n element.dataset.hypenDebugOriginalOutline = element.style.outline || '';\n element.dataset.hypenDebugOriginalPosition = element.style.position || '';\n }\n\n // Apply red background and outline directly to the element\n element.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;\n element.style.outline = `2px solid rgba(255, 0, 0, ${Math.max(opacity + 0.2, 0.3)})`;\n element.style.outlineOffset = '2px';\n element.style.position = 'relative';\n\n // Add count badge as ::before pseudo-element or data attribute\n element.setAttribute('data-hypen-renders', `${renderCount}× ${patchType}`);\n\n // Add CSS for the badge if not already added\n if (!document.getElementById('hypen-debug-styles')) {\n const style = document.createElement('style');\n style.id = 'hypen-debug-styles';\n style.textContent = `\n [data-hypen-renders]::before {\n content: attr(data-hypen-renders);\n position: absolute;\n top: -18px;\n left: 0;\n background: rgba(255, 0, 0, 0.9);\n color: white;\n padding: 2px 6px;\n font-size: 10px;\n font-family: 'Courier New', monospace;\n font-weight: bold;\n border-radius: 3px;\n z-index: 999999;\n pointer-events: none;\n white-space: nowrap;\n text-shadow: none;\n }\n `;\n document.head.appendChild(style);\n }\n\n // Store in overlays map for cleanup\n this.overlays.set(id, element as any);\n\n // Fade out after duration if enabled\n if (this.config.fadeOutDuration > 0) {\n setTimeout(() => {\n const originalBg = element.dataset.hypenDebugOriginalBg || '';\n const originalOutline = element.dataset.hypenDebugOriginalOutline || '';\n element.style.backgroundColor = originalBg;\n element.style.outline = originalOutline;\n element.style.opacity = '1';\n }, this.config.fadeOutDuration);\n }\n } else {\n // For block elements, use overlay approach\n let overlay = this.overlays.get(id);\n\n if (!overlay) {\n overlay = document.createElement(\"div\");\n overlay.className = \"hypen-debug-overlay\";\n overlay.style.cssText = `\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n z-index: 999999 !important;\n transition: opacity ${this.config.fadeOutDuration}ms ease-out;\n border: 2px solid rgba(255, 0, 0, 0.7) !important;\n box-sizing: border-box;\n font-size: 11px;\n color: white;\n text-shadow: 0 0 3px black, 0 0 5px black;\n padding: 4px;\n font-family: 'Courier New', monospace;\n font-weight: bold;\n display: block !important;\n visibility: visible !important;\n `;\n\n const currentPosition = window.getComputedStyle(element).position;\n if (currentPosition === 'static') {\n element.style.position = 'relative';\n }\n\n element.appendChild(overlay);\n this.overlays.set(id, overlay);\n }\n\n overlay.style.backgroundColor = `rgba(255, 0, 0, ${Math.max(opacity, 0.15)})`;\n overlay.style.opacity = '1';\n overlay.textContent = `${renderCount}× ${patchType}`;\n\n if (this.config.fadeOutDuration > 0) {\n setTimeout(() => {\n if (overlay) {\n overlay.style.opacity = '0.2';\n }\n }, this.config.fadeOutDuration);\n }\n }\n }\n\n /**\n * Reset tracking for a specific element\n */\n reset(id: string): void {\n this.renderCounts.delete(id);\n const overlay = this.overlays.get(id);\n if (overlay) {\n overlay.remove();\n this.overlays.delete(id);\n }\n }\n\n /**\n * Reset tracking for all elements\n */\n resetAll(): void {\n this.renderCounts.clear();\n for (const overlay of this.overlays.values()) {\n overlay.remove();\n }\n this.overlays.clear();\n }\n\n /**\n * Get render count for an element\n */\n getRenderCount(id: string): number {\n return this.renderCounts.get(id) || 0;\n }\n\n /**\n * Clean up all overlays (called when debug mode is disabled)\n */\n private cleanup(): void {\n for (const overlay of this.overlays.values()) {\n overlay.remove();\n }\n this.overlays.clear();\n }\n\n /**\n * Get statistics about re-renders\n */\n getStats(): { totalRerenders: number; elementCount: number; avgRerenders: number } {\n const totalRerenders = Array.from(this.renderCounts.values()).reduce((sum, count) => sum + count, 0);\n const elementCount = this.renderCounts.size;\n const avgRerenders = elementCount > 0 ? totalRerenders / elementCount : 0;\n\n return {\n totalRerenders,\n elementCount,\n avgRerenders: Math.round(avgRerenders * 100) / 100,\n };\n }\n}\n"
6
- ],
7
- "mappings": "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",
8
- "debugId": "8C572E0EC0BBC39E64756E2164756E21",
9
- "names": []
10
- }
1
+ {"version":3,"file":"debug.js","sourceRoot":"","sources":["../../src/dom/debug.ts"],"names":[],"mappings":"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"}