@genesislcap/foundation-react-utils 15.50.3 → 15.51.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +55 -0
- package/dist/custom-elements.json +117 -0
- package/dist/dts/error-boundary/error-boundary-styles.d.ts +6 -0
- package/dist/dts/error-boundary/error-boundary-styles.d.ts.map +1 -0
- package/dist/dts/error-boundary/error-boundary.d.ts +105 -0
- package/dist/dts/error-boundary/error-boundary.d.ts.map +1 -0
- package/dist/dts/error-boundary/index.d.ts +3 -0
- package/dist/dts/error-boundary/index.d.ts.map +1 -0
- package/dist/dts/index.d.ts +3 -0
- package/dist/dts/index.d.ts.map +1 -1
- package/dist/esm/error-boundary/error-boundary-styles.js +149 -0
- package/dist/esm/error-boundary/error-boundary.js +217 -0
- package/dist/esm/error-boundary/index.js +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/foundation-react-utils.api.json +452 -0
- package/dist/foundation-react-utils.d.ts +115 -0
- package/package.json +12 -12
|
@@ -172,6 +172,87 @@
|
|
|
172
172
|
"name": "",
|
|
173
173
|
"preserveMemberOrder": false,
|
|
174
174
|
"members": [
|
|
175
|
+
{
|
|
176
|
+
"kind": "Variable",
|
|
177
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!AppErrorBoundary:var",
|
|
178
|
+
"docComment": "/**\n * Top-level error boundary. Wrap the whole app in one instance; use {@link TileErrorBoundary} inside it.\n *\n * @remarks\n *\n * Renders a fallback with a reference ID, copyable diagnostics and a Retry button that remounts the children. Each caught error is passed to `onError`. Without one, it's logged through the {@link ERROR_BOUNDARY_LOGGER_NAME} logger instead, which a global log reporter receives. Pair with {@link onCaughtError} on the root so React doesn't log the error a second time.\n *\n * @example\n * ```tsx\n * createRoot(el, { onCaughtError }).render(\n * <AppErrorBoundary onError={({ error, ...extra }) => Sentry.captureException(error, { extra })}>\n * <App />\n * </AppErrorBoundary>,\n * );\n * ```\n *\n * @public\n */\n",
|
|
179
|
+
"excerptTokens": [
|
|
180
|
+
{
|
|
181
|
+
"kind": "Content",
|
|
182
|
+
"text": "AppErrorBoundary: "
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
"kind": "Reference",
|
|
186
|
+
"text": "FC",
|
|
187
|
+
"canonicalReference": "@types/react!React.FC:type"
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
"kind": "Content",
|
|
191
|
+
"text": "<"
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"kind": "Reference",
|
|
195
|
+
"text": "AppErrorBoundaryProps",
|
|
196
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!AppErrorBoundaryProps:type"
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"kind": "Content",
|
|
200
|
+
"text": ">"
|
|
201
|
+
}
|
|
202
|
+
],
|
|
203
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
204
|
+
"isReadonly": true,
|
|
205
|
+
"releaseTag": "Public",
|
|
206
|
+
"name": "AppErrorBoundary",
|
|
207
|
+
"variableTypeTokenRange": {
|
|
208
|
+
"startIndex": 1,
|
|
209
|
+
"endIndex": 5
|
|
210
|
+
}
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
"kind": "TypeAlias",
|
|
214
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!AppErrorBoundaryProps:type",
|
|
215
|
+
"docComment": "/**\n * Props for {@link AppErrorBoundary}.\n *\n * @public\n */\n",
|
|
216
|
+
"excerptTokens": [
|
|
217
|
+
{
|
|
218
|
+
"kind": "Content",
|
|
219
|
+
"text": "export type AppErrorBoundaryProps = "
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
"kind": "Content",
|
|
223
|
+
"text": "{\n onError?: "
|
|
224
|
+
},
|
|
225
|
+
{
|
|
226
|
+
"kind": "Reference",
|
|
227
|
+
"text": "ErrorBoundaryErrorHandler",
|
|
228
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryErrorHandler:type"
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"kind": "Content",
|
|
232
|
+
"text": ";\n children: "
|
|
233
|
+
},
|
|
234
|
+
{
|
|
235
|
+
"kind": "Reference",
|
|
236
|
+
"text": "ReactNode",
|
|
237
|
+
"canonicalReference": "@types/react!React.ReactNode:type"
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
"kind": "Content",
|
|
241
|
+
"text": ";\n}"
|
|
242
|
+
},
|
|
243
|
+
{
|
|
244
|
+
"kind": "Content",
|
|
245
|
+
"text": ";"
|
|
246
|
+
}
|
|
247
|
+
],
|
|
248
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
249
|
+
"releaseTag": "Public",
|
|
250
|
+
"name": "AppErrorBoundaryProps",
|
|
251
|
+
"typeTokenRange": {
|
|
252
|
+
"startIndex": 1,
|
|
253
|
+
"endIndex": 6
|
|
254
|
+
}
|
|
255
|
+
},
|
|
175
256
|
{
|
|
176
257
|
"kind": "Function",
|
|
177
258
|
"canonicalReference": "@genesislcap/foundation-react-utils!createGridProCellPortals:function(1)",
|
|
@@ -416,6 +497,138 @@
|
|
|
416
497
|
],
|
|
417
498
|
"name": "createReactRenderer"
|
|
418
499
|
},
|
|
500
|
+
{
|
|
501
|
+
"kind": "Variable",
|
|
502
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ERROR_BOUNDARY_LOGGER_NAME:var",
|
|
503
|
+
"docComment": "/**\n * Name of the logger the error boundaries log through. They log a caught error, with a message naming its scope, title, tile registration and reference ID and giving its component stack, only when no `onError` handler is set or when the handler throws. `setupErrorMonitoring` from foundation-utils reports these logs, so apps using it don't need an `onError`.\n *\n * @public\n */\n",
|
|
504
|
+
"excerptTokens": [
|
|
505
|
+
{
|
|
506
|
+
"kind": "Content",
|
|
507
|
+
"text": "ERROR_BOUNDARY_LOGGER_NAME = "
|
|
508
|
+
},
|
|
509
|
+
{
|
|
510
|
+
"kind": "Content",
|
|
511
|
+
"text": "\"foundation-react-utils:error-boundary\""
|
|
512
|
+
}
|
|
513
|
+
],
|
|
514
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
515
|
+
"initializerTokenRange": {
|
|
516
|
+
"startIndex": 1,
|
|
517
|
+
"endIndex": 2
|
|
518
|
+
},
|
|
519
|
+
"isReadonly": true,
|
|
520
|
+
"releaseTag": "Public",
|
|
521
|
+
"name": "ERROR_BOUNDARY_LOGGER_NAME",
|
|
522
|
+
"variableTypeTokenRange": {
|
|
523
|
+
"startIndex": 0,
|
|
524
|
+
"endIndex": 0
|
|
525
|
+
}
|
|
526
|
+
},
|
|
527
|
+
{
|
|
528
|
+
"kind": "TypeAlias",
|
|
529
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryErrorHandler:type",
|
|
530
|
+
"docComment": "/**\n * Callback that receives every error a boundary catches, for example to send it to an error-monitoring service.\n *\n * @public\n */\n",
|
|
531
|
+
"excerptTokens": [
|
|
532
|
+
{
|
|
533
|
+
"kind": "Content",
|
|
534
|
+
"text": "export type ErrorBoundaryErrorHandler = "
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"kind": "Content",
|
|
538
|
+
"text": "(report: "
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"kind": "Reference",
|
|
542
|
+
"text": "ErrorBoundaryReport",
|
|
543
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryReport:type"
|
|
544
|
+
},
|
|
545
|
+
{
|
|
546
|
+
"kind": "Content",
|
|
547
|
+
"text": ") => void"
|
|
548
|
+
},
|
|
549
|
+
{
|
|
550
|
+
"kind": "Content",
|
|
551
|
+
"text": ";"
|
|
552
|
+
}
|
|
553
|
+
],
|
|
554
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
555
|
+
"releaseTag": "Public",
|
|
556
|
+
"name": "ErrorBoundaryErrorHandler",
|
|
557
|
+
"typeTokenRange": {
|
|
558
|
+
"startIndex": 1,
|
|
559
|
+
"endIndex": 4
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
{
|
|
563
|
+
"kind": "TypeAlias",
|
|
564
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryReport:type",
|
|
565
|
+
"docComment": "/**\n * What an error boundary passes to `onError` when it catches an error.\n *\n * @public\n */\n",
|
|
566
|
+
"excerptTokens": [
|
|
567
|
+
{
|
|
568
|
+
"kind": "Content",
|
|
569
|
+
"text": "export type ErrorBoundaryReport = "
|
|
570
|
+
},
|
|
571
|
+
{
|
|
572
|
+
"kind": "Content",
|
|
573
|
+
"text": "{\n error: "
|
|
574
|
+
},
|
|
575
|
+
{
|
|
576
|
+
"kind": "Reference",
|
|
577
|
+
"text": "Error",
|
|
578
|
+
"canonicalReference": "!Error:interface"
|
|
579
|
+
},
|
|
580
|
+
{
|
|
581
|
+
"kind": "Content",
|
|
582
|
+
"text": ";\n componentStack: string;\n referenceId: string;\n scope: "
|
|
583
|
+
},
|
|
584
|
+
{
|
|
585
|
+
"kind": "Reference",
|
|
586
|
+
"text": "ErrorBoundaryScope",
|
|
587
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryScope:type"
|
|
588
|
+
},
|
|
589
|
+
{
|
|
590
|
+
"kind": "Content",
|
|
591
|
+
"text": ";\n title: string;\n tileRegistration?: string;\n}"
|
|
592
|
+
},
|
|
593
|
+
{
|
|
594
|
+
"kind": "Content",
|
|
595
|
+
"text": ";"
|
|
596
|
+
}
|
|
597
|
+
],
|
|
598
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
599
|
+
"releaseTag": "Public",
|
|
600
|
+
"name": "ErrorBoundaryReport",
|
|
601
|
+
"typeTokenRange": {
|
|
602
|
+
"startIndex": 1,
|
|
603
|
+
"endIndex": 6
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
{
|
|
607
|
+
"kind": "TypeAlias",
|
|
608
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryScope:type",
|
|
609
|
+
"docComment": "/**\n * Where a boundary sits: around the whole app, or around a single tile.\n *\n * @public\n */\n",
|
|
610
|
+
"excerptTokens": [
|
|
611
|
+
{
|
|
612
|
+
"kind": "Content",
|
|
613
|
+
"text": "export type ErrorBoundaryScope = "
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
"kind": "Content",
|
|
617
|
+
"text": "'application' | 'tile'"
|
|
618
|
+
},
|
|
619
|
+
{
|
|
620
|
+
"kind": "Content",
|
|
621
|
+
"text": ";"
|
|
622
|
+
}
|
|
623
|
+
],
|
|
624
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
625
|
+
"releaseTag": "Public",
|
|
626
|
+
"name": "ErrorBoundaryScope",
|
|
627
|
+
"typeTokenRange": {
|
|
628
|
+
"startIndex": 1,
|
|
629
|
+
"endIndex": 2
|
|
630
|
+
}
|
|
631
|
+
},
|
|
419
632
|
{
|
|
420
633
|
"kind": "Interface",
|
|
421
634
|
"canonicalReference": "@genesislcap/foundation-react-utils!GridProCellPortals:interface",
|
|
@@ -1047,6 +1260,43 @@
|
|
|
1047
1260
|
],
|
|
1048
1261
|
"extendsTokenRanges": []
|
|
1049
1262
|
},
|
|
1263
|
+
{
|
|
1264
|
+
"kind": "Variable",
|
|
1265
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!onCaughtError:var",
|
|
1266
|
+
"docComment": "/**\n * Root `onCaughtError` for `createRoot`.\n *\n * @remarks\n *\n * By default React 19 logs every error a boundary catches to `console.error`, before the boundary's `componentDidCatch` runs. Console-capturing monitoring tools then report that bare error first, and can drop or duplicate the boundary's own report. {@link AppErrorBoundary} and {@link TileErrorBoundary} report or log errors themselves, so this skips them. Errors caught by any other boundary are still logged to `console.error`, with their component stack.\n *\n * @public\n */\n",
|
|
1267
|
+
"excerptTokens": [
|
|
1268
|
+
{
|
|
1269
|
+
"kind": "Content",
|
|
1270
|
+
"text": "onCaughtError: "
|
|
1271
|
+
},
|
|
1272
|
+
{
|
|
1273
|
+
"kind": "Reference",
|
|
1274
|
+
"text": "NonNullable",
|
|
1275
|
+
"canonicalReference": "!NonNullable:type"
|
|
1276
|
+
},
|
|
1277
|
+
{
|
|
1278
|
+
"kind": "Content",
|
|
1279
|
+
"text": "<"
|
|
1280
|
+
},
|
|
1281
|
+
{
|
|
1282
|
+
"kind": "Reference",
|
|
1283
|
+
"text": "RootOptions",
|
|
1284
|
+
"canonicalReference": "@types/react-dom!RootOptions:interface"
|
|
1285
|
+
},
|
|
1286
|
+
{
|
|
1287
|
+
"kind": "Content",
|
|
1288
|
+
"text": "['onCaughtError']>"
|
|
1289
|
+
}
|
|
1290
|
+
],
|
|
1291
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
1292
|
+
"isReadonly": true,
|
|
1293
|
+
"releaseTag": "Public",
|
|
1294
|
+
"name": "onCaughtError",
|
|
1295
|
+
"variableTypeTokenRange": {
|
|
1296
|
+
"startIndex": 1,
|
|
1297
|
+
"endIndex": 5
|
|
1298
|
+
}
|
|
1299
|
+
},
|
|
1050
1300
|
{
|
|
1051
1301
|
"kind": "Function",
|
|
1052
1302
|
"canonicalReference": "@genesislcap/foundation-react-utils!reactFactory:function(1)",
|
|
@@ -1287,6 +1537,208 @@
|
|
|
1287
1537
|
}
|
|
1288
1538
|
],
|
|
1289
1539
|
"name": "reactFactoryWithProvider"
|
|
1540
|
+
},
|
|
1541
|
+
{
|
|
1542
|
+
"kind": "Variable",
|
|
1543
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!TileErrorBoundary:var",
|
|
1544
|
+
"docComment": "/**\n * Error boundary for a single tile, so a crash replaces only that tile with the fallback UI and the rest of the app keeps running.\n *\n * @public\n */\n",
|
|
1545
|
+
"excerptTokens": [
|
|
1546
|
+
{
|
|
1547
|
+
"kind": "Content",
|
|
1548
|
+
"text": "TileErrorBoundary: "
|
|
1549
|
+
},
|
|
1550
|
+
{
|
|
1551
|
+
"kind": "Reference",
|
|
1552
|
+
"text": "FC",
|
|
1553
|
+
"canonicalReference": "@types/react!React.FC:type"
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"kind": "Content",
|
|
1557
|
+
"text": "<"
|
|
1558
|
+
},
|
|
1559
|
+
{
|
|
1560
|
+
"kind": "Reference",
|
|
1561
|
+
"text": "TileErrorBoundaryProps",
|
|
1562
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!TileErrorBoundaryProps:type"
|
|
1563
|
+
},
|
|
1564
|
+
{
|
|
1565
|
+
"kind": "Content",
|
|
1566
|
+
"text": ">"
|
|
1567
|
+
}
|
|
1568
|
+
],
|
|
1569
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
1570
|
+
"isReadonly": true,
|
|
1571
|
+
"releaseTag": "Public",
|
|
1572
|
+
"name": "TileErrorBoundary",
|
|
1573
|
+
"variableTypeTokenRange": {
|
|
1574
|
+
"startIndex": 1,
|
|
1575
|
+
"endIndex": 5
|
|
1576
|
+
}
|
|
1577
|
+
},
|
|
1578
|
+
{
|
|
1579
|
+
"kind": "TypeAlias",
|
|
1580
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!TileErrorBoundaryProps:type",
|
|
1581
|
+
"docComment": "/**\n * Props for {@link TileErrorBoundary}.\n *\n * @public\n */\n",
|
|
1582
|
+
"excerptTokens": [
|
|
1583
|
+
{
|
|
1584
|
+
"kind": "Content",
|
|
1585
|
+
"text": "export type TileErrorBoundaryProps = "
|
|
1586
|
+
},
|
|
1587
|
+
{
|
|
1588
|
+
"kind": "Content",
|
|
1589
|
+
"text": "{\n title: string;\n tileRegistration: string;\n onError?: "
|
|
1590
|
+
},
|
|
1591
|
+
{
|
|
1592
|
+
"kind": "Reference",
|
|
1593
|
+
"text": "ErrorBoundaryErrorHandler",
|
|
1594
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryErrorHandler:type"
|
|
1595
|
+
},
|
|
1596
|
+
{
|
|
1597
|
+
"kind": "Content",
|
|
1598
|
+
"text": ";\n children: "
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
"kind": "Reference",
|
|
1602
|
+
"text": "ReactNode",
|
|
1603
|
+
"canonicalReference": "@types/react!React.ReactNode:type"
|
|
1604
|
+
},
|
|
1605
|
+
{
|
|
1606
|
+
"kind": "Content",
|
|
1607
|
+
"text": ";\n}"
|
|
1608
|
+
},
|
|
1609
|
+
{
|
|
1610
|
+
"kind": "Content",
|
|
1611
|
+
"text": ";"
|
|
1612
|
+
}
|
|
1613
|
+
],
|
|
1614
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
1615
|
+
"releaseTag": "Public",
|
|
1616
|
+
"name": "TileErrorBoundaryProps",
|
|
1617
|
+
"typeTokenRange": {
|
|
1618
|
+
"startIndex": 1,
|
|
1619
|
+
"endIndex": 6
|
|
1620
|
+
}
|
|
1621
|
+
},
|
|
1622
|
+
{
|
|
1623
|
+
"kind": "Function",
|
|
1624
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!withTileErrorBoundary:function(1)",
|
|
1625
|
+
"docComment": "/**\n * Wraps a component in a {@link TileErrorBoundary}.\n *\n * @param WrappedComponent - The tile component.\n *\n * @param title - Human-readable tile name shown in the fallback UI.\n *\n * @param tileRegistration - The tile's key in the layout.\n *\n * @param onError - Optional callback for caught errors.\n *\n * @public\n */\n",
|
|
1626
|
+
"excerptTokens": [
|
|
1627
|
+
{
|
|
1628
|
+
"kind": "Content",
|
|
1629
|
+
"text": "withTileErrorBoundary: <P extends "
|
|
1630
|
+
},
|
|
1631
|
+
{
|
|
1632
|
+
"kind": "Content",
|
|
1633
|
+
"text": "object"
|
|
1634
|
+
},
|
|
1635
|
+
{
|
|
1636
|
+
"kind": "Content",
|
|
1637
|
+
"text": ">(WrappedComponent: "
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
"kind": "Reference",
|
|
1641
|
+
"text": "ComponentType",
|
|
1642
|
+
"canonicalReference": "@types/react!React.ComponentType:type"
|
|
1643
|
+
},
|
|
1644
|
+
{
|
|
1645
|
+
"kind": "Content",
|
|
1646
|
+
"text": "<P>"
|
|
1647
|
+
},
|
|
1648
|
+
{
|
|
1649
|
+
"kind": "Content",
|
|
1650
|
+
"text": ", title: "
|
|
1651
|
+
},
|
|
1652
|
+
{
|
|
1653
|
+
"kind": "Content",
|
|
1654
|
+
"text": "string"
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"kind": "Content",
|
|
1658
|
+
"text": ", tileRegistration: "
|
|
1659
|
+
},
|
|
1660
|
+
{
|
|
1661
|
+
"kind": "Content",
|
|
1662
|
+
"text": "string"
|
|
1663
|
+
},
|
|
1664
|
+
{
|
|
1665
|
+
"kind": "Content",
|
|
1666
|
+
"text": ", onError?: "
|
|
1667
|
+
},
|
|
1668
|
+
{
|
|
1669
|
+
"kind": "Reference",
|
|
1670
|
+
"text": "ErrorBoundaryErrorHandler",
|
|
1671
|
+
"canonicalReference": "@genesislcap/foundation-react-utils!ErrorBoundaryErrorHandler:type"
|
|
1672
|
+
},
|
|
1673
|
+
{
|
|
1674
|
+
"kind": "Content",
|
|
1675
|
+
"text": ") => "
|
|
1676
|
+
},
|
|
1677
|
+
{
|
|
1678
|
+
"kind": "Reference",
|
|
1679
|
+
"text": "FC",
|
|
1680
|
+
"canonicalReference": "@types/react!React.FC:type"
|
|
1681
|
+
},
|
|
1682
|
+
{
|
|
1683
|
+
"kind": "Content",
|
|
1684
|
+
"text": "<P>"
|
|
1685
|
+
}
|
|
1686
|
+
],
|
|
1687
|
+
"fileUrlPath": "src/error-boundary/error-boundary.tsx",
|
|
1688
|
+
"returnTypeTokenRange": {
|
|
1689
|
+
"startIndex": 12,
|
|
1690
|
+
"endIndex": 14
|
|
1691
|
+
},
|
|
1692
|
+
"releaseTag": "Public",
|
|
1693
|
+
"overloadIndex": 1,
|
|
1694
|
+
"parameters": [
|
|
1695
|
+
{
|
|
1696
|
+
"parameterName": "WrappedComponent",
|
|
1697
|
+
"parameterTypeTokenRange": {
|
|
1698
|
+
"startIndex": 3,
|
|
1699
|
+
"endIndex": 5
|
|
1700
|
+
},
|
|
1701
|
+
"isOptional": false
|
|
1702
|
+
},
|
|
1703
|
+
{
|
|
1704
|
+
"parameterName": "title",
|
|
1705
|
+
"parameterTypeTokenRange": {
|
|
1706
|
+
"startIndex": 6,
|
|
1707
|
+
"endIndex": 7
|
|
1708
|
+
},
|
|
1709
|
+
"isOptional": false
|
|
1710
|
+
},
|
|
1711
|
+
{
|
|
1712
|
+
"parameterName": "tileRegistration",
|
|
1713
|
+
"parameterTypeTokenRange": {
|
|
1714
|
+
"startIndex": 8,
|
|
1715
|
+
"endIndex": 9
|
|
1716
|
+
},
|
|
1717
|
+
"isOptional": false
|
|
1718
|
+
},
|
|
1719
|
+
{
|
|
1720
|
+
"parameterName": "onError",
|
|
1721
|
+
"parameterTypeTokenRange": {
|
|
1722
|
+
"startIndex": 10,
|
|
1723
|
+
"endIndex": 11
|
|
1724
|
+
},
|
|
1725
|
+
"isOptional": true
|
|
1726
|
+
}
|
|
1727
|
+
],
|
|
1728
|
+
"typeParameters": [
|
|
1729
|
+
{
|
|
1730
|
+
"typeParameterName": "P",
|
|
1731
|
+
"constraintTokenRange": {
|
|
1732
|
+
"startIndex": 1,
|
|
1733
|
+
"endIndex": 2
|
|
1734
|
+
},
|
|
1735
|
+
"defaultTypeTokenRange": {
|
|
1736
|
+
"startIndex": 0,
|
|
1737
|
+
"endIndex": 0
|
|
1738
|
+
}
|
|
1739
|
+
}
|
|
1740
|
+
],
|
|
1741
|
+
"name": "withTileErrorBoundary"
|
|
1290
1742
|
}
|
|
1291
1743
|
]
|
|
1292
1744
|
}
|
|
@@ -1,13 +1,47 @@
|
|
|
1
1
|
import type { ComponentFactory } from '@genesislcap/foundation-layout';
|
|
2
2
|
import { ComponentType } from 'react';
|
|
3
|
+
import type { FC } from 'react';
|
|
3
4
|
import { JsonFormsState } from '@jsonforms/core';
|
|
4
5
|
import { OwnPropsOfControl } from '@jsonforms/core';
|
|
5
6
|
import { RankedTester } from '@jsonforms/core';
|
|
6
7
|
import * as React_2 from 'react';
|
|
8
|
+
import type { ReactNode } from 'react';
|
|
7
9
|
import { RendererControlProps } from '@genesislcap/foundation-forms';
|
|
8
10
|
import { RendererEntry } from '@genesislcap/foundation-forms';
|
|
11
|
+
import type { RootOptions } from 'react-dom/client';
|
|
9
12
|
import { StatePropsOfControl } from '@jsonforms/core';
|
|
10
13
|
|
|
14
|
+
/**
|
|
15
|
+
* Top-level error boundary. Wrap the whole app in one instance; use {@link TileErrorBoundary}
|
|
16
|
+
* inside it.
|
|
17
|
+
*
|
|
18
|
+
* @remarks
|
|
19
|
+
* Renders a fallback with a reference ID, copyable diagnostics and a Retry button that remounts
|
|
20
|
+
* the children. Each caught error is passed to `onError`. Without one, it's logged through the
|
|
21
|
+
* {@link ERROR_BOUNDARY_LOGGER_NAME} logger instead, which a global log reporter receives. Pair with {@link onCaughtError} on the root so React doesn't log the
|
|
22
|
+
* error a second time.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```tsx
|
|
26
|
+
* createRoot(el, { onCaughtError }).render(
|
|
27
|
+
* <AppErrorBoundary onError={({ error, ...extra }) => Sentry.captureException(error, { extra })}>
|
|
28
|
+
* <App />
|
|
29
|
+
* </AppErrorBoundary>,
|
|
30
|
+
* );
|
|
31
|
+
* ```
|
|
32
|
+
* @public
|
|
33
|
+
*/
|
|
34
|
+
export declare const AppErrorBoundary: FC<AppErrorBoundaryProps>;
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Props for {@link AppErrorBoundary}.
|
|
38
|
+
* @public
|
|
39
|
+
*/
|
|
40
|
+
export declare type AppErrorBoundaryProps = {
|
|
41
|
+
onError?: ErrorBoundaryErrorHandler;
|
|
42
|
+
children: ReactNode;
|
|
43
|
+
};
|
|
44
|
+
|
|
11
45
|
/**
|
|
12
46
|
* Creates a {@link GridProCellPortals} manager: a single React root shared by every cell
|
|
13
47
|
* renderer registered with it, with each cell rendered into its grid cell via a portal.
|
|
@@ -203,6 +237,42 @@ export declare function createReactRenderer(Component: ComponentType<RendererCon
|
|
|
203
237
|
wrapWithControlWrapper?: boolean;
|
|
204
238
|
}): RendererEntry;
|
|
205
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Name of the logger the error boundaries log through. They log a caught error, with a message
|
|
242
|
+
* naming its scope, title, tile registration and reference ID and giving its component stack, only
|
|
243
|
+
* when no `onError` handler is set or when the handler throws. `setupErrorMonitoring` from foundation-utils reports
|
|
244
|
+
* these logs, so apps using it don't need an `onError`.
|
|
245
|
+
* @public
|
|
246
|
+
*/
|
|
247
|
+
export declare const ERROR_BOUNDARY_LOGGER_NAME = "foundation-react-utils:error-boundary";
|
|
248
|
+
|
|
249
|
+
/**
|
|
250
|
+
* Callback that receives every error a boundary catches, for example to send it to an
|
|
251
|
+
* error-monitoring service.
|
|
252
|
+
* @public
|
|
253
|
+
*/
|
|
254
|
+
export declare type ErrorBoundaryErrorHandler = (report: ErrorBoundaryReport) => void;
|
|
255
|
+
|
|
256
|
+
/**
|
|
257
|
+
* What an error boundary passes to `onError` when it catches an error.
|
|
258
|
+
* @public
|
|
259
|
+
*/
|
|
260
|
+
export declare type ErrorBoundaryReport = {
|
|
261
|
+
error: Error;
|
|
262
|
+
componentStack: string;
|
|
263
|
+
/** Shown in the fallback UI, so support can match a user's screen to a reported event. */
|
|
264
|
+
referenceId: string;
|
|
265
|
+
scope: ErrorBoundaryScope;
|
|
266
|
+
title: string;
|
|
267
|
+
tileRegistration?: string;
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Where a boundary sits: around the whole app, or around a single tile.
|
|
272
|
+
* @public
|
|
273
|
+
*/
|
|
274
|
+
export declare type ErrorBoundaryScope = 'application' | 'tile';
|
|
275
|
+
|
|
206
276
|
/**
|
|
207
277
|
* Shared portal manager for Grid Pro React cell renderers.
|
|
208
278
|
*
|
|
@@ -321,6 +391,20 @@ export declare interface GridProReactCellRenderer {
|
|
|
321
391
|
destroy(): void;
|
|
322
392
|
}
|
|
323
393
|
|
|
394
|
+
/**
|
|
395
|
+
* Root `onCaughtError` for `createRoot`.
|
|
396
|
+
*
|
|
397
|
+
* @remarks
|
|
398
|
+
* By default React 19 logs every error a boundary catches to `console.error`, before the
|
|
399
|
+
* boundary's `componentDidCatch` runs. Console-capturing monitoring tools then report that bare
|
|
400
|
+
* error first, and can drop or duplicate the boundary's own report. {@link AppErrorBoundary} and
|
|
401
|
+
* {@link TileErrorBoundary} report or log errors themselves, so this skips them. Errors caught by
|
|
402
|
+
* any other boundary are still logged to `console.error`, with their component stack.
|
|
403
|
+
*
|
|
404
|
+
* @public
|
|
405
|
+
*/
|
|
406
|
+
export declare const onCaughtError: NonNullable<RootOptions['onCaughtError']>;
|
|
407
|
+
|
|
324
408
|
/**
|
|
325
409
|
* Creates a factory function for rendering React components in layout items.
|
|
326
410
|
*
|
|
@@ -371,4 +455,35 @@ export declare function reactFactoryWithProvider<CP = {}, WP = {}>(Component: Re
|
|
|
371
455
|
|
|
372
456
|
export { RendererControlProps }
|
|
373
457
|
|
|
458
|
+
/**
|
|
459
|
+
* Error boundary for a single tile, so a crash replaces only that tile with the fallback UI and
|
|
460
|
+
* the rest of the app keeps running.
|
|
461
|
+
* @public
|
|
462
|
+
*/
|
|
463
|
+
export declare const TileErrorBoundary: FC<TileErrorBoundaryProps>;
|
|
464
|
+
|
|
465
|
+
/**
|
|
466
|
+
* Props for {@link TileErrorBoundary}.
|
|
467
|
+
* @public
|
|
468
|
+
*/
|
|
469
|
+
export declare type TileErrorBoundaryProps = {
|
|
470
|
+
/** Human-readable tile name shown in the fallback UI. */
|
|
471
|
+
title: string;
|
|
472
|
+
/** The tile's key in the layout. */
|
|
473
|
+
tileRegistration: string;
|
|
474
|
+
onError?: ErrorBoundaryErrorHandler;
|
|
475
|
+
children: ReactNode;
|
|
476
|
+
};
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* Wraps a component in a {@link TileErrorBoundary}.
|
|
480
|
+
*
|
|
481
|
+
* @param WrappedComponent - The tile component.
|
|
482
|
+
* @param title - Human-readable tile name shown in the fallback UI.
|
|
483
|
+
* @param tileRegistration - The tile's key in the layout.
|
|
484
|
+
* @param onError - Optional callback for caught errors.
|
|
485
|
+
* @public
|
|
486
|
+
*/
|
|
487
|
+
export declare const withTileErrorBoundary: <P extends object>(WrappedComponent: ComponentType<P>, title: string, tileRegistration: string, onError?: ErrorBoundaryErrorHandler) => FC<P>;
|
|
488
|
+
|
|
374
489
|
export { }
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@genesislcap/foundation-react-utils",
|
|
3
3
|
"description": "Genesis Foundation React Utils",
|
|
4
|
-
"version": "15.
|
|
4
|
+
"version": "15.51.1",
|
|
5
5
|
"sideEffects": [
|
|
6
6
|
"./dist/esm/flexlayout/index.js"
|
|
7
7
|
],
|
|
@@ -56,12 +56,12 @@
|
|
|
56
56
|
}
|
|
57
57
|
},
|
|
58
58
|
"devDependencies": {
|
|
59
|
-
"@genesislcap/foundation-testing": "15.
|
|
60
|
-
"@genesislcap/genx": "15.
|
|
61
|
-
"@genesislcap/ts-builder": "15.
|
|
62
|
-
"@genesislcap/uvu-playwright-builder": "15.
|
|
63
|
-
"@genesislcap/vite-builder": "15.
|
|
64
|
-
"@genesislcap/webpack-builder": "15.
|
|
59
|
+
"@genesislcap/foundation-testing": "15.51.1",
|
|
60
|
+
"@genesislcap/genx": "15.51.1",
|
|
61
|
+
"@genesislcap/ts-builder": "15.51.1",
|
|
62
|
+
"@genesislcap/uvu-playwright-builder": "15.51.1",
|
|
63
|
+
"@genesislcap/vite-builder": "15.51.1",
|
|
64
|
+
"@genesislcap/webpack-builder": "15.51.1",
|
|
65
65
|
"react-router-dom": "^7.1.3"
|
|
66
66
|
},
|
|
67
67
|
"peerDependencies": {
|
|
@@ -75,11 +75,11 @@
|
|
|
75
75
|
}
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@genesislcap/foundation-forms": "15.
|
|
79
|
-
"@genesislcap/foundation-layout": "15.
|
|
80
|
-
"@genesislcap/foundation-logger": "15.
|
|
81
|
-
"@genesislcap/rapid-design-system": "15.
|
|
82
|
-
"@genesislcap/web-core": "15.
|
|
78
|
+
"@genesislcap/foundation-forms": "15.51.1",
|
|
79
|
+
"@genesislcap/foundation-layout": "15.51.1",
|
|
80
|
+
"@genesislcap/foundation-logger": "15.51.1",
|
|
81
|
+
"@genesislcap/rapid-design-system": "15.51.1",
|
|
82
|
+
"@genesislcap/web-core": "15.51.1",
|
|
83
83
|
"@jsonforms/core": "^3.2.1",
|
|
84
84
|
"@r2wc/core": "1.3.1",
|
|
85
85
|
"@r2wc/react-to-web-component": "^2.0.2",
|