@keak/sdk 2.0.6 → 2.0.8
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.
- package/dist/index.cjs.js +74 -26
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +74 -26
- package/dist/index.js.map +1 -1
- package/dist/toolbar/utils/fiberSource.d.ts.map +1 -1
- package/dist/toolbar.js +59 -25
- package/dist/toolbar.js.map +1 -1
- package/package.json +1 -1
- package/dist/KeakToolbarShadow.d.ts +0 -21
- package/dist/KeakToolbarShadow.d.ts.map +0 -1
- package/dist/components/ui/card.d.ts +0 -9
- package/dist/components/ui/card.d.ts.map +0 -1
- package/dist/components/ui/html-preview.d.ts +0 -9
- package/dist/components/ui/html-preview.d.ts.map +0 -1
- package/dist/components/ui/simple-tabs.d.ts +0 -26
- package/dist/components/ui/simple-tabs.d.ts.map +0 -1
- package/dist/components/ui/spinner.d.ts +0 -6
- package/dist/components/ui/spinner.d.ts.map +0 -1
- package/dist/components/ui/tabs.d.ts +0 -13
- package/dist/components/ui/tabs.d.ts.map +0 -1
- package/dist/components/ui/textarea.d.ts +0 -6
- package/dist/components/ui/textarea.d.ts.map +0 -1
- package/dist/services/telemetry/index.d.ts +0 -20
- package/dist/services/telemetry/index.d.ts.map +0 -1
- package/dist/services/telemetry/telemetryService.d.ts +0 -66
- package/dist/services/telemetry/telemetryService.d.ts.map +0 -1
- package/dist/services/telemetry/types.d.ts +0 -64
- package/dist/services/telemetry/types.d.ts.map +0 -1
- package/dist/toolbar/AIPromptPanel.d.ts +0 -9
- package/dist/toolbar/AIPromptPanel.d.ts.map +0 -1
- package/dist/toolbar/ExperimentPanel.d.ts +0 -9
- package/dist/toolbar/ExperimentPanel.d.ts.map +0 -1
- package/dist/toolbar/MetricsPanel.d.ts +0 -7
- package/dist/toolbar/MetricsPanel.d.ts.map +0 -1
- package/dist/toolbar/PageScanPanel.d.ts +0 -15
- package/dist/toolbar/PageScanPanel.d.ts.map +0 -1
- package/dist/toolbar/components/PrimaryButton.d.ts +0 -12
- package/dist/toolbar/components/PrimaryButton.d.ts.map +0 -1
- package/dist/toolbar/components/WarningButton.d.ts +0 -12
- package/dist/toolbar/components/WarningButton.d.ts.map +0 -1
- package/dist/toolbar/components/ui/Badge.d.ts +0 -10
- package/dist/toolbar/components/ui/Badge.d.ts.map +0 -1
- package/dist/toolbar/components/ui/Button.d.ts +0 -12
- package/dist/toolbar/components/ui/Button.d.ts.map +0 -1
- package/dist/toolbar/components/ui/Progress.d.ts +0 -5
- package/dist/toolbar/components/ui/Progress.d.ts.map +0 -1
- package/dist/toolbar/components/ui/Tabs.d.ts +0 -44
- package/dist/toolbar/components/ui/Tabs.d.ts.map +0 -1
- package/dist/toolbar/components/ui/dropdown-menu.d.ts +0 -28
- package/dist/toolbar/components/ui/dropdown-menu.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -193,6 +193,10 @@ if (typeof window !== 'undefined') {
|
|
|
193
193
|
* React adds debug source information in development mode that includes the original
|
|
194
194
|
* file path, line number, and column number where a component was defined.
|
|
195
195
|
*/
|
|
196
|
+
// Debug flag - set window.__KEAK_DEBUG__ = true to enable verbose logging
|
|
197
|
+
const DEBUG = typeof window !== 'undefined' && window.__KEAK_DEBUG__;
|
|
198
|
+
// Cache for Fiber source lookups to avoid repeated traversals
|
|
199
|
+
const fiberSourceCache = new WeakMap();
|
|
196
200
|
/**
|
|
197
201
|
* Extract React Fiber from a DOM element
|
|
198
202
|
*/
|
|
@@ -202,10 +206,14 @@ function getReactFiberFromElement(element) {
|
|
|
202
206
|
key.startsWith('__reactInternalInstance') ||
|
|
203
207
|
key.startsWith('__reactProps'));
|
|
204
208
|
if (!fiberKey) {
|
|
205
|
-
|
|
209
|
+
if (DEBUG) {
|
|
210
|
+
console.log('[Keak Fiber] No React Fiber key found on element. Keys:', Object.keys(element).filter(k => k.startsWith('__')));
|
|
211
|
+
}
|
|
206
212
|
return null;
|
|
207
213
|
}
|
|
208
|
-
|
|
214
|
+
if (DEBUG) {
|
|
215
|
+
console.log('[Keak Fiber] Found Fiber key:', fiberKey);
|
|
216
|
+
}
|
|
209
217
|
return element[fiberKey];
|
|
210
218
|
}
|
|
211
219
|
/**
|
|
@@ -277,7 +285,9 @@ function traverseChildren(fiber, visited, remainingDepth) {
|
|
|
277
285
|
columnNumber: source.columnNumber || 1,
|
|
278
286
|
componentName
|
|
279
287
|
};
|
|
280
|
-
|
|
288
|
+
if (DEBUG) {
|
|
289
|
+
console.log('[Keak Fiber] Found valid source in child traversal:', sourceInfo);
|
|
290
|
+
}
|
|
281
291
|
return sourceInfo; // Return first valid match
|
|
282
292
|
}
|
|
283
293
|
}
|
|
@@ -309,7 +319,9 @@ function extractSourceFromFiber(fiber) {
|
|
|
309
319
|
if (!fiber) {
|
|
310
320
|
return null;
|
|
311
321
|
}
|
|
312
|
-
|
|
322
|
+
if (DEBUG) {
|
|
323
|
+
console.log('[Keak Fiber] Starting Fiber traversal');
|
|
324
|
+
}
|
|
313
325
|
// Track visited fibers to avoid infinite loops
|
|
314
326
|
const visited = new Set();
|
|
315
327
|
let current = fiber;
|
|
@@ -324,14 +336,16 @@ function extractSourceFromFiber(fiber) {
|
|
|
324
336
|
visited.add(current);
|
|
325
337
|
// Check for debug source
|
|
326
338
|
const source = current._debugSource || current.__source;
|
|
327
|
-
if (depth === 0) {
|
|
339
|
+
if (DEBUG && depth === 0) {
|
|
328
340
|
console.log('[Keak Fiber] Root fiber has source?', !!source);
|
|
329
341
|
if (source) {
|
|
330
342
|
console.log('[Keak Fiber] Root source:', source);
|
|
331
343
|
}
|
|
332
344
|
}
|
|
333
345
|
if (source && source.fileName && source.lineNumber) {
|
|
334
|
-
|
|
346
|
+
if (DEBUG) {
|
|
347
|
+
console.log('[Keak Fiber] Found source at depth', depth, ':', source.fileName, ':', source.lineNumber);
|
|
348
|
+
}
|
|
335
349
|
const componentName = getComponentName(current);
|
|
336
350
|
// Filter out React internals, node_modules, layout wrappers, and dynamic imports
|
|
337
351
|
const isInternalFile = source.fileName.includes('node_modules') ||
|
|
@@ -353,15 +367,19 @@ function extractSourceFromFiber(fiber) {
|
|
|
353
367
|
columnNumber: source.columnNumber || 1,
|
|
354
368
|
componentName
|
|
355
369
|
};
|
|
356
|
-
|
|
370
|
+
if (DEBUG) {
|
|
371
|
+
console.log('[Keak Fiber] Valid source found:', sourceInfo);
|
|
372
|
+
}
|
|
357
373
|
// Take the first valid source (lowest depth = most specific)
|
|
358
374
|
if (!bestMatch) {
|
|
359
375
|
bestMatch = sourceInfo;
|
|
360
|
-
|
|
376
|
+
if (DEBUG) {
|
|
377
|
+
console.log('[Keak Fiber] Using source at depth', depth);
|
|
378
|
+
}
|
|
361
379
|
return sourceInfo;
|
|
362
380
|
}
|
|
363
381
|
}
|
|
364
|
-
else {
|
|
382
|
+
else if (DEBUG) {
|
|
365
383
|
console.log('[Keak Fiber] Skipping source (wrapper/layout):', {
|
|
366
384
|
file: source.fileName.split('/').pop(),
|
|
367
385
|
component: componentName,
|
|
@@ -387,17 +405,21 @@ function extractSourceFromFiber(fiber) {
|
|
|
387
405
|
}
|
|
388
406
|
// After upward traversal, try downward/sibling traversal if no match found
|
|
389
407
|
if (!bestMatch && fiber.child) {
|
|
390
|
-
|
|
408
|
+
if (DEBUG) {
|
|
409
|
+
console.log('[Keak Fiber] No match found in upward traversal, trying children/siblings');
|
|
410
|
+
}
|
|
391
411
|
const childMatch = traverseChildren(fiber, visited, maxDepth - depth);
|
|
392
412
|
if (childMatch) {
|
|
393
413
|
bestMatch = childMatch;
|
|
394
414
|
}
|
|
395
415
|
}
|
|
396
|
-
if (
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
416
|
+
if (DEBUG) {
|
|
417
|
+
if (bestMatch) {
|
|
418
|
+
console.log('[Keak Fiber] Returning best match:', bestMatch);
|
|
419
|
+
}
|
|
420
|
+
else {
|
|
421
|
+
console.log('[Keak Fiber] No component source found after traversing', depth, 'levels');
|
|
422
|
+
}
|
|
401
423
|
}
|
|
402
424
|
return bestMatch;
|
|
403
425
|
}
|
|
@@ -405,27 +427,39 @@ function extractSourceFromFiber(fiber) {
|
|
|
405
427
|
* Main function to get source information from a DOM element
|
|
406
428
|
*/
|
|
407
429
|
function getReactFiberSource(element) {
|
|
430
|
+
// Check cache first to avoid repeated Fiber traversals
|
|
431
|
+
if (fiberSourceCache.has(element)) {
|
|
432
|
+
return fiberSourceCache.get(element) || null;
|
|
433
|
+
}
|
|
408
434
|
try {
|
|
409
435
|
const fiber = getReactFiberFromElement(element);
|
|
410
436
|
if (!fiber) {
|
|
411
|
-
|
|
437
|
+
if (DEBUG) {
|
|
438
|
+
console.log('[Keak Fiber] No React Fiber found on element');
|
|
439
|
+
}
|
|
440
|
+
fiberSourceCache.set(element, null);
|
|
412
441
|
return null;
|
|
413
442
|
}
|
|
414
443
|
const sourceInfo = extractSourceFromFiber(fiber);
|
|
415
|
-
if (
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
444
|
+
if (DEBUG) {
|
|
445
|
+
if (sourceInfo) {
|
|
446
|
+
console.log('[Keak Fiber] Found source:', {
|
|
447
|
+
file: sourceInfo.fileName,
|
|
448
|
+
line: sourceInfo.lineNumber,
|
|
449
|
+
component: sourceInfo.componentName
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
else {
|
|
453
|
+
console.log('[Keak Fiber] No source information found in Fiber tree');
|
|
454
|
+
}
|
|
424
455
|
}
|
|
456
|
+
// Cache the result
|
|
457
|
+
fiberSourceCache.set(element, sourceInfo);
|
|
425
458
|
return sourceInfo;
|
|
426
459
|
}
|
|
427
460
|
catch (error) {
|
|
428
461
|
console.error('[Keak Fiber] Error extracting source:', error);
|
|
462
|
+
fiberSourceCache.set(element, null);
|
|
429
463
|
return null;
|
|
430
464
|
}
|
|
431
465
|
}
|
|
@@ -2845,7 +2879,14 @@ function useKeak(config = {}) {
|
|
|
2845
2879
|
});
|
|
2846
2880
|
// Cleanup on unmount
|
|
2847
2881
|
return () => {
|
|
2848
|
-
//
|
|
2882
|
+
// Remove toolbar from DOM on unmount
|
|
2883
|
+
const toolbarRoot = document.getElementById('keak-toolbar-root');
|
|
2884
|
+
if (toolbarRoot) {
|
|
2885
|
+
toolbarRoot.remove();
|
|
2886
|
+
console.log('[Keak] Cleaned up toolbar on unmount');
|
|
2887
|
+
}
|
|
2888
|
+
// Reset flag to allow re-initialization
|
|
2889
|
+
toolbarInitialized = false;
|
|
2849
2890
|
};
|
|
2850
2891
|
}, []); // Empty deps - only run once
|
|
2851
2892
|
return keakInstance;
|
|
@@ -3149,6 +3190,13 @@ function initializeToolbar(config) {
|
|
|
3149
3190
|
import('react'),
|
|
3150
3191
|
import('react-dom/client')
|
|
3151
3192
|
]).then(([React, ReactDOMClient]) => {
|
|
3193
|
+
// DOM-based duplicate prevention: Check if toolbar already exists
|
|
3194
|
+
const existingToolbar = document.getElementById('keak-toolbar-root');
|
|
3195
|
+
if (existingToolbar) {
|
|
3196
|
+
console.log('[Keak] Toolbar already exists in DOM, skipping initialization');
|
|
3197
|
+
toolbarInitialized = true;
|
|
3198
|
+
return;
|
|
3199
|
+
}
|
|
3152
3200
|
const toolbarRoot = document.createElement('div');
|
|
3153
3201
|
toolbarRoot.id = 'keak-toolbar-root';
|
|
3154
3202
|
document.body.appendChild(toolbarRoot);
|