@contember/react-devbar 1.3.0-alpha.14

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 (120) hide show
  1. package/dist/assets/index.css +377 -0
  2. package/dist/development/errorHandling.cjs +58 -0
  3. package/dist/development/errorHandling.cjs.map +1 -0
  4. package/dist/development/errorHandling.js +41 -0
  5. package/dist/development/errorHandling.js.map +1 -0
  6. package/dist/development/hooks/useParsedStacktrace.cjs +62 -0
  7. package/dist/development/hooks/useParsedStacktrace.cjs.map +1 -0
  8. package/dist/development/hooks/useParsedStacktrace.js +40 -0
  9. package/dist/development/hooks/useParsedStacktrace.js.map +1 -0
  10. package/dist/development/index.cjs +17 -0
  11. package/dist/development/index.cjs.map +1 -0
  12. package/dist/development/index.js +17 -0
  13. package/dist/development/index.js.map +1 -0
  14. package/dist/development/ui/DevBar/DevBar.cjs +162 -0
  15. package/dist/development/ui/DevBar/DevBar.cjs.map +1 -0
  16. package/dist/development/ui/DevBar/DevBar.js +162 -0
  17. package/dist/development/ui/DevBar/DevBar.js.map +1 -0
  18. package/dist/development/ui/DevError/DevError.cjs +14 -0
  19. package/dist/development/ui/DevError/DevError.cjs.map +1 -0
  20. package/dist/development/ui/DevError/DevError.js +14 -0
  21. package/dist/development/ui/DevError/DevError.js.map +1 -0
  22. package/dist/development/ui/DevError/DevErrorBadge.cjs +14 -0
  23. package/dist/development/ui/DevError/DevErrorBadge.cjs.map +1 -0
  24. package/dist/development/ui/DevError/DevErrorBadge.js +14 -0
  25. package/dist/development/ui/DevError/DevErrorBadge.js.map +1 -0
  26. package/dist/development/ui/DevError/DevErrorInner.cjs +24 -0
  27. package/dist/development/ui/DevError/DevErrorInner.cjs.map +1 -0
  28. package/dist/development/ui/DevError/DevErrorInner.js +24 -0
  29. package/dist/development/ui/DevError/DevErrorInner.js.map +1 -0
  30. package/dist/development/ui/DevError/DevErrorList.cjs +39 -0
  31. package/dist/development/ui/DevError/DevErrorList.cjs.map +1 -0
  32. package/dist/development/ui/DevError/DevErrorList.js +39 -0
  33. package/dist/development/ui/DevError/DevErrorList.js.map +1 -0
  34. package/dist/development/ui/DevError/StackTrace.cjs +41 -0
  35. package/dist/development/ui/DevError/StackTrace.cjs.map +1 -0
  36. package/dist/development/ui/DevError/StackTrace.js +41 -0
  37. package/dist/development/ui/DevError/StackTrace.js.map +1 -0
  38. package/dist/production/errorHandling.cjs +58 -0
  39. package/dist/production/errorHandling.cjs.map +1 -0
  40. package/dist/production/errorHandling.js +41 -0
  41. package/dist/production/errorHandling.js.map +1 -0
  42. package/dist/production/hooks/useParsedStacktrace.cjs +62 -0
  43. package/dist/production/hooks/useParsedStacktrace.cjs.map +1 -0
  44. package/dist/production/hooks/useParsedStacktrace.js +40 -0
  45. package/dist/production/hooks/useParsedStacktrace.js.map +1 -0
  46. package/dist/production/index.cjs +17 -0
  47. package/dist/production/index.cjs.map +1 -0
  48. package/dist/production/index.js +17 -0
  49. package/dist/production/index.js.map +1 -0
  50. package/dist/production/ui/DevBar/DevBar.cjs +162 -0
  51. package/dist/production/ui/DevBar/DevBar.cjs.map +1 -0
  52. package/dist/production/ui/DevBar/DevBar.js +162 -0
  53. package/dist/production/ui/DevBar/DevBar.js.map +1 -0
  54. package/dist/production/ui/DevError/DevError.cjs +14 -0
  55. package/dist/production/ui/DevError/DevError.cjs.map +1 -0
  56. package/dist/production/ui/DevError/DevError.js +14 -0
  57. package/dist/production/ui/DevError/DevError.js.map +1 -0
  58. package/dist/production/ui/DevError/DevErrorBadge.cjs +14 -0
  59. package/dist/production/ui/DevError/DevErrorBadge.cjs.map +1 -0
  60. package/dist/production/ui/DevError/DevErrorBadge.js +14 -0
  61. package/dist/production/ui/DevError/DevErrorBadge.js.map +1 -0
  62. package/dist/production/ui/DevError/DevErrorInner.cjs +24 -0
  63. package/dist/production/ui/DevError/DevErrorInner.cjs.map +1 -0
  64. package/dist/production/ui/DevError/DevErrorInner.js +24 -0
  65. package/dist/production/ui/DevError/DevErrorInner.js.map +1 -0
  66. package/dist/production/ui/DevError/DevErrorList.cjs +39 -0
  67. package/dist/production/ui/DevError/DevErrorList.cjs.map +1 -0
  68. package/dist/production/ui/DevError/DevErrorList.js +39 -0
  69. package/dist/production/ui/DevError/DevErrorList.js.map +1 -0
  70. package/dist/production/ui/DevError/StackTrace.cjs +41 -0
  71. package/dist/production/ui/DevError/StackTrace.cjs.map +1 -0
  72. package/dist/production/ui/DevError/StackTrace.js +41 -0
  73. package/dist/production/ui/DevError/StackTrace.js.map +1 -0
  74. package/dist/types/DevErrorManager.d.ts +15 -0
  75. package/dist/types/DevErrorManager.d.ts.map +1 -0
  76. package/dist/types/errorHandling.d.ts +6 -0
  77. package/dist/types/errorHandling.d.ts.map +1 -0
  78. package/dist/types/hooks/useParsedStacktrace.d.ts +10 -0
  79. package/dist/types/hooks/useParsedStacktrace.d.ts.map +1 -0
  80. package/dist/types/index.d.ts +5 -0
  81. package/dist/types/index.d.ts.map +1 -0
  82. package/dist/types/tsconfig.tsbuildinfo +1 -0
  83. package/dist/types/ui/DevBar/DevBar.d.ts +12 -0
  84. package/dist/types/ui/DevBar/DevBar.d.ts.map +1 -0
  85. package/dist/types/ui/DevBar/index.d.ts +2 -0
  86. package/dist/types/ui/DevBar/index.d.ts.map +1 -0
  87. package/dist/types/ui/DevError/DevError.d.ts +6 -0
  88. package/dist/types/ui/DevError/DevError.d.ts.map +1 -0
  89. package/dist/types/ui/DevError/DevErrorBadge.d.ts +6 -0
  90. package/dist/types/ui/DevError/DevErrorBadge.d.ts.map +1 -0
  91. package/dist/types/ui/DevError/DevErrorInner.d.ts +7 -0
  92. package/dist/types/ui/DevError/DevErrorInner.d.ts.map +1 -0
  93. package/dist/types/ui/DevError/DevErrorList.d.ts +12 -0
  94. package/dist/types/ui/DevError/DevErrorList.d.ts.map +1 -0
  95. package/dist/types/ui/DevError/StackTrace.d.ts +5 -0
  96. package/dist/types/ui/DevError/StackTrace.d.ts.map +1 -0
  97. package/dist/types/ui/DevError/index.d.ts +5 -0
  98. package/dist/types/ui/DevError/index.d.ts.map +1 -0
  99. package/dist/types/ui/DevError/types.d.ts +15 -0
  100. package/dist/types/ui/DevError/types.d.ts.map +1 -0
  101. package/package.json +64 -0
  102. package/src/DevErrorManager.tsx +82 -0
  103. package/src/errorHandling.tsx +87 -0
  104. package/src/hooks/useParsedStacktrace.ts +40 -0
  105. package/src/index.css +2 -0
  106. package/src/index.ts +4 -0
  107. package/src/tsconfig.json +10 -0
  108. package/src/ui/DevBar/DevBar.tsx +187 -0
  109. package/src/ui/DevBar/index.css +171 -0
  110. package/src/ui/DevBar/index.tsx +1 -0
  111. package/src/ui/DevError/DevError.css +191 -0
  112. package/src/ui/DevError/DevError.tsx +21 -0
  113. package/src/ui/DevError/DevErrorBadge.css +16 -0
  114. package/src/ui/DevError/DevErrorBadge.tsx +18 -0
  115. package/src/ui/DevError/DevErrorInner.tsx +46 -0
  116. package/src/ui/DevError/DevErrorList.tsx +60 -0
  117. package/src/ui/DevError/StackTrace.tsx +49 -0
  118. package/src/ui/DevError/index.css +2 -0
  119. package/src/ui/DevError/index.ts +4 -0
  120. package/src/ui/DevError/types.ts +17 -0
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactUtils = require("@contember/react-utils");
5
+ const StackTrace = ({ stackTrace }) => {
6
+ const componentClassName = reactUtils.useClassNameFactory("devError");
7
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: componentClassName("stack"), children: stackTrace.map((it, index) => /* @__PURE__ */ jsxRuntime.jsx(StackFrame, { stackFrame: it }, index)) });
8
+ };
9
+ const StackFrame = ({ stackFrame }) => {
10
+ const componentClassName = reactUtils.useClassNameFactory("devError");
11
+ const line = stackFrame.line;
12
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: componentClassName("stackFrame"), children: [
13
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: componentClassName("stackFrameHeader"), children: [
14
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: componentClassName("stackFrameSource"), children: [
15
+ stackFrame.filename,
16
+ ":",
17
+ line
18
+ ] }),
19
+ stackFrame.callee && /* @__PURE__ */ jsxRuntime.jsx("div", { className: componentClassName("stackFrameCallee"), children: stackFrame.callee })
20
+ ] }),
21
+ line !== void 0 && stackFrame.sourceCodeLines && /* @__PURE__ */ jsxRuntime.jsx("div", { className: componentClassName("stackFrameCode"), children: stackFrame.sourceCodeLines.map((it, index) => {
22
+ const lineNumber = index + 1;
23
+ if (lineNumber + 5 < line || lineNumber - 3 > line) {
24
+ return null;
25
+ }
26
+ return /* @__PURE__ */ jsxRuntime.jsxs(
27
+ "div",
28
+ {
29
+ className: componentClassName("stackFrameLine", lineNumber === line && "is-active"),
30
+ children: [
31
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: componentClassName("stackFrameLineNumber"), children: lineNumber }),
32
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: componentClassName("stackFrameLineCode"), children: it })
33
+ ]
34
+ },
35
+ lineNumber
36
+ );
37
+ }) })
38
+ ] });
39
+ };
40
+ exports.StackTrace = StackTrace;
41
+ //# sourceMappingURL=StackTrace.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackTrace.cjs","sources":["../../../../src/ui/DevError/StackTrace.tsx"],"sourcesContent":["import { useClassNameFactory } from '@contember/react-utils'\nimport { ParsedStackFrame, ParsedStackTrace } from './types'\n\nexport const StackTrace = ({ stackTrace }: { stackTrace: ParsedStackTrace }) => {\n\tconst componentClassName = useClassNameFactory('devError')\n\n\treturn (\n\t\t<div className={componentClassName('stack')}>\n\t\t\t{stackTrace.map((it, index) => (\n\t\t\t\t<StackFrame stackFrame={it} key={index} />\n\t\t\t))}\n\t\t</div>\n\t)\n}\n\nconst StackFrame = ({ stackFrame }: { stackFrame: ParsedStackFrame }) => {\n\tconst componentClassName = useClassNameFactory('devError')\n\tconst line = stackFrame.line\n\n\treturn (\n\t\t<div className={componentClassName('stackFrame')}>\n\t\t\t<div className={componentClassName('stackFrameHeader')}>\n\t\t\t\t<div className={componentClassName('stackFrameSource')}>\n\t\t\t\t\t{stackFrame.filename}:{line}\n\t\t\t\t</div>\n\t\t\t\t{stackFrame.callee && <div className={componentClassName('stackFrameCallee')}>{stackFrame.callee}</div>}\n\t\t\t</div>\n\t\t\t{line !== undefined && stackFrame.sourceCodeLines && (\n\t\t\t\t<div className={componentClassName('stackFrameCode')}>\n\t\t\t\t\t{stackFrame.sourceCodeLines.map((it, index) => {\n\t\t\t\t\t\tconst lineNumber = index + 1\n\t\t\t\t\t\tif (lineNumber + 5 < line || lineNumber - 3 > line) {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={componentClassName('stackFrameLine', lineNumber === line && 'is-active')}\n\t\t\t\t\t\t\t\tkey={lineNumber}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className={componentClassName('stackFrameLineNumber')}>{lineNumber}</div>\n\t\t\t\t\t\t\t\t<div className={componentClassName('stackFrameLineCode')}>{it}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["useClassNameFactory","jsx","jsxs"],"mappings":";;;;AAGO,MAAM,aAAa,CAAC,EAAE,iBAAmD;AACzE,QAAA,qBAAqBA,+BAAoB,UAAU;AAEzD,wCACE,OAAI,EAAA,WAAW,mBAAmB,OAAO,GACxC,UAAW,WAAA,IAAI,CAAC,IAAI,UACnBC,+BAAA,YAAA,EAAW,YAAY,MAAS,KAAO,CACxC,EACF,CAAA;AAEF;AAEA,MAAM,aAAa,CAAC,EAAE,iBAAmD;AAClE,QAAA,qBAAqBD,+BAAoB,UAAU;AACzD,QAAM,OAAO,WAAW;AAExB,SACEE,2BAAAA,KAAA,OAAA,EAAI,WAAW,mBAAmB,YAAY,GAC9C,UAAA;AAAA,IAAAA,2BAAA,KAAC,OAAI,EAAA,WAAW,mBAAmB,kBAAkB,GACpD,UAAA;AAAA,MAAAA,2BAAA,KAAC,OAAI,EAAA,WAAW,mBAAmB,kBAAkB,GACnD,UAAA;AAAA,QAAW,WAAA;AAAA,QAAS;AAAA,QAAE;AAAA,MAAA,GACxB;AAAA,MACC,WAAW,UAAWD,+BAAA,OAAA,EAAI,WAAW,mBAAmB,kBAAkB,GAAI,UAAA,WAAW,OAAO,CAAA;AAAA,IAAA,GAClG;AAAA,IACC,SAAS,UAAa,WAAW,kDAChC,OAAI,EAAA,WAAW,mBAAmB,gBAAgB,GACjD,UAAW,WAAA,gBAAgB,IAAI,CAAC,IAAI,UAAU;AAC9C,YAAM,aAAa,QAAQ;AAC3B,UAAI,aAAa,IAAI,QAAQ,aAAa,IAAI,MAAM;AAC5C,eAAA;AAAA,MACR;AAEC,aAAAC,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,mBAAmB,kBAAkB,eAAe,QAAQ,WAAW;AAAA,UAGlF,UAAA;AAAA,YAAAD,+BAAC,OAAI,EAAA,WAAW,mBAAmB,sBAAsB,GAAI,UAAW,YAAA;AAAA,2CACvE,OAAI,EAAA,WAAW,mBAAmB,oBAAoB,GAAI,UAAG,IAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAHzD;AAAA,MAAA;AAAA,IAMP,CAAA,GACF;AAAA,EAEF,EAAA,CAAA;AAEF;;"}
@@ -0,0 +1,41 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { useClassNameFactory } from "@contember/react-utils";
3
+ const StackTrace = ({ stackTrace }) => {
4
+ const componentClassName = useClassNameFactory("devError");
5
+ return /* @__PURE__ */ jsx("div", { className: componentClassName("stack"), children: stackTrace.map((it, index) => /* @__PURE__ */ jsx(StackFrame, { stackFrame: it }, index)) });
6
+ };
7
+ const StackFrame = ({ stackFrame }) => {
8
+ const componentClassName = useClassNameFactory("devError");
9
+ const line = stackFrame.line;
10
+ return /* @__PURE__ */ jsxs("div", { className: componentClassName("stackFrame"), children: [
11
+ /* @__PURE__ */ jsxs("div", { className: componentClassName("stackFrameHeader"), children: [
12
+ /* @__PURE__ */ jsxs("div", { className: componentClassName("stackFrameSource"), children: [
13
+ stackFrame.filename,
14
+ ":",
15
+ line
16
+ ] }),
17
+ stackFrame.callee && /* @__PURE__ */ jsx("div", { className: componentClassName("stackFrameCallee"), children: stackFrame.callee })
18
+ ] }),
19
+ line !== void 0 && stackFrame.sourceCodeLines && /* @__PURE__ */ jsx("div", { className: componentClassName("stackFrameCode"), children: stackFrame.sourceCodeLines.map((it, index) => {
20
+ const lineNumber = index + 1;
21
+ if (lineNumber + 5 < line || lineNumber - 3 > line) {
22
+ return null;
23
+ }
24
+ return /* @__PURE__ */ jsxs(
25
+ "div",
26
+ {
27
+ className: componentClassName("stackFrameLine", lineNumber === line && "is-active"),
28
+ children: [
29
+ /* @__PURE__ */ jsx("div", { className: componentClassName("stackFrameLineNumber"), children: lineNumber }),
30
+ /* @__PURE__ */ jsx("div", { className: componentClassName("stackFrameLineCode"), children: it })
31
+ ]
32
+ },
33
+ lineNumber
34
+ );
35
+ }) })
36
+ ] });
37
+ };
38
+ export {
39
+ StackTrace
40
+ };
41
+ //# sourceMappingURL=StackTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackTrace.js","sources":["../../../../src/ui/DevError/StackTrace.tsx"],"sourcesContent":["import { useClassNameFactory } from '@contember/react-utils'\nimport { ParsedStackFrame, ParsedStackTrace } from './types'\n\nexport const StackTrace = ({ stackTrace }: { stackTrace: ParsedStackTrace }) => {\n\tconst componentClassName = useClassNameFactory('devError')\n\n\treturn (\n\t\t<div className={componentClassName('stack')}>\n\t\t\t{stackTrace.map((it, index) => (\n\t\t\t\t<StackFrame stackFrame={it} key={index} />\n\t\t\t))}\n\t\t</div>\n\t)\n}\n\nconst StackFrame = ({ stackFrame }: { stackFrame: ParsedStackFrame }) => {\n\tconst componentClassName = useClassNameFactory('devError')\n\tconst line = stackFrame.line\n\n\treturn (\n\t\t<div className={componentClassName('stackFrame')}>\n\t\t\t<div className={componentClassName('stackFrameHeader')}>\n\t\t\t\t<div className={componentClassName('stackFrameSource')}>\n\t\t\t\t\t{stackFrame.filename}:{line}\n\t\t\t\t</div>\n\t\t\t\t{stackFrame.callee && <div className={componentClassName('stackFrameCallee')}>{stackFrame.callee}</div>}\n\t\t\t</div>\n\t\t\t{line !== undefined && stackFrame.sourceCodeLines && (\n\t\t\t\t<div className={componentClassName('stackFrameCode')}>\n\t\t\t\t\t{stackFrame.sourceCodeLines.map((it, index) => {\n\t\t\t\t\t\tconst lineNumber = index + 1\n\t\t\t\t\t\tif (lineNumber + 5 < line || lineNumber - 3 > line) {\n\t\t\t\t\t\t\treturn null\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={componentClassName('stackFrameLine', lineNumber === line && 'is-active')}\n\t\t\t\t\t\t\t\tkey={lineNumber}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className={componentClassName('stackFrameLineNumber')}>{lineNumber}</div>\n\t\t\t\t\t\t\t\t<div className={componentClassName('stackFrameLineCode')}>{it}</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)\n\t\t\t\t\t})}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":[],"mappings":";;AAGO,MAAM,aAAa,CAAC,EAAE,iBAAmD;AACzE,QAAA,qBAAqB,oBAAoB,UAAU;AAEzD,6BACE,OAAI,EAAA,WAAW,mBAAmB,OAAO,GACxC,UAAW,WAAA,IAAI,CAAC,IAAI,UACnB,oBAAA,YAAA,EAAW,YAAY,MAAS,KAAO,CACxC,EACF,CAAA;AAEF;AAEA,MAAM,aAAa,CAAC,EAAE,iBAAmD;AAClE,QAAA,qBAAqB,oBAAoB,UAAU;AACzD,QAAM,OAAO,WAAW;AAExB,SACE,qBAAA,OAAA,EAAI,WAAW,mBAAmB,YAAY,GAC9C,UAAA;AAAA,IAAA,qBAAC,OAAI,EAAA,WAAW,mBAAmB,kBAAkB,GACpD,UAAA;AAAA,MAAA,qBAAC,OAAI,EAAA,WAAW,mBAAmB,kBAAkB,GACnD,UAAA;AAAA,QAAW,WAAA;AAAA,QAAS;AAAA,QAAE;AAAA,MAAA,GACxB;AAAA,MACC,WAAW,UAAW,oBAAA,OAAA,EAAI,WAAW,mBAAmB,kBAAkB,GAAI,UAAA,WAAW,OAAO,CAAA;AAAA,IAAA,GAClG;AAAA,IACC,SAAS,UAAa,WAAW,uCAChC,OAAI,EAAA,WAAW,mBAAmB,gBAAgB,GACjD,UAAW,WAAA,gBAAgB,IAAI,CAAC,IAAI,UAAU;AAC9C,YAAM,aAAa,QAAQ;AAC3B,UAAI,aAAa,IAAI,QAAQ,aAAa,IAAI,MAAM;AAC5C,eAAA;AAAA,MACR;AAEC,aAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACA,WAAW,mBAAmB,kBAAkB,eAAe,QAAQ,WAAW;AAAA,UAGlF,UAAA;AAAA,YAAA,oBAAC,OAAI,EAAA,WAAW,mBAAmB,sBAAsB,GAAI,UAAW,YAAA;AAAA,gCACvE,OAAI,EAAA,WAAW,mBAAmB,oBAAoB,GAAI,UAAG,IAAA;AAAA,UAAA;AAAA,QAAA;AAAA,QAHzD;AAAA,MAAA;AAAA,IAMP,CAAA,GACF;AAAA,EAEF,EAAA,CAAA;AAEF;"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const ReactDOM = require("react-dom");
5
+ function _interopNamespaceDefault(e) {
6
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
7
+ if (e) {
8
+ for (const k in e) {
9
+ if (k !== "default") {
10
+ const d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: () => e[k]
14
+ });
15
+ }
16
+ }
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+ const ReactDOM__namespace = /* @__PURE__ */ _interopNamespaceDefault(ReactDOM);
22
+ const getErrorContainer = () => {
23
+ const errorElementId = "__contember__dev__error__container__element";
24
+ let errorContainer = document.getElementById(errorElementId);
25
+ if (errorContainer) {
26
+ ReactDOM__namespace.unmountComponentAtNode(errorContainer);
27
+ } else {
28
+ errorContainer = document.createElement("div");
29
+ errorContainer.id = errorElementId;
30
+ document.body.appendChild(errorContainer);
31
+ }
32
+ return errorContainer;
33
+ };
34
+ const prodErrorHandler = (renderer) => {
35
+ const renderError = () => {
36
+ renderer(getErrorContainer(), /* @__PURE__ */ jsxRuntime.jsx("h1", { children: "Fatal error" }), () => {
37
+ });
38
+ };
39
+ window.addEventListener("error", renderError);
40
+ window.addEventListener("unhandledrejection", renderError);
41
+ return async (cb) => {
42
+ try {
43
+ await cb((e) => {
44
+ console.warn(e);
45
+ });
46
+ } catch (e) {
47
+ console.error(e);
48
+ renderError();
49
+ }
50
+ };
51
+ };
52
+ const createErrorHandler = (renderer) => {
53
+ {
54
+ return prodErrorHandler(renderer);
55
+ }
56
+ };
57
+ exports.createErrorHandler = createErrorHandler;
58
+ //# sourceMappingURL=errorHandling.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandling.cjs","sources":["../../src/errorHandling.tsx"],"sourcesContent":["import * as ReactDOM from 'react-dom'\nimport { Buffer } from 'buffer'\nimport { DevErrorManager, ErrorBus } from './DevErrorManager'\nimport { ReactElement } from 'react'\n\nexport type ErrorReactRenderer = (domElement: Element, reactElement: ReactElement, onRecoverableError: (e: any) => void) => void\n\nconst getErrorContainer = () => {\n\tconst errorElementId = '__contember__dev__error__container__element'\n\tlet errorContainer = document.getElementById(errorElementId)\n\n\tif (errorContainer) {\n\t\t// eslint-disable-next-line react/no-deprecated\n\t\tReactDOM.unmountComponentAtNode(errorContainer)\n\n\t} else {\n\t\terrorContainer = document.createElement('div')\n\t\terrorContainer.id = errorElementId\n\t\tdocument.body.appendChild(errorContainer)\n\t}\n\n\treturn errorContainer\n}\n\nconst devErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst errorBus = new ErrorBus()\n\n\t;(window as any).Buffer = Buffer\n\twindow.addEventListener('error', e => {\n\t\tif (e.message.startsWith('ResizeObserver')) {\n\t\t\t// Apparently, this can be ignored: https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n\t\t\treturn\n\t\t}\n\t\terrorBus.handleError('Unhandled error', e.error)\n\t})\n\n\twindow.addEventListener('unhandledrejection', e => errorBus.handleError('Unhandled promise rejection', e.reason))\n\n\tconst origOnError = console.error\n\tconsole.error = (...args) => {\n\t\torigOnError(...args)\n\t\tfor (const arg of args) {\n\t\t\tif (arg instanceof Error) {\n\t\t\t\terrorBus.handleError('Logged error', arg)\n\t\t\t}\n\t\t}\n\t}\n\trenderer(getErrorContainer(), <DevErrorManager bus={errorBus} />, () => {})\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => errorBus.handleError('Recoverable React error', e))\n\t\t} catch (e) {\n\t\t\terrorBus.handleError('Entrypoint crash', e)\n\t\t}\n\t}\n}\n\ntype TryRun = <T>(cb: (onRecoverableError: (e: any) => void) => T | Promise<T>) => void\nconst prodErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst renderError = () => {\n\t\trenderer(getErrorContainer(), <h1>Fatal error</h1>, () => {})\n\t}\n\n\twindow.addEventListener('error', renderError)\n\twindow.addEventListener('unhandledrejection', renderError)\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => {\n\t\t\t\tconsole.warn(e)\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\trenderError()\n\t\t}\n\t}\n}\n\n\nexport const createErrorHandler = (renderer: ErrorReactRenderer) => {\n\tif (import.meta.env.DEV) {\n\t\treturn devErrorHandler(renderer)\n\t} else {\n\t\treturn prodErrorHandler(renderer)\n\t}\n}\n"],"names":["ReactDOM","jsx"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,oBAAoB,MAAM;AAC/B,QAAM,iBAAiB;AACnB,MAAA,iBAAiB,SAAS,eAAe,cAAc;AAE3D,MAAI,gBAAgB;AAEnBA,wBAAS,uBAAuB,cAAc;AAAA,EAAA,OAExC;AACW,qBAAA,SAAS,cAAc,KAAK;AAC7C,mBAAe,KAAK;AACX,aAAA,KAAK,YAAY,cAAc;AAAA,EACzC;AAEO,SAAA;AACR;AAqCA,MAAM,mBAAmB,CAAC,aAAyC;AAClE,QAAM,cAAc,MAAM;AAChB,aAAA,qBAAsBC,+BAAA,MAAG,EAAA,UAAA,cAAW,CAAA,GAAO,MAAM;AAAA,IAAA,CAAE;AAAA,EAAA;AAGtD,SAAA,iBAAiB,SAAS,WAAW;AACrC,SAAA,iBAAiB,sBAAsB,WAAW;AAEzD,SAAO,OAAM,OAAM;AACd,QAAA;AACG,YAAA,GAAG,CAAK,MAAA;AACb,gBAAQ,KAAK,CAAC;AAAA,MAAA,CACd;AAAA,aACO,GAAG;AACX,cAAQ,MAAM,CAAC;AACH;IACb;AAAA,EAAA;AAEF;AAGa,MAAA,qBAAqB,CAAC,aAAiC;AAG5D;AACN,WAAO,iBAAiB,QAAQ;AAAA,EACjC;AACD;;"}
@@ -0,0 +1,41 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as ReactDOM from "react-dom";
3
+ const getErrorContainer = () => {
4
+ const errorElementId = "__contember__dev__error__container__element";
5
+ let errorContainer = document.getElementById(errorElementId);
6
+ if (errorContainer) {
7
+ ReactDOM.unmountComponentAtNode(errorContainer);
8
+ } else {
9
+ errorContainer = document.createElement("div");
10
+ errorContainer.id = errorElementId;
11
+ document.body.appendChild(errorContainer);
12
+ }
13
+ return errorContainer;
14
+ };
15
+ const prodErrorHandler = (renderer) => {
16
+ const renderError = () => {
17
+ renderer(getErrorContainer(), /* @__PURE__ */ jsx("h1", { children: "Fatal error" }), () => {
18
+ });
19
+ };
20
+ window.addEventListener("error", renderError);
21
+ window.addEventListener("unhandledrejection", renderError);
22
+ return async (cb) => {
23
+ try {
24
+ await cb((e) => {
25
+ console.warn(e);
26
+ });
27
+ } catch (e) {
28
+ console.error(e);
29
+ renderError();
30
+ }
31
+ };
32
+ };
33
+ const createErrorHandler = (renderer) => {
34
+ {
35
+ return prodErrorHandler(renderer);
36
+ }
37
+ };
38
+ export {
39
+ createErrorHandler
40
+ };
41
+ //# sourceMappingURL=errorHandling.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errorHandling.js","sources":["../../src/errorHandling.tsx"],"sourcesContent":["import * as ReactDOM from 'react-dom'\nimport { Buffer } from 'buffer'\nimport { DevErrorManager, ErrorBus } from './DevErrorManager'\nimport { ReactElement } from 'react'\n\nexport type ErrorReactRenderer = (domElement: Element, reactElement: ReactElement, onRecoverableError: (e: any) => void) => void\n\nconst getErrorContainer = () => {\n\tconst errorElementId = '__contember__dev__error__container__element'\n\tlet errorContainer = document.getElementById(errorElementId)\n\n\tif (errorContainer) {\n\t\t// eslint-disable-next-line react/no-deprecated\n\t\tReactDOM.unmountComponentAtNode(errorContainer)\n\n\t} else {\n\t\terrorContainer = document.createElement('div')\n\t\terrorContainer.id = errorElementId\n\t\tdocument.body.appendChild(errorContainer)\n\t}\n\n\treturn errorContainer\n}\n\nconst devErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst errorBus = new ErrorBus()\n\n\t;(window as any).Buffer = Buffer\n\twindow.addEventListener('error', e => {\n\t\tif (e.message.startsWith('ResizeObserver')) {\n\t\t\t// Apparently, this can be ignored: https://stackoverflow.com/questions/49384120/resizeobserver-loop-limit-exceeded\n\t\t\treturn\n\t\t}\n\t\terrorBus.handleError('Unhandled error', e.error)\n\t})\n\n\twindow.addEventListener('unhandledrejection', e => errorBus.handleError('Unhandled promise rejection', e.reason))\n\n\tconst origOnError = console.error\n\tconsole.error = (...args) => {\n\t\torigOnError(...args)\n\t\tfor (const arg of args) {\n\t\t\tif (arg instanceof Error) {\n\t\t\t\terrorBus.handleError('Logged error', arg)\n\t\t\t}\n\t\t}\n\t}\n\trenderer(getErrorContainer(), <DevErrorManager bus={errorBus} />, () => {})\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => errorBus.handleError('Recoverable React error', e))\n\t\t} catch (e) {\n\t\t\terrorBus.handleError('Entrypoint crash', e)\n\t\t}\n\t}\n}\n\ntype TryRun = <T>(cb: (onRecoverableError: (e: any) => void) => T | Promise<T>) => void\nconst prodErrorHandler = (renderer: ErrorReactRenderer): TryRun => {\n\tconst renderError = () => {\n\t\trenderer(getErrorContainer(), <h1>Fatal error</h1>, () => {})\n\t}\n\n\twindow.addEventListener('error', renderError)\n\twindow.addEventListener('unhandledrejection', renderError)\n\n\treturn async cb => {\n\t\ttry {\n\t\t\tawait cb(e => {\n\t\t\t\tconsole.warn(e)\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error(e)\n\t\t\trenderError()\n\t\t}\n\t}\n}\n\n\nexport const createErrorHandler = (renderer: ErrorReactRenderer) => {\n\tif (import.meta.env.DEV) {\n\t\treturn devErrorHandler(renderer)\n\t} else {\n\t\treturn prodErrorHandler(renderer)\n\t}\n}\n"],"names":[],"mappings":";;AAOA,MAAM,oBAAoB,MAAM;AAC/B,QAAM,iBAAiB;AACnB,MAAA,iBAAiB,SAAS,eAAe,cAAc;AAE3D,MAAI,gBAAgB;AAEnB,aAAS,uBAAuB,cAAc;AAAA,EAAA,OAExC;AACW,qBAAA,SAAS,cAAc,KAAK;AAC7C,mBAAe,KAAK;AACX,aAAA,KAAK,YAAY,cAAc;AAAA,EACzC;AAEO,SAAA;AACR;AAqCA,MAAM,mBAAmB,CAAC,aAAyC;AAClE,QAAM,cAAc,MAAM;AAChB,aAAA,qBAAsB,oBAAA,MAAG,EAAA,UAAA,cAAW,CAAA,GAAO,MAAM;AAAA,IAAA,CAAE;AAAA,EAAA;AAGtD,SAAA,iBAAiB,SAAS,WAAW;AACrC,SAAA,iBAAiB,sBAAsB,WAAW;AAEzD,SAAO,OAAM,OAAM;AACd,QAAA;AACG,YAAA,GAAG,CAAK,MAAA;AACb,gBAAQ,KAAK,CAAC;AAAA,MAAA,CACd;AAAA,aACO,GAAG;AACX,cAAQ,MAAM,CAAC;AACH;IACb;AAAA,EAAA;AAEF;AAGa,MAAA,qBAAqB,CAAC,aAAiC;AAG5D;AACN,WAAO,iBAAiB,QAAQ;AAAA,EACjC;AACD;"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (let key of __getOwnPropNames(from))
11
+ if (!__hasOwnProp.call(to, key) && key !== except)
12
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
13
+ }
14
+ return to;
15
+ };
16
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
17
+ // If the importer is in node compatibility mode or this is not an ESM
18
+ // file that has been converted to a CommonJS file using a Babel-
19
+ // compatible transform (i.e. "__esModule" has not been set), then set
20
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
+ mod
23
+ ));
24
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
25
+ const react = require("react");
26
+ const parseStacktrace = async (e) => {
27
+ const StackTracey = (await import("stacktracey")).default;
28
+ return (await new StackTracey(e).withSourcesAsync()).items.map((it) => ({
29
+ filename: it.fileShort,
30
+ line: it.line,
31
+ callee: it.callee,
32
+ thirdParty: it.thirdParty,
33
+ sourceCodeLines: it.sourceFile?.lines
34
+ }));
35
+ };
36
+ const createInitialError = (e) => ({
37
+ error: e,
38
+ cause: e instanceof Error && "cause" in e && e.cause !== void 0 ? createInitialError(e.cause) : void 0
39
+ });
40
+ const useProcessedError = (e) => {
41
+ const [error, setError] = react.useState(() => createInitialError(e));
42
+ react.useEffect(() => {
43
+ setError(createInitialError(e));
44
+ if (!(e instanceof Error)) {
45
+ return;
46
+ }
47
+ const createErrorWithStackTrace = async (e2) => {
48
+ return {
49
+ error: e2,
50
+ parsedStackStrace: e2 instanceof Error ? await parseStacktrace(e2) : void 0,
51
+ cause: e2 instanceof Error && "cause" in e2 && e2.cause !== void 0 ? await createErrorWithStackTrace(e2.cause) : void 0
52
+ };
53
+ };
54
+ (async () => {
55
+ setError(await createErrorWithStackTrace(e));
56
+ })();
57
+ }, [e]);
58
+ return error;
59
+ };
60
+ exports.parseStacktrace = parseStacktrace;
61
+ exports.useProcessedError = useProcessedError;
62
+ //# sourceMappingURL=useParsedStacktrace.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParsedStacktrace.cjs","sources":["../../../src/hooks/useParsedStacktrace.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { ErrorType, ProcessedError } from '../ui/DevError'\n\nexport const parseStacktrace = async (e: Error) => {\n\tconst StackTracey = (await import('stacktracey')).default\n\treturn (await new StackTracey(e).withSourcesAsync()).items.map(it => ({\n\t\tfilename: it.fileShort,\n\t\tline: it.line,\n\t\tcallee: it.callee,\n\t\tthirdParty: it.thirdParty,\n\t\tsourceCodeLines: it.sourceFile?.lines,\n\t}))\n}\n\nconst createInitialError = (e: ErrorType): ProcessedError => ({\n\terror: e,\n\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? createInitialError((e as any).cause) : undefined,\n})\n\nexport const useProcessedError = (e: ErrorType): ProcessedError => {\n\tconst [error, setError] = useState<ProcessedError>(() => createInitialError(e))\n\tuseEffect(() => {\n\t\tsetError(createInitialError(e))\n\t\tif (!(e instanceof Error)) {\n\t\t\treturn\n\t\t}\n\t\tconst createErrorWithStackTrace = async (e: ErrorType): Promise<ProcessedError> => {\n\t\t\treturn {\n\t\t\t\terror: e,\n\t\t\t\tparsedStackStrace: e instanceof Error ? await parseStacktrace(e) : undefined,\n\t\t\t\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? await createErrorWithStackTrace((e as any).cause) : undefined,\n\t\t\t}\n\t\t}\n\t\t(async () => {\n\t\t\tsetError(await createErrorWithStackTrace(e))\n\t\t})()\n\t}, [e])\n\n\treturn error\n}\n"],"names":["useState","useEffect","e"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAGa,MAAA,kBAAkB,OAAO,MAAa;AAClD,QAAM,eAAe,MAAM,OAAO,aAAa,GAAG;AAC1C,UAAA,MAAM,IAAI,YAAY,CAAC,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAO,QAAA;AAAA,IACrE,UAAU,GAAG;AAAA,IACb,MAAM,GAAG;AAAA,IACT,QAAQ,GAAG;AAAA,IACX,YAAY,GAAG;AAAA,IACf,iBAAiB,GAAG,YAAY;AAAA,EAC/B,EAAA;AACH;AAEA,MAAM,qBAAqB,CAAC,OAAkC;AAAA,EAC7D,OAAO;AAAA,EACP,OAAO,aAAa,SAAS,WAAW,KAAM,EAAU,UAAU,SAAY,mBAAoB,EAAU,KAAK,IAAI;AACtH;AAEa,MAAA,oBAAoB,CAAC,MAAiC;AAC5D,QAAA,CAAC,OAAO,QAAQ,IAAIA,eAAyB,MAAM,mBAAmB,CAAC,CAAC;AAC9EC,QAAAA,UAAU,MAAM;AACN,aAAA,mBAAmB,CAAC,CAAC;AAC1B,QAAA,EAAE,aAAa,QAAQ;AAC1B;AAAA,IACD;AACM,UAAA,4BAA4B,OAAOC,OAA0C;AAC3E,aAAA;AAAA,QACN,OAAOA;AAAAA,QACP,mBAAmBA,cAAa,QAAQ,MAAM,gBAAgBA,EAAC,IAAI;AAAA,QACnE,OAAOA,cAAa,SAAS,WAAWA,MAAMA,GAAU,UAAU,SAAY,MAAM,0BAA2BA,GAAU,KAAK,IAAI;AAAA,MAAA;AAAA,IACnI;AAED,KAAC,YAAY;AACH,eAAA,MAAM,0BAA0B,CAAC,CAAC;AAAA,IAAA;EACzC,GACD,CAAC,CAAC,CAAC;AAEC,SAAA;AACR;;;"}
@@ -0,0 +1,40 @@
1
+ import { useState, useEffect } from "react";
2
+ const parseStacktrace = async (e) => {
3
+ const StackTracey = (await import("stacktracey")).default;
4
+ return (await new StackTracey(e).withSourcesAsync()).items.map((it) => ({
5
+ filename: it.fileShort,
6
+ line: it.line,
7
+ callee: it.callee,
8
+ thirdParty: it.thirdParty,
9
+ sourceCodeLines: it.sourceFile?.lines
10
+ }));
11
+ };
12
+ const createInitialError = (e) => ({
13
+ error: e,
14
+ cause: e instanceof Error && "cause" in e && e.cause !== void 0 ? createInitialError(e.cause) : void 0
15
+ });
16
+ const useProcessedError = (e) => {
17
+ const [error, setError] = useState(() => createInitialError(e));
18
+ useEffect(() => {
19
+ setError(createInitialError(e));
20
+ if (!(e instanceof Error)) {
21
+ return;
22
+ }
23
+ const createErrorWithStackTrace = async (e2) => {
24
+ return {
25
+ error: e2,
26
+ parsedStackStrace: e2 instanceof Error ? await parseStacktrace(e2) : void 0,
27
+ cause: e2 instanceof Error && "cause" in e2 && e2.cause !== void 0 ? await createErrorWithStackTrace(e2.cause) : void 0
28
+ };
29
+ };
30
+ (async () => {
31
+ setError(await createErrorWithStackTrace(e));
32
+ })();
33
+ }, [e]);
34
+ return error;
35
+ };
36
+ export {
37
+ parseStacktrace,
38
+ useProcessedError
39
+ };
40
+ //# sourceMappingURL=useParsedStacktrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useParsedStacktrace.js","sources":["../../../src/hooks/useParsedStacktrace.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\nimport { ErrorType, ProcessedError } from '../ui/DevError'\n\nexport const parseStacktrace = async (e: Error) => {\n\tconst StackTracey = (await import('stacktracey')).default\n\treturn (await new StackTracey(e).withSourcesAsync()).items.map(it => ({\n\t\tfilename: it.fileShort,\n\t\tline: it.line,\n\t\tcallee: it.callee,\n\t\tthirdParty: it.thirdParty,\n\t\tsourceCodeLines: it.sourceFile?.lines,\n\t}))\n}\n\nconst createInitialError = (e: ErrorType): ProcessedError => ({\n\terror: e,\n\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? createInitialError((e as any).cause) : undefined,\n})\n\nexport const useProcessedError = (e: ErrorType): ProcessedError => {\n\tconst [error, setError] = useState<ProcessedError>(() => createInitialError(e))\n\tuseEffect(() => {\n\t\tsetError(createInitialError(e))\n\t\tif (!(e instanceof Error)) {\n\t\t\treturn\n\t\t}\n\t\tconst createErrorWithStackTrace = async (e: ErrorType): Promise<ProcessedError> => {\n\t\t\treturn {\n\t\t\t\terror: e,\n\t\t\t\tparsedStackStrace: e instanceof Error ? await parseStacktrace(e) : undefined,\n\t\t\t\tcause: e instanceof Error && 'cause' in e && (e as any).cause !== undefined ? await createErrorWithStackTrace((e as any).cause) : undefined,\n\t\t\t}\n\t\t}\n\t\t(async () => {\n\t\t\tsetError(await createErrorWithStackTrace(e))\n\t\t})()\n\t}, [e])\n\n\treturn error\n}\n"],"names":["e"],"mappings":";AAGa,MAAA,kBAAkB,OAAO,MAAa;AAClD,QAAM,eAAe,MAAM,OAAO,aAAa,GAAG;AAC1C,UAAA,MAAM,IAAI,YAAY,CAAC,EAAE,iBAAiB,GAAG,MAAM,IAAI,CAAO,QAAA;AAAA,IACrE,UAAU,GAAG;AAAA,IACb,MAAM,GAAG;AAAA,IACT,QAAQ,GAAG;AAAA,IACX,YAAY,GAAG;AAAA,IACf,iBAAiB,GAAG,YAAY;AAAA,EAC/B,EAAA;AACH;AAEA,MAAM,qBAAqB,CAAC,OAAkC;AAAA,EAC7D,OAAO;AAAA,EACP,OAAO,aAAa,SAAS,WAAW,KAAM,EAAU,UAAU,SAAY,mBAAoB,EAAU,KAAK,IAAI;AACtH;AAEa,MAAA,oBAAoB,CAAC,MAAiC;AAC5D,QAAA,CAAC,OAAO,QAAQ,IAAI,SAAyB,MAAM,mBAAmB,CAAC,CAAC;AAC9E,YAAU,MAAM;AACN,aAAA,mBAAmB,CAAC,CAAC;AAC1B,QAAA,EAAE,aAAa,QAAQ;AAC1B;AAAA,IACD;AACM,UAAA,4BAA4B,OAAOA,OAA0C;AAC3E,aAAA;AAAA,QACN,OAAOA;AAAAA,QACP,mBAAmBA,cAAa,QAAQ,MAAM,gBAAgBA,EAAC,IAAI;AAAA,QACnE,OAAOA,cAAa,SAAS,WAAWA,MAAMA,GAAU,UAAU,SAAY,MAAM,0BAA2BA,GAAU,KAAK,IAAI;AAAA,MAAA;AAAA,IACnI;AAED,KAAC,YAAY;AACH,eAAA,MAAM,0BAA0B,CAAC,CAAC;AAAA,IAAA;EACzC,GACD,CAAC,CAAC,CAAC;AAEC,SAAA;AACR;"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const errorHandling = require("./errorHandling.cjs");
4
+ const useParsedStacktrace = require("./hooks/useParsedStacktrace.cjs");
5
+ const DevBar = require("./ui/DevBar/DevBar.cjs");
6
+ const DevError = require("./ui/DevError/DevError.cjs");
7
+ const DevErrorList = require("./ui/DevError/DevErrorList.cjs");
8
+ const DevErrorBadge = require("./ui/DevError/DevErrorBadge.cjs");
9
+ exports.createErrorHandler = errorHandling.createErrorHandler;
10
+ exports.parseStacktrace = useParsedStacktrace.parseStacktrace;
11
+ exports.useProcessedError = useParsedStacktrace.useProcessedError;
12
+ exports.DevBar = DevBar.DevBar;
13
+ exports.DevPanel = DevBar.DevPanel;
14
+ exports.DevError = DevError.DevError;
15
+ exports.DevErrorList = DevErrorList.DevErrorList;
16
+ exports.DevErrorBadge = DevErrorBadge.DevErrorBadge;
17
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;"}
@@ -0,0 +1,17 @@
1
+ import { createErrorHandler } from "./errorHandling.js";
2
+ import { parseStacktrace, useProcessedError } from "./hooks/useParsedStacktrace.js";
3
+ import { DevBar, DevPanel } from "./ui/DevBar/DevBar.js";
4
+ import { DevError } from "./ui/DevError/DevError.js";
5
+ import { DevErrorList } from "./ui/DevError/DevErrorList.js";
6
+ import { DevErrorBadge } from "./ui/DevError/DevErrorBadge.js";
7
+ export {
8
+ DevBar,
9
+ DevError,
10
+ DevErrorBadge,
11
+ DevErrorList,
12
+ DevPanel,
13
+ createErrorHandler,
14
+ parseStacktrace,
15
+ useProcessedError
16
+ };
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactUtils = require("@contember/react-utils");
5
+ const utilities = require("@contember/utilities");
6
+ const react = require("react");
7
+ const DevBar = ({
8
+ breakpoint = 768,
9
+ children,
10
+ brand
11
+ }) => {
12
+ const className = reactUtils.useClassNameFactory("devBar");
13
+ const [expanded, setExpanded] = react.useState(true);
14
+ const isSmallScreen = reactUtils.useWindowSize().width < breakpoint;
15
+ const toggleButtonRef = react.useRef(null);
16
+ const handleToggle = reactUtils.useReferentiallyStableCallback(() => {
17
+ setExpanded((expanded2) => !expanded2);
18
+ });
19
+ react.useEffect(() => {
20
+ function handleKeyDown(event) {
21
+ if (event.code === "KeyJ" && (event.ctrlKey || event.metaKey)) {
22
+ event.preventDefault();
23
+ event.stopPropagation();
24
+ if (expanded) {
25
+ setExpanded(false);
26
+ toggleButtonRef.current?.blur();
27
+ } else {
28
+ if (toggleButtonRef.current !== document.activeElement) {
29
+ toggleButtonRef.current?.focus();
30
+ } else {
31
+ toggleButtonRef.current?.blur();
32
+ }
33
+ }
34
+ }
35
+ }
36
+ document.addEventListener("keydown", handleKeyDown);
37
+ return () => document.removeEventListener("keydown", handleKeyDown);
38
+ }, [expanded, handleToggle]);
39
+ const devBarContentRef = react.useRef(null);
40
+ reactUtils.useOnElementClickOutsideCallback(devBarContentRef, () => {
41
+ if (expanded) {
42
+ setExpanded(false);
43
+ toggleButtonRef.current?.blur();
44
+ }
45
+ });
46
+ const id = `dev-bar-panel${reactUtils.useId()}`;
47
+ return /* @__PURE__ */ jsxRuntime.jsxs(
48
+ "section",
49
+ {
50
+ "data-transparent": true,
51
+ "data-overrides-lucide-icons": true,
52
+ "data-expanded": utilities.dataAttribute(expanded),
53
+ "data-small-screen": utilities.dataAttribute(isSmallScreen),
54
+ className: className(null),
55
+ onKeyDown: (event) => {
56
+ if (event.code === "Escape") {
57
+ event.preventDefault();
58
+ event.stopPropagation();
59
+ if (expanded) {
60
+ setExpanded(false);
61
+ } else if (document.activeElement && document.activeElement instanceof HTMLElement) {
62
+ document.activeElement.blur();
63
+ }
64
+ }
65
+ },
66
+ children: [
67
+ /* @__PURE__ */ jsxRuntime.jsx("style", { children: `svg { pointer-events: none }` }),
68
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { ref: devBarContentRef, className: className("content"), children: [
69
+ /* @__PURE__ */ jsxRuntime.jsxs(
70
+ "div",
71
+ {
72
+ "data-expanded": utilities.dataAttribute(expanded),
73
+ id,
74
+ role: "dialog",
75
+ style: { display: "contents" },
76
+ children: [
77
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: className("brand"), children: brand }),
78
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: className("panels"), children })
79
+ ]
80
+ }
81
+ ),
82
+ /* @__PURE__ */ jsxRuntime.jsx(
83
+ "button",
84
+ {
85
+ ref: toggleButtonRef,
86
+ id: "dev-bar-toggle-button",
87
+ "aria-label": "Toggle Contember Developer Toolbar",
88
+ "aria-controls": id,
89
+ "aria-expanded": expanded,
90
+ className: className("close"),
91
+ onClick: handleToggle,
92
+ tabIndex: 0,
93
+ children: expanded ? "🗙" : "ᐸ"
94
+ }
95
+ )
96
+ ] })
97
+ ]
98
+ }
99
+ );
100
+ };
101
+ const DevPanel = ({ heading, icon, children, preview }) => {
102
+ const id = `cui-devBar-panel-${reactUtils.useId()}`;
103
+ const className = reactUtils.useClassNameFactory("devBar");
104
+ const [expanded, setExpanded] = react.useState(false);
105
+ const mouseEnterTimeStampRef = react.useRef(void 0);
106
+ const devPanelRef = react.useRef(null);
107
+ reactUtils.useOnElementMouseEnterDelayedCallback(devPanelRef, reactUtils.useReferentiallyStableCallback(({ type }) => {
108
+ if (type === "mouseenter") {
109
+ mouseEnterTimeStampRef.current = Date.now() + 300;
110
+ setExpanded(true);
111
+ }
112
+ }));
113
+ return /* @__PURE__ */ jsxRuntime.jsxs(
114
+ "div",
115
+ {
116
+ ref: devPanelRef,
117
+ "data-expanded": utilities.dataAttribute(expanded),
118
+ className: className("trigger"),
119
+ onMouseLeave: reactUtils.useReferentiallyStableCallback(() => {
120
+ setExpanded(false);
121
+ }),
122
+ onKeyDown: reactUtils.useReferentiallyStableCallback((event) => {
123
+ if (expanded && event.code === "Escape") {
124
+ event.preventDefault();
125
+ event.stopPropagation();
126
+ setExpanded(false);
127
+ }
128
+ }),
129
+ children: [
130
+ /* @__PURE__ */ jsxRuntime.jsxs(
131
+ "button",
132
+ {
133
+ tabIndex: 0,
134
+ "aria-haspopup": "dialog",
135
+ "aria-controls": id,
136
+ "aria-expanded": expanded,
137
+ className: className("trigger-label"),
138
+ onClick: reactUtils.useReferentiallyStableCallback(() => {
139
+ if (mouseEnterTimeStampRef.current && Date.now() < mouseEnterTimeStampRef.current) {
140
+ return;
141
+ } else {
142
+ setExpanded((expanded2) => !expanded2);
143
+ mouseEnterTimeStampRef.current = void 0;
144
+ }
145
+ }),
146
+ children: [
147
+ icon,
148
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: className("trigger-label-text"), children: preview ?? heading })
149
+ ]
150
+ }
151
+ ),
152
+ expanded && /* @__PURE__ */ jsxRuntime.jsx("div", { tabIndex: 0, id, role: "dialog", className: className("panel", "dangerously-remove-native-focus-outline"), children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: className("panel-content", "native-focus-outline-handler"), children: [
153
+ /* @__PURE__ */ jsxRuntime.jsx("h2", { className: "h4", children: heading }),
154
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: className("panel-body"), children })
155
+ ] }) })
156
+ ]
157
+ }
158
+ );
159
+ };
160
+ exports.DevBar = DevBar;
161
+ exports.DevPanel = DevPanel;
162
+ //# sourceMappingURL=DevBar.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DevBar.cjs","sources":["../../../../src/ui/DevBar/DevBar.tsx"],"sourcesContent":["import {\n\tuseClassNameFactory,\n\tuseId,\n\tuseOnElementClickOutsideCallback,\n\tuseOnElementMouseEnterDelayedCallback,\n\tuseReferentiallyStableCallback,\n\tuseWindowSize,\n} from '@contember/react-utils'\nimport { dataAttribute } from '@contember/utilities'\nimport { PropsWithChildren, ReactNode, useEffect, useRef, useState } from 'react'\n\nexport const DevBar = ({\n\tbreakpoint = 768,\n\tchildren,\n\tbrand,\n}: PropsWithChildren<{\n\tbrand?: ReactNode;\n\tbreakpoint?: number;\n}>) => {\n\tconst className = useClassNameFactory('devBar')\n\tconst [expanded, setExpanded] = useState(true)\n\tconst isSmallScreen = useWindowSize().width < breakpoint\n\tconst toggleButtonRef = useRef<HTMLButtonElement>(null)\n\n\tconst handleToggle = useReferentiallyStableCallback(() => {\n\t\tsetExpanded(expanded => !expanded)\n\t})\n\n\tuseEffect(() => {\n\t\tfunction handleKeyDown(event: KeyboardEvent) {\n\t\t\tif (event.code === 'KeyJ' && (event.ctrlKey || event.metaKey)) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t\tif (expanded) {\n\t\t\t\t\tsetExpanded(false)\n\t\t\t\t\ttoggleButtonRef.current?.blur()\n\t\t\t\t} else {\n\t\t\t\t\tif (toggleButtonRef.current !== document.activeElement) {\n\t\t\t\t\t\ttoggleButtonRef.current?.focus()\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttoggleButtonRef.current?.blur()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('keydown', handleKeyDown)\n\t\treturn () => document.removeEventListener('keydown', handleKeyDown)\n\t}, [expanded, handleToggle])\n\n\tconst devBarContentRef = useRef<HTMLDivElement>(null)\n\n\tuseOnElementClickOutsideCallback(devBarContentRef, () => {\n\t\tif (expanded) {\n\t\t\tsetExpanded(false)\n\t\t\ttoggleButtonRef.current?.blur()\n\t\t}\n\t})\n\n\tconst id = `dev-bar-panel${useId()}`\n\n\treturn (\n\t\t<section\n\t\t\tdata-transparent\n\t\t\tdata-overrides-lucide-icons\n\t\t\tdata-expanded={dataAttribute(expanded)}\n\t\t\tdata-small-screen={dataAttribute(isSmallScreen)}\n\t\t\tclassName={className(null)}\n\t\t\tonKeyDown={event => {\n\t\t\t\tif (event.code === 'Escape') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\n\t\t\t\t\tif (expanded) {\n\t\t\t\t\t\tsetExpanded(false)\n\t\t\t\t\t} else if (document.activeElement && document.activeElement instanceof HTMLElement) {\n\t\t\t\t\t\tdocument.activeElement.blur()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<style>{`svg { pointer-events: none }`}</style>\n\t\t\t<div ref={devBarContentRef} className={className('content')}>\n\t\t\t\t<div\n\t\t\t\t\tdata-expanded={dataAttribute(expanded)}\n\t\t\t\t\tid={id}\n\t\t\t\t\trole=\"dialog\"\n\t\t\t\t\tstyle={{ display: 'contents' }}\n\t\t\t\t>\n\t\t\t\t\t<div className={className('brand')}>\n\t\t\t\t\t\t{brand}\n\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div className={className('panels')}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</div>\n\n\t\t\t\t</div>\n\n\t\t\t\t<button\n\t\t\t\t\tref={toggleButtonRef}\n\t\t\t\t\tid=\"dev-bar-toggle-button\"\n\t\t\t\t\taria-label=\"Toggle Contember Developer Toolbar\"\n\t\t\t\t\taria-controls={id}\n\t\t\t\t\taria-expanded={expanded}\n\t\t\t\t\tclassName={className('close')}\n\t\t\t\t\tonClick={handleToggle}\n\t\t\t\t\ttabIndex={0}\n\t\t\t\t>\n\t\t\t\t\t{expanded ? '🗙' : 'ᐸ'}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</section>\n\t)\n}\n\nexport const DevPanel = ({ heading, icon, children, preview }: {\n\ticon: ReactNode;\n\theading: ReactNode,\n\tchildren: ReactNode,\n\tpreview?: ReactNode\n}) => {\n\tconst id = `cui-devBar-panel-${useId()}`\n\tconst className = useClassNameFactory('devBar')\n\tconst [expanded, setExpanded] = useState(false)\n\tconst mouseEnterTimeStampRef = useRef<ReturnType<typeof Date.now> | undefined>(undefined)\n\n\tconst devPanelRef = useRef<HTMLDivElement>(null)\n\n\tuseOnElementMouseEnterDelayedCallback(devPanelRef, useReferentiallyStableCallback(({ type }) => {\n\t\tif (type === 'mouseenter') {\n\t\t\tmouseEnterTimeStampRef.current = Date.now() + 300\n\t\t\tsetExpanded(true)\n\t\t}\n\t}))\n\n\treturn (\n\t\t<div\n\t\t\tref={devPanelRef}\n\t\t\tdata-expanded={dataAttribute(expanded)}\n\t\t\tclassName={className('trigger')}\n\t\t\tonMouseLeave={useReferentiallyStableCallback(() => {\n\t\t\t\tsetExpanded(false)\n\t\t\t})}\n\t\t\tonKeyDown={useReferentiallyStableCallback(event => {\n\t\t\t\tif (expanded && event.code === 'Escape') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\tsetExpanded(false)\n\t\t\t\t}\n\t\t\t})}\n\t\t>\n\t\t\t<button\n\t\t\t\ttabIndex={0}\n\t\t\t\taria-haspopup=\"dialog\"\n\t\t\t\taria-controls={id}\n\t\t\t\taria-expanded={expanded}\n\t\t\t\tclassName={className('trigger-label')}\n\t\t\t\tonClick={useReferentiallyStableCallback(() => {\n\t\t\t\t\tif (mouseEnterTimeStampRef.current && Date.now() < mouseEnterTimeStampRef.current) {\n\t\t\t\t\t\treturn\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetExpanded(expanded => !expanded)\n\t\t\t\t\t\tmouseEnterTimeStampRef.current = undefined\n\t\t\t\t\t}\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t\t<span className={className('trigger-label-text')}>{preview ?? heading}</span>\n\t\t\t</button>\n\t\t\t{expanded && (\n\t\t\t\t<div tabIndex={0} id={id} role=\"dialog\" className={className('panel', 'dangerously-remove-native-focus-outline')}>\n\t\t\t\t\t<div className={className('panel-content', 'native-focus-outline-handler')}>\n\t\t\t\t\t\t<h2 className=\"h4\">\n\t\t\t\t\t\t\t{heading}\n\t\t\t\t\t\t</h2>\n\t\t\t\t\t\t<div className={className('panel-body')}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["useClassNameFactory","useState","useWindowSize","useRef","useReferentiallyStableCallback","expanded","useEffect","useOnElementClickOutsideCallback","useId","jsxs","dataAttribute","jsx","useOnElementMouseEnterDelayedCallback"],"mappings":"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"}