diff --git a/src/components/ui-editor/NodeInspector.jsx b/src/components/ui-editor/NodeInspector.tsx similarity index 100% rename from src/components/ui-editor/NodeInspector.jsx rename to src/components/ui-editor/NodeInspector.tsx diff --git a/src/components/ui-editor/NodePicker.jsx b/src/components/ui-editor/NodePicker.tsx similarity index 100% rename from src/components/ui-editor/NodePicker.jsx rename to src/components/ui-editor/NodePicker.tsx diff --git a/src/components/ui-editor/TreePanel.jsx b/src/components/ui-editor/TreePanel.tsx similarity index 100% rename from src/components/ui-editor/TreePanel.jsx rename to src/components/ui-editor/TreePanel.tsx diff --git a/src/components/ui-editor/UiEditor.jsx b/src/components/ui-editor/UiEditor.tsx similarity index 100% rename from src/components/ui-editor/UiEditor.jsx rename to src/components/ui-editor/UiEditor.tsx diff --git a/src/components/ui-editor/ops.js b/src/components/ui-editor/ops.ts similarity index 100% rename from src/components/ui-editor/ops.js rename to src/components/ui-editor/ops.ts diff --git a/src/components/ui-tree/UiEditingProvider.jsx b/src/components/ui-tree/UiEditingProvider.tsx similarity index 100% rename from src/components/ui-tree/UiEditingProvider.jsx rename to src/components/ui-tree/UiEditingProvider.tsx diff --git a/src/components/ui-tree/UiNodeBoundary.jsx b/src/components/ui-tree/UiNodeBoundary.tsx similarity index 81% rename from src/components/ui-tree/UiNodeBoundary.jsx rename to src/components/ui-tree/UiNodeBoundary.tsx index e959ec5..681554b 100644 --- a/src/components/ui-tree/UiNodeBoundary.jsx +++ b/src/components/ui-tree/UiNodeBoundary.tsx @@ -25,7 +25,27 @@ import React from 'react'; * the node it is holding changes, which is what makes removing the broken node * put the page right without a reload. */ -export class UiNodeBoundary extends React.Component { +/** + * `node` is the one this boundary holds; `children` is what it renders while + * that node is fine. Both optional, because the placeholder path reads them + * with `?.` and has always tolerated their absence. + */ +interface UiNodeBoundaryProps { + node?: any; + children?: React.ReactNode; +} + +/** + * `forNode` is how the reset works: it records which node the current `failed` + * belongs to, so a boundary does not stay latched after the broken node is + * hidden or removed. It is absent until the first `getDerivedStateFromProps`. + */ +interface UiNodeBoundaryState { + failed: boolean; + forNode?: any; +} + +export class UiNodeBoundary extends React.Component { constructor(props) { super(props); this.state = { failed: false }; diff --git a/src/components/ui-tree/UiTreeRenderer.jsx b/src/components/ui-tree/UiTreeRenderer.tsx similarity index 100% rename from src/components/ui-tree/UiTreeRenderer.jsx rename to src/components/ui-tree/UiTreeRenderer.tsx diff --git a/src/components/ui-tree/chartNodeTypes.jsx b/src/components/ui-tree/chartNodeTypes.tsx similarity index 100% rename from src/components/ui-tree/chartNodeTypes.jsx rename to src/components/ui-tree/chartNodeTypes.tsx diff --git a/src/components/ui-tree/nodeTypes.jsx b/src/components/ui-tree/nodeTypes.tsx similarity index 100% rename from src/components/ui-tree/nodeTypes.jsx rename to src/components/ui-tree/nodeTypes.tsx diff --git a/src/components/ui-tree/sectionNodeTypes.jsx b/src/components/ui-tree/sectionNodeTypes.tsx similarity index 100% rename from src/components/ui-tree/sectionNodeTypes.jsx rename to src/components/ui-tree/sectionNodeTypes.tsx