next 15.2.0-canary.51 → 15.2.0-canary.52

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.

Potentially problematic release.


This version of next might be problematic. Click here for more details.

Files changed (87) hide show
  1. package/dist/bin/next +1 -1
  2. package/dist/build/index.js +2 -2
  3. package/dist/build/load-jsconfig.d.ts +1 -0
  4. package/dist/build/load-jsconfig.js +2 -1
  5. package/dist/build/load-jsconfig.js.map +1 -1
  6. package/dist/build/swc/index.js +1 -1
  7. package/dist/build/webpack-config.d.ts +3 -1
  8. package/dist/build/webpack-config.js +44 -23
  9. package/dist/build/webpack-config.js.map +1 -1
  10. package/dist/client/app-bootstrap.js +1 -1
  11. package/dist/client/components/errors/attach-hydration-error-state.js +37 -24
  12. package/dist/client/components/errors/attach-hydration-error-state.js.map +1 -1
  13. package/dist/client/components/errors/hydration-error-info.js +86 -19
  14. package/dist/client/components/errors/hydration-error-info.js.map +1 -1
  15. package/dist/client/components/is-hydration-error.d.ts +1 -0
  16. package/dist/client/components/is-hydration-error.js +41 -3
  17. package/dist/client/components/is-hydration-error.js.map +1 -1
  18. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js +1 -2
  19. package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  20. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.d.ts +1 -56
  21. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js +4 -240
  22. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js.map +1 -1
  23. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js +0 -21
  24. package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js.map +1 -1
  25. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.d.ts +54 -0
  26. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.js +101 -0
  27. package/dist/client/components/react-dev-overlay/hydration-diff/diff-view.js.map +1 -0
  28. package/dist/client/components/react-dev-overlay/internal/container/Errors.js +1 -2
  29. package/dist/client/components/react-dev-overlay/internal/container/Errors.js.map +1 -1
  30. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.d.ts +2 -56
  31. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js +28 -227
  32. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js.map +1 -1
  33. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js +1 -1
  34. package/dist/client/components/react-dev-overlay/internal/container/RuntimeError/index.js.map +1 -1
  35. package/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js +3 -1
  36. package/dist/client/components/react-dev-overlay/internal/styles/ComponentStyles.js.map +1 -1
  37. package/dist/client/index.js +1 -1
  38. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
  39. package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
  40. package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
  41. package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
  42. package/dist/compiled/next-server/server.runtime.prod.js +6 -6
  43. package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
  44. package/dist/esm/build/index.js +2 -2
  45. package/dist/esm/build/load-jsconfig.js +2 -1
  46. package/dist/esm/build/load-jsconfig.js.map +1 -1
  47. package/dist/esm/build/swc/index.js +1 -1
  48. package/dist/esm/build/webpack-config.js +44 -23
  49. package/dist/esm/build/webpack-config.js.map +1 -1
  50. package/dist/esm/client/app-bootstrap.js +1 -1
  51. package/dist/esm/client/components/errors/attach-hydration-error-state.js +38 -25
  52. package/dist/esm/client/components/errors/attach-hydration-error-state.js.map +1 -1
  53. package/dist/esm/client/components/errors/hydration-error-info.js +87 -20
  54. package/dist/esm/client/components/errors/hydration-error-info.js.map +1 -1
  55. package/dist/esm/client/components/is-hydration-error.js +36 -2
  56. package/dist/esm/client/components/is-hydration-error.js.map +1 -1
  57. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js +1 -2
  58. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
  59. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js +3 -287
  60. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.js.map +1 -1
  61. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js +0 -21
  62. package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.js.map +1 -1
  63. package/dist/esm/client/components/react-dev-overlay/hydration-diff/diff-view.js +132 -0
  64. package/dist/esm/client/components/react-dev-overlay/hydration-diff/diff-view.js.map +1 -0
  65. package/dist/esm/client/components/react-dev-overlay/internal/container/Errors.js +1 -2
  66. package/dist/esm/client/components/react-dev-overlay/internal/container/Errors.js.map +1 -1
  67. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js +12 -271
  68. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/component-stack-pseudo-html.js.map +1 -1
  69. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/index.js +1 -1
  70. package/dist/esm/client/components/react-dev-overlay/internal/container/RuntimeError/index.js.map +1 -1
  71. package/dist/esm/client/components/react-dev-overlay/internal/styles/ComponentStyles.js +3 -1
  72. package/dist/esm/client/components/react-dev-overlay/internal/styles/ComponentStyles.js.map +1 -1
  73. package/dist/esm/client/index.js +1 -1
  74. package/dist/esm/server/config.js +1 -1
  75. package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
  76. package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
  77. package/dist/esm/server/lib/app-info-log.js +1 -1
  78. package/dist/esm/server/lib/start-server.js +1 -1
  79. package/dist/server/config.js +1 -1
  80. package/dist/server/dev/hot-reloader-turbopack.js +1 -1
  81. package/dist/server/dev/hot-reloader-webpack.js +1 -1
  82. package/dist/server/lib/app-info-log.js +1 -1
  83. package/dist/server/lib/start-server.js +1 -1
  84. package/dist/telemetry/anonymous-meta.js +1 -1
  85. package/dist/telemetry/events/session-stopped.js +2 -2
  86. package/dist/telemetry/events/version.js +2 -2
  87. package/package.json +15 -15
@@ -17,258 +17,22 @@ _export(exports, {
17
17
  return PSEUDO_HTML_DIFF_STYLES;
18
18
  },
19
19
  PseudoHtmlDiff: function() {
20
- return PseudoHtmlDiff;
20
+ return _diffview.PseudoHtmlDiff;
21
21
  }
22
22
  });
23
23
  const _tagged_template_literal_loose = require("@swc/helpers/_/_tagged_template_literal_loose");
24
- const _jsxruntime = require("react/jsx-runtime");
25
- const _react = require("react");
26
- const _collapseicon = require("../../icons/collapse-icon");
27
24
  const _nooptemplate = require("../../helpers/noop-template");
25
+ const _diffview = require("../../../../hydration-diff/diff-view");
28
26
  function _templateObject() {
29
27
  const data = _tagged_template_literal_loose._([
30
- "\n [data-nextjs-container-errors-pseudo-html] {\n padding: var(--size-3) 0;\n margin: var(--size-2) var(--size-4) var(--size-4);\n border: 1px solid var(--color-gray-400);\n background: var(--color-background-200);\n color: var(--color-syntax-constant);\n font-family: var(--font-stack-monospace);\n font-size: var(--size-font-smaller);\n line-height: var(--size-4);\n border-radius: var(--size-2);\n }\n [data-nextjs-container-errors-pseudo-html-line] {\n display: inline-block;\n width: 100%;\n padding-left: var(--size-10);\n line-height: calc(5 / 3);\n }\n [data-nextjs-container-errors-pseudo-html-line--error] {\n background: var(--color-amber-300);\n font-weight: bold;\n }\n [data-nextjs-container-errors-pseudo-html-line--error]::before {\n content: '>';\n color: var(--color-red-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n\n [data-nextjs-container-errors-pseudo-html-collapse] {\n all: unset;\n margin-left: var(--size-3);\n &:focus {\n outline: none;\n }\n }\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\n background: var(--color-green-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='add']::before {\n content: '+';\n color: var(--color-green-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\n background: var(--color-red-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove']::before {\n content: '-';\n color: var(--color-red-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n ",
31
- "\n [data-nextjs-container-errors-pseudo-html--hint] {\n display: inline-block;\n font-size: 0;\n height: 0;\n }\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\n color: var(--color-accents-1);\n }\n .nextjs__container_errors__component-stack {\n margin: 0;\n }\n .nextjs__container_errors__component-stack code {\n display: block;\n width: 100%;\n white-space: pre-wrap;\n }\n .error-overlay-hydration-error-diff-plus-icon {\n color: var(--color-green-900);\n }\n .error-overlay-hydration-error-diff-minus-icon {\n color: var(--color-red-900);\n }\n"
28
+ "\n [data-nextjs-container-errors-pseudo-html] {\n padding: var(--size-3) 0;\n margin: var(--size-2) var(--size-4) var(--size-4);\n border: 1px solid var(--color-gray-400);\n background: var(--color-background-200);\n color: var(--color-syntax-constant);\n font-family: var(--font-stack-monospace);\n font-size: var(--size-font-smaller);\n line-height: var(--size-4);\n border-radius: var(--size-2);\n }\n [data-nextjs-container-errors-pseudo-html-line] {\n display: inline-block;\n width: 100%;\n padding-left: var(--size-10);\n line-height: calc(5 / 3);\n }\n [data-nextjs-container-errors-pseudo-html-line--error] {\n background: var(--color-amber-100);\n font-weight: bold;\n }\n [data-nextjs-container-errors-pseudo-html-collapse-button] {\n all: unset;\n margin-left: var(--size-3);\n &:focus {\n outline: none;\n }\n }\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\n background: var(--color-green-300);\n }\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-6);\n }\n [data-nextjs-container-errors-pseudo-html--diff='add']\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-green-900);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\n background: var(--color-red-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove']\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-red-900);\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-6);\n }\n [data-nextjs-container-errors-pseudo-html-line--error]\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-amber-900);\n }\n ",
29
+ "\n [data-nextjs-container-errors-pseudo-html--hint] {\n display: inline-block;\n font-size: 0;\n height: 0;\n }\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\n color: var(--color-accents-1);\n }\n .nextjs__container_errors__component-stack {\n margin: 0;\n }\n [data-nextjs-container-errors-pseudo-html-collapse='true']\n .nextjs__container_errors__component-stack\n code {\n max-height: 100px;\n mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 50%);\n }\n .nextjs__container_errors__component-stack code {\n display: block;\n width: 100%;\n white-space: pre-wrap;\n scroll-snap-type: y mandatory;\n overflow-y: hidden;\n }\n [data-nextjs-container-errors-pseudo-html--diff],\n [data-nextjs-container-errors-pseudo-html-line--error] {\n scroll-snap-align: center;\n }\n .error-overlay-hydration-error-diff-plus-icon {\n color: var(--color-green-900);\n }\n .error-overlay-hydration-error-diff-minus-icon {\n color: var(--color-red-900);\n }\n"
32
30
  ]);
33
31
  _templateObject = function() {
34
32
  return data;
35
33
  };
36
34
  return data;
37
35
  }
38
- function getAdjacentProps(isAdj) {
39
- return {
40
- 'data-nextjs-container-errors-pseudo-html--tag-adjacent': isAdj
41
- };
42
- }
43
- function PseudoHtmlDiff(param) {
44
- let { componentStackFrames, firstContent, secondContent, hydrationMismatchType, reactOutputComponentDiff, ...props } = param;
45
- const isHtmlTagsWarning = hydrationMismatchType === 'tag';
46
- const isReactHydrationDiff = !!reactOutputComponentDiff;
47
- // For text mismatch, mismatched text will take 2 rows, so we display 4 rows of component stack
48
- const MAX_NON_COLLAPSED_FRAMES = isHtmlTagsWarning ? 6 : 4;
49
- const [isHtmlCollapsed, toggleCollapseHtml] = (0, _react.useState)(true);
50
- const htmlComponents = (0, _react.useMemo)(()=>{
51
- const componentStacks = [];
52
- // React 19 unified mismatch
53
- if (isReactHydrationDiff) {
54
- let currentComponentIndex = componentStackFrames.length - 1;
55
- const reactComponentDiffLines = reactOutputComponentDiff.split('\n');
56
- const diffHtmlStack = [];
57
- reactComponentDiffLines.forEach((line, index)=>{
58
- let trimmedLine = line.trim();
59
- const isDiffLine = trimmedLine[0] === '+' || trimmedLine[0] === '-';
60
- const spaces = ' '.repeat(Math.max(componentStacks.length * 2, 1));
61
- if (isDiffLine) {
62
- const sign = trimmedLine[0];
63
- trimmedLine = trimmedLine.slice(1).trim() // trim spaces after sign
64
- ;
65
- diffHtmlStack.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
66
- "data-nextjs-container-errors-pseudo-html-line": true,
67
- "data-nextjs-container-errors-pseudo-html--diff": sign === '+' ? 'add' : 'remove',
68
- children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
69
- children: [
70
- spaces.slice(2),
71
- trimmedLine,
72
- '\n'
73
- ]
74
- })
75
- }, 'comp-diff' + index));
76
- } else if (currentComponentIndex >= 0) {
77
- const isUserLandComponent = trimmedLine.startsWith('<' + componentStackFrames[currentComponentIndex].component);
78
- // If it's matched userland component or it's ... we will keep the component stack in diff
79
- if (isUserLandComponent || trimmedLine === '...') {
80
- currentComponentIndex--;
81
- componentStacks.push(/*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
82
- "data-nextjs-container-errors-pseudo-html-line": true,
83
- children: [
84
- spaces,
85
- trimmedLine,
86
- '\n'
87
- ]
88
- }, 'comp-diff' + index));
89
- } else if (!isHtmlCollapsed) {
90
- componentStacks.push(/*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
91
- "data-nextjs-container-errors-pseudo-html-line": true,
92
- children: [
93
- spaces,
94
- trimmedLine,
95
- '\n'
96
- ]
97
- }, 'comp-diff' + index));
98
- }
99
- } else if (!isHtmlCollapsed) {
100
- // In general, if it's not collapsed, show the whole diff
101
- componentStacks.push(/*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
102
- "data-nextjs-container-errors-pseudo-html-line": true,
103
- children: [
104
- spaces,
105
- trimmedLine,
106
- '\n'
107
- ]
108
- }, 'comp-diff' + index));
109
- }
110
- });
111
- return componentStacks.concat(diffHtmlStack);
112
- }
113
- const nestedHtmlStack = [];
114
- const tagNames = isHtmlTagsWarning ? [
115
- firstContent.replace(/<|>/g, ''),
116
- secondContent.replace(/<|>/g, '')
117
- ] : [];
118
- let lastText = '';
119
- const componentStack = componentStackFrames.map((frame)=>frame.component).reverse();
120
- // [child index, parent index]
121
- const matchedIndex = [
122
- -1,
123
- -1
124
- ];
125
- if (isHtmlTagsWarning) {
126
- // Reverse search for the child tag
127
- for(let i = componentStack.length - 1; i >= 0; i--){
128
- if (componentStack[i] === tagNames[0]) {
129
- matchedIndex[0] = i;
130
- break;
131
- }
132
- }
133
- // Start searching parent tag from child tag above
134
- for(let i = matchedIndex[0] - 1; i >= 0; i--){
135
- if (componentStack[i] === tagNames[1]) {
136
- matchedIndex[1] = i;
137
- break;
138
- }
139
- }
140
- }
141
- componentStack.forEach((component, index, componentList)=>{
142
- const spaces = ' '.repeat(nestedHtmlStack.length * 2);
143
- // When component is the server or client tag name, highlight it
144
- const isHighlightedTag = isHtmlTagsWarning ? index === matchedIndex[0] || index === matchedIndex[1] : tagNames.includes(component);
145
- const isAdjacentTag = isHighlightedTag || Math.abs(index - matchedIndex[0]) <= 1 || Math.abs(index - matchedIndex[1]) <= 1;
146
- const isLastFewFrames = !isHtmlTagsWarning && index >= componentList.length - 6;
147
- const adjProps = getAdjacentProps(isAdjacentTag);
148
- if (isHtmlTagsWarning && isAdjacentTag || isLastFewFrames) {
149
- const codeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
150
- "data-nextjs-container-errors-pseudo-html-line": true,
151
- ...isHighlightedTag ? {
152
- 'data-nextjs-container-errors-pseudo-html-line--error': true
153
- } : undefined,
154
- children: [
155
- spaces,
156
- /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
157
- ...adjProps,
158
- children: "<" + component + ">\n"
159
- })
160
- ]
161
- });
162
- lastText = component;
163
- const wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {
164
- children: [
165
- codeLine,
166
- isHighlightedTag && /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
167
- "data-nextjs-container-errors-pseudo-html--hint": true,
168
- children: spaces + '^'.repeat(component.length + 2) + '\n'
169
- })
170
- ]
171
- }, nestedHtmlStack.length);
172
- nestedHtmlStack.push(wrappedCodeLine);
173
- } else {
174
- if (nestedHtmlStack.length >= MAX_NON_COLLAPSED_FRAMES && isHtmlCollapsed) {
175
- return;
176
- }
177
- if (!isHtmlCollapsed || isLastFewFrames) {
178
- nestedHtmlStack.push(/*#__PURE__*/ (0, _react.createElement)("span", {
179
- ...adjProps,
180
- key: nestedHtmlStack.length,
181
- "data-nextjs-container-errors-pseudo-html-line": true,
182
- children: [
183
- spaces,
184
- '<' + component + '>\n'
185
- ]
186
- }));
187
- } else if (isHtmlCollapsed && lastText !== '...') {
188
- lastText = '...';
189
- nestedHtmlStack.push(/*#__PURE__*/ (0, _react.createElement)("span", {
190
- ...adjProps,
191
- key: nestedHtmlStack.length,
192
- "data-nextjs-container-errors-pseudo-html-line": true,
193
- children: [
194
- spaces,
195
- '...\n'
196
- ]
197
- }));
198
- }
199
- }
200
- });
201
- // Hydration mismatch: text or text-tag
202
- if (!isHtmlTagsWarning) {
203
- const spaces = ' '.repeat(nestedHtmlStack.length * 2);
204
- let wrappedCodeLine;
205
- if (hydrationMismatchType === 'text') {
206
- // hydration type is "text", represent [server content, client content]
207
- wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {
208
- children: [
209
- /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
210
- "data-nextjs-container-errors-pseudo-html-line": true,
211
- "data-nextjs-container-errors-pseudo-html--diff": "remove",
212
- children: spaces + ('"' + firstContent + '"\n')
213
- }),
214
- /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
215
- "data-nextjs-container-errors-pseudo-html-line": true,
216
- "data-nextjs-container-errors-pseudo-html--diff": "add",
217
- children: spaces + ('"' + secondContent + '"\n')
218
- })
219
- ]
220
- }, nestedHtmlStack.length);
221
- } else if (hydrationMismatchType === 'text-in-tag') {
222
- // hydration type is "text-in-tag", represent [parent tag, mismatch content]
223
- wrappedCodeLine = /*#__PURE__*/ (0, _jsxruntime.jsxs)(_react.Fragment, {
224
- children: [
225
- /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
226
- "data-nextjs-container-errors-pseudo-html-line": true,
227
- "data-nextjs-container-errors-pseudo-html--tag-adjacent": true,
228
- children: spaces + ("<" + secondContent + ">\n")
229
- }),
230
- /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
231
- "data-nextjs-container-errors-pseudo-html-line": true,
232
- "data-nextjs-container-errors-pseudo-html--diff": "remove",
233
- children: spaces + (' "' + firstContent + '"\n')
234
- })
235
- ]
236
- }, nestedHtmlStack.length);
237
- }
238
- nestedHtmlStack.push(wrappedCodeLine);
239
- }
240
- return nestedHtmlStack;
241
- }, [
242
- componentStackFrames,
243
- isHtmlCollapsed,
244
- firstContent,
245
- secondContent,
246
- isHtmlTagsWarning,
247
- hydrationMismatchType,
248
- MAX_NON_COLLAPSED_FRAMES,
249
- isReactHydrationDiff,
250
- reactOutputComponentDiff
251
- ]);
252
- return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
253
- "data-nextjs-container-errors-pseudo-html": true,
254
- children: [
255
- /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
256
- tabIndex: 10,
257
- "data-nextjs-container-errors-pseudo-html-collapse": true,
258
- onClick: ()=>toggleCollapseHtml(!isHtmlCollapsed),
259
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_collapseicon.CollapseIcon, {
260
- collapsed: isHtmlCollapsed
261
- })
262
- }),
263
- /*#__PURE__*/ (0, _jsxruntime.jsx)("pre", {
264
- ...props,
265
- children: /*#__PURE__*/ (0, _jsxruntime.jsx)("code", {
266
- children: htmlComponents
267
- })
268
- })
269
- ]
270
- });
271
- }
272
36
  const PSEUDO_HTML_DIFF_STYLES = (0, _nooptemplate.noop)(_templateObject(), '');
273
37
 
274
38
  if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.tsx"],"sourcesContent":["import { useMemo, Fragment, useState } from 'react'\nimport type { ComponentStackFrame } from '../../helpers/parse-component-stack'\nimport { CollapseIcon } from '../../icons/collapse-icon'\nimport { noop as css } from '../../helpers/noop-template'\n\nfunction getAdjacentProps(isAdj: boolean) {\n return { 'data-nextjs-container-errors-pseudo-html--tag-adjacent': isAdj }\n}\n\n/**\n *\n * Format component stack into pseudo HTML\n * component stack is an array of strings, e.g.: ['p', 'p', 'Page', ...]\n *\n * For html tags mismatch, it will render it for the code block\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <p red>\n * <p red>\n * `}</code>\n * </pre>\n * ```\n *\n * For text mismatch, it will render it for the code block\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <p>\n * \"Server Text\" (green)\n * \"Client Text\" (red)\n * </p>\n * </Page>\n * `}</code>\n * ```\n *\n * For bad text under a tag it will render it for the code block,\n * e.g. \"Mismatched Text\" under <p>\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <div>\n * <p>\n * \"Mismatched Text\" (red)\n * </p>\n * </div>\n * </Page>\n * `}</code>\n * ```\n *\n */\nexport function PseudoHtmlDiff({\n componentStackFrames,\n firstContent,\n secondContent,\n hydrationMismatchType,\n reactOutputComponentDiff,\n ...props\n}: {\n componentStackFrames: ComponentStackFrame[]\n firstContent: string\n secondContent: string\n reactOutputComponentDiff: string | undefined\n hydrationMismatchType: 'tag' | 'text' | 'text-in-tag'\n} & React.HTMLAttributes<HTMLPreElement>) {\n const isHtmlTagsWarning = hydrationMismatchType === 'tag'\n const isReactHydrationDiff = !!reactOutputComponentDiff\n\n // For text mismatch, mismatched text will take 2 rows, so we display 4 rows of component stack\n const MAX_NON_COLLAPSED_FRAMES = isHtmlTagsWarning ? 6 : 4\n const [isHtmlCollapsed, toggleCollapseHtml] = useState(true)\n\n const htmlComponents = useMemo(() => {\n const componentStacks: React.ReactNode[] = []\n // React 19 unified mismatch\n if (isReactHydrationDiff) {\n let currentComponentIndex = componentStackFrames.length - 1\n const reactComponentDiffLines = reactOutputComponentDiff.split('\\n')\n const diffHtmlStack: React.ReactNode[] = []\n reactComponentDiffLines.forEach((line, index) => {\n let trimmedLine = line.trim()\n const isDiffLine = trimmedLine[0] === '+' || trimmedLine[0] === '-'\n const spaces = ' '.repeat(Math.max(componentStacks.length * 2, 1))\n\n if (isDiffLine) {\n const sign = trimmedLine[0]\n trimmedLine = trimmedLine.slice(1).trim() // trim spaces after sign\n diffHtmlStack.push(\n <span\n key={'comp-diff' + index}\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--diff={\n sign === '+' ? 'add' : 'remove'\n }\n >\n <span>\n {/* Slice 2 spaces for the icon */}\n {spaces.slice(2)}\n {trimmedLine}\n {'\\n'}\n </span>\n </span>\n )\n } else if (currentComponentIndex >= 0) {\n const isUserLandComponent = trimmedLine.startsWith(\n '<' + componentStackFrames[currentComponentIndex].component\n )\n // If it's matched userland component or it's ... we will keep the component stack in diff\n if (isUserLandComponent || trimmedLine === '...') {\n currentComponentIndex--\n componentStacks.push(\n <span\n data-nextjs-container-errors-pseudo-html-line\n key={'comp-diff' + index}\n >\n {spaces}\n {trimmedLine}\n {'\\n'}\n </span>\n )\n } else if (!isHtmlCollapsed) {\n componentStacks.push(\n <span\n data-nextjs-container-errors-pseudo-html-line\n key={'comp-diff' + index}\n >\n {spaces}\n {trimmedLine}\n {'\\n'}\n </span>\n )\n }\n } else if (!isHtmlCollapsed) {\n // In general, if it's not collapsed, show the whole diff\n componentStacks.push(\n <span\n data-nextjs-container-errors-pseudo-html-line\n key={'comp-diff' + index}\n >\n {spaces}\n {trimmedLine}\n {'\\n'}\n </span>\n )\n }\n })\n return componentStacks.concat(diffHtmlStack)\n }\n\n const nestedHtmlStack: React.ReactNode[] = []\n const tagNames = isHtmlTagsWarning\n ? // tags could have < or > in the name, so we always remove them to match\n [firstContent.replace(/<|>/g, ''), secondContent.replace(/<|>/g, '')]\n : []\n\n let lastText = ''\n\n const componentStack = componentStackFrames\n .map((frame) => frame.component)\n .reverse()\n\n // [child index, parent index]\n const matchedIndex = [-1, -1]\n if (isHtmlTagsWarning) {\n // Reverse search for the child tag\n for (let i = componentStack.length - 1; i >= 0; i--) {\n if (componentStack[i] === tagNames[0]) {\n matchedIndex[0] = i\n break\n }\n }\n // Start searching parent tag from child tag above\n for (let i = matchedIndex[0] - 1; i >= 0; i--) {\n if (componentStack[i] === tagNames[1]) {\n matchedIndex[1] = i\n break\n }\n }\n }\n\n componentStack.forEach((component, index, componentList) => {\n const spaces = ' '.repeat(nestedHtmlStack.length * 2)\n\n // When component is the server or client tag name, highlight it\n const isHighlightedTag = isHtmlTagsWarning\n ? index === matchedIndex[0] || index === matchedIndex[1]\n : tagNames.includes(component)\n const isAdjacentTag =\n isHighlightedTag ||\n Math.abs(index - matchedIndex[0]) <= 1 ||\n Math.abs(index - matchedIndex[1]) <= 1\n\n const isLastFewFrames =\n !isHtmlTagsWarning && index >= componentList.length - 6\n\n const adjProps = getAdjacentProps(isAdjacentTag)\n\n if ((isHtmlTagsWarning && isAdjacentTag) || isLastFewFrames) {\n const codeLine = (\n <span\n data-nextjs-container-errors-pseudo-html-line\n {...(isHighlightedTag\n ? {\n 'data-nextjs-container-errors-pseudo-html-line--error': true,\n }\n : undefined)}\n >\n {spaces}\n <span {...adjProps}>{`<${component}>\\n`}</span>\n </span>\n )\n lastText = component\n\n const wrappedCodeLine = (\n <Fragment key={nestedHtmlStack.length}>\n {codeLine}\n {/* Add ^^^^ to the target tags used for snapshots but not displayed for users */}\n {isHighlightedTag && (\n <span data-nextjs-container-errors-pseudo-html--hint>\n {spaces + '^'.repeat(component.length + 2) + '\\n'}\n </span>\n )}\n </Fragment>\n )\n nestedHtmlStack.push(wrappedCodeLine)\n } else {\n if (\n nestedHtmlStack.length >= MAX_NON_COLLAPSED_FRAMES &&\n isHtmlCollapsed\n ) {\n return\n }\n\n if (!isHtmlCollapsed || isLastFewFrames) {\n nestedHtmlStack.push(\n <span\n {...adjProps}\n key={nestedHtmlStack.length}\n data-nextjs-container-errors-pseudo-html-line\n >\n {spaces}\n {'<' + component + '>\\n'}\n </span>\n )\n } else if (isHtmlCollapsed && lastText !== '...') {\n lastText = '...'\n nestedHtmlStack.push(\n <span\n {...adjProps}\n key={nestedHtmlStack.length}\n data-nextjs-container-errors-pseudo-html-line\n >\n {spaces}\n {'...\\n'}\n </span>\n )\n }\n }\n })\n // Hydration mismatch: text or text-tag\n if (!isHtmlTagsWarning) {\n const spaces = ' '.repeat(nestedHtmlStack.length * 2)\n let wrappedCodeLine\n if (hydrationMismatchType === 'text') {\n // hydration type is \"text\", represent [server content, client content]\n wrappedCodeLine = (\n <Fragment key={nestedHtmlStack.length}>\n <span\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--diff=\"remove\"\n >\n {spaces + `\"${firstContent}\"\\n`}\n </span>\n <span\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--diff=\"add\"\n >\n {spaces + `\"${secondContent}\"\\n`}\n </span>\n </Fragment>\n )\n } else if (hydrationMismatchType === 'text-in-tag') {\n // hydration type is \"text-in-tag\", represent [parent tag, mismatch content]\n wrappedCodeLine = (\n <Fragment key={nestedHtmlStack.length}>\n <span\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--tag-adjacent\n >\n {spaces + `<${secondContent}>\\n`}\n </span>\n <span\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--diff=\"remove\"\n >\n {spaces + ` \"${firstContent}\"\\n`}\n </span>\n </Fragment>\n )\n }\n nestedHtmlStack.push(wrappedCodeLine)\n }\n\n return nestedHtmlStack\n }, [\n componentStackFrames,\n isHtmlCollapsed,\n firstContent,\n secondContent,\n isHtmlTagsWarning,\n hydrationMismatchType,\n MAX_NON_COLLAPSED_FRAMES,\n isReactHydrationDiff,\n reactOutputComponentDiff,\n ])\n\n return (\n <div data-nextjs-container-errors-pseudo-html>\n <button\n tabIndex={10} // match CallStackFrame\n data-nextjs-container-errors-pseudo-html-collapse\n onClick={() => toggleCollapseHtml(!isHtmlCollapsed)}\n >\n <CollapseIcon collapsed={isHtmlCollapsed} />\n </button>\n <pre {...props}>\n <code>{htmlComponents}</code>\n </pre>\n </div>\n )\n}\n\nexport const PSEUDO_HTML_DIFF_STYLES = css`\n [data-nextjs-container-errors-pseudo-html] {\n padding: var(--size-3) 0;\n margin: var(--size-2) var(--size-4) var(--size-4);\n border: 1px solid var(--color-gray-400);\n background: var(--color-background-200);\n color: var(--color-syntax-constant);\n font-family: var(--font-stack-monospace);\n font-size: var(--size-font-smaller);\n line-height: var(--size-4);\n border-radius: var(--size-2);\n }\n [data-nextjs-container-errors-pseudo-html-line] {\n display: inline-block;\n width: 100%;\n padding-left: var(--size-10);\n line-height: calc(5 / 3);\n }\n [data-nextjs-container-errors-pseudo-html-line--error] {\n background: var(--color-amber-300);\n font-weight: bold;\n }\n [data-nextjs-container-errors-pseudo-html-line--error]::before {\n content: '>';\n color: var(--color-red-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n\n [data-nextjs-container-errors-pseudo-html-collapse] {\n all: unset;\n margin-left: var(--size-3);\n &:focus {\n outline: none;\n }\n }\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\n background: var(--color-green-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='add']::before {\n content: '+';\n color: var(--color-green-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\n background: var(--color-red-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove']::before {\n content: '-';\n color: var(--color-red-900);\n float: left;\n width: 0;\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-8);\n }\n ${/* hide but text are still accessible in DOM */ ''}\n [data-nextjs-container-errors-pseudo-html--hint] {\n display: inline-block;\n font-size: 0;\n height: 0;\n }\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\n color: var(--color-accents-1);\n }\n .nextjs__container_errors__component-stack {\n margin: 0;\n }\n .nextjs__container_errors__component-stack code {\n display: block;\n width: 100%;\n white-space: pre-wrap;\n }\n .error-overlay-hydration-error-diff-plus-icon {\n color: var(--color-green-900);\n }\n .error-overlay-hydration-error-diff-minus-icon {\n color: var(--color-red-900);\n }\n`\n"],"names":["PSEUDO_HTML_DIFF_STYLES","PseudoHtmlDiff","getAdjacentProps","isAdj","componentStackFrames","firstContent","secondContent","hydrationMismatchType","reactOutputComponentDiff","props","isHtmlTagsWarning","isReactHydrationDiff","MAX_NON_COLLAPSED_FRAMES","isHtmlCollapsed","toggleCollapseHtml","useState","htmlComponents","useMemo","componentStacks","currentComponentIndex","length","reactComponentDiffLines","split","diffHtmlStack","forEach","line","index","trimmedLine","trim","isDiffLine","spaces","repeat","Math","max","sign","slice","push","span","data-nextjs-container-errors-pseudo-html-line","data-nextjs-container-errors-pseudo-html--diff","isUserLandComponent","startsWith","component","concat","nestedHtmlStack","tagNames","replace","lastText","componentStack","map","frame","reverse","matchedIndex","i","componentList","isHighlightedTag","includes","isAdjacentTag","abs","isLastFewFrames","adjProps","codeLine","undefined","wrappedCodeLine","Fragment","data-nextjs-container-errors-pseudo-html--hint","key","data-nextjs-container-errors-pseudo-html--tag-adjacent","div","data-nextjs-container-errors-pseudo-html","button","tabIndex","data-nextjs-container-errors-pseudo-html-collapse","onClick","CollapseIcon","collapsed","pre","code","css"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../../../../../src/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.tsx"],"sourcesContent":["import { noop as css } from '../../helpers/noop-template'\n\nexport { PseudoHtmlDiff } from '../../../../hydration-diff/diff-view'\n\nexport const PSEUDO_HTML_DIFF_STYLES = css`\n [data-nextjs-container-errors-pseudo-html] {\n padding: var(--size-3) 0;\n margin: var(--size-2) var(--size-4) var(--size-4);\n border: 1px solid var(--color-gray-400);\n background: var(--color-background-200);\n color: var(--color-syntax-constant);\n font-family: var(--font-stack-monospace);\n font-size: var(--size-font-smaller);\n line-height: var(--size-4);\n border-radius: var(--size-2);\n }\n [data-nextjs-container-errors-pseudo-html-line] {\n display: inline-block;\n width: 100%;\n padding-left: var(--size-10);\n line-height: calc(5 / 3);\n }\n [data-nextjs-container-errors-pseudo-html-line--error] {\n background: var(--color-amber-100);\n font-weight: bold;\n }\n [data-nextjs-container-errors-pseudo-html-collapse-button] {\n all: unset;\n margin-left: var(--size-3);\n &:focus {\n outline: none;\n }\n }\n [data-nextjs-container-errors-pseudo-html--diff='add'] {\n background: var(--color-green-300);\n }\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-6);\n }\n [data-nextjs-container-errors-pseudo-html--diff='add']\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-green-900);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove'] {\n background: var(--color-red-300);\n }\n [data-nextjs-container-errors-pseudo-html--diff='remove']\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-red-900);\n margin-left: calc(var(--size-6) * -1);\n margin-right: var(--size-6);\n }\n [data-nextjs-container-errors-pseudo-html-line--error]\n [data-nextjs-container-errors-pseudo-html-line-sign] {\n color: var(--color-amber-900);\n }\n ${/* hide but text are still accessible in DOM */ ''}\n [data-nextjs-container-errors-pseudo-html--hint] {\n display: inline-block;\n font-size: 0;\n height: 0;\n }\n [data-nextjs-container-errors-pseudo-html--tag-adjacent='false'] {\n color: var(--color-accents-1);\n }\n .nextjs__container_errors__component-stack {\n margin: 0;\n }\n [data-nextjs-container-errors-pseudo-html-collapse='true']\n .nextjs__container_errors__component-stack\n code {\n max-height: 100px;\n mask-image: linear-gradient(to top, rgba(0, 0, 0, 0) 0%, black 50%);\n }\n .nextjs__container_errors__component-stack code {\n display: block;\n width: 100%;\n white-space: pre-wrap;\n scroll-snap-type: y mandatory;\n overflow-y: hidden;\n }\n [data-nextjs-container-errors-pseudo-html--diff],\n [data-nextjs-container-errors-pseudo-html-line--error] {\n scroll-snap-align: center;\n }\n .error-overlay-hydration-error-diff-plus-icon {\n color: var(--color-green-900);\n }\n .error-overlay-hydration-error-diff-minus-icon {\n color: var(--color-red-900);\n }\n`\n"],"names":["PSEUDO_HTML_DIFF_STYLES","PseudoHtmlDiff","css"],"mappings":";;;;;;;;;;;;;;;IAIaA,uBAAuB;eAAvBA;;IAFJC,cAAc;eAAdA,wBAAc;;;;8BAFK;0BAEG;;;;;;;;;;;AAExB,MAAMD,8BAA0BE,kBAAG,qBAqDU"}
@@ -40,27 +40,8 @@ const meta = {
40
40
  ]
41
41
  };
42
42
  const _default = meta;
43
- const sampleComponentStack = [
44
- {
45
- component: 'div',
46
- canOpenInEditor: false
47
- },
48
- {
49
- component: 'article',
50
- canOpenInEditor: false
51
- },
52
- {
53
- component: 'main',
54
- canOpenInEditor: false
55
- },
56
- {
57
- component: 'Home',
58
- canOpenInEditor: false
59
- }
60
- ];
61
43
  const TextMismatch = {
62
44
  args: {
63
- componentStackFrames: sampleComponentStack,
64
45
  firstContent: 'Server rendered content',
65
46
  secondContent: 'Client rendered content',
66
47
  hydrationMismatchType: 'text',
@@ -69,7 +50,6 @@ const TextMismatch = {
69
50
  };
70
51
  const TextInTagMismatch = {
71
52
  args: {
72
- componentStackFrames: sampleComponentStack,
73
53
  firstContent: 'Mismatched content',
74
54
  secondContent: 'p',
75
55
  hydrationMismatchType: 'text-in-tag',
@@ -78,7 +58,6 @@ const TextInTagMismatch = {
78
58
  };
79
59
  const ReactUnifiedMismatch = {
80
60
  args: {
81
- componentStackFrames: sampleComponentStack,
82
61
  hydrationMismatchType: 'tag',
83
62
  reactOutputComponentDiff: "<Page>\n <Layout>\n <div>\n- <p>Server content</p>\n+ <p>Client content</p>"
84
63
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../../../src/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { PseudoHtmlDiff } from './component-stack-pseudo-html'\nimport { withShadowPortal } from '../../storybook/with-shadow-portal'\n\nconst meta: Meta<typeof PseudoHtmlDiff> = {\n component: PseudoHtmlDiff,\n parameters: {\n layout: 'fullscreen',\n },\n decorators: [withShadowPortal],\n}\n\nexport default meta\ntype Story = StoryObj<typeof PseudoHtmlDiff>\n\nconst sampleComponentStack = [\n {\n component: 'div',\n canOpenInEditor: false,\n },\n {\n component: 'article',\n canOpenInEditor: false,\n },\n {\n component: 'main',\n canOpenInEditor: false,\n },\n {\n component: 'Home',\n canOpenInEditor: false,\n },\n]\n\nexport const TextMismatch: Story = {\n args: {\n componentStackFrames: sampleComponentStack,\n firstContent: 'Server rendered content',\n secondContent: 'Client rendered content',\n hydrationMismatchType: 'text',\n reactOutputComponentDiff: undefined,\n },\n}\n\nexport const TextInTagMismatch: Story = {\n args: {\n componentStackFrames: sampleComponentStack,\n firstContent: 'Mismatched content',\n secondContent: 'p',\n hydrationMismatchType: 'text-in-tag',\n reactOutputComponentDiff: undefined,\n },\n}\n\nexport const ReactUnifiedMismatch: Story = {\n args: {\n componentStackFrames: sampleComponentStack,\n hydrationMismatchType: 'tag',\n reactOutputComponentDiff: `<Page>\n <Layout>\n <div>\n- <p>Server content</p>\n+ <p>Client content</p>`,\n },\n}\n"],"names":["ReactUnifiedMismatch","TextInTagMismatch","TextMismatch","meta","component","PseudoHtmlDiff","parameters","layout","decorators","withShadowPortal","sampleComponentStack","canOpenInEditor","args","componentStackFrames","firstContent","secondContent","hydrationMismatchType","reactOutputComponentDiff","undefined"],"mappings":";;;;;;;;;;;;;;;;;IAsDaA,oBAAoB;eAApBA;;IAVAC,iBAAiB;eAAjBA;;IAVAC,YAAY;eAAZA;;IAtBb,OAAmB;eAAnB;;;0CAX+B;kCACE;AAEjC,MAAMC,OAAoC;IACxCC,WAAWC,wCAAc;IACzBC,YAAY;QACVC,QAAQ;IACV;IACAC,YAAY;QAACC,kCAAgB;KAAC;AAChC;MAEA,WAAeN;AAGf,MAAMO,uBAAuB;IAC3B;QACEN,WAAW;QACXO,iBAAiB;IACnB;IACA;QACEP,WAAW;QACXO,iBAAiB;IACnB;IACA;QACEP,WAAW;QACXO,iBAAiB;IACnB;IACA;QACEP,WAAW;QACXO,iBAAiB;IACnB;CACD;AAEM,MAAMT,eAAsB;IACjCU,MAAM;QACJC,sBAAsBH;QACtBI,cAAc;QACdC,eAAe;QACfC,uBAAuB;QACvBC,0BAA0BC;IAC5B;AACF;AAEO,MAAMjB,oBAA2B;IACtCW,MAAM;QACJC,sBAAsBH;QACtBI,cAAc;QACdC,eAAe;QACfC,uBAAuB;QACvBC,0BAA0BC;IAC5B;AACF;AAEO,MAAMlB,uBAA8B;IACzCY,MAAM;QACJC,sBAAsBH;QACtBM,uBAAuB;QACvBC,0BAA2B;IAK7B;AACF"}
1
+ {"version":3,"sources":["../../../../../../../../src/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/component-stack-pseudo-html.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from '@storybook/react'\nimport { PseudoHtmlDiff } from './component-stack-pseudo-html'\nimport { withShadowPortal } from '../../storybook/with-shadow-portal'\n\nconst meta: Meta<typeof PseudoHtmlDiff> = {\n component: PseudoHtmlDiff,\n parameters: {\n layout: 'fullscreen',\n },\n decorators: [withShadowPortal],\n}\n\nexport default meta\ntype Story = StoryObj<typeof PseudoHtmlDiff>\n\nexport const TextMismatch: Story = {\n args: {\n firstContent: 'Server rendered content',\n secondContent: 'Client rendered content',\n hydrationMismatchType: 'text',\n reactOutputComponentDiff: undefined,\n },\n}\n\nexport const TextInTagMismatch: Story = {\n args: {\n firstContent: 'Mismatched content',\n secondContent: 'p',\n hydrationMismatchType: 'text-in-tag',\n reactOutputComponentDiff: undefined,\n },\n}\n\nexport const ReactUnifiedMismatch: Story = {\n args: {\n hydrationMismatchType: 'tag',\n reactOutputComponentDiff: `<Page>\n <Layout>\n <div>\n- <p>Server content</p>\n+ <p>Client content</p>`,\n },\n}\n"],"names":["ReactUnifiedMismatch","TextInTagMismatch","TextMismatch","meta","component","PseudoHtmlDiff","parameters","layout","decorators","withShadowPortal","args","firstContent","secondContent","hydrationMismatchType","reactOutputComponentDiff","undefined"],"mappings":";;;;;;;;;;;;;;;;;IAiCaA,oBAAoB;eAApBA;;IATAC,iBAAiB;eAAjBA;;IATAC,YAAY;eAAZA;;IAHb,OAAmB;eAAnB;;;0CAX+B;kCACE;AAEjC,MAAMC,OAAoC;IACxCC,WAAWC,wCAAc;IACzBC,YAAY;QACVC,QAAQ;IACV;IACAC,YAAY;QAACC,kCAAgB;KAAC;AAChC;MAEA,WAAeN;AAGR,MAAMD,eAAsB;IACjCQ,MAAM;QACJC,cAAc;QACdC,eAAe;QACfC,uBAAuB;QACvBC,0BAA0BC;IAC5B;AACF;AAEO,MAAMd,oBAA2B;IACtCS,MAAM;QACJC,cAAc;QACdC,eAAe;QACfC,uBAAuB;QACvBC,0BAA0BC;IAC5B;AACF;AAEO,MAAMf,uBAA8B;IACzCU,MAAM;QACJG,uBAAuB;QACvBC,0BAA2B;IAK7B;AACF"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ *
3
+ * Format component stack into pseudo HTML
4
+ * component stack is an array of strings, e.g.: ['p', 'p', 'Page', ...]
5
+ *
6
+ * For html tags mismatch, it will render it for the code block
7
+ *
8
+ * ```
9
+ * <pre>
10
+ * <code>{`
11
+ * <Page>
12
+ * <p red>
13
+ * <p red>
14
+ * `}</code>
15
+ * </pre>
16
+ * ```
17
+ *
18
+ * For text mismatch, it will render it for the code block
19
+ *
20
+ * ```
21
+ * <pre>
22
+ * <code>{`
23
+ * <Page>
24
+ * <p>
25
+ * "Server Text" (green)
26
+ * "Client Text" (red)
27
+ * </p>
28
+ * </Page>
29
+ * `}</code>
30
+ * ```
31
+ *
32
+ * For bad text under a tag it will render it for the code block,
33
+ * e.g. "Mismatched Text" under <p>
34
+ *
35
+ * ```
36
+ * <pre>
37
+ * <code>{`
38
+ * <Page>
39
+ * <div>
40
+ * <p>
41
+ * "Mismatched Text" (red)
42
+ * </p>
43
+ * </div>
44
+ * </Page>
45
+ * `}</code>
46
+ * ```
47
+ *
48
+ */
49
+ export declare function PseudoHtmlDiff({ firstContent, secondContent, hydrationMismatchType, reactOutputComponentDiff, ...props }: {
50
+ firstContent: string;
51
+ secondContent: string;
52
+ reactOutputComponentDiff: string;
53
+ hydrationMismatchType: 'tag' | 'text' | 'text-in-tag';
54
+ } & React.HTMLAttributes<HTMLPreElement>): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "PseudoHtmlDiff", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return PseudoHtmlDiff;
9
+ }
10
+ });
11
+ const _jsxruntime = require("react/jsx-runtime");
12
+ const _react = require("react");
13
+ const _CollapseIcon = require("../internal/icons/CollapseIcon");
14
+ function PseudoHtmlDiff(param) {
15
+ let { firstContent, secondContent, hydrationMismatchType, reactOutputComponentDiff, ...props } = param;
16
+ const [isDiffCollapsed, toggleCollapseHtml] = (0, _react.useState)(true);
17
+ const htmlComponents = (0, _react.useMemo)(()=>{
18
+ const componentStacks = [];
19
+ const reactComponentDiffLines = reactOutputComponentDiff.split('\n');
20
+ reactComponentDiffLines.forEach((line, index)=>{
21
+ let trimmedLine = line.trim();
22
+ const isDiffLine = trimmedLine[0] === '+' || trimmedLine[0] === '-';
23
+ const isHighlightedLine = trimmedLine[0] === '>';
24
+ const hasSign = isDiffLine || isHighlightedLine;
25
+ const sign = hasSign ? trimmedLine[0] : '';
26
+ const signIndex = hasSign ? line.indexOf(sign) : -1;
27
+ const [prefix, suffix] = hasSign ? [
28
+ line.slice(0, signIndex),
29
+ line.slice(signIndex + 1)
30
+ ] : [
31
+ line,
32
+ ''
33
+ ];
34
+ if (isDiffLine) {
35
+ componentStacks.push(/*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
36
+ "data-nextjs-container-errors-pseudo-html-line": true,
37
+ "data-nextjs-container-errors-pseudo-html--diff": sign === '+' ? 'add' : 'remove',
38
+ children: /*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
39
+ children: [
40
+ prefix,
41
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
42
+ "data-nextjs-container-errors-pseudo-html-line-sign": true,
43
+ children: sign
44
+ }),
45
+ suffix,
46
+ '\n'
47
+ ]
48
+ })
49
+ }, 'comp-diff' + index));
50
+ } else {
51
+ // In general, if it's not collapsed, show the whole diff
52
+ componentStacks.push(/*#__PURE__*/ (0, _jsxruntime.jsxs)("span", {
53
+ "data-nextjs-container-errors-pseudo-html-line": true,
54
+ ...isHighlightedLine ? {
55
+ 'data-nextjs-container-errors-pseudo-html-line--error': true
56
+ } : undefined,
57
+ children: [
58
+ prefix,
59
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("span", {
60
+ "data-nextjs-container-errors-pseudo-html-line-sign": true,
61
+ children: sign
62
+ }),
63
+ suffix,
64
+ '\n'
65
+ ]
66
+ }, 'comp-diff' + index));
67
+ }
68
+ });
69
+ return componentStacks;
70
+ }, [
71
+ reactOutputComponentDiff
72
+ ]);
73
+ return /*#__PURE__*/ (0, _jsxruntime.jsxs)("div", {
74
+ "data-nextjs-container-errors-pseudo-html": true,
75
+ "data-nextjs-container-errors-pseudo-html-collapse": isDiffCollapsed,
76
+ children: [
77
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("button", {
78
+ tabIndex: 10,
79
+ "data-nextjs-container-errors-pseudo-html-collapse-button": true,
80
+ onClick: ()=>toggleCollapseHtml(!isDiffCollapsed),
81
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)(_CollapseIcon.CollapseIcon, {
82
+ collapsed: isDiffCollapsed
83
+ })
84
+ }),
85
+ /*#__PURE__*/ (0, _jsxruntime.jsx)("pre", {
86
+ ...props,
87
+ children: /*#__PURE__*/ (0, _jsxruntime.jsx)("code", {
88
+ children: htmlComponents
89
+ })
90
+ })
91
+ ]
92
+ });
93
+ }
94
+
95
+ if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
96
+ Object.defineProperty(exports.default, '__esModule', { value: true });
97
+ Object.assign(exports.default, exports);
98
+ module.exports = exports.default;
99
+ }
100
+
101
+ //# sourceMappingURL=diff-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../src/client/components/react-dev-overlay/hydration-diff/diff-view.tsx"],"sourcesContent":["import { useMemo, useState } from 'react'\nimport { CollapseIcon } from '../internal/icons/CollapseIcon'\n\n/**\n *\n * Format component stack into pseudo HTML\n * component stack is an array of strings, e.g.: ['p', 'p', 'Page', ...]\n *\n * For html tags mismatch, it will render it for the code block\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <p red>\n * <p red>\n * `}</code>\n * </pre>\n * ```\n *\n * For text mismatch, it will render it for the code block\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <p>\n * \"Server Text\" (green)\n * \"Client Text\" (red)\n * </p>\n * </Page>\n * `}</code>\n * ```\n *\n * For bad text under a tag it will render it for the code block,\n * e.g. \"Mismatched Text\" under <p>\n *\n * ```\n * <pre>\n * <code>{`\n * <Page>\n * <div>\n * <p>\n * \"Mismatched Text\" (red)\n * </p>\n * </div>\n * </Page>\n * `}</code>\n * ```\n *\n */\nexport function PseudoHtmlDiff({\n firstContent,\n secondContent,\n hydrationMismatchType,\n reactOutputComponentDiff,\n ...props\n}: {\n firstContent: string\n secondContent: string\n reactOutputComponentDiff: string\n hydrationMismatchType: 'tag' | 'text' | 'text-in-tag'\n} & React.HTMLAttributes<HTMLPreElement>) {\n const [isDiffCollapsed, toggleCollapseHtml] = useState(true)\n\n const htmlComponents = useMemo(() => {\n const componentStacks: React.ReactNode[] = []\n const reactComponentDiffLines = reactOutputComponentDiff!.split('\\n')\n reactComponentDiffLines.forEach((line, index) => {\n let trimmedLine = line.trim()\n const isDiffLine = trimmedLine[0] === '+' || trimmedLine[0] === '-'\n const isHighlightedLine = trimmedLine[0] === '>'\n const hasSign = isDiffLine || isHighlightedLine\n const sign = hasSign ? trimmedLine[0] : ''\n const signIndex = hasSign ? line.indexOf(sign) : -1\n const [prefix, suffix] = hasSign\n ? [line.slice(0, signIndex), line.slice(signIndex + 1)]\n : [line, '']\n\n if (isDiffLine) {\n componentStacks.push(\n <span\n key={'comp-diff' + index}\n data-nextjs-container-errors-pseudo-html-line\n data-nextjs-container-errors-pseudo-html--diff={\n sign === '+' ? 'add' : 'remove'\n }\n >\n <span>\n {/* Slice 2 spaces for the icon */}\n {prefix}\n <span data-nextjs-container-errors-pseudo-html-line-sign>\n {sign}\n </span>\n {suffix}\n {'\\n'}\n </span>\n </span>\n )\n } else {\n // In general, if it's not collapsed, show the whole diff\n componentStacks.push(\n <span\n data-nextjs-container-errors-pseudo-html-line\n key={'comp-diff' + index}\n {...(isHighlightedLine\n ? {\n 'data-nextjs-container-errors-pseudo-html-line--error': true,\n }\n : undefined)}\n >\n {prefix}\n <span data-nextjs-container-errors-pseudo-html-line-sign>\n {sign}\n </span>\n {suffix}\n {'\\n'}\n </span>\n )\n }\n })\n return componentStacks\n }, [reactOutputComponentDiff])\n\n return (\n <div\n data-nextjs-container-errors-pseudo-html\n data-nextjs-container-errors-pseudo-html-collapse={isDiffCollapsed}\n >\n <button\n tabIndex={10} // match CallStackFrame\n data-nextjs-container-errors-pseudo-html-collapse-button\n onClick={() => toggleCollapseHtml(!isDiffCollapsed)}\n >\n <CollapseIcon collapsed={isDiffCollapsed} />\n </button>\n <pre {...props}>\n <code>{htmlComponents}</code>\n </pre>\n </div>\n )\n}\n"],"names":["PseudoHtmlDiff","firstContent","secondContent","hydrationMismatchType","reactOutputComponentDiff","props","isDiffCollapsed","toggleCollapseHtml","useState","htmlComponents","useMemo","componentStacks","reactComponentDiffLines","split","forEach","line","index","trimmedLine","trim","isDiffLine","isHighlightedLine","hasSign","sign","signIndex","indexOf","prefix","suffix","slice","push","span","data-nextjs-container-errors-pseudo-html-line","data-nextjs-container-errors-pseudo-html--diff","data-nextjs-container-errors-pseudo-html-line-sign","undefined","div","data-nextjs-container-errors-pseudo-html","data-nextjs-container-errors-pseudo-html-collapse","button","tabIndex","data-nextjs-container-errors-pseudo-html-collapse-button","onClick","CollapseIcon","collapsed","pre","code"],"mappings":";;;;+BAmDgBA;;;eAAAA;;;;uBAnDkB;8BACL;AAkDtB,SAASA,eAAe,KAWS;IAXT,IAAA,EAC7BC,YAAY,EACZC,aAAa,EACbC,qBAAqB,EACrBC,wBAAwB,EACxB,GAAGC,OAMmC,GAXT;IAY7B,MAAM,CAACC,iBAAiBC,mBAAmB,GAAGC,IAAAA,eAAQ,EAAC;IAEvD,MAAMC,iBAAiBC,IAAAA,cAAO,EAAC;QAC7B,MAAMC,kBAAqC,EAAE;QAC7C,MAAMC,0BAA0BR,yBAA0BS,KAAK,CAAC;QAChED,wBAAwBE,OAAO,CAAC,CAACC,MAAMC;YACrC,IAAIC,cAAcF,KAAKG,IAAI;YAC3B,MAAMC,aAAaF,WAAW,CAAC,EAAE,KAAK,OAAOA,WAAW,CAAC,EAAE,KAAK;YAChE,MAAMG,oBAAoBH,WAAW,CAAC,EAAE,KAAK;YAC7C,MAAMI,UAAUF,cAAcC;YAC9B,MAAME,OAAOD,UAAUJ,WAAW,CAAC,EAAE,GAAG;YACxC,MAAMM,YAAYF,UAAUN,KAAKS,OAAO,CAACF,QAAQ,CAAC;YAClD,MAAM,CAACG,QAAQC,OAAO,GAAGL,UACrB;gBAACN,KAAKY,KAAK,CAAC,GAAGJ;gBAAYR,KAAKY,KAAK,CAACJ,YAAY;aAAG,GACrD;gBAACR;gBAAM;aAAG;YAEd,IAAII,YAAY;gBACdR,gBAAgBiB,IAAI,eAClB,qBAACC;oBAECC,+CAA6C;oBAC7CC,kDACET,SAAS,MAAM,QAAQ;8BAGzB,cAAA,sBAACO;;4BAEEJ;0CACD,qBAACI;gCAAKG,oDAAkD;0CACrDV;;4BAEFI;4BACA;;;mBAbE,cAAcV;YAiBzB,OAAO;gBACL,yDAAyD;gBACzDL,gBAAgBiB,IAAI,eAClB,sBAACC;oBACCC,+CAA6C;oBAE5C,GAAIV,oBACD;wBACE,wDAAwD;oBAC1D,IACAa,SAAS;;wBAEZR;sCACD,qBAACI;4BAAKG,oDAAkD;sCACrDV;;wBAEFI;wBACA;;mBAZI,cAAcV;YAezB;QACF;QACA,OAAOL;IACT,GAAG;QAACP;KAAyB;IAE7B,qBACE,sBAAC8B;QACCC,0CAAwC;QACxCC,qDAAmD9B;;0BAEnD,qBAAC+B;gBACCC,UAAU;gBACVC,0DAAwD;gBACxDC,SAAS,IAAMjC,mBAAmB,CAACD;0BAEnC,cAAA,qBAACmC,0BAAY;oBAACC,WAAWpC;;;0BAE3B,qBAACqC;gBAAK,GAAGtC,KAAK;0BACZ,cAAA,qBAACuC;8BAAMnC;;;;;AAIf"}
@@ -360,10 +360,9 @@ function Errors(param) {
360
360
  hydrationWarning && (((_activeError_componentStackFrames = activeError.componentStackFrames) == null ? void 0 : _activeError_componentStackFrames.length) || !!errorDetails.reactOutputComponentDiff) ? /*#__PURE__*/ (0, _jsxruntime.jsx)(_componentstackpseudohtml.PseudoHtmlDiff, {
361
361
  className: "nextjs__container_errors__component-stack",
362
362
  hydrationMismatchType: hydrationErrorType,
363
- componentStackFrames: activeError.componentStackFrames || [],
364
363
  firstContent: serverContent,
365
364
  secondContent: clientContent,
366
- reactOutputComponentDiff: errorDetails.reactOutputComponentDiff
365
+ reactOutputComponentDiff: errorDetails.reactOutputComponentDiff || ''
367
366
  }) : null,
368
367
  isServerError ? /*#__PURE__*/ (0, _jsxruntime.jsx)("div", {
369
368
  children: /*#__PURE__*/ (0, _jsxruntime.jsx)("small", {