@workflow/web-shared 5.0.0-beta.2 → 5.0.0-beta.3

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 (127) hide show
  1. package/dist/components/index.d.ts +2 -0
  2. package/dist/components/index.d.ts.map +1 -1
  3. package/dist/components/index.js +2 -0
  4. package/dist/components/index.js.map +1 -1
  5. package/dist/components/new-trace-viewer/components/copy-button.d.ts +9 -0
  6. package/dist/components/new-trace-viewer/components/copy-button.d.ts.map +1 -0
  7. package/dist/components/new-trace-viewer/components/copy-button.js +27 -0
  8. package/dist/components/new-trace-viewer/components/copy-button.js.map +1 -0
  9. package/dist/components/new-trace-viewer/components/event-list.d.ts +8 -0
  10. package/dist/components/new-trace-viewer/components/event-list.d.ts.map +1 -0
  11. package/dist/components/new-trace-viewer/components/event-list.js +35 -0
  12. package/dist/components/new-trace-viewer/components/event-list.js.map +1 -0
  13. package/dist/components/new-trace-viewer/components/split-pane.d.ts +14 -0
  14. package/dist/components/new-trace-viewer/components/split-pane.d.ts.map +1 -0
  15. package/dist/components/new-trace-viewer/components/split-pane.js +100 -0
  16. package/dist/components/new-trace-viewer/components/split-pane.js.map +1 -0
  17. package/dist/components/new-trace-viewer/components/timeline.d.ts +32 -0
  18. package/dist/components/new-trace-viewer/components/timeline.d.ts.map +1 -0
  19. package/dist/components/new-trace-viewer/components/timeline.js +134 -0
  20. package/dist/components/new-trace-viewer/components/timeline.js.map +1 -0
  21. package/dist/components/new-trace-viewer/context.d.ts +15 -0
  22. package/dist/components/new-trace-viewer/context.d.ts.map +1 -0
  23. package/dist/components/new-trace-viewer/context.js +49 -0
  24. package/dist/components/new-trace-viewer/context.js.map +1 -0
  25. package/dist/components/new-trace-viewer/detail-panel.d.ts +10 -0
  26. package/dist/components/new-trace-viewer/detail-panel.d.ts.map +1 -0
  27. package/dist/components/new-trace-viewer/detail-panel.js +11 -0
  28. package/dist/components/new-trace-viewer/detail-panel.js.map +1 -0
  29. package/dist/components/new-trace-viewer/icons.d.ts +6 -0
  30. package/dist/components/new-trace-viewer/icons.d.ts.map +1 -0
  31. package/dist/components/new-trace-viewer/icons.js +15 -0
  32. package/dist/components/new-trace-viewer/icons.js.map +1 -0
  33. package/dist/components/new-trace-viewer/trace-viewer.d.ts +8 -0
  34. package/dist/components/new-trace-viewer/trace-viewer.d.ts.map +1 -0
  35. package/dist/components/new-trace-viewer/trace-viewer.js +329 -0
  36. package/dist/components/new-trace-viewer/trace-viewer.js.map +1 -0
  37. package/dist/components/new-trace-viewer/types.d.ts +1 -0
  38. package/dist/components/new-trace-viewer/types.d.ts.map +1 -0
  39. package/dist/components/new-trace-viewer/types.js +2 -0
  40. package/dist/components/new-trace-viewer/types.js.map +1 -0
  41. package/dist/components/new-trace-viewer/util/constants.d.ts +1 -0
  42. package/dist/components/new-trace-viewer/util/constants.d.ts.map +1 -0
  43. package/dist/components/new-trace-viewer/util/constants.js +2 -0
  44. package/dist/components/new-trace-viewer/util/constants.js.map +1 -0
  45. package/dist/components/new-trace-viewer/utils.d.ts +47 -0
  46. package/dist/components/new-trace-viewer/utils.d.ts.map +1 -0
  47. package/dist/components/new-trace-viewer/utils.js +358 -0
  48. package/dist/components/new-trace-viewer/utils.js.map +1 -0
  49. package/dist/components/sidebar/attribute-panel.d.ts.map +1 -1
  50. package/dist/components/sidebar/attribute-panel.js +42 -23
  51. package/dist/components/sidebar/attribute-panel.js.map +1 -1
  52. package/dist/components/sidebar/copyable-data-block.js +1 -1
  53. package/dist/components/sidebar/copyable-data-block.js.map +1 -1
  54. package/dist/components/sidebar/detail-card.d.ts.map +1 -1
  55. package/dist/components/sidebar/detail-card.js +1 -1
  56. package/dist/components/sidebar/detail-card.js.map +1 -1
  57. package/dist/components/sidebar/entity-detail-panel.d.ts +1 -3
  58. package/dist/components/sidebar/entity-detail-panel.d.ts.map +1 -1
  59. package/dist/components/sidebar/entity-detail-panel.js +3 -25
  60. package/dist/components/sidebar/entity-detail-panel.js.map +1 -1
  61. package/dist/components/sidebar/events-list.d.ts.map +1 -1
  62. package/dist/components/sidebar/events-list.js +2 -2
  63. package/dist/components/sidebar/events-list.js.map +1 -1
  64. package/dist/components/sidebar/sidebar-data-context.d.ts +29 -0
  65. package/dist/components/sidebar/sidebar-data-context.d.ts.map +1 -0
  66. package/dist/components/sidebar/sidebar-data-context.js +19 -0
  67. package/dist/components/sidebar/sidebar-data-context.js.map +1 -0
  68. package/dist/components/stream-viewer.d.ts +1 -1
  69. package/dist/components/stream-viewer.d.ts.map +1 -1
  70. package/dist/components/stream-viewer.js +2 -26
  71. package/dist/components/stream-viewer.js.map +1 -1
  72. package/dist/components/trace-viewer-new.d.ts +10 -0
  73. package/dist/components/trace-viewer-new.d.ts.map +1 -0
  74. package/dist/components/trace-viewer-new.js +23 -0
  75. package/dist/components/trace-viewer-new.js.map +1 -0
  76. package/dist/components/ui/data-inspector.d.ts +21 -0
  77. package/dist/components/ui/data-inspector.d.ts.map +1 -1
  78. package/dist/components/ui/data-inspector.js +99 -4
  79. package/dist/components/ui/data-inspector.js.map +1 -1
  80. package/dist/components/ui/inspector-theme.d.ts +9 -10
  81. package/dist/components/ui/inspector-theme.d.ts.map +1 -1
  82. package/dist/components/ui/inspector-theme.js +38 -71
  83. package/dist/components/ui/inspector-theme.js.map +1 -1
  84. package/dist/components/workflow-trace-view.d.ts +1 -3
  85. package/dist/components/workflow-trace-view.d.ts.map +1 -1
  86. package/dist/components/workflow-trace-view.js +4 -4
  87. package/dist/components/workflow-trace-view.js.map +1 -1
  88. package/dist/index.d.ts +1 -0
  89. package/dist/index.d.ts.map +1 -1
  90. package/dist/index.js.map +1 -1
  91. package/dist/lib/stream-display.d.ts +18 -0
  92. package/dist/lib/stream-display.d.ts.map +1 -0
  93. package/dist/lib/stream-display.js +30 -0
  94. package/dist/lib/stream-display.js.map +1 -0
  95. package/dist/lib/utils.d.ts +7 -9
  96. package/dist/lib/utils.d.ts.map +1 -1
  97. package/dist/lib/utils.js +17 -22
  98. package/dist/lib/utils.js.map +1 -1
  99. package/dist/styles.css +470 -1
  100. package/package.json +3 -2
  101. package/src/components/index.ts +5 -0
  102. package/src/components/new-trace-viewer/components/copy-button.tsx +68 -0
  103. package/src/components/new-trace-viewer/components/event-list.tsx +109 -0
  104. package/src/components/new-trace-viewer/components/split-pane.tsx +186 -0
  105. package/src/components/new-trace-viewer/components/timeline.tsx +378 -0
  106. package/src/components/new-trace-viewer/context.tsx +94 -0
  107. package/src/components/new-trace-viewer/detail-panel.tsx +57 -0
  108. package/src/components/new-trace-viewer/icons.tsx +79 -0
  109. package/src/components/new-trace-viewer/trace-viewer.tsx +585 -0
  110. package/src/components/new-trace-viewer/types.ts +0 -0
  111. package/src/components/new-trace-viewer/util/constants.ts +0 -0
  112. package/src/components/new-trace-viewer/utils.ts +524 -0
  113. package/src/components/sidebar/attribute-panel.tsx +43 -32
  114. package/src/components/sidebar/copyable-data-block.tsx +1 -1
  115. package/src/components/sidebar/detail-card.tsx +1 -19
  116. package/src/components/sidebar/entity-detail-panel.tsx +0 -71
  117. package/src/components/sidebar/events-list.tsx +9 -6
  118. package/src/components/sidebar/sidebar-data-context.tsx +62 -0
  119. package/src/components/stream-viewer.tsx +18 -40
  120. package/src/components/trace-viewer-new.tsx +49 -0
  121. package/src/components/ui/data-inspector.tsx +235 -4
  122. package/src/components/ui/inspector-theme.ts +39 -81
  123. package/src/components/workflow-trace-view.tsx +2 -6
  124. package/src/index.ts +1 -0
  125. package/src/lib/stream-display.ts +48 -0
  126. package/src/lib/utils.ts +18 -23
  127. package/src/styles.css +470 -1
@@ -1 +1 @@
1
- {"version":3,"file":"data-inspector.js","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb;;;;;;GAMG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EACL,aAAa,EACb,UAAU,EACV,SAAS,EACT,OAAO,EACP,MAAM,EACN,QAAQ,GACT,MAAM,OAAO,CAAC;AACf,OAAO,EACL,eAAe,EACf,WAAW,EACX,UAAU,EACV,eAAe,EACf,WAAW,GACZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAEL,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,8EAA8E;AAC9E,8CAA8C;AAC9C,wDAAwD;AACxD,8EAA8E;AAE9E,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAClD,MAAM,uBAAuB,GAAG,iCAAiC,CAAC;AAClE,MAAM,YAAY,GAAG,sBAAsB,CAAC;AAY5C,SAAS,WAAW,CAAC,KAAc;IACjC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,mFAAmF;IACnF,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,OAAO,IAAI,EAAE,KAAK,KAAK,eAAe,CAAC;AACzC,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC9D,OAAO,IAAI,EAAE,KAAK,KAAK,YAAY,CAAC;AACtC,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IAMxC,OAAO,CACL,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,QAAQ,IAAI,KAAK;QAChB,KAAiC,CAAC,MAAM,KAAK,uBAAuB,CACtE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,uDAAuD;AACvD,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,aAAa,CAE7C,SAAS,CAAC,CAAC;AAWb,MAAM,CAAC,MAAM,mBAAmB,GAAG,aAAa,CAE9C,SAAS,CAAC,CAAC;AAEb,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAE1C,SAAS,CAAC,CAAC;AAEb,SAAS,oBAAoB;IAC3B,MAAM,GAAG,GAAG,UAAU,CAAC,mBAAmB,CAAC,CAAC;IAC5C,IAAI,GAAG,EAAE,CAAC;QACR,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,iFAAiF,EAC3F,KAAK,EAAE;gBACL,eAAe,EAAE,oBAAoB;gBACrC,KAAK,EAAE,oBAAoB;gBAC3B,MAAM,EAAE,8BAA8B;gBACtC,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACpC,EACD,QAAQ,EAAE,GAAG,CAAC,YAAY,EAC1B,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;gBACb,CAAC,CAAC,eAAe,EAAE,CAAC;gBACpB,GAAG,CAAC,SAAS,EAAE,CAAC;YAClB,CAAC,EACD,KAAK,EAAC,kBAAkB,aAEvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAClB,KAAC,OAAO,IAAC,IAAI,EAAE,EAAE,GAAI,CACtB,CAAC,CAAC,CAAC,CACF,KAAC,IAAI,IACH,SAAS,EAAC,SAAS,EACnB,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,EAAE,GAC3C,CACH,EACD,yBAAO,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,GAAQ,IACpD,CACV,CAAC;IACJ,CAAC;IACD,OAAO,CACL,gBAAM,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,SAAS,EAAE,QAAQ,EAAE,aAC/D,KAAC,IAAI,IACH,SAAS,EAAC,SAAS,EACnB,KAAK,EAAE;oBACL,OAAO,EAAE,QAAQ;oBACjB,aAAa,EAAE,QAAQ;oBACvB,WAAW,EAAE,KAAK;oBAClB,SAAS,EAAE,MAAM;iBAClB,GACD,iBAEG,CACR,CAAC;AACJ,CAAC;AACD,SAAS,eAAe,CAAC,EAAE,SAAS,EAA4B;IAC9D,MAAM,aAAa,GAAG,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CACL,kBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8IAA8I,EACxJ,KAAK,EAAE;YACL,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB;YACtE,KAAK,EAAE,oBAAoB;YAC3B,MAAM,EAAE,8BAA8B;SACvC,EACD,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EACrC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,EACD,KAAK,EAAE,gBAAgB,SAAS,CAAC,QAAQ,EAAE,aAE3C,0CAAe,EACf,yBAAO,SAAS,CAAC,QAAQ,GAAQ,IAC1B,CACV,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,EAAE,MAAM,EAAsB;IAClD,MAAM,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,CACL,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,8IAA8I,EACxJ,KAAK,EAAE;YACL,eAAe,EAAE,OAAO;gBACtB,CAAC,CAAC,sBAAsB;gBACxB,CAAC,CAAC,sBAAsB;YAC1B,KAAK,EAAE,sBAAsB;YAC7B,MAAM,EAAE,gCAAgC;SACzC,EACD,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EACpC,YAAY,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,EACrC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE;YACb,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,UAAU,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC,EACD,KAAK,EAAE,aAAa,MAAM,CAAC,KAAK,EAAE,YAElC,yBAAO,MAAM,CAAC,KAAK,GAAQ,GACpB,CACV,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAE9E,MAAM,oBAAoB,GAAG,aAAa,CACxC,2BAA2B,CAC5B,CAAC;AAEF,8EAA8E;AAC9E,sBAAsB;AACtB,8EAA8E;AAE9E;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,eAAe,GAOhB;IACC,MAAM,aAAa,GAAG,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEvD,sFAAsF;IACtF,IACE,IAAI,KAAK,IAAI;QACb,OAAO,IAAI,KAAK,QAAQ;QACxB,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,sBAAsB,EACjD,CAAC;QACD,MAAM,KAAK,GAAG,KAAC,oBAAoB,KAAG,CAAC;QACvC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,CACL,2BACG,IAAI,IAAI,IAAI,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,EAC1C,IAAI,IAAI,IAAI,IAAI,gCAAe,EAC/B,KAAK,IACD,CACR,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,2BACG,IAAI,IAAI,IAAI,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,EAC1C,IAAI,IAAI,IAAI,IAAI,gCAAe,EAChC,KAAC,eAAe,IAAC,SAAS,EAAE,IAAI,GAAI,IAC/B,CACR,CAAC;IACJ,CAAC;IAED,4DAA4D;IAC5D,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnB,OAAO,CACL,2BACG,IAAI,IAAI,IAAI,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,EAC1C,IAAI,IAAI,IAAI,IAAI,gCAAe,EAChC,KAAC,YAAY,IAAC,MAAM,EAAE,IAAI,GAAI,IACzB,CACR,CAAC;IACJ,CAAC;IAED,2EAA2E;IAC3E,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAI,CAAC;QACpE,CAAC;QACD,OAAO,CACL,2BACG,IAAI,IAAI,IAAI,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,EAC1C,IAAI,IAAI,IAAI,IAAI,gCAAe,EAChC,gBAAM,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAG,IAAI,CAAC,SAAS,SAAS,EAC9D,KAAC,WAAW,IAAC,MAAM,EAAE,IAAI,CAAC,IAAI,GAAI,IAC7B,CACR,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,kFAAkF;IAClF,IAAI,IAAI,YAAY,IAAI,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,CACL,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,uBAAuB,EAAE,YAC1D,OAAO,GACH,CACR,CAAC;QACJ,CAAC;QACD,OAAO,CACL,2BACG,IAAI,IAAI,IAAI,IAAI,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,GAAI,EAC1C,IAAI,IAAI,IAAI,IAAI,gCAAe,EAChC,eAAM,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,CAAC,uBAAuB,EAAE,YAC1D,OAAO,GACH,IACF,CACR,CAAC;IACJ,CAAC;IAED,yDAAyD;IACzD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAI,CAAC;IACrD,CAAC;IACD,OAAO,CACL,KAAC,WAAW,IAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,eAAe,EAAE,eAAe,GAAI,CAC1E,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;GAIG;AACH,SAAS,aAAa,CAAC,GAA4B;IACjD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/C,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3D,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC;QACrC,OAAO,aAAa,CAAC,IAA0C,CAAC,CAAC;IACnE,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvD,oEAAoE;IACpE,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,KAAK,KAAK,MAAM,CAAC,SAAS,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC9D,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAmBD,MAAM,UAAU,aAAa,CAAC,EAC5B,IAAI,EACJ,WAAW,GAAG,CAAC,EACf,IAAI,EACJ,aAAa,EACb,UAAU,EACV,SAAS,EACT,YAAY,GAAG,KAAK,GACD;IACnB,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,UAAU,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;IACzD,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,WAAW,EAAE,CAAC;IAC7B,MAAM,aAAa,GAAG,MAAM;QAC1B,CAAC,CAAC,0BAA0B;QAC5B,CAAC,CAAC,2BAA2B,CAAC;IAEhC,SAAS,CAAC,GAAG,EAAE;QACb,wEAAwE;QACxE,oEAAoE;QACpE,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC3B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,OAAO,GAAG,CACd,KAAC,oBAAoB,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa,YACjD,KAAC,eAAe,IACd,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,IAAI;YACV,4EAA4E;YAC5E,6GAA6G;YAC7G,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,mBAAmB,EACxD,WAAW,EAAE,kBAAkB,EAC/B,YAAY,EAAE,YAAY,GAC1B,GAC4B,CACjC,CAAC;IAEF,IAAI,OAAO,GAAG,OAAO,CAAC;IAEtB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,GAAG,CACR,KAAC,kBAAkB,CAAC,QAAQ,IAAC,KAAK,EAAE,aAAa,YAC9C,OAAO,GACoB,CAC/B,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,GAAG,CACR,KAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,UAAU,YACxC,OAAO,GACiB,CAC5B,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,CACR,KAAC,mBAAmB,CAAC,QAAQ,IAAC,KAAK,EAAE,EAAE,SAAS,EAAE,YAAY,EAAE,YAC7D,OAAO,GACqB,CAChC,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,sBAAsB,CAAI,IAAO;IACxC,MAAM,WAAW,GAAG,MAAM,CAAI,IAAI,CAAC,CAAC;IACpC,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QAC5C,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IAC7B,CAAC;IACD,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,CAAC;AACrD,CAAC;AAED,SAAS,WAAW,CAAC,CAAU,EAAE,CAAU,EAAE,IAAI,GAAG,IAAI,OAAO,EAAE;IAC/D,IAAI,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE,CAAC;QAC3C,OAAO,CAAC,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACrC,CAAC;IAED,IAAI,CAAC,YAAY,MAAM,IAAI,CAAC,YAAY,MAAM,EAAE,CAAC;QAC/C,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;YACvC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACzC,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YAAE,OAAO,KAAK,CAAC;QACpC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/B,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,OAAO,KAAK,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEf,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAClC,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAExC,IAAI,QAAQ,IAAI,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;gBAAE,OAAO,KAAK,CAAC;QACnD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAEhD,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC;YAAE,OAAO,KAAK,CAAC;QACzC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;IACvD,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["'use client';\n\n/**\n * Reusable data inspector component built on react-inspector.\n *\n * All data rendering in the o11y UI should use this component to ensure\n * consistent theming, custom type handling (StreamRef, ClassInstanceRef),\n * and expand behavior.\n */\n\nimport { Lock } from 'lucide-react';\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ObjectInspector,\n ObjectLabel,\n ObjectName,\n ObjectRootLabel,\n ObjectValue,\n} from 'react-inspector';\nimport { useDarkMode } from '../../hooks/use-dark-mode';\nimport { ENCRYPTED_DISPLAY_NAME } from '../../lib/hydration';\nimport {\n type InspectorThemeExtended,\n inspectorThemeDark,\n inspectorThemeExtendedDark,\n inspectorThemeExtendedLight,\n inspectorThemeLight,\n} from './inspector-theme';\nimport { Spinner } from './spinner';\n\n// ---------------------------------------------------------------------------\n// StreamRef / ClassInstanceRef type detection\n// (inline to avoid circular deps with hydration module)\n// ---------------------------------------------------------------------------\n\nconst STREAM_REF_TYPE = '__workflow_stream_ref__';\nconst CLASS_INSTANCE_REF_TYPE = '__workflow_class_instance_ref__';\nconst RUN_REF_TYPE = '__workflow_run_ref__';\n\ninterface StreamRef {\n __type: typeof STREAM_REF_TYPE;\n streamId: string;\n}\n\ninterface RunRef {\n __type: typeof RUN_REF_TYPE;\n runId: string;\n}\n\nfunction isStreamRef(value: unknown): value is StreamRef {\n if (value === null || typeof value !== 'object') return false;\n // Check both enumerable and non-enumerable __type (opaque refs use non-enumerable)\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === STREAM_REF_TYPE;\n}\n\nfunction isRunRef(value: unknown): value is RunRef {\n if (value === null || typeof value !== 'object') return false;\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === RUN_REF_TYPE;\n}\n\nfunction isClassInstanceRef(value: unknown): value is {\n __type: string;\n className: string;\n classId: string;\n data: unknown;\n} {\n return (\n value !== null &&\n typeof value === 'object' &&\n '__type' in value &&\n (value as Record<string, unknown>).__type === CLASS_INSTANCE_REF_TYPE\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stream click context (passed through from the panel)\n// ---------------------------------------------------------------------------\n\n/**\n * Context for passing stream click handlers down to DataInspector instances.\n * Exported so that parent components (e.g., AttributePanel) can provide the handler.\n */\nexport const StreamClickContext = createContext<\n ((streamId: string) => void) | undefined\n>(undefined);\n\n/**\n * Context for passing a decrypt handler down to DataInspector instances.\n * When provided, encrypted markers become clickable buttons that trigger decryption.\n */\nexport type DecryptClickContextValue = {\n onDecrypt: () => void;\n isDecrypting: boolean;\n};\n\nexport const DecryptClickContext = createContext<\n DecryptClickContextValue | undefined\n>(undefined);\n\nexport const RunClickContext = createContext<\n ((runId: string) => void) | undefined\n>(undefined);\n\nfunction EncryptedInlineLabel() {\n const ctx = useContext(DecryptClickContext);\n if (ctx) {\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] cursor-pointer\"\n style={{\n backgroundColor: 'var(--ds-gray-100)',\n color: 'var(--ds-gray-700)',\n border: '1px solid var(--ds-gray-400)',\n fontStyle: 'italic',\n opacity: ctx.isDecrypting ? 0.6 : 1,\n }}\n disabled={ctx.isDecrypting}\n onClick={(e) => {\n e.stopPropagation();\n ctx.onDecrypt();\n }}\n title=\"Click to decrypt\"\n >\n {ctx.isDecrypting ? (\n <Spinner size={12} />\n ) : (\n <Lock\n className=\"h-3 w-3\"\n style={{ display: 'inline', flexShrink: 0 }}\n />\n )}\n <span>{ctx.isDecrypting ? 'Decrypting…' : 'Decrypt'}</span>\n </button>\n );\n }\n return (\n <span style={{ color: 'var(--ds-gray-600)', fontStyle: 'italic' }}>\n <Lock\n className=\"h-3 w-3\"\n style={{\n display: 'inline',\n verticalAlign: 'middle',\n marginRight: '3px',\n marginTop: '-1px',\n }}\n />\n Encrypted\n </span>\n );\n}\nfunction StreamRefInline({ streamRef }: { streamRef: StreamRef }) {\n const onStreamClick = useContext(StreamClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered ? 'var(--ds-blue-200)' : 'var(--ds-blue-100)',\n color: 'var(--ds-blue-900)',\n border: '1px solid var(--ds-blue-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onStreamClick?.(streamRef.streamId);\n }}\n title={`View stream: ${streamRef.streamId}`}\n >\n <span>📡</span>\n <span>{streamRef.streamId}</span>\n </button>\n );\n}\n\nfunction RunRefInline({ runRef }: { runRef: RunRef }) {\n const onRunClick = useContext(RunClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered\n ? 'var(--ds-purple-200)'\n : 'var(--ds-purple-100)',\n color: 'var(--ds-purple-900)',\n border: '1px solid var(--ds-purple-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onRunClick?.(runRef.runId);\n }}\n title={`View run: ${runRef.runId}`}\n >\n <span>{runRef.runId}</span>\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Extended theme context (for colors react-inspector doesn't support natively)\n// ---------------------------------------------------------------------------\n\nconst ExtendedThemeContext = createContext<InspectorThemeExtended>(\n inspectorThemeExtendedLight\n);\n\n// ---------------------------------------------------------------------------\n// Custom nodeRenderer\n// ---------------------------------------------------------------------------\n\n/**\n * Extends the default react-inspector nodeRenderer with special handling\n * for ClassInstanceRef, StreamRef, and Date types.\n *\n * react-inspector renders Date instances as unstyled plain text (no theme\n * key exists for them), so we intercept here and apply the magenta color\n * from our extended theme — matching Node.js util.inspect()'s date style.\n *\n * Default nodeRenderer reference:\n * https://github.com/storybookjs/react-inspector/blob/main/README.md#noderenderer\n */\nfunction NodeRenderer({\n depth,\n name,\n data,\n isNonenumerable,\n}: {\n depth: number;\n name?: string;\n data: unknown;\n isNonenumerable?: boolean;\n expanded?: boolean;\n}) {\n const extendedTheme = useContext(ExtendedThemeContext);\n\n // Encrypted marker → flat label with Lock icon, clickable when onDecrypt is available\n if (\n data !== null &&\n typeof data === 'object' &&\n data.constructor?.name === ENCRYPTED_DISPLAY_NAME\n ) {\n const label = <EncryptedInlineLabel />;\n if (depth === 0) {\n return label;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n {label}\n </span>\n );\n }\n\n // StreamRef → inline clickable badge\n if (isStreamRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <StreamRefInline streamRef={data} />\n </span>\n );\n }\n\n // RunRef → inline clickable badge linking to the target run\n if (isRunRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <RunRefInline runRef={data} />\n </span>\n );\n }\n\n // ClassInstanceRef → show className as type, data as the inspectable value\n if (isClassInstanceRef(data)) {\n if (depth === 0) {\n return <ObjectRootLabel name={data.className} data={data.data} />;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ fontStyle: 'italic' }}>{data.className} </span>\n <ObjectValue object={data.data} />\n </span>\n );\n }\n\n // Date → magenta color (Node.js: 'date' → 'magenta')\n // react-inspector has no OBJECT_VALUE_DATE_COLOR theme key, so we handle it here.\n if (data instanceof Date) {\n const dateStr = data.toISOString();\n if (depth === 0) {\n return (\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n );\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n </span>\n );\n }\n\n // Default rendering (same as react-inspector's built-in)\n if (depth === 0) {\n return <ObjectRootLabel name={name} data={data} />;\n }\n return (\n <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\n/**\n * Create a non-expandable wrapper that carries ref data as non-enumerable\n * properties. ObjectInspector won't render children for objects with no\n * enumerable keys, but our NodeRenderer can still detect them.\n */\nfunction makeOpaqueRef(ref: Record<string, unknown>): unknown {\n const opaque = Object.create(null);\n for (const [key, value] of Object.entries(ref)) {\n Object.defineProperty(opaque, key, { value, enumerable: false });\n }\n return opaque;\n}\n\n/**\n * Recursively walk data and replace RunRef/StreamRef objects with\n * non-expandable versions so ObjectInspector doesn't show their internals.\n * Only recurses into plain objects and arrays to avoid stripping class\n * instances (Date, Error, Map, Set, URL, Headers, etc.) that have their\n * own rendering in NodeRenderer.\n */\nfunction collapseRefs(data: unknown): unknown {\n if (data === null || typeof data !== 'object') return data;\n if (isRunRef(data) || isStreamRef(data))\n return makeOpaqueRef(data as unknown as Record<string, unknown>);\n if (Array.isArray(data)) return data.map(collapseRefs);\n // Only recurse into plain objects — leave class instances untouched\n const proto = Object.getPrototypeOf(data);\n if (proto !== Object.prototype && proto !== null) return data;\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n result[key] = collapseRefs(value);\n }\n return result;\n}\n\nexport interface DataInspectorProps {\n /** The data to inspect */\n data: unknown;\n /** Initial expand depth (default: 2) */\n expandLevel?: number;\n /** Optional name for the root node */\n name?: string;\n /** Callback when a stream reference is clicked */\n onStreamClick?: (streamId: string) => void;\n /** Callback when a run reference is clicked */\n onRunClick?: (runId: string) => void;\n /** Callback when an encrypted marker is clicked (triggers decryption) */\n onDecrypt?: () => void;\n /** Whether decryption is currently in progress */\n isDecrypting?: boolean;\n}\n\nexport function DataInspector({\n data,\n expandLevel = 2,\n name,\n onStreamClick,\n onRunClick,\n onDecrypt,\n isDecrypting = false,\n}: DataInspectorProps) {\n const collapsedData = useMemo(() => collapseRefs(data), [data]);\n const stableData = useStableInspectorData(collapsedData);\n const [initialExpandLevel, setInitialExpandLevel] = useState(expandLevel);\n const isDark = useDarkMode();\n const extendedTheme = isDark\n ? inspectorThemeExtendedDark\n : inspectorThemeExtendedLight;\n\n useEffect(() => {\n // react-inspector reapplies expandLevel on every data change, which can\n // reopen paths the user manually collapsed. Apply it only on mount.\n setInitialExpandLevel(0);\n }, []);\n\n const content = (\n <ExtendedThemeContext.Provider value={extendedTheme}>\n <ObjectInspector\n data={stableData}\n name={name}\n // @ts-expect-error react-inspector accepts theme objects at runtime despite\n // types declaring string only — see https://github.com/storybookjs/react-inspector/blob/main/README.md#theme\n theme={isDark ? inspectorThemeDark : inspectorThemeLight}\n expandLevel={initialExpandLevel}\n nodeRenderer={NodeRenderer}\n />\n </ExtendedThemeContext.Provider>\n );\n\n let wrapped = content;\n\n if (onStreamClick) {\n wrapped = (\n <StreamClickContext.Provider value={onStreamClick}>\n {wrapped}\n </StreamClickContext.Provider>\n );\n }\n if (onRunClick) {\n wrapped = (\n <RunClickContext.Provider value={onRunClick}>\n {wrapped}\n </RunClickContext.Provider>\n );\n }\n if (onDecrypt) {\n wrapped = (\n <DecryptClickContext.Provider value={{ onDecrypt, isDecrypting }}>\n {wrapped}\n </DecryptClickContext.Provider>\n );\n }\n\n return wrapped;\n}\n\nfunction useStableInspectorData<T>(next: T): T {\n const previousRef = useRef<T>(next);\n if (!isDeepEqual(previousRef.current, next)) {\n previousRef.current = next;\n }\n return previousRef.current;\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isDeepEqual(a: unknown, b: unknown, seen = new WeakMap()): boolean {\n if (Object.is(a, b)) return true;\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !isDeepEqual(value, b.get(key), seen)) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a.values()) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n if (!isObjectLike(a) || !isObjectLike(b)) {\n return false;\n }\n\n if (seen.get(a) === b) return true;\n seen.set(a, b);\n\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n if (aIsArray !== bIsArray) return false;\n\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (!isDeepEqual(a[i], b[i], seen)) return false;\n }\n return true;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n\n for (const key of aKeys) {\n if (!Object.hasOwn(b, key)) return false;\n if (!isDeepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n"]}
1
+ {"version":3,"file":"data-inspector.js","sourceRoot":"","sources":["../../../src/components/ui/data-inspector.tsx"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\n/**\n * Reusable data inspector component built on react-inspector.\n *\n * All data rendering in the o11y UI should use this component to ensure\n * consistent theming, custom type handling (StreamRef, ClassInstanceRef),\n * and expand behavior.\n */\n\nimport { Lock } from 'lucide-react';\nimport {\n createContext,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport {\n ObjectInspector,\n ObjectLabel,\n ObjectName,\n ObjectRootLabel,\n ObjectValue,\n} from 'react-inspector';\nimport { useDarkMode } from '../../hooks/use-dark-mode';\nimport { ENCRYPTED_DISPLAY_NAME } from '../../lib/hydration';\nimport {\n type DecodedStreamChunkSource,\n type FormattedStreamChunkDisplay,\n formatArrayBufferViewForDisplay,\n} from '../../lib/stream-display';\nimport {\n type InspectorThemeExtended,\n inspectorThemeDark,\n inspectorThemeExtendedDark,\n inspectorThemeExtendedLight,\n inspectorThemeLight,\n} from './inspector-theme';\nimport { Spinner } from './spinner';\n\n// ---------------------------------------------------------------------------\n// StreamRef / ClassInstanceRef type detection\n// (inline to avoid circular deps with hydration module)\n// ---------------------------------------------------------------------------\n\nconst STREAM_REF_TYPE = '__workflow_stream_ref__';\nconst CLASS_INSTANCE_REF_TYPE = '__workflow_class_instance_ref__';\nconst RUN_REF_TYPE = '__workflow_run_ref__';\nconst BYTES_DISPLAY_TYPE = '__workflow_bytes_display__';\n\ninterface StreamRef {\n __type: typeof STREAM_REF_TYPE;\n streamId: string;\n}\n\ninterface RunRef {\n __type: typeof RUN_REF_TYPE;\n runId: string;\n}\n\ninterface BytesDisplay {\n __type: typeof BYTES_DISPLAY_TYPE;\n text: string;\n decodedFrom?: DecodedStreamChunkSource;\n}\n\nfunction deserializeChunkText(text: string): string {\n try {\n const parsed = JSON.parse(text);\n if (typeof parsed === 'string') {\n return parsed;\n }\n return JSON.stringify(parsed, null, 2);\n } catch {\n return text;\n }\n}\n\nfunction parseChunkData(text: string): unknown {\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\nfunction isStreamRef(value: unknown): value is StreamRef {\n if (value === null || typeof value !== 'object') return false;\n // Check both enumerable and non-enumerable __type (opaque refs use non-enumerable)\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === STREAM_REF_TYPE;\n}\n\nfunction isRunRef(value: unknown): value is RunRef {\n if (value === null || typeof value !== 'object') return false;\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === RUN_REF_TYPE;\n}\n\nexport function isBytesDisplay(value: unknown): value is BytesDisplay {\n if (value === null || typeof value !== 'object') return false;\n const desc = Object.getOwnPropertyDescriptor(value, '__type');\n return desc?.value === BYTES_DISPLAY_TYPE;\n}\n\nfunction isClassInstanceRef(value: unknown): value is {\n __type: string;\n className: string;\n classId: string;\n data: unknown;\n} {\n return (\n value !== null &&\n typeof value === 'object' &&\n '__type' in value &&\n (value as Record<string, unknown>).__type === CLASS_INSTANCE_REF_TYPE\n );\n}\n\n// ---------------------------------------------------------------------------\n// Stream click context (passed through from the panel)\n// ---------------------------------------------------------------------------\n\n/**\n * Context for passing stream click handlers down to DataInspector instances.\n * Exported so that parent components (e.g., AttributePanel) can provide the handler.\n */\nexport const StreamClickContext = createContext<\n ((streamId: string) => void) | undefined\n>(undefined);\n\n/**\n * Context for passing a decrypt handler down to DataInspector instances.\n * When provided, encrypted markers become clickable buttons that trigger decryption.\n */\nexport type DecryptClickContextValue = {\n onDecrypt: () => void;\n isDecrypting: boolean;\n};\n\nexport const DecryptClickContext = createContext<\n DecryptClickContextValue | undefined\n>(undefined);\n\nexport const RunClickContext = createContext<\n ((runId: string) => void) | undefined\n>(undefined);\n\nfunction EncryptedInlineLabel() {\n const ctx = useContext(DecryptClickContext);\n if (ctx) {\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[11px] cursor-pointer\"\n style={{\n backgroundColor: 'var(--ds-gray-100)',\n color: 'var(--ds-gray-700)',\n border: '1px solid var(--ds-gray-400)',\n fontStyle: 'italic',\n opacity: ctx.isDecrypting ? 0.6 : 1,\n }}\n disabled={ctx.isDecrypting}\n onClick={(e) => {\n e.stopPropagation();\n ctx.onDecrypt();\n }}\n title=\"Click to decrypt\"\n >\n {ctx.isDecrypting ? (\n <Spinner size={12} />\n ) : (\n <Lock\n className=\"h-3 w-3\"\n style={{ display: 'inline', flexShrink: 0 }}\n />\n )}\n <span>{ctx.isDecrypting ? 'Decrypting…' : 'Decrypt'}</span>\n </button>\n );\n }\n return (\n <span style={{ color: 'var(--ds-gray-600)', fontStyle: 'italic' }}>\n <Lock\n className=\"h-3 w-3\"\n style={{\n display: 'inline',\n verticalAlign: 'middle',\n marginRight: '3px',\n marginTop: '-1px',\n }}\n />\n Encrypted\n </span>\n );\n}\nfunction StreamRefInline({ streamRef }: { streamRef: StreamRef }) {\n const onStreamClick = useContext(StreamClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered ? 'var(--ds-blue-200)' : 'var(--ds-blue-100)',\n color: 'var(--ds-blue-900)',\n border: '1px solid var(--ds-blue-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onStreamClick?.(streamRef.streamId);\n }}\n title={`View stream: ${streamRef.streamId}`}\n >\n <span>📡</span>\n <span>{streamRef.streamId}</span>\n </button>\n );\n}\n\nfunction RunRefInline({ runRef }: { runRef: RunRef }) {\n const onRunClick = useContext(RunClickContext);\n const [hovered, setHovered] = useState(false);\n return (\n <button\n type=\"button\"\n className=\"inline-flex items-center gap-1 px-1.5 py-0.5 rounded text-[10px] font-mono cursor-pointer underline decoration-transparent transition-colors\"\n style={{\n backgroundColor: hovered\n ? 'var(--ds-purple-200)'\n : 'var(--ds-purple-100)',\n color: 'var(--ds-purple-900)',\n border: '1px solid var(--ds-purple-300)',\n }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onClick={(e) => {\n e.stopPropagation();\n onRunClick?.(runRef.runId);\n }}\n title={`View run: ${runRef.runId}`}\n >\n <span>{runRef.runId}</span>\n </button>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Extended theme context (for colors react-inspector doesn't support natively)\n// ---------------------------------------------------------------------------\n\nconst ExtendedThemeContext = createContext<InspectorThemeExtended>(\n inspectorThemeExtendedLight\n);\n\nfunction DecodedBytesChunk({\n decodedText,\n source,\n}: {\n decodedText: string;\n source: DecodedStreamChunkSource;\n}) {\n const [selectedView, setSelectedView] = useState<'decoded' | 'bytes'>(\n 'decoded'\n );\n const parsed = parseChunkData(decodedText);\n\n return (\n <div className=\"min-w-0\">\n {selectedView === 'decoded' ? (\n <div className=\"min-w-0\">\n {typeof parsed === 'string' ? (\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-gray-1000)' }}\n >\n {deserializeChunkText(parsed)}\n </span>\n ) : (\n <DataInspector data={parsed} expandLevel={1} />\n )}\n </div>\n ) : (\n <DecodedBytesInspector decodedText={decodedText} source={source} />\n )}\n <div className=\"mt-2 flex\">\n <div\n className=\"inline-flex overflow-hidden rounded border\"\n style={{ borderColor: 'var(--ds-gray-400)' }}\n title={`${source.type} decoded as ${source.encoding.toUpperCase()} text. Switch to Bytes to inspect the summarized raw value.`}\n >\n <button\n type=\"button\"\n className=\"h-5 px-1.5 text-[10px] font-medium\"\n style={{\n backgroundColor:\n selectedView === 'decoded'\n ? 'var(--ds-gray-200)'\n : 'var(--ds-gray-100)',\n color: 'var(--ds-gray-900)',\n }}\n onClick={() => setSelectedView('decoded')}\n aria-pressed={selectedView === 'decoded'}\n aria-label=\"Show decoded text\"\n >\n Decoded\n </button>\n <button\n type=\"button\"\n className=\"h-5 border-l px-1.5 text-[10px] font-medium\"\n style={{\n borderColor: 'var(--ds-gray-400)',\n backgroundColor:\n selectedView === 'bytes'\n ? 'var(--ds-gray-200)'\n : 'var(--ds-gray-100)',\n color: 'var(--ds-gray-900)',\n }}\n onClick={() => setSelectedView('bytes')}\n aria-pressed={selectedView === 'bytes'}\n aria-label=\"Show raw bytes summary\"\n >\n Bytes\n </button>\n </div>\n </div>\n </div>\n );\n}\n\nfunction DecodedBytesInspector({\n decodedText,\n source,\n}: {\n decodedText: string;\n source: DecodedStreamChunkSource;\n}) {\n const [expanded, setExpanded] = useState(false);\n\n return (\n <div className=\"font-mono\">\n <button\n type=\"button\"\n className=\"flex max-w-full items-start gap-1 text-left\"\n style={{ color: 'var(--ds-gray-1000)' }}\n onClick={() => setExpanded((value) => !value)}\n title={`${source.type} decoded as ${source.encoding.toUpperCase()} text`}\n >\n <span className=\"select-none\" style={{ color: 'var(--ds-gray-700)' }}>\n {expanded ? '▼' : '▶'}\n </span>\n <span className=\"min-w-0 break-words\">{source.rawSummary}</span>\n </button>\n {expanded && (\n <div className=\"mt-1 pl-5\">\n <span style={{ color: 'var(--ds-gray-700)' }}>decoded: </span>\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-green-900)' }}\n >\n {JSON.stringify(decodedText)}\n </span>\n </div>\n )}\n </div>\n );\n}\n\nfunction BytesDisplayLabel({\n name,\n display,\n}: {\n name?: string;\n display: BytesDisplay;\n}) {\n return (\n <div className=\"inline-block min-w-0 align-top\">\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n {display.decodedFrom ? (\n <DecodedBytesChunk\n decodedText={display.text}\n source={display.decodedFrom}\n />\n ) : (\n <span\n className=\"whitespace-pre-wrap break-words\"\n style={{ color: 'var(--ds-gray-1000)' }}\n >\n {display.text}\n </span>\n )}\n </div>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Custom nodeRenderer\n// ---------------------------------------------------------------------------\n\n/**\n * Extends the default react-inspector nodeRenderer with special handling\n * for ClassInstanceRef, StreamRef, and Date types.\n *\n * react-inspector renders Date instances as unstyled plain text (no theme\n * key exists for them), so we intercept here and apply the magenta color\n * from our extended theme — matching Node.js util.inspect()'s date style.\n *\n * Default nodeRenderer reference:\n * https://github.com/storybookjs/react-inspector/blob/main/README.md#noderenderer\n */\nfunction NodeRenderer({\n depth,\n name,\n data,\n isNonenumerable,\n}: {\n depth: number;\n name?: string;\n data: unknown;\n isNonenumerable?: boolean;\n expanded?: boolean;\n}) {\n const extendedTheme = useContext(ExtendedThemeContext);\n\n if (isBytesDisplay(data)) {\n return <BytesDisplayLabel name={name} display={data} />;\n }\n\n // Encrypted marker → flat label with Lock icon, clickable when onDecrypt is available\n if (\n data !== null &&\n typeof data === 'object' &&\n data.constructor?.name === ENCRYPTED_DISPLAY_NAME\n ) {\n const label = <EncryptedInlineLabel />;\n if (depth === 0) {\n return label;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n {label}\n </span>\n );\n }\n\n // StreamRef → inline clickable badge\n if (isStreamRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <StreamRefInline streamRef={data} />\n </span>\n );\n }\n\n // RunRef → inline clickable badge linking to the target run\n if (isRunRef(data)) {\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <RunRefInline runRef={data} />\n </span>\n );\n }\n\n // ClassInstanceRef → show className as type, data as the inspectable value\n if (isClassInstanceRef(data)) {\n if (depth === 0) {\n return <ObjectRootLabel name={data.className} data={data.data} />;\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ fontStyle: 'italic' }}>{data.className} </span>\n <ObjectValue object={data.data} />\n </span>\n );\n }\n\n // Date → magenta color (Node.js: 'date' → 'magenta')\n // react-inspector has no OBJECT_VALUE_DATE_COLOR theme key, so we handle it here.\n if (data instanceof Date) {\n const dateStr = data.toISOString();\n if (depth === 0) {\n return (\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n );\n }\n return (\n <span>\n {name != null && <ObjectName name={name} />}\n {name != null && <span>: </span>}\n <span style={{ color: extendedTheme.OBJECT_VALUE_DATE_COLOR }}>\n {dateStr}\n </span>\n </span>\n );\n }\n\n // Default rendering (same as react-inspector's built-in)\n if (depth === 0) {\n return <ObjectRootLabel name={name} data={data} />;\n }\n return (\n <ObjectLabel name={name} data={data} isNonenumerable={isNonenumerable} />\n );\n}\n\n// ---------------------------------------------------------------------------\n// Public component\n// ---------------------------------------------------------------------------\n\n/**\n * Create a non-expandable wrapper that carries ref data as non-enumerable\n * properties. ObjectInspector won't render children for objects with no\n * enumerable keys, but our NodeRenderer can still detect them.\n */\nfunction makeOpaqueRef(ref: Record<string, unknown>): unknown {\n const opaque = Object.create(null);\n for (const [key, value] of Object.entries(ref)) {\n Object.defineProperty(opaque, key, { value, enumerable: false });\n }\n return opaque;\n}\n\nfunction makeBytesDisplay(display: FormattedStreamChunkDisplay): unknown {\n const opaque = Object.create(null);\n Object.defineProperty(opaque, '__type', {\n value: BYTES_DISPLAY_TYPE,\n enumerable: false,\n });\n Object.defineProperty(opaque, 'text', {\n value: display.text,\n enumerable: false,\n });\n Object.defineProperty(opaque, 'decodedFrom', {\n value: display.decodedFrom,\n enumerable: false,\n });\n return opaque;\n}\n\n/**\n * Recursively walk data and replace RunRef/StreamRef/typed array objects with\n * non-expandable versions so ObjectInspector doesn't show their internals.\n * Only recurses into plain objects and arrays to avoid stripping class\n * instances (Date, Error, URL, Headers, etc.) that have their own rendering in\n * NodeRenderer. Map and Set containers are preserved while their contents are\n * prepared for display.\n *\n * Exported for testing the typed-array detection path used by hydrated\n * AI agent stream chunks (e.g. `{ delta: new Uint8Array(...) }`).\n */\nexport function collapseRefs(data: unknown): unknown {\n if (data === null || typeof data !== 'object') return data;\n if (ArrayBuffer.isView(data) && !(data instanceof DataView)) {\n return makeBytesDisplay(formatArrayBufferViewForDisplay(data));\n }\n if (isRunRef(data) || isStreamRef(data))\n return makeOpaqueRef(data as unknown as Record<string, unknown>);\n if (Array.isArray(data)) return data.map(collapseRefs);\n if (data instanceof Map) {\n return new Map(\n Array.from(data.entries(), ([key, value]) => [\n collapseRefs(key),\n collapseRefs(value),\n ])\n );\n }\n if (data instanceof Set) {\n return new Set(Array.from(data.values(), collapseRefs));\n }\n // Only recurse into plain objects — leave class instances untouched\n const proto = Object.getPrototypeOf(data);\n if (proto !== Object.prototype && proto !== null) return data;\n const result: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n result[key] = collapseRefs(value);\n }\n return result;\n}\n\nexport interface DataInspectorProps {\n /** The data to inspect */\n data: unknown;\n /** Initial expand depth (default: 2) */\n expandLevel?: number;\n /** Optional name for the root node */\n name?: string;\n /** Callback when a stream reference is clicked */\n onStreamClick?: (streamId: string) => void;\n /** Callback when a run reference is clicked */\n onRunClick?: (runId: string) => void;\n /** Callback when an encrypted marker is clicked (triggers decryption) */\n onDecrypt?: () => void;\n /** Whether decryption is currently in progress */\n isDecrypting?: boolean;\n}\n\nexport function DataInspector({\n data,\n expandLevel = 2,\n name,\n onStreamClick,\n onRunClick,\n onDecrypt,\n isDecrypting = false,\n}: DataInspectorProps) {\n const collapsedData = useMemo(() => collapseRefs(data), [data]);\n const stableData = useStableInspectorData(collapsedData);\n const [initialExpandLevel, setInitialExpandLevel] = useState(expandLevel);\n const isDark = useDarkMode();\n const extendedTheme = isDark\n ? inspectorThemeExtendedDark\n : inspectorThemeExtendedLight;\n\n useEffect(() => {\n // react-inspector reapplies expandLevel on every data change, which can\n // reopen paths the user manually collapsed. Apply it only on mount.\n setInitialExpandLevel(0);\n }, []);\n\n const content = (\n <ExtendedThemeContext.Provider value={extendedTheme}>\n <ObjectInspector\n data={stableData}\n name={name}\n // @ts-expect-error react-inspector accepts theme objects at runtime despite\n // types declaring string only — see https://github.com/storybookjs/react-inspector/blob/main/README.md#theme\n theme={isDark ? inspectorThemeDark : inspectorThemeLight}\n expandLevel={initialExpandLevel}\n nodeRenderer={NodeRenderer}\n />\n </ExtendedThemeContext.Provider>\n );\n\n let wrapped = content;\n\n if (onStreamClick) {\n wrapped = (\n <StreamClickContext.Provider value={onStreamClick}>\n {wrapped}\n </StreamClickContext.Provider>\n );\n }\n if (onRunClick) {\n wrapped = (\n <RunClickContext.Provider value={onRunClick}>\n {wrapped}\n </RunClickContext.Provider>\n );\n }\n if (onDecrypt) {\n wrapped = (\n <DecryptClickContext.Provider value={{ onDecrypt, isDecrypting }}>\n {wrapped}\n </DecryptClickContext.Provider>\n );\n }\n\n return wrapped;\n}\n\nfunction useStableInspectorData<T>(next: T): T {\n const previousRef = useRef<T>(next);\n if (!isDeepEqual(previousRef.current, next)) {\n previousRef.current = next;\n }\n return previousRef.current;\n}\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null;\n}\n\nfunction isSameBytesDisplay(a: BytesDisplay, b: BytesDisplay): boolean {\n return (\n a.text === b.text &&\n a.decodedFrom?.type === b.decodedFrom?.type &&\n a.decodedFrom?.encoding === b.decodedFrom?.encoding &&\n a.decodedFrom?.rawSummary === b.decodedFrom?.rawSummary\n );\n}\n\nfunction isDeepEqual(a: unknown, b: unknown, seen = new WeakMap()): boolean {\n if (Object.is(a, b)) return true;\n\n if (isBytesDisplay(a) || isBytesDisplay(b)) {\n return isBytesDisplay(a) && isBytesDisplay(b) && isSameBytesDisplay(a, b);\n }\n\n if (a instanceof Date && b instanceof Date) {\n return a.getTime() === b.getTime();\n }\n\n if (a instanceof RegExp && b instanceof RegExp) {\n return a.source === b.source && a.flags === b.flags;\n }\n\n if (a instanceof Map && b instanceof Map) {\n if (a.size !== b.size) return false;\n for (const [key, value] of a.entries()) {\n if (!b.has(key) || !isDeepEqual(value, b.get(key), seen)) return false;\n }\n return true;\n }\n\n if (a instanceof Set && b instanceof Set) {\n if (a.size !== b.size) return false;\n for (const value of a.values()) {\n if (!b.has(value)) return false;\n }\n return true;\n }\n\n if (!isObjectLike(a) || !isObjectLike(b)) {\n return false;\n }\n\n if (seen.get(a) === b) return true;\n seen.set(a, b);\n\n const aIsArray = Array.isArray(a);\n const bIsArray = Array.isArray(b);\n if (aIsArray !== bIsArray) return false;\n\n if (aIsArray && bIsArray) {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i += 1) {\n if (!isDeepEqual(a[i], b[i], seen)) return false;\n }\n return true;\n }\n\n const aKeys = Object.keys(a);\n const bKeys = Object.keys(b);\n if (aKeys.length !== bKeys.length) return false;\n\n for (const key of aKeys) {\n if (!Object.hasOwn(b, key)) return false;\n if (!isDeepEqual(a[key], b[key], seen)) return false;\n }\n\n return true;\n}\n"]}
@@ -1,17 +1,16 @@
1
1
  /**
2
2
  * Shared theme configuration for react-inspector's ObjectInspector.
3
3
  *
4
- * Color choices are inspired by Node.js `util.inspect()` ANSI stylizing:
5
- * - property names: unstyled (default foreground dark text on light, light text on dark)
6
- * - strings / symbols: green
7
- * - numbers / booleans / bigint: yellow
8
- * - null: bold (foreground)
9
- * - undefined: grey
10
- * - regexp: red
11
- * - functions (special): cyan
12
- * - date: magenta
4
+ * Colors follow Geist's Shiki JSON palette so the inspector reads the same
5
+ * as highlighted code blocks across the product:
6
+ * - property names / punctuation: --ds-gray-1000 (default foreground)
7
+ * - strings / numbers / booleans: --ds-green-900
8
+ * - null / undefined: --ds-gray-900 (muted)
9
+ * - regexp / function: --ds-purple-900
10
+ * - date: --ds-pink-900
13
11
  *
14
- * See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js
12
+ * Because the `--ds-*` tokens adapt to theme automatically, the light and
13
+ * dark objects are intentionally identical.
15
14
  */
16
15
  export interface InspectorThemeExtended {
17
16
  /** Color for Date values (Node: 'magenta') */
@@ -1 +1 @@
1
- {"version":3,"file":"inspector-theme.d.ts","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,2BAA2B,EAAE,sBAEzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAExC,CAAC;AA2BF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C/B,CAAC;AAMF,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2C9B,CAAC"}
1
+ {"version":3,"file":"inspector-theme.d.ts","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAOH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,uBAAuB,EAAE,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,2BAA2B,EAAE,sBAEzC,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,sBAExC,CAAC;AAwEF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC;AAM9C,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAa,CAAC"}
@@ -1,23 +1,22 @@
1
1
  /**
2
2
  * Shared theme configuration for react-inspector's ObjectInspector.
3
3
  *
4
- * Color choices are inspired by Node.js `util.inspect()` ANSI stylizing:
5
- * - property names: unstyled (default foreground dark text on light, light text on dark)
6
- * - strings / symbols: green
7
- * - numbers / booleans / bigint: yellow
8
- * - null: bold (foreground)
9
- * - undefined: grey
10
- * - regexp: red
11
- * - functions (special): cyan
12
- * - date: magenta
4
+ * Colors follow Geist's Shiki JSON palette so the inspector reads the same
5
+ * as highlighted code blocks across the product:
6
+ * - property names / punctuation: --ds-gray-1000 (default foreground)
7
+ * - strings / numbers / booleans: --ds-green-900
8
+ * - null / undefined: --ds-gray-900 (muted)
9
+ * - regexp / function: --ds-purple-900
10
+ * - date: --ds-pink-900
13
11
  *
14
- * See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js
12
+ * Because the `--ds-*` tokens adapt to theme automatically, the light and
13
+ * dark objects are intentionally identical.
15
14
  */
16
15
  export const inspectorThemeExtendedLight = {
17
- OBJECT_VALUE_DATE_COLOR: '#a21caf', // fuchsia-700
16
+ OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
18
17
  };
19
18
  export const inspectorThemeExtendedDark = {
20
- OBJECT_VALUE_DATE_COLOR: '#e879f9', // fuchsia-400
19
+ OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',
21
20
  };
22
21
  // ---------------------------------------------------------------------------
23
22
  // Shared structural values (same in both themes)
@@ -41,75 +40,43 @@ const shared = {
41
40
  // ---------------------------------------------------------------------------
42
41
  // Light theme
43
42
  // ---------------------------------------------------------------------------
44
- export const inspectorThemeLight = {
43
+ const geistTheme = {
45
44
  ...shared,
46
45
  // Base text
47
46
  BASE_COLOR: 'var(--ds-gray-1000)',
48
- // Property names — unstyled, same as base foreground (Node: no style)
49
- OBJECT_NAME_COLOR: 'var(--ds-gray-900)',
50
- // Strings & symbols — green (Node: 'green')
51
- OBJECT_VALUE_STRING_COLOR: '#16a34a', // green-600
52
- OBJECT_VALUE_SYMBOL_COLOR: '#16a34a',
53
- // Numbers & booleans — yellow/amber (Node: 'yellow')
54
- OBJECT_VALUE_NUMBER_COLOR: '#b45309', // amber-700 (readable on white)
55
- OBJECT_VALUE_BOOLEAN_COLOR: '#b45309',
56
- // null — bold foreground (Node: 'bold')
47
+ // Property names — default foreground (matches JSON key color in Geist Shiki)
48
+ OBJECT_NAME_COLOR: 'var(--ds-gray-1000)',
49
+ // Strings & symbols — green
50
+ OBJECT_VALUE_STRING_COLOR: 'var(--ds-green-900)',
51
+ OBJECT_VALUE_SYMBOL_COLOR: 'var(--ds-green-900)',
52
+ // Numbers & booleans — green (Geist JSON tokens)
53
+ OBJECT_VALUE_NUMBER_COLOR: 'var(--ds-green-900)',
54
+ OBJECT_VALUE_BOOLEAN_COLOR: 'var(--ds-green-900)',
55
+ // null — muted foreground
57
56
  OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',
58
- // undefined — grey (Node: 'grey')
59
- OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',
60
- // RegExp — red (Node regexp base uses green/red/yellow palette)
61
- OBJECT_VALUE_REGEXP_COLOR: '#dc2626', // red-600
62
- // Functions — cyan (Node: 'special' → 'cyan')
63
- OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#0891b2', // cyan-600
64
- // HTML (less relevant for data inspection, but reasonable defaults)
65
- HTML_TAG_COLOR: 'var(--ds-gray-500)',
66
- HTML_TAGNAME_COLOR: '#0891b2',
67
- HTML_ATTRIBUTE_NAME_COLOR: '#b45309',
68
- HTML_ATTRIBUTE_VALUE_COLOR: '#16a34a',
69
- HTML_COMMENT_COLOR: 'var(--ds-gray-400)',
70
- HTML_DOCTYPE_COLOR: 'var(--ds-gray-400)',
57
+ // undefined — muted foreground
58
+ OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-900)',
59
+ // RegExp — purple
60
+ OBJECT_VALUE_REGEXP_COLOR: 'var(--ds-purple-900)',
61
+ // Functions — purple
62
+ OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'var(--ds-purple-900)',
63
+ // HTML (rarely used here, kept consistent with the palette)
64
+ HTML_TAG_COLOR: 'var(--ds-gray-900)',
65
+ HTML_TAGNAME_COLOR: 'var(--ds-blue-900)',
66
+ HTML_ATTRIBUTE_NAME_COLOR: 'var(--ds-amber-900)',
67
+ HTML_ATTRIBUTE_VALUE_COLOR: 'var(--ds-green-900)',
68
+ HTML_COMMENT_COLOR: 'var(--ds-gray-700)',
69
+ HTML_DOCTYPE_COLOR: 'var(--ds-gray-700)',
71
70
  // Structural
72
- ARROW_COLOR: 'var(--ds-gray-500)',
71
+ ARROW_COLOR: 'var(--ds-gray-700)',
73
72
  TABLE_BORDER_COLOR: 'var(--ds-gray-300)',
74
73
  TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',
75
74
  TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',
76
- TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',
75
+ TABLE_SORT_ICON_COLOR: 'var(--ds-gray-700)',
77
76
  };
77
+ export const inspectorThemeLight = geistTheme;
78
78
  // ---------------------------------------------------------------------------
79
79
  // Dark theme
80
80
  // ---------------------------------------------------------------------------
81
- export const inspectorThemeDark = {
82
- ...shared,
83
- // Base text
84
- BASE_COLOR: 'var(--ds-gray-1000)',
85
- // Property names — white/light foreground (Node: unstyled = white in dark terminal)
86
- OBJECT_NAME_COLOR: 'var(--ds-gray-900)',
87
- // Strings & symbols — green (Node: 'green')
88
- OBJECT_VALUE_STRING_COLOR: '#4ade80', // green-400
89
- OBJECT_VALUE_SYMBOL_COLOR: '#4ade80',
90
- // Numbers & booleans — yellow (Node: 'yellow')
91
- OBJECT_VALUE_NUMBER_COLOR: '#facc15', // yellow-400
92
- OBJECT_VALUE_BOOLEAN_COLOR: '#facc15',
93
- // null — bold foreground / white (Node: 'bold')
94
- OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-1000)',
95
- // undefined — grey (Node: 'grey')
96
- OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',
97
- // RegExp — red (Node regexp palette)
98
- OBJECT_VALUE_REGEXP_COLOR: '#f87171', // red-400
99
- // Functions — cyan (Node: 'special' → 'cyan')
100
- OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#22d3ee', // cyan-400
101
- // HTML
102
- HTML_TAG_COLOR: 'var(--ds-gray-500)',
103
- HTML_TAGNAME_COLOR: '#22d3ee',
104
- HTML_ATTRIBUTE_NAME_COLOR: '#facc15',
105
- HTML_ATTRIBUTE_VALUE_COLOR: '#4ade80',
106
- HTML_COMMENT_COLOR: 'var(--ds-gray-500)',
107
- HTML_DOCTYPE_COLOR: 'var(--ds-gray-500)',
108
- // Structural
109
- ARROW_COLOR: 'var(--ds-gray-500)',
110
- TABLE_BORDER_COLOR: 'var(--ds-gray-300)',
111
- TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',
112
- TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',
113
- TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',
114
- };
81
+ export const inspectorThemeDark = geistTheme;
115
82
  //# sourceMappingURL=inspector-theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inspector-theme.js","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,uBAAuB,EAAE,SAAS,EAAE,cAAc;CACnD,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAA2B;IAChE,uBAAuB,EAAE,SAAS,EAAE,cAAc;CACnD,CAAC;AAEF,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,MAAM,MAAM,GAAG;IACb,cAAc,EAAE,MAAM;IACtB,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,aAAa;IACpC,mCAAmC,EAAE,EAAE;IACvC,oCAAoC,EAAE,CAAC;IACvC,2BAA2B,EAAE,WAAoB;IACjD,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,EAAE;IACnB,oBAAoB,EAAE,kBAAkB;IACxC,kBAAkB,EAAE,MAAM;IAC1B,oBAAoB,EAAE,GAAG;IACzB,qBAAqB,EAAE,EAAE;IACzB,2BAA2B,EAAE,MAAM;IACnC,0BAA0B,EAAE,GAAG;CAChC,CAAC;AAEF,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,GAAG,MAAM;IAET,YAAY;IACZ,UAAU,EAAE,qBAAqB;IAEjC,sEAAsE;IACtE,iBAAiB,EAAE,oBAAoB;IAEvC,4CAA4C;IAC5C,yBAAyB,EAAE,SAAS,EAAE,YAAY;IAClD,yBAAyB,EAAE,SAAS;IAEpC,qDAAqD;IACrD,yBAAyB,EAAE,SAAS,EAAE,gCAAgC;IACtE,0BAA0B,EAAE,SAAS;IAErC,wCAAwC;IACxC,uBAAuB,EAAE,oBAAoB;IAE7C,kCAAkC;IAClC,4BAA4B,EAAE,oBAAoB;IAElD,gEAAgE;IAChE,yBAAyB,EAAE,SAAS,EAAE,UAAU;IAEhD,8CAA8C;IAC9C,kCAAkC,EAAE,SAAS,EAAE,WAAW;IAE1D,oEAAoE;IACpE,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,SAAS;IAC7B,yBAAyB,EAAE,SAAS;IACpC,0BAA0B,EAAE,SAAS;IACrC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAExC,aAAa;IACb,WAAW,EAAE,oBAAoB;IACjC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,oBAAoB;CAC5C,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,GAAG,MAAM;IAET,YAAY;IACZ,UAAU,EAAE,qBAAqB;IAEjC,oFAAoF;IACpF,iBAAiB,EAAE,oBAAoB;IAEvC,4CAA4C;IAC5C,yBAAyB,EAAE,SAAS,EAAE,YAAY;IAClD,yBAAyB,EAAE,SAAS;IAEpC,+CAA+C;IAC/C,yBAAyB,EAAE,SAAS,EAAE,aAAa;IACnD,0BAA0B,EAAE,SAAS;IAErC,gDAAgD;IAChD,uBAAuB,EAAE,qBAAqB;IAE9C,kCAAkC;IAClC,4BAA4B,EAAE,oBAAoB;IAElD,qCAAqC;IACrC,yBAAyB,EAAE,SAAS,EAAE,UAAU;IAEhD,8CAA8C;IAC9C,kCAAkC,EAAE,SAAS,EAAE,WAAW;IAE1D,OAAO;IACP,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,SAAS;IAC7B,yBAAyB,EAAE,SAAS;IACpC,0BAA0B,EAAE,SAAS;IACrC,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAExC,aAAa;IACb,WAAW,EAAE,oBAAoB;IACjC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,oBAAoB;CAC5C,CAAC","sourcesContent":["/**\n * Shared theme configuration for react-inspector's ObjectInspector.\n *\n * Color choices are inspired by Node.js `util.inspect()` ANSI stylizing:\n * - property names: unstyled (default foreground dark text on light, light text on dark)\n * - strings / symbols: green\n * - numbers / booleans / bigint: yellow\n * - null: bold (foreground)\n * - undefined: grey\n * - regexp: red\n * - functions (special): cyan\n * - date: magenta\n *\n * See: https://github.com/nodejs/node/blob/main/lib/internal/util/inspect.js\n */\n\n// ---------------------------------------------------------------------------\n// Extended color tokens not supported by react-inspector's built-in theme\n// system, applied via our custom nodeRenderer in data-inspector.tsx.\n// ---------------------------------------------------------------------------\n\nexport interface InspectorThemeExtended {\n /** Color for Date values (Node: 'magenta') */\n OBJECT_VALUE_DATE_COLOR: string;\n}\n\nexport const inspectorThemeExtendedLight: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: '#a21caf', // fuchsia-700\n};\n\nexport const inspectorThemeExtendedDark: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: '#e879f9', // fuchsia-400\n};\n\n// ---------------------------------------------------------------------------\n// Shared structural values (same in both themes)\n// ---------------------------------------------------------------------------\n\nconst shared = {\n BASE_FONT_SIZE: '11px',\n BASE_LINE_HEIGHT: 1.4,\n BASE_BACKGROUND_COLOR: 'transparent',\n OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,\n OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,\n HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase' as const,\n ARROW_MARGIN_RIGHT: 3,\n ARROW_FONT_SIZE: 12,\n TREENODE_FONT_FAMILY: 'var(--font-mono)',\n TREENODE_FONT_SIZE: '11px',\n TREENODE_LINE_HEIGHT: 1.4,\n TREENODE_PADDING_LEFT: 12,\n TABLE_DATA_BACKGROUND_IMAGE: 'none',\n TABLE_DATA_BACKGROUND_SIZE: '0',\n};\n\n// ---------------------------------------------------------------------------\n// Light theme\n// ---------------------------------------------------------------------------\n\nexport const inspectorThemeLight = {\n ...shared,\n\n // Base text\n BASE_COLOR: 'var(--ds-gray-1000)',\n\n // Property names — unstyled, same as base foreground (Node: no style)\n OBJECT_NAME_COLOR: 'var(--ds-gray-900)',\n\n // Strings & symbols — green (Node: 'green')\n OBJECT_VALUE_STRING_COLOR: '#16a34a', // green-600\n OBJECT_VALUE_SYMBOL_COLOR: '#16a34a',\n\n // Numbers & booleans — yellow/amber (Node: 'yellow')\n OBJECT_VALUE_NUMBER_COLOR: '#b45309', // amber-700 (readable on white)\n OBJECT_VALUE_BOOLEAN_COLOR: '#b45309',\n\n // null — bold foreground (Node: 'bold')\n OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',\n\n // undefined — grey (Node: 'grey')\n OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',\n\n // RegExp red (Node regexp base uses green/red/yellow palette)\n OBJECT_VALUE_REGEXP_COLOR: '#dc2626', // red-600\n\n // Functions — cyan (Node: 'special' → 'cyan')\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#0891b2', // cyan-600\n\n // HTML (less relevant for data inspection, but reasonable defaults)\n HTML_TAG_COLOR: 'var(--ds-gray-500)',\n HTML_TAGNAME_COLOR: '#0891b2',\n HTML_ATTRIBUTE_NAME_COLOR: '#b45309',\n HTML_ATTRIBUTE_VALUE_COLOR: '#16a34a',\n HTML_COMMENT_COLOR: 'var(--ds-gray-400)',\n HTML_DOCTYPE_COLOR: 'var(--ds-gray-400)',\n\n // Structural\n ARROW_COLOR: 'var(--ds-gray-500)',\n TABLE_BORDER_COLOR: 'var(--ds-gray-300)',\n TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',\n TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',\n TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',\n};\n\n// ---------------------------------------------------------------------------\n// Dark theme\n// ---------------------------------------------------------------------------\n\nexport const inspectorThemeDark = {\n ...shared,\n\n // Base text\n BASE_COLOR: 'var(--ds-gray-1000)',\n\n // Property names white/light foreground (Node: unstyled = white in dark terminal)\n OBJECT_NAME_COLOR: 'var(--ds-gray-900)',\n\n // Strings & symbols green (Node: 'green')\n OBJECT_VALUE_STRING_COLOR: '#4ade80', // green-400\n OBJECT_VALUE_SYMBOL_COLOR: '#4ade80',\n\n // Numbers & booleans — yellow (Node: 'yellow')\n OBJECT_VALUE_NUMBER_COLOR: '#facc15', // yellow-400\n OBJECT_VALUE_BOOLEAN_COLOR: '#facc15',\n\n // null — bold foreground / white (Node: 'bold')\n OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-1000)',\n\n // undefined — grey (Node: 'grey')\n OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-500)',\n\n // RegExp — red (Node regexp palette)\n OBJECT_VALUE_REGEXP_COLOR: '#f87171', // red-400\n\n // Functions — cyan (Node: 'special' → 'cyan')\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: '#22d3ee', // cyan-400\n\n // HTML\n HTML_TAG_COLOR: 'var(--ds-gray-500)',\n HTML_TAGNAME_COLOR: '#22d3ee',\n HTML_ATTRIBUTE_NAME_COLOR: '#facc15',\n HTML_ATTRIBUTE_VALUE_COLOR: '#4ade80',\n HTML_COMMENT_COLOR: 'var(--ds-gray-500)',\n HTML_DOCTYPE_COLOR: 'var(--ds-gray-500)',\n\n // Structural\n ARROW_COLOR: 'var(--ds-gray-500)',\n TABLE_BORDER_COLOR: 'var(--ds-gray-300)',\n TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',\n TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',\n TABLE_SORT_ICON_COLOR: 'var(--ds-gray-500)',\n};\n"]}
1
+ {"version":3,"file":"inspector-theme.js","sourceRoot":"","sources":["../../../src/components/ui/inspector-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,MAAM,CAAC,MAAM,2BAA2B,GAA2B;IACjE,uBAAuB,EAAE,oBAAoB;CAC9C,CAAC;AAEF,MAAM,CAAC,MAAM,0BAA0B,GAA2B;IAChE,uBAAuB,EAAE,oBAAoB;CAC9C,CAAC;AAEF,8EAA8E;AAC9E,iDAAiD;AACjD,8EAA8E;AAE9E,MAAM,MAAM,GAAG;IACb,cAAc,EAAE,MAAM;IACtB,gBAAgB,EAAE,GAAG;IACrB,qBAAqB,EAAE,aAAa;IACpC,mCAAmC,EAAE,EAAE;IACvC,oCAAoC,EAAE,CAAC;IACvC,2BAA2B,EAAE,WAAoB;IACjD,kBAAkB,EAAE,CAAC;IACrB,eAAe,EAAE,EAAE;IACnB,oBAAoB,EAAE,kBAAkB;IACxC,kBAAkB,EAAE,MAAM;IAC1B,oBAAoB,EAAE,GAAG;IACzB,qBAAqB,EAAE,EAAE;IACzB,2BAA2B,EAAE,MAAM;IACnC,0BAA0B,EAAE,GAAG;CAChC,CAAC;AAEF,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,UAAU,GAAG;IACjB,GAAG,MAAM;IAET,YAAY;IACZ,UAAU,EAAE,qBAAqB;IAEjC,8EAA8E;IAC9E,iBAAiB,EAAE,qBAAqB;IAExC,4BAA4B;IAC5B,yBAAyB,EAAE,qBAAqB;IAChD,yBAAyB,EAAE,qBAAqB;IAEhD,iDAAiD;IACjD,yBAAyB,EAAE,qBAAqB;IAChD,0BAA0B,EAAE,qBAAqB;IAEjD,0BAA0B;IAC1B,uBAAuB,EAAE,oBAAoB;IAE7C,+BAA+B;IAC/B,4BAA4B,EAAE,oBAAoB;IAElD,kBAAkB;IAClB,yBAAyB,EAAE,sBAAsB;IAEjD,qBAAqB;IACrB,kCAAkC,EAAE,sBAAsB;IAE1D,4DAA4D;IAC5D,cAAc,EAAE,oBAAoB;IACpC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,qBAAqB;IAChD,0BAA0B,EAAE,qBAAqB;IACjD,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IAExC,aAAa;IACb,WAAW,EAAE,oBAAoB;IACjC,kBAAkB,EAAE,oBAAoB;IACxC,yBAAyB,EAAE,oBAAoB;IAC/C,oBAAoB,EAAE,oBAAoB;IAC1C,qBAAqB,EAAE,oBAAoB;CAC5C,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAE9C,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,CAAC,MAAM,kBAAkB,GAAG,UAAU,CAAC","sourcesContent":["/**\n * Shared theme configuration for react-inspector's ObjectInspector.\n *\n * Colors follow Geist's Shiki JSON palette so the inspector reads the same\n * as highlighted code blocks across the product:\n * - property names / punctuation: --ds-gray-1000 (default foreground)\n * - strings / numbers / booleans: --ds-green-900\n * - null / undefined: --ds-gray-900 (muted)\n * - regexp / function: --ds-purple-900\n * - date: --ds-pink-900\n *\n * Because the `--ds-*` tokens adapt to theme automatically, the light and\n * dark objects are intentionally identical.\n */\n\n// ---------------------------------------------------------------------------\n// Extended color tokens not supported by react-inspector's built-in theme\n// system, applied via our custom nodeRenderer in data-inspector.tsx.\n// ---------------------------------------------------------------------------\n\nexport interface InspectorThemeExtended {\n /** Color for Date values (Node: 'magenta') */\n OBJECT_VALUE_DATE_COLOR: string;\n}\n\nexport const inspectorThemeExtendedLight: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',\n};\n\nexport const inspectorThemeExtendedDark: InspectorThemeExtended = {\n OBJECT_VALUE_DATE_COLOR: 'var(--ds-pink-900)',\n};\n\n// ---------------------------------------------------------------------------\n// Shared structural values (same in both themes)\n// ---------------------------------------------------------------------------\n\nconst shared = {\n BASE_FONT_SIZE: '11px',\n BASE_LINE_HEIGHT: 1.4,\n BASE_BACKGROUND_COLOR: 'transparent',\n OBJECT_PREVIEW_ARRAY_MAX_PROPERTIES: 10,\n OBJECT_PREVIEW_OBJECT_MAX_PROPERTIES: 5,\n HTML_TAGNAME_TEXT_TRANSFORM: 'lowercase' as const,\n ARROW_MARGIN_RIGHT: 3,\n ARROW_FONT_SIZE: 12,\n TREENODE_FONT_FAMILY: 'var(--font-mono)',\n TREENODE_FONT_SIZE: '11px',\n TREENODE_LINE_HEIGHT: 1.4,\n TREENODE_PADDING_LEFT: 12,\n TABLE_DATA_BACKGROUND_IMAGE: 'none',\n TABLE_DATA_BACKGROUND_SIZE: '0',\n};\n\n// ---------------------------------------------------------------------------\n// Light theme\n// ---------------------------------------------------------------------------\n\nconst geistTheme = {\n ...shared,\n\n // Base text\n BASE_COLOR: 'var(--ds-gray-1000)',\n\n // Property names — default foreground (matches JSON key color in Geist Shiki)\n OBJECT_NAME_COLOR: 'var(--ds-gray-1000)',\n\n // Strings & symbols — green\n OBJECT_VALUE_STRING_COLOR: 'var(--ds-green-900)',\n OBJECT_VALUE_SYMBOL_COLOR: 'var(--ds-green-900)',\n\n // Numbers & booleans green (Geist JSON tokens)\n OBJECT_VALUE_NUMBER_COLOR: 'var(--ds-green-900)',\n OBJECT_VALUE_BOOLEAN_COLOR: 'var(--ds-green-900)',\n\n // null muted foreground\n OBJECT_VALUE_NULL_COLOR: 'var(--ds-gray-900)',\n\n // undefined muted foreground\n OBJECT_VALUE_UNDEFINED_COLOR: 'var(--ds-gray-900)',\n\n // RegExppurple\n OBJECT_VALUE_REGEXP_COLOR: 'var(--ds-purple-900)',\n\n // Functionspurple\n OBJECT_VALUE_FUNCTION_PREFIX_COLOR: 'var(--ds-purple-900)',\n\n // HTML (rarely used here, kept consistent with the palette)\n HTML_TAG_COLOR: 'var(--ds-gray-900)',\n HTML_TAGNAME_COLOR: 'var(--ds-blue-900)',\n HTML_ATTRIBUTE_NAME_COLOR: 'var(--ds-amber-900)',\n HTML_ATTRIBUTE_VALUE_COLOR: 'var(--ds-green-900)',\n HTML_COMMENT_COLOR: 'var(--ds-gray-700)',\n HTML_DOCTYPE_COLOR: 'var(--ds-gray-700)',\n\n // Structural\n ARROW_COLOR: 'var(--ds-gray-700)',\n TABLE_BORDER_COLOR: 'var(--ds-gray-300)',\n TABLE_TH_BACKGROUND_COLOR: 'var(--ds-gray-100)',\n TABLE_TH_HOVER_COLOR: 'var(--ds-gray-200)',\n TABLE_SORT_ICON_COLOR: 'var(--ds-gray-700)',\n};\n\nexport const inspectorThemeLight = geistTheme;\n\n// ---------------------------------------------------------------------------\n// Dark theme\n// ---------------------------------------------------------------------------\n\nexport const inspectorThemeDark = geistTheme;\n"]}
@@ -2,7 +2,7 @@ import type { Event, Hook, Step, WorkflowRun } from '@workflow/world';
2
2
  import { type SpanSelectionInfo } from './sidebar/entity-detail-panel';
3
3
  /** Re-export SpanSelectionInfo for consumers */
4
4
  export type { SpanSelectionInfo };
5
- export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, encryptionKey, onDecrypt, isDecrypting, hasEncryptedData, }: {
5
+ export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans, isLoadingMoreSpans, encryptionKey, onDecrypt, isDecrypting, }: {
6
6
  run: WorkflowRun;
7
7
  events: Event[];
8
8
  isLoading?: boolean;
@@ -36,7 +36,5 @@ export declare const WorkflowTraceViewer: ({ run, events, isLoading, error, span
36
36
  onDecrypt?: () => void;
37
37
  /** Whether the encryption key is currently being fetched */
38
38
  isDecrypting?: boolean;
39
- /** Run-level hint: the run contains encrypted data (from probe). */
40
- hasEncryptedData?: boolean;
41
39
  }) => import("react/jsx-runtime").JSX.Element;
42
40
  //# sourceMappingURL=workflow-trace-view.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/workflow-trace-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAiBtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA4jBvC,gDAAgD;AAChD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAgKlC,eAAO,MAAM,mBAAmB,GAAI,0SAsBjC;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,oEAAoE;IACpE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B,4CA+VA,CAAC"}
1
+ {"version":3,"file":"workflow-trace-view.d.ts","sourceRoot":"","sources":["../../src/components/workflow-trace-view.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAkBtE,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AA2jBvC,gDAAgD;AAChD,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAgKlC,eAAO,MAAM,mBAAmB,GAAI,wRAqBjC;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,cAAc,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;IAC1D,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,aAAa,CAAC,EAAE,CACd,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,KAClB,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE,IAAI,KACR,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,yCAAyC;IACzC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,mEAAmE;IACnE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,wCAAwC;IACxC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjD,iFAAiF;IACjF,eAAe,CAAC,EAAE,CAChB,aAAa,EAAE,MAAM,EACrB,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;IAC7B,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,sDAAsD;IACtD,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,mEAAmE;IACnE,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,sFAAsF;IACtF,aAAa,CAAC,EAAE,UAAU,CAAC;IAC3B,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,4CA8VA,CAAC"}
@@ -5,6 +5,7 @@ import { ChevronDown, ChevronUp, Clock, Copy, Info, Send, Type, X, XCircle, } fr
5
5
  import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
6
6
  import { createPortal } from 'react-dom';
7
7
  import { useToast } from '../lib/toast';
8
+ import { buildTrace } from '../lib/trace-builder';
8
9
  import { ErrorBoundary } from './error-boundary';
9
10
  import { EntityDetailPanel, } from './sidebar/entity-detail-panel';
10
11
  import { ResolveHookModal } from './sidebar/resolve-hook-modal';
@@ -12,7 +13,6 @@ import { TraceViewerContextProvider, TraceViewerTimeline, useTraceViewer, } from
12
13
  import { Skeleton } from './ui/skeleton';
13
14
  import { Spinner } from './ui/spinner';
14
15
  import { getCustomSpanClassName, getCustomSpanEventClassName, } from './workflow-traces/trace-colors';
15
- import { buildTrace } from '../lib/trace-builder';
16
16
  /**
17
17
  * While a run is live, continuously grow root.duration and rescale so the
18
18
  * trace always fits within the viewport. Individual span widths are grown
@@ -502,7 +502,7 @@ function TraceViewerFooter({ hasMore, isLive, isInitialLoading, }) {
502
502
  // ---------------------------------------------------------------------------
503
503
  // Main component
504
504
  // ---------------------------------------------------------------------------
505
- export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans = false, isLoadingMoreSpans = false, encryptionKey, onDecrypt, isDecrypting = false, hasEncryptedData = false, }) => {
505
+ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailData, spanDetailLoading, spanDetailError, onWakeUpSleep, onResolveHook, onCancelRun, onStreamClick, onRunClick, onSpanSelect, onLoadEventData, onLoadMoreSpans, hasMoreSpans = false, isLoadingMoreSpans = false, encryptionKey, onDecrypt, isDecrypting = false, }) => {
506
506
  const toast = useToast();
507
507
  const [selectedSpan, setSelectedSpan] = useState(null);
508
508
  const [panelWidth, setPanelWidth] = useState(DEFAULT_PANEL_WIDTH);
@@ -620,7 +620,7 @@ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailD
620
620
  if (!trace) {
621
621
  return (_jsxs("div", { className: "relative w-full h-full", children: [_jsx("div", { className: "border-b border-gray-alpha-400 w-full" }), _jsx(Skeleton, { className: "w-full ml-2 mt-1 mb-1 h-[56px]" }), _jsxs("div", { className: "p-2 relative w-full", children: [_jsx(Skeleton, { className: "w-full mt-6 h-[20px]" }), _jsx(Skeleton, { className: "w-[10%] mt-2 ml-6 h-[20px]" }), _jsx(Skeleton, { className: "w-[10%] mt-2 ml-12 h-[20px]" }), _jsx(Skeleton, { className: "w-[20%] mt-2 ml-16 h-[20px]" })] })] }));
622
622
  }
623
- return (_jsxs("div", { className: "relative w-full h-full flex", children: [_jsx("div", { className: "flex-1 min-w-0 relative", children: _jsxs(TraceViewerContextProvider, { customSpanClassNameFunc: getCustomSpanClassName, customSpanEventClassNameFunc: getCustomSpanEventClassName, children: [_jsx(SelectionBridge, { onSelectionChange: handleSelectionChange }), _jsx(DeselectBridge, { triggerDeselect: deselectTrigger }), _jsx(SelectBridge, { selectRequest: selectRequest }), _jsx(TraceViewerWithContextMenu, { trace: trace, run: run, isLive: isLive, onWakeUpSleep: onWakeUpSleep, onCancelRun: onCancelRun, onResolveHook: onResolveHook, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans, children: _jsx(TraceViewerTimeline, { eagerRender: true, height: "100%", isLive: isLive, trace: trace, knownDurationMs: traceWithMeta?.knownDurationMs, hasMoreData: hasMoreSpans || Boolean(isLoading), footer: _jsx(TraceViewerFooter, { hasMore: hasMoreSpans, isLive: isLive, isInitialLoading: Boolean(isLoading) }) }) })] }) }), selectedSpan && (_jsxs("div", { className: "relative border-l flex-shrink-0 flex flex-col", style: {
623
+ return (_jsxs("div", { className: "relative w-full h-full flex flex-col", children: [_jsx("div", { className: "flex-1 min-w-0 relative", children: _jsxs(TraceViewerContextProvider, { customSpanClassNameFunc: getCustomSpanClassName, customSpanEventClassNameFunc: getCustomSpanEventClassName, children: [_jsx(SelectionBridge, { onSelectionChange: handleSelectionChange }), _jsx(DeselectBridge, { triggerDeselect: deselectTrigger }), _jsx(SelectBridge, { selectRequest: selectRequest }), _jsx(TraceViewerWithContextMenu, { trace: trace, run: run, isLive: isLive, onWakeUpSleep: onWakeUpSleep, onCancelRun: onCancelRun, onResolveHook: onResolveHook, onLoadMoreSpans: onLoadMoreSpans, hasMoreSpans: hasMoreSpans, isLoadingMoreSpans: isLoadingMoreSpans, children: _jsx(TraceViewerTimeline, { eagerRender: true, height: "100%", isLive: isLive, trace: trace, knownDurationMs: traceWithMeta?.knownDurationMs, hasMoreData: hasMoreSpans || Boolean(isLoading), footer: _jsx(TraceViewerFooter, { hasMore: hasMoreSpans, isLive: isLive, isInitialLoading: Boolean(isLoading) }) }) })] }) }), selectedSpan && (_jsxs("div", { className: "relative border-l flex-shrink-0 flex flex-col", style: {
624
624
  width: panelWidth,
625
625
  borderColor: 'var(--ds-gray-200)',
626
626
  backgroundColor: 'var(--ds-background-100)',
@@ -690,6 +690,6 @@ export const WorkflowTraceViewer = ({ run, events, isLoading, error, spanDetailD
690
690
  e.currentTarget.style.background = 'var(--ds-gray-alpha-100)';
691
691
  }, onMouseLeave: (e) => {
692
692
  e.currentTarget.style.background = 'transparent';
693
- }, children: _jsx(X, { size: 16 }) }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { title: "Failed to load entity details", children: _jsx(EntityDetailPanel, { run: run, onStreamClick: onStreamClick, onRunClick: onRunClick, spanDetailData: spanDetailData ?? null, spanDetailError: spanDetailError, spanDetailLoading: spanDetailLoading, onSpanSelect: handleSpanSelect, onWakeUpSleep: onWakeUpSleep, onLoadEventData: onLoadEventData, onResolveHook: onResolveHook, encryptionKey: encryptionKey, onDecrypt: onDecrypt, isDecrypting: isDecrypting, selectedSpan: selectedSpan, hasEncryptedData: hasEncryptedData }) }) })] }))] }));
693
+ }, children: _jsx(X, { size: 16 }) }) })] }), _jsx("div", { className: "flex-1 overflow-y-auto", children: _jsx(ErrorBoundary, { title: "Failed to load entity details", children: _jsx(EntityDetailPanel, { run: run, onStreamClick: onStreamClick, onRunClick: onRunClick, spanDetailData: spanDetailData ?? null, spanDetailError: spanDetailError, spanDetailLoading: spanDetailLoading, onSpanSelect: handleSpanSelect, onWakeUpSleep: onWakeUpSleep, onLoadEventData: onLoadEventData, onResolveHook: onResolveHook, encryptionKey: encryptionKey, onDecrypt: onDecrypt, isDecrypting: isDecrypting, selectedSpan: selectedSpan }) }) })] }))] }));
694
694
  };
695
695
  //# sourceMappingURL=workflow-trace-view.js.map