@dxos/plugin-debug 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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 (213) hide show
  1. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +15 -0
  2. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +7 -0
  3. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs +59 -0
  4. package/dist/lib/neutral/DebugObjectPanel-UJ63CV25.mjs.map +7 -0
  5. package/dist/lib/neutral/DebugPlugin.mjs +47 -0
  6. package/dist/lib/neutral/DebugPlugin.mjs.map +7 -0
  7. package/dist/lib/neutral/DebugPlugin.node.mjs +18 -0
  8. package/dist/lib/neutral/DebugPlugin.node.mjs.map +7 -0
  9. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs +224 -0
  10. package/dist/lib/neutral/DebugSettings-Z3XADRNK.mjs.map +7 -0
  11. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs +34 -0
  12. package/dist/lib/neutral/DebugSpaceObjectsPanel-NISULU6U.mjs.map +7 -0
  13. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs +121 -0
  14. package/dist/lib/neutral/DebugStatus-YB3KFP7G.mjs.map +7 -0
  15. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs +23 -0
  16. package/dist/lib/neutral/DevtoolsOverviewContainer-YX7Z3D2H.mjs.map +7 -0
  17. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs +143 -0
  18. package/dist/lib/neutral/SpaceGenerator-UBYB4NPD.mjs.map +7 -0
  19. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs +52 -0
  20. package/dist/lib/neutral/Wireframe-7SNRUKET.mjs.map +7 -0
  21. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs +577 -0
  22. package/dist/lib/neutral/app-graph-builder-YPYHL2K5.mjs.map +7 -0
  23. package/dist/lib/neutral/capabilities/index.mjs +15 -0
  24. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-3OGPOE7H.mjs +20 -0
  26. package/dist/lib/neutral/chunk-3OGPOE7H.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  28. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  29. package/dist/lib/{browser/chunk-AJA6RYN3.mjs → neutral/chunk-NFIOTQRZ.mjs} +30 -9
  30. package/dist/lib/neutral/chunk-NFIOTQRZ.mjs.map +7 -0
  31. package/dist/lib/{browser/SpaceGenerator-DANYBPYZ.mjs → neutral/components/index.mjs} +414 -411
  32. package/dist/lib/neutral/components/index.mjs.map +7 -0
  33. package/dist/lib/neutral/containers/index.mjs +21 -0
  34. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  35. package/dist/lib/neutral/index.mjs +18 -0
  36. package/dist/lib/neutral/index.mjs.map +7 -0
  37. package/dist/lib/neutral/meta.json +1 -0
  38. package/dist/lib/neutral/meta.mjs +8 -0
  39. package/dist/lib/neutral/meta.mjs.map +7 -0
  40. package/dist/lib/neutral/plugin.mjs +12 -0
  41. package/dist/lib/neutral/plugin.mjs.map +7 -0
  42. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs +17 -0
  43. package/dist/lib/neutral/react-context-MUZ3KVLU.mjs.map +7 -0
  44. package/dist/lib/neutral/react-surface-NH2H63KW.mjs +420 -0
  45. package/dist/lib/neutral/react-surface-NH2H63KW.mjs.map +7 -0
  46. package/dist/lib/neutral/settings-MPM6YUP4.mjs +28 -0
  47. package/dist/lib/neutral/settings-MPM6YUP4.mjs.map +7 -0
  48. package/dist/lib/neutral/translations.mjs +83 -0
  49. package/dist/lib/neutral/translations.mjs.map +7 -0
  50. package/dist/lib/neutral/types/index.mjs +14 -0
  51. package/dist/lib/neutral/types/index.mjs.map +7 -0
  52. package/dist/types/src/DebugPlugin.d.ts +4 -1
  53. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  54. package/dist/types/src/DebugPlugin.node.d.ts +5 -0
  55. package/dist/types/src/DebugPlugin.node.d.ts.map +1 -0
  56. package/dist/types/src/DebugPlugin.test.d.ts +2 -0
  57. package/dist/types/src/DebugPlugin.test.d.ts.map +1 -0
  58. package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
  59. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  60. package/dist/types/src/capabilities/index.d.ts +8 -5
  61. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/react-context.d.ts +4 -2
  63. package/dist/types/src/capabilities/react-context.d.ts.map +1 -1
  64. package/dist/types/src/capabilities/react-surface.d.ts +7 -2
  65. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  66. package/dist/types/src/capabilities/settings.d.ts +5 -2
  67. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  68. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts +11 -0
  69. package/dist/types/src/components/DebugSettings/DebugSettings.d.ts.map +1 -0
  70. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts +99 -0
  71. package/dist/types/src/components/DebugSettings/DebugSettings.stories.d.ts.map +1 -0
  72. package/dist/types/src/components/DebugSettings/index.d.ts +2 -0
  73. package/dist/types/src/components/DebugSettings/index.d.ts.map +1 -0
  74. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -0
  75. package/dist/types/src/components/SchemaTable/index.d.ts +2 -0
  76. package/dist/types/src/components/SchemaTable/index.d.ts.map +1 -0
  77. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts +5 -5
  78. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  79. package/dist/types/src/components/SpaceGenerator/draw-util.d.ts.map +1 -1
  80. package/dist/types/src/components/SpaceGenerator/index.d.ts +2 -2
  81. package/dist/types/src/components/SpaceGenerator/index.d.ts.map +1 -1
  82. package/dist/types/src/components/SpaceGenerator/presets.d.ts +4 -5
  83. package/dist/types/src/components/SpaceGenerator/presets.d.ts.map +1 -1
  84. package/dist/types/src/components/index.d.ts +4 -10
  85. package/dist/types/src/components/index.d.ts.map +1 -1
  86. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +8 -0
  87. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +1 -0
  88. package/dist/types/src/containers/DebugGraph/index.d.ts +2 -0
  89. package/dist/types/src/containers/DebugGraph/index.d.ts.map +1 -0
  90. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +6 -0
  91. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -0
  92. package/dist/types/src/containers/DebugObjectPanel/index.d.ts +2 -0
  93. package/dist/types/src/containers/DebugObjectPanel/index.d.ts.map +1 -0
  94. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +5 -0
  95. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -0
  96. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts +2 -0
  97. package/dist/types/src/containers/DebugSpaceObjectsPanel/index.d.ts.map +1 -0
  98. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -0
  99. package/dist/types/src/containers/DebugStatus/index.d.ts +2 -0
  100. package/dist/types/src/containers/DebugStatus/index.d.ts.map +1 -0
  101. package/dist/types/src/{components → containers/DevtoolsOverviewContainer}/DevtoolsOverviewContainer.d.ts +0 -1
  102. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +1 -0
  103. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +2 -0
  104. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +1 -0
  105. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +11 -0
  106. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -0
  107. package/dist/types/src/containers/SpaceGenerator/index.d.ts +2 -0
  108. package/dist/types/src/containers/SpaceGenerator/index.d.ts.map +1 -0
  109. package/dist/types/src/{components → containers/Wireframe}/Wireframe.d.ts +2 -2
  110. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -0
  111. package/dist/types/src/containers/Wireframe/index.d.ts +2 -0
  112. package/dist/types/src/containers/Wireframe/index.d.ts.map +1 -0
  113. package/dist/types/src/containers/index.d.ts +9 -0
  114. package/dist/types/src/containers/index.d.ts.map +1 -0
  115. package/dist/types/src/index.d.ts +1 -1
  116. package/dist/types/src/index.d.ts.map +1 -1
  117. package/dist/types/src/meta.d.ts +2 -3
  118. package/dist/types/src/meta.d.ts.map +1 -1
  119. package/dist/types/src/plugin.d.ts +4 -0
  120. package/dist/types/src/plugin.d.ts.map +1 -0
  121. package/dist/types/src/translations.d.ts +80 -59
  122. package/dist/types/src/translations.d.ts.map +1 -1
  123. package/dist/types/src/types/Settings.d.ts +8 -0
  124. package/dist/types/src/types/Settings.d.ts.map +1 -0
  125. package/dist/types/src/types/index.d.ts +69 -0
  126. package/dist/types/src/types/index.d.ts.map +1 -0
  127. package/dist/types/tsconfig.tsbuildinfo +1 -1
  128. package/package.json +131 -72
  129. package/src/DebugPlugin.node.ts +18 -0
  130. package/src/DebugPlugin.test.ts +29 -0
  131. package/src/DebugPlugin.tsx +30 -37
  132. package/src/capabilities/app-graph-builder.ts +362 -387
  133. package/src/capabilities/index.ts +5 -5
  134. package/src/capabilities/react-context.tsx +16 -7
  135. package/src/capabilities/react-surface.tsx +379 -338
  136. package/src/capabilities/settings.ts +24 -12
  137. package/src/components/DebugSettings/DebugSettings.stories.tsx +36 -0
  138. package/src/components/DebugSettings/DebugSettings.tsx +262 -0
  139. package/src/components/DebugSettings/index.ts +5 -0
  140. package/src/components/SchemaTable/index.ts +5 -0
  141. package/src/components/SpaceGenerator/ObjectGenerator.tsx +33 -41
  142. package/src/components/SpaceGenerator/draw-util.ts +10 -10
  143. package/src/components/SpaceGenerator/index.ts +2 -3
  144. package/src/components/SpaceGenerator/presets.ts +310 -48
  145. package/src/components/index.ts +4 -8
  146. package/src/containers/DebugGraph/DebugGraph.tsx +14 -0
  147. package/src/containers/DebugGraph/index.ts +5 -0
  148. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +76 -0
  149. package/src/containers/DebugObjectPanel/index.ts +5 -0
  150. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +47 -0
  151. package/src/containers/DebugSpaceObjectsPanel/index.ts +5 -0
  152. package/src/{components → containers/DebugStatus}/DebugStatus.tsx +43 -21
  153. package/src/containers/DebugStatus/index.ts +5 -0
  154. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +25 -0
  155. package/src/containers/DevtoolsOverviewContainer/index.ts +5 -0
  156. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +126 -0
  157. package/src/containers/SpaceGenerator/index.ts +5 -0
  158. package/src/{components → containers/Wireframe}/Wireframe.tsx +7 -12
  159. package/src/containers/Wireframe/index.ts +5 -0
  160. package/src/containers/index.ts +13 -0
  161. package/src/index.ts +1 -1
  162. package/src/meta.ts +8 -7
  163. package/src/plugin.ts +10 -0
  164. package/src/translations.ts +75 -58
  165. package/src/types/Settings.ts +16 -0
  166. package/src/{types.ts → types/index.ts} +20 -11
  167. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs +0 -20
  168. package/dist/lib/browser/DebugGraph-EDOH6R2G.mjs.map +0 -7
  169. package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs +0 -25
  170. package/dist/lib/browser/DevtoolsOverviewContainer-EPD6EWT5.mjs.map +0 -7
  171. package/dist/lib/browser/SpaceGenerator-DANYBPYZ.mjs.map +0 -7
  172. package/dist/lib/browser/app-graph-builder-JTIEFOWZ.mjs +0 -587
  173. package/dist/lib/browser/app-graph-builder-JTIEFOWZ.mjs.map +0 -7
  174. package/dist/lib/browser/chunk-5XPIRNQS.mjs +0 -18
  175. package/dist/lib/browser/chunk-5XPIRNQS.mjs.map +0 -7
  176. package/dist/lib/browser/chunk-AJA6RYN3.mjs.map +0 -7
  177. package/dist/lib/browser/index.mjs +0 -133
  178. package/dist/lib/browser/index.mjs.map +0 -7
  179. package/dist/lib/browser/meta.json +0 -1
  180. package/dist/lib/browser/react-context-NVAGLAJD.mjs +0 -16
  181. package/dist/lib/browser/react-context-NVAGLAJD.mjs.map +0 -7
  182. package/dist/lib/browser/react-surface-YLOWSIBU.mjs +0 -773
  183. package/dist/lib/browser/react-surface-YLOWSIBU.mjs.map +0 -7
  184. package/dist/lib/browser/settings-LSSWLM5I.mjs +0 -22
  185. package/dist/lib/browser/settings-LSSWLM5I.mjs.map +0 -7
  186. package/dist/types/src/components/Container.d.ts +0 -5
  187. package/dist/types/src/components/Container.d.ts.map +0 -1
  188. package/dist/types/src/components/DebugGraph.d.ts +0 -8
  189. package/dist/types/src/components/DebugGraph.d.ts.map +0 -1
  190. package/dist/types/src/components/DebugObjectPanel.d.ts +0 -7
  191. package/dist/types/src/components/DebugObjectPanel.d.ts.map +0 -1
  192. package/dist/types/src/components/DebugSettings.d.ts +0 -6
  193. package/dist/types/src/components/DebugSettings.d.ts.map +0 -1
  194. package/dist/types/src/components/DebugStatus.d.ts.map +0 -1
  195. package/dist/types/src/components/DevtoolsOverviewContainer.d.ts.map +0 -1
  196. package/dist/types/src/components/SpaceGenerator/SchemaTable.d.ts.map +0 -1
  197. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts +0 -9
  198. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.d.ts.map +0 -1
  199. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts +0 -16
  200. package/dist/types/src/components/SpaceGenerator/SpaceGenerator.stories.d.ts.map +0 -1
  201. package/dist/types/src/components/Wireframe.d.ts.map +0 -1
  202. package/dist/types/src/types.d.ts +0 -63
  203. package/dist/types/src/types.d.ts.map +0 -1
  204. package/src/components/Container.tsx +0 -15
  205. package/src/components/DebugGraph.tsx +0 -14
  206. package/src/components/DebugObjectPanel.tsx +0 -35
  207. package/src/components/DebugSettings.tsx +0 -159
  208. package/src/components/DevtoolsOverviewContainer.tsx +0 -20
  209. package/src/components/SpaceGenerator/SpaceGenerator.stories.tsx +0 -54
  210. package/src/components/SpaceGenerator/SpaceGenerator.tsx +0 -122
  211. /package/dist/types/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.d.ts +0 -0
  212. /package/dist/types/src/{components → containers/DebugStatus}/DebugStatus.d.ts +0 -0
  213. /package/src/components/{SpaceGenerator → SchemaTable}/SchemaTable.tsx +0 -0
@@ -0,0 +1,15 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/DebugGraph/DebugGraph.tsx
4
+ import React from "react";
5
+ import { Tree } from "@dxos/devtools";
6
+ import { Graph } from "@dxos/plugin-graph";
7
+ var DebugGraph = ({ graph, root }) => {
8
+ return /* @__PURE__ */ React.createElement(Tree, {
9
+ data: Graph.toJSON(graph, root)
10
+ });
11
+ };
12
+ export {
13
+ DebugGraph as default
14
+ };
15
+ //# sourceMappingURL=DebugGraph-G4FWS57E.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/DebugGraph/DebugGraph.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Tree } from '@dxos/devtools';\nimport { Graph } from '@dxos/plugin-graph';\n\nexport type DebugGraphProps = { graph: Graph.Graph; root: string };\n\nexport const DebugGraph = ({ graph, root }: DebugGraphProps) => {\n return <Tree data={Graph.toJSON(graph, root)} />;\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,WAAW;AAElB,SAASC,YAAY;AACrB,SAASC,aAAa;AAIf,IAAMC,aAAa,CAAC,EAAEC,OAAOC,KAAI,MAAmB;AACzD,SAAO,sBAAA,cAACJ,MAAAA;IAAKK,MAAMJ,MAAMK,OAAOH,OAAOC,IAAAA;;AACzC;",
6
+ "names": ["React", "Tree", "Graph", "DebugGraph", "graph", "root", "data", "toJSON"]
7
+ }
@@ -0,0 +1,59 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/DebugObjectPanel/DebugObjectPanel.tsx
4
+ import React, { useMemo, useState } from "react";
5
+ import { ObjectsTree } from "@dxos/devtools";
6
+ import { Filter, Json, Obj, Query } from "@dxos/echo";
7
+ import { useQuery } from "@dxos/react-client/echo";
8
+ import { Clipboard, Input, Panel, ScrollArea, Toolbar } from "@dxos/react-ui";
9
+ import { Syntax } from "@dxos/react-ui-syntax-highlighter";
10
+ import { mx } from "@dxos/ui-theme";
11
+ var DebugObjectPanel = ({ role, companionTo }) => {
12
+ const db = Obj.getDatabase(companionTo);
13
+ const [selectedId, setSelectedId] = useState(null);
14
+ const [depth, setDepth] = useState(0);
15
+ const [selectedObject] = useQuery(db, Query.select(Filter.id(selectedId ?? companionTo.id)).options({
16
+ deleted: "include"
17
+ }));
18
+ const refReplacer = useMemo(() => db ? Json.createRefReplacer({
19
+ db,
20
+ depth
21
+ }) : void 0, [
22
+ db,
23
+ depth
24
+ ]);
25
+ return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(Panel.Root, {
26
+ role
27
+ }, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
28
+ asChild: true
29
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, null)), /* @__PURE__ */ React.createElement(Panel.Content, {
30
+ asChild: true
31
+ }, /* @__PURE__ */ React.createElement("div", {
32
+ className: mx("grid divide-y divide-separator", db && "grid-rows-[1fr_2fr]")
33
+ }, db && /* @__PURE__ */ React.createElement(ScrollArea.Root, null, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(ObjectsTree, {
34
+ db,
35
+ root: companionTo,
36
+ onSelect: (entity) => setSelectedId(entity.id)
37
+ }))), /* @__PURE__ */ React.createElement(Syntax.Root, {
38
+ data: selectedObject,
39
+ replacer: refReplacer
40
+ }, /* @__PURE__ */ React.createElement(Panel.Root, null, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
41
+ asChild: true
42
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, {
43
+ classNames: "grid grid-cols-[1fr_3rem]"
44
+ }, /* @__PURE__ */ React.createElement(Syntax.Filter, null), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
45
+ variant: "subdued",
46
+ type: "number",
47
+ min: 0,
48
+ step: 1,
49
+ "aria-label": "Ref depth",
50
+ value: depth,
51
+ onChange: (event) => setDepth(Math.max(0, Number(event.target.value) || 0))
52
+ })))), /* @__PURE__ */ React.createElement(Panel.Content, {
53
+ asChild: true
54
+ }, /* @__PURE__ */ React.createElement(Syntax.Viewport, null, /* @__PURE__ */ React.createElement(Syntax.Code, null)))))))));
55
+ };
56
+ export {
57
+ DebugObjectPanel as default
58
+ };
59
+ //# sourceMappingURL=DebugObjectPanel-UJ63CV25.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/DebugObjectPanel/DebugObjectPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useMemo, useState } from 'react';\n\nimport { AppSurface } from '@dxos/app-toolkit/ui';\nimport { ObjectsTree } from '@dxos/devtools';\nimport { Filter, Json, Obj, Query } from '@dxos/echo';\nimport type { ObjectId } from '@dxos/keys';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';\nimport { Syntax } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/ui-theme';\n\nexport type DebugObjectPanelProps = Pick<\n AppSurface.ObjectArticleProps<Obj.Unknown, {}, Obj.Unknown>,\n 'role' | 'companionTo'\n>;\n\nexport const DebugObjectPanel = ({ role, companionTo }: DebugObjectPanelProps) => {\n const db = Obj.getDatabase(companionTo);\n const [selectedId, setSelectedId] = useState<ObjectId | null>(null);\n const [depth, setDepth] = useState(0);\n const [selectedObject] = useQuery(\n db,\n Query.select(Filter.id(selectedId ?? companionTo.id)).options({ deleted: 'include' }),\n );\n const refReplacer = useMemo(() => (db ? Json.createRefReplacer({ db, depth }) : undefined), [db, depth]);\n\n return (\n <Clipboard.Provider>\n <Panel.Root role={role}>\n <Panel.Toolbar asChild>\n <Toolbar.Root />\n </Panel.Toolbar>\n <Panel.Content asChild>\n <div className={mx('grid divide-y divide-separator', db && 'grid-rows-[1fr_2fr]')}>\n {db && (\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <ObjectsTree db={db} root={companionTo} onSelect={(entity) => setSelectedId(entity.id)} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n )}\n <Syntax.Root data={selectedObject} replacer={refReplacer}>\n <Panel.Root>\n <Panel.Toolbar asChild>\n <Toolbar.Root classNames='grid grid-cols-[1fr_3rem]'>\n <Syntax.Filter />\n <Input.Root>\n <Input.TextInput\n variant='subdued'\n type='number'\n min={0}\n step={1}\n aria-label='Ref depth'\n value={depth}\n onChange={(event) => setDepth(Math.max(0, Number(event.target.value) || 0))}\n />\n </Input.Root>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Syntax.Viewport>\n <Syntax.Code />\n </Syntax.Viewport>\n </Panel.Content>\n </Panel.Root>\n </Syntax.Root>\n </div>\n </Panel.Content>\n </Panel.Root>\n </Clipboard.Provider>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,SAASC,gBAAgB;AAGzC,SAASC,mBAAmB;AAC5B,SAASC,QAAQC,MAAMC,KAAKC,aAAa;AAEzC,SAASC,gBAAgB;AACzB,SAASC,WAAWC,OAAOC,OAAOC,YAAYC,eAAe;AAC7D,SAASC,cAAc;AACvB,SAASC,UAAU;AAOZ,IAAMC,mBAAmB,CAAC,EAAEC,MAAMC,YAAW,MAAyB;AAC3E,QAAMC,KAAKb,IAAIc,YAAYF,WAAAA;AAC3B,QAAM,CAACG,YAAYC,aAAAA,IAAiBpB,SAA0B,IAAA;AAC9D,QAAM,CAACqB,OAAOC,QAAAA,IAAYtB,SAAS,CAAA;AACnC,QAAM,CAACuB,cAAAA,IAAkBjB,SACvBW,IACAZ,MAAMmB,OAAOtB,OAAOuB,GAAGN,cAAcH,YAAYS,EAAE,CAAA,EAAGC,QAAQ;IAAEC,SAAS;EAAU,CAAA,CAAA;AAErF,QAAMC,cAAc7B,QAAQ,MAAOkB,KAAKd,KAAK0B,kBAAkB;IAAEZ;IAAII;EAAM,CAAA,IAAKS,QAAY;IAACb;IAAII;GAAM;AAEvG,SACE,sBAAA,cAACd,UAAUwB,UAAQ,MACjB,sBAAA,cAACtB,MAAMuB,MAAI;IAACjB;KACV,sBAAA,cAACN,MAAME,SAAO;IAACsB,SAAAA;KACb,sBAAA,cAACtB,QAAQqB,MAAI,IAAA,CAAA,GAEf,sBAAA,cAACvB,MAAMyB,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACE,OAAAA;IAAIC,WAAWvB,GAAG,kCAAkCI,MAAM,qBAAA;KACxDA,MACC,sBAAA,cAACP,WAAWsB,MAAI,MACd,sBAAA,cAACtB,WAAW2B,UAAQ,MAClB,sBAAA,cAACpC,aAAAA;IAAYgB;IAAQqB,MAAMtB;IAAauB,UAAU,CAACC,WAAWpB,cAAcoB,OAAOf,EAAE;QAI3F,sBAAA,cAACb,OAAOoB,MAAI;IAACS,MAAMlB;IAAgBmB,UAAUd;KAC3C,sBAAA,cAACnB,MAAMuB,MAAI,MACT,sBAAA,cAACvB,MAAME,SAAO;IAACsB,SAAAA;KACb,sBAAA,cAACtB,QAAQqB,MAAI;IAACW,YAAW;KACvB,sBAAA,cAAC/B,OAAOV,QAAM,IAAA,GACd,sBAAA,cAACM,MAAMwB,MAAI,MACT,sBAAA,cAACxB,MAAMoC,WAAS;IACdC,SAAQ;IACRC,MAAK;IACLC,KAAK;IACLC,MAAM;IACNC,cAAW;IACXC,OAAO7B;IACP8B,UAAU,CAACC,UAAU9B,SAAS+B,KAAKC,IAAI,GAAGC,OAAOH,MAAMI,OAAON,KAAK,KAAK,CAAA,CAAA;SAKhF,sBAAA,cAACzC,MAAMyB,SAAO;IAACD,SAAAA;KACb,sBAAA,cAACrB,OAAOyB,UAAQ,MACd,sBAAA,cAACzB,OAAO6C,MAAI,IAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAUhC;",
6
+ "names": ["React", "useMemo", "useState", "ObjectsTree", "Filter", "Json", "Obj", "Query", "useQuery", "Clipboard", "Input", "Panel", "ScrollArea", "Toolbar", "Syntax", "mx", "DebugObjectPanel", "role", "companionTo", "db", "getDatabase", "selectedId", "setSelectedId", "depth", "setDepth", "selectedObject", "select", "id", "options", "deleted", "refReplacer", "createRefReplacer", "undefined", "Provider", "Root", "asChild", "Content", "div", "className", "Viewport", "root", "onSelect", "entity", "data", "replacer", "classNames", "TextInput", "variant", "type", "min", "step", "aria-label", "value", "onChange", "event", "Math", "max", "Number", "target", "Code"]
7
+ }
@@ -0,0 +1,47 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/DebugPlugin.tsx
4
+ import * as Effect from "effect/Effect";
5
+ import { ActivationEvents, Capability, Plugin } from "@dxos/app-framework";
6
+ import { AppPlugin } from "@dxos/app-toolkit";
7
+ import { AppGraphBuilder, DebugSettings, ReactContext, ReactSurface } from "#capabilities";
8
+ import { meta } from "#meta";
9
+ import { translations } from "#translations";
10
+ var DebugPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
11
+ activate: AppGraphBuilder
12
+ }), AppPlugin.addReactContextModule({
13
+ activate: ReactContext
14
+ }), AppPlugin.addSettingsModule({
15
+ activate: DebugSettings
16
+ }), Plugin.addModule(({ logStore }) => ({
17
+ id: Capability.getModuleTag(ReactSurface) ?? "surfaces",
18
+ activatesOn: ActivationEvents.SetupReactSurface,
19
+ activate: () => ReactSurface({
20
+ logStore
21
+ })
22
+ })), AppPlugin.addTranslationsModule({
23
+ translations
24
+ }), Plugin.addModule({
25
+ id: "setup-devtools",
26
+ activatesOn: ActivationEvents.Startup,
27
+ activate: () => Effect.sync(() => setupDevtools())
28
+ }), Plugin.make);
29
+ var setupDevtools = () => {
30
+ globalThis.composer ??= {};
31
+ globalThis.composer.changeStorageVersionInMetadata = async (version) => {
32
+ const { changeStorageVersionInMetadata } = await import("@dxos/echo-pipeline/testing");
33
+ const { createStorageObjects } = await import("@dxos/client-services");
34
+ const client = window.dxos.client;
35
+ const config = client.config;
36
+ await client.destroy();
37
+ const { storage } = createStorageObjects(config.values?.runtime?.client?.storage ?? {});
38
+ await changeStorageVersionInMetadata(storage, version);
39
+ location.pathname = "/";
40
+ };
41
+ };
42
+ var DebugPlugin_default = DebugPlugin;
43
+ export {
44
+ DebugPlugin,
45
+ DebugPlugin_default as default
46
+ };
47
+ //# sourceMappingURL=DebugPlugin.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/DebugPlugin.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\n\nimport { ActivationEvents, Capability, Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\nimport { type Client } from '@dxos/react-client';\n\nimport { AppGraphBuilder, DebugSettings, ReactContext, ReactSurface } from '#capabilities';\nimport { meta } from '#meta';\nimport { translations } from '#translations';\nimport { type DebugPluginOptions } from '#types';\n\n// TODO(wittjosiah): Factor out DevtoolsPlugin?\n\nexport const DebugPlugin = Plugin.define<DebugPluginOptions>(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addReactContextModule({ activate: ReactContext }),\n AppPlugin.addSettingsModule({ activate: DebugSettings }),\n Plugin.addModule(({ logStore }) => ({\n id: Capability.getModuleTag(ReactSurface) ?? 'surfaces',\n activatesOn: ActivationEvents.SetupReactSurface,\n activate: () => ReactSurface({ logStore }),\n })),\n AppPlugin.addTranslationsModule({ translations }),\n Plugin.addModule({\n id: 'setup-devtools',\n activatesOn: ActivationEvents.Startup,\n activate: () => Effect.sync(() => setupDevtools()),\n }),\n Plugin.make,\n);\n\nconst setupDevtools = () => {\n (globalThis as any).composer ??= {};\n\n // Used to test how composer handles breaking protocol changes.\n (globalThis as any).composer.changeStorageVersionInMetadata = async (version: number) => {\n const { changeStorageVersionInMetadata } = await import('@dxos/echo-pipeline/testing');\n const { createStorageObjects } = await import('@dxos/client-services');\n const client: Client = (window as any).dxos.client;\n const config = client.config;\n await client.destroy();\n const { storage } = createStorageObjects(config.values?.runtime?.client?.storage ?? {});\n await changeStorageVersionInMetadata(storage, version);\n location.pathname = '/';\n };\n};\n\nexport default DebugPlugin;\n"],
5
+ "mappings": ";;;AAIA,YAAYA,YAAY;AAExB,SAASC,kBAAkBC,YAAYC,cAAc;AACrD,SAASC,iBAAiB;AAG1B,SAASC,iBAAiBC,eAAeC,cAAcC,oBAAoB;AAC3E,SAASC,YAAY;AACrB,SAASC,oBAAoB;AAKtB,IAAMC,cAAcR,OAAOS,OAA2BH,IAAAA,EAAMI,KACjET,UAAUU,kBAAkB;EAAEC,UAAUV;AAAgB,CAAA,GACxDD,UAAUY,sBAAsB;EAAED,UAAUR;AAAa,CAAA,GACzDH,UAAUa,kBAAkB;EAAEF,UAAUT;AAAc,CAAA,GACtDH,OAAOe,UAAU,CAAC,EAAEC,SAAQ,OAAQ;EAClCC,IAAIlB,WAAWmB,aAAab,YAAAA,KAAiB;EAC7Cc,aAAarB,iBAAiBsB;EAC9BR,UAAU,MAAMP,aAAa;IAAEW;EAAS,CAAA;AAC1C,EAAA,GACAf,UAAUoB,sBAAsB;EAAEd;AAAa,CAAA,GAC/CP,OAAOe,UAAU;EACfE,IAAI;EACJE,aAAarB,iBAAiBwB;EAC9BV,UAAU,MAAaW,YAAK,MAAMC,cAAAA,CAAAA;AACpC,CAAA,GACAxB,OAAOyB,IAAI;AAGb,IAAMD,gBAAgB,MAAA;AACnBE,aAAmBC,aAAa,CAAC;AAGjCD,aAAmBC,SAASC,iCAAiC,OAAOC,YAAAA;AACnE,UAAM,EAAED,+BAA8B,IAAK,MAAM,OAAO,6BAAA;AACxD,UAAM,EAAEE,qBAAoB,IAAK,MAAM,OAAO,uBAAA;AAC9C,UAAMC,SAAkBC,OAAeC,KAAKF;AAC5C,UAAMG,SAASH,OAAOG;AACtB,UAAMH,OAAOI,QAAO;AACpB,UAAM,EAAEC,QAAO,IAAKN,qBAAqBI,OAAOG,QAAQC,SAASP,QAAQK,WAAW,CAAC,CAAA;AACrF,UAAMR,+BAA+BQ,SAASP,OAAAA;AAC9CU,aAASC,WAAW;EACtB;AACF;AAEA,IAAA,sBAAehC;",
6
+ "names": ["Effect", "ActivationEvents", "Capability", "Plugin", "AppPlugin", "AppGraphBuilder", "DebugSettings", "ReactContext", "ReactSurface", "meta", "translations", "DebugPlugin", "define", "pipe", "addAppGraphModule", "activate", "addReactContextModule", "addSettingsModule", "addModule", "logStore", "id", "getModuleTag", "activatesOn", "SetupReactSurface", "addTranslationsModule", "Startup", "sync", "setupDevtools", "make", "globalThis", "composer", "changeStorageVersionInMetadata", "version", "createStorageObjects", "client", "window", "dxos", "config", "destroy", "storage", "values", "runtime", "location", "pathname"]
7
+ }
@@ -0,0 +1,18 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/DebugPlugin.node.ts
4
+ import { Plugin } from "@dxos/app-framework";
5
+ import { AppPlugin } from "@dxos/app-toolkit";
6
+ import { AppGraphBuilder, DebugSettings } from "#capabilities";
7
+ import { meta } from "#meta";
8
+ var DebugPlugin = Plugin.define(meta).pipe(AppPlugin.addAppGraphModule({
9
+ activate: AppGraphBuilder
10
+ }), AppPlugin.addSettingsModule({
11
+ activate: DebugSettings
12
+ }), Plugin.make);
13
+ var DebugPlugin_node_default = DebugPlugin;
14
+ export {
15
+ DebugPlugin,
16
+ DebugPlugin_node_default as default
17
+ };
18
+ //# sourceMappingURL=DebugPlugin.node.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/DebugPlugin.node.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport { Plugin } from '@dxos/app-framework';\nimport { AppPlugin } from '@dxos/app-toolkit';\n\nimport { AppGraphBuilder, DebugSettings } from '#capabilities';\nimport { meta } from '#meta';\nimport { type DebugPluginOptions } from '#types';\n\nexport const DebugPlugin = Plugin.define<DebugPluginOptions>(meta).pipe(\n AppPlugin.addAppGraphModule({ activate: AppGraphBuilder }),\n AppPlugin.addSettingsModule({ activate: DebugSettings }),\n Plugin.make,\n);\n\nexport default DebugPlugin;\n"],
5
+ "mappings": ";;;AAIA,SAASA,cAAc;AACvB,SAASC,iBAAiB;AAE1B,SAASC,iBAAiBC,qBAAqB;AAC/C,SAASC,YAAY;AAGd,IAAMC,cAAcL,OAAOM,OAA2BF,IAAAA,EAAMG,KACjEN,UAAUO,kBAAkB;EAAEC,UAAUP;AAAgB,CAAA,GACxDD,UAAUS,kBAAkB;EAAED,UAAUN;AAAc,CAAA,GACtDH,OAAOW,IAAI;AAGb,IAAA,2BAAeN;",
6
+ "names": ["Plugin", "AppPlugin", "AppGraphBuilder", "DebugSettings", "meta", "DebugPlugin", "define", "pipe", "addAppGraphModule", "activate", "addSettingsModule", "make"]
7
+ }
@@ -0,0 +1,224 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/components/DebugSettings/DebugSettings.tsx
4
+ import React, { useCallback, useEffect, useMemo, useState } from "react";
5
+ import { getPersonalSpace } from "@dxos/app-toolkit";
6
+ import { SaveConfig, Storage, defs } from "@dxos/config";
7
+ import { log } from "@dxos/log";
8
+ import { useClient } from "@dxos/react-client";
9
+ import { Icon, IconButton, Input, Select, Toast, useFileDownload, useTranslation } from "@dxos/react-ui";
10
+ import { Settings as SettingsForm } from "@dxos/react-ui-form";
11
+ import { TRACE_ALL_KEY } from "@dxos/tracing";
12
+ import { setDeep } from "@dxos/util";
13
+ import { meta } from "#meta";
14
+ var __dxlog_file = "/__w/dxos/dxos/packages/plugins/plugin-debug/src/components/DebugSettings/DebugSettings.tsx";
15
+ var StorageAdapters = {
16
+ opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,
17
+ idb: defs.Runtime.Client.Storage.StorageDriver.IDB
18
+ };
19
+ var DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }) => {
20
+ const { t } = useTranslation(meta.id);
21
+ const [toast, setToast] = useState();
22
+ const download = useFileDownload();
23
+ const [storageConfig, setStorageConfig] = useState({});
24
+ const client = useClient();
25
+ useEffect(() => {
26
+ void Storage().then((config) => setStorageConfig(config));
27
+ }, []);
28
+ const handleToast = useCallback((toast2) => {
29
+ setToast(toast2);
30
+ const timer = setTimeout(() => setToast(void 0), 5e3);
31
+ return () => clearTimeout(timer);
32
+ }, [
33
+ setToast
34
+ ]);
35
+ const handleDownload = useCallback(async () => {
36
+ const data = await client.diagnostics();
37
+ const file = new Blob([
38
+ JSON.stringify(data, void 0, 2)
39
+ ], {
40
+ type: "text/plain"
41
+ });
42
+ const fileName = `composer-${(/* @__PURE__ */ new Date()).toISOString().replace(/\W/g, "-")}.json`;
43
+ download(file, fileName);
44
+ if (onUpload) {
45
+ const personalSpace = getPersonalSpace(client);
46
+ if (!personalSpace) {
47
+ log.error("no personal space available for upload", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 46, S: void 0 });
48
+ return;
49
+ }
50
+ const info = await onUpload(personalSpace.db, new File([
51
+ file
52
+ ], fileName));
53
+ if (!info) {
54
+ log.error("diagnostics failed to upload to IPFS", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 53, S: void 0 });
55
+ return;
56
+ }
57
+ handleToast({
58
+ title: t("settings.uploaded.message"),
59
+ description: t("settings.uploaded.description")
60
+ });
61
+ const url = client.config.values.runtime.services.ipfs.gateway + "/" + info.cid;
62
+ void navigator.clipboard.writeText(url);
63
+ handleToast({
64
+ title: t("settings.uploaded.message"),
65
+ description: t("settings.uploaded.description")
66
+ });
67
+ log.info("diagnostics", {
68
+ url
69
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 67, S: void 0 });
70
+ }
71
+ }, [
72
+ client,
73
+ download,
74
+ handleToast,
75
+ onUpload,
76
+ t
77
+ ]);
78
+ const handleDownloadLogs = useCallback(async () => {
79
+ const ndjson = await logStore.export();
80
+ const file = new Blob([
81
+ ndjson
82
+ ], {
83
+ type: "application/x-ndjson"
84
+ });
85
+ const fileName = `composer-logs-${(/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace(/:/g, "-")}.ndjson`;
86
+ download(file, fileName);
87
+ }, [
88
+ download,
89
+ logStore
90
+ ]);
91
+ const handleRepair = useCallback(async () => {
92
+ try {
93
+ const info = await client.repair();
94
+ setStorageConfig(await Storage());
95
+ handleToast({
96
+ title: t("settings.repair-success.message"),
97
+ description: JSON.stringify(info, void 0, 2)
98
+ });
99
+ } catch (err) {
100
+ handleToast({
101
+ title: t("settings.repair-failed.message"),
102
+ description: err.message
103
+ });
104
+ }
105
+ }, [
106
+ client,
107
+ handleToast,
108
+ t
109
+ ]);
110
+ const handleWireframeChange = useCallback((checked) => onSettingsChange?.((s) => ({
111
+ ...s,
112
+ wireframe: !!checked
113
+ })), [
114
+ onSettingsChange
115
+ ]);
116
+ const traceAll = useMemo(() => settings.traceAll ?? (typeof localStorage !== "undefined" && localStorage.getItem(TRACE_ALL_KEY) === "true"), [
117
+ settings.traceAll
118
+ ]);
119
+ const handleTraceAllChange = useCallback((checked) => {
120
+ const value = !!checked;
121
+ localStorage.setItem(TRACE_ALL_KEY, String(value));
122
+ onSettingsChange?.((s) => ({
123
+ ...s,
124
+ traceAll: value
125
+ }));
126
+ }, [
127
+ onSettingsChange
128
+ ]);
129
+ const handleOpenTracingPanel = useCallback(() => {
130
+ window.open("about:blank", "_blank");
131
+ }, []);
132
+ const handleStorageAdapterChange = useCallback((value) => {
133
+ if (confirm(t("settings.storage-adapter.changed-alert.message"))) {
134
+ updateConfig(storageConfig, setStorageConfig, [
135
+ "runtime",
136
+ "client",
137
+ "storage",
138
+ "dataStore"
139
+ ], StorageAdapters[value]);
140
+ }
141
+ }, [
142
+ storageConfig,
143
+ t
144
+ ]);
145
+ return /* @__PURE__ */ React.createElement(SettingsForm.Viewport, null, /* @__PURE__ */ React.createElement(SettingsForm.Section, {
146
+ title: t("settings.title", {
147
+ ns: meta.id
148
+ })
149
+ }, /* @__PURE__ */ React.createElement(SettingsForm.Item, {
150
+ title: t("settings.wireframe.label"),
151
+ description: t("settings.wireframe.description")
152
+ }, /* @__PURE__ */ React.createElement(Input.Switch, {
153
+ disabled: !onSettingsChange,
154
+ checked: settings.wireframe,
155
+ onCheckedChange: handleWireframeChange
156
+ })), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
157
+ title: t("settings.trace-all.label"),
158
+ description: t("settings.trace-all.description")
159
+ }, /* @__PURE__ */ React.createElement(Input.Switch, {
160
+ disabled: !onSettingsChange,
161
+ checked: traceAll,
162
+ onCheckedChange: handleTraceAllChange
163
+ })), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
164
+ title: t("settings.tracing-panel.label"),
165
+ description: t("settings.tracing-panel.description")
166
+ }, /* @__PURE__ */ React.createElement(IconButton, {
167
+ icon: "ph--arrow-square-out--regular",
168
+ iconOnly: true,
169
+ label: t("settings.tracing-panel.label"),
170
+ onClick: handleOpenTracingPanel
171
+ })), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
172
+ title: t("settings.download-diagnostics.label"),
173
+ description: t("settings.download-diagnostics.description")
174
+ }, /* @__PURE__ */ React.createElement(IconButton, {
175
+ icon: "ph--download-simple--regular",
176
+ iconOnly: true,
177
+ label: t("settings.download-diagnostics.label"),
178
+ onClick: handleDownload
179
+ })), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
180
+ title: t("settings.download-logs.label"),
181
+ description: t("settings.download-logs.description")
182
+ }, /* @__PURE__ */ React.createElement(IconButton, {
183
+ icon: "ph--download-simple--regular",
184
+ iconOnly: true,
185
+ label: t("settings.download-logs.label"),
186
+ onClick: handleDownloadLogs
187
+ })), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
188
+ title: t("settings.repair.label"),
189
+ description: t("settings.repair.description")
190
+ }, /* @__PURE__ */ React.createElement(IconButton, {
191
+ icon: "ph--first-aid-kit--regular",
192
+ iconOnly: true,
193
+ label: t("settings.repair.label"),
194
+ onClick: handleRepair
195
+ })), toast && /* @__PURE__ */ React.createElement(Toast.Root, null, /* @__PURE__ */ React.createElement(Toast.Body, null, /* @__PURE__ */ React.createElement(Toast.Title, null, /* @__PURE__ */ React.createElement(Icon, {
196
+ icon: "ph--gift--duotone",
197
+ classNames: "inline mr-1"
198
+ }), /* @__PURE__ */ React.createElement("span", null, toast.title)), toast.description && /* @__PURE__ */ React.createElement(Toast.Description, null, toast.description))), /* @__PURE__ */ React.createElement(SettingsForm.Item, {
199
+ title: t("settings.choose-storage-adaptor.label"),
200
+ description: t("settings.choose-storage-adaptor.description")
201
+ }, /* @__PURE__ */ React.createElement(Select.Root, {
202
+ disabled: !onSettingsChange,
203
+ value: Object.entries(StorageAdapters).find(([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore)?.[0],
204
+ onValueChange: handleStorageAdapterChange
205
+ }, /* @__PURE__ */ React.createElement(Select.TriggerButton, {
206
+ disabled: !onSettingsChange,
207
+ placeholder: t("settings.data-store.label")
208
+ }), /* @__PURE__ */ React.createElement(Select.Portal, null, /* @__PURE__ */ React.createElement(Select.Content, null, /* @__PURE__ */ React.createElement(Select.Viewport, null, Object.keys(StorageAdapters).map((key) => /* @__PURE__ */ React.createElement(Select.Option, {
209
+ key,
210
+ value: key
211
+ }, t(`settings.storage-adaptor.${key}.label`)))), /* @__PURE__ */ React.createElement(Select.Arrow, null)))))));
212
+ };
213
+ var updateConfig = (config, setConfig, path, value) => {
214
+ const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));
215
+ setDeep(storageConfigCopy, path, value);
216
+ setConfig(storageConfigCopy);
217
+ queueMicrotask(async () => {
218
+ await SaveConfig(storageConfigCopy);
219
+ });
220
+ };
221
+ export {
222
+ DebugSettings as default
223
+ };
224
+ //# sourceMappingURL=DebugSettings-Z3XADRNK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/DebugSettings/DebugSettings.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { AppCapabilities, getPersonalSpace } from '@dxos/app-toolkit';\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { type ConfigProto, SaveConfig, Storage, defs } from '@dxos/config';\nimport { log } from '@dxos/log';\nimport { type IdbLogStore } from '@dxos/log-store-idb';\nimport { useClient } from '@dxos/react-client';\nimport { Icon, IconButton, Input, Select, Toast, useFileDownload, useTranslation } from '@dxos/react-ui';\nimport { Settings as SettingsForm } from '@dxos/react-ui-form';\nimport { TRACE_ALL_KEY } from '@dxos/tracing';\nimport { setDeep } from '@dxos/util';\n\nimport { meta } from '#meta';\nimport { type Settings } from '#types';\n\ntype Toast = {\n title: string;\n description?: string;\n};\n\nconst StorageAdapters = {\n opfs: defs.Runtime.Client.Storage.StorageDriver.WEBFS,\n idb: defs.Runtime.Client.Storage.StorageDriver.IDB,\n} as const;\n\nexport type DebugSettingsProps = AppSurface.SettingsArticleProps<\n Settings.Settings,\n {\n logStore: IdbLogStore;\n onUpload?: AppCapabilities.FileUploader;\n }\n>;\n\nexport const DebugSettings = ({ settings, onSettingsChange, logStore, onUpload }: DebugSettingsProps) => {\n const { t } = useTranslation(meta.id);\n const [toast, setToast] = useState<Toast>();\n const download = useFileDownload();\n const [storageConfig, setStorageConfig] = useState<ConfigProto>({});\n const client = useClient();\n\n useEffect(() => {\n void Storage().then((config) => setStorageConfig(config));\n }, []);\n\n const handleToast = useCallback(\n (toast: Toast) => {\n setToast(toast);\n const timer = setTimeout(() => setToast(undefined), 5_000);\n return () => clearTimeout(timer);\n },\n [setToast],\n );\n\n const handleDownload = useCallback(async () => {\n const data = await client.diagnostics();\n const file = new Blob([JSON.stringify(data, undefined, 2)], {\n type: 'text/plain',\n });\n const fileName = `composer-${new Date().toISOString().replace(/\\W/g, '-')}.json`;\n download(file, fileName);\n\n if (onUpload) {\n const personalSpace = getPersonalSpace(client);\n if (!personalSpace) {\n log.error('no personal space available for upload');\n return;\n }\n const info = await onUpload(personalSpace.db, new File([file], fileName));\n if (!info) {\n log.error('diagnostics failed to upload to IPFS');\n return;\n }\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n\n // TODO(nf): move to IpfsPlugin?\n const url = client.config.values.runtime!.services!.ipfs!.gateway + '/' + info.cid;\n void navigator.clipboard.writeText(url);\n handleToast({\n title: t('settings.uploaded.message'),\n description: t('settings.uploaded.description'),\n });\n log.info('diagnostics', { url });\n }\n }, [client, download, handleToast, onUpload, t]);\n\n const handleDownloadLogs = useCallback(async () => {\n const ndjson = await logStore.export();\n const file = new Blob([ndjson], { type: 'application/x-ndjson' });\n const fileName = `composer-logs-${new Date().toISOString().slice(0, 19).replace(/:/g, '-')}.ndjson`;\n download(file, fileName);\n }, [download, logStore]);\n\n const handleRepair = useCallback(async () => {\n try {\n const info = await client.repair();\n setStorageConfig(await Storage());\n handleToast({\n title: t('settings.repair-success.message'),\n description: JSON.stringify(info, undefined, 2),\n });\n } catch (err: any) {\n handleToast({\n title: t('settings.repair-failed.message'),\n description: err.message,\n });\n }\n }, [client, handleToast, t]);\n\n const handleWireframeChange = useCallback(\n (checked: boolean) => onSettingsChange?.((s) => ({ ...s, wireframe: !!checked })),\n [onSettingsChange],\n );\n\n const traceAll = useMemo(\n () => settings.traceAll ?? (typeof localStorage !== 'undefined' && localStorage.getItem(TRACE_ALL_KEY) === 'true'),\n [settings.traceAll],\n );\n\n const handleTraceAllChange = useCallback(\n (checked: boolean) => {\n const value = !!checked;\n localStorage.setItem(TRACE_ALL_KEY, String(value));\n onSettingsChange?.((s) => ({ ...s, traceAll: value }));\n },\n [onSettingsChange],\n );\n\n const handleOpenTracingPanel = useCallback(() => {\n window.open('about:blank', '_blank');\n }, []);\n\n const handleStorageAdapterChange = useCallback(\n (value: string) => {\n if (confirm(t('settings.storage-adapter.changed-alert.message'))) {\n updateConfig(\n storageConfig,\n setStorageConfig,\n ['runtime', 'client', 'storage', 'dataStore'],\n StorageAdapters[value as keyof typeof StorageAdapters],\n );\n }\n },\n [storageConfig, t],\n );\n\n return (\n <SettingsForm.Viewport>\n <SettingsForm.Section title={t('settings.title', { ns: meta.id })}>\n <SettingsForm.Item title={t('settings.wireframe.label')} description={t('settings.wireframe.description')}>\n <Input.Switch\n disabled={!onSettingsChange}\n checked={settings.wireframe}\n onCheckedChange={handleWireframeChange}\n />\n </SettingsForm.Item>\n <SettingsForm.Item title={t('settings.trace-all.label')} description={t('settings.trace-all.description')}>\n <Input.Switch disabled={!onSettingsChange} checked={traceAll} onCheckedChange={handleTraceAllChange} />\n </SettingsForm.Item>\n <SettingsForm.Item\n title={t('settings.tracing-panel.label')}\n description={t('settings.tracing-panel.description')}\n >\n <IconButton\n icon='ph--arrow-square-out--regular'\n iconOnly\n label={t('settings.tracing-panel.label')}\n onClick={handleOpenTracingPanel}\n />\n </SettingsForm.Item>\n <SettingsForm.Item\n title={t('settings.download-diagnostics.label')}\n description={t('settings.download-diagnostics.description')}\n >\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-diagnostics.label')}\n onClick={handleDownload}\n />\n </SettingsForm.Item>\n <SettingsForm.Item\n title={t('settings.download-logs.label')}\n description={t('settings.download-logs.description')}\n >\n <IconButton\n icon='ph--download-simple--regular'\n iconOnly\n label={t('settings.download-logs.label')}\n onClick={handleDownloadLogs}\n />\n </SettingsForm.Item>\n <SettingsForm.Item title={t('settings.repair.label')} description={t('settings.repair.description')}>\n <IconButton\n icon='ph--first-aid-kit--regular'\n iconOnly\n label={t('settings.repair.label')}\n onClick={handleRepair}\n />\n </SettingsForm.Item>\n\n {/* TODO(burdon): Move to layout? */}\n {toast && (\n <Toast.Root>\n <Toast.Body>\n <Toast.Title>\n <Icon icon='ph--gift--duotone' classNames='inline mr-1' />\n <span>{toast.title}</span>\n </Toast.Title>\n {toast.description && <Toast.Description>{toast.description}</Toast.Description>}\n </Toast.Body>\n </Toast.Root>\n )}\n\n <SettingsForm.Item\n title={t('settings.choose-storage-adaptor.label')}\n description={t('settings.choose-storage-adaptor.description')}\n >\n <Select.Root\n disabled={!onSettingsChange}\n value={\n Object.entries(StorageAdapters).find(\n ([_name, value]) => value === storageConfig?.runtime?.client?.storage?.dataStore,\n )?.[0]\n }\n onValueChange={handleStorageAdapterChange}\n >\n <Select.TriggerButton disabled={!onSettingsChange} placeholder={t('settings.data-store.label')} />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {Object.keys(StorageAdapters).map((key) => (\n <Select.Option key={key} value={key}>\n {t(`settings.storage-adaptor.${key}.label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n <Select.Arrow />\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </SettingsForm.Item>\n </SettingsForm.Section>\n </SettingsForm.Viewport>\n );\n};\n\nconst updateConfig = (config: ConfigProto, setConfig: (newConfig: ConfigProto) => void, path: string[], value: any) => {\n const storageConfigCopy = JSON.parse(JSON.stringify(config ?? {}));\n setDeep(storageConfigCopy, path, value);\n setConfig(storageConfigCopy);\n queueMicrotask(async () => {\n await SaveConfig(storageConfigCopy);\n });\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["React", "useCallback", "useEffect", "useMemo", "useState", "getPersonalSpace", "SaveConfig", "Storage", "defs", "log", "useClient", "Icon", "IconButton", "Input", "Select", "Toast", "useFileDownload", "useTranslation", "Settings", "SettingsForm", "TRACE_ALL_KEY", "setDeep", "meta", "StorageAdapters", "idb", "Client", "DebugSettings", "settings", "onSettingsChange", "toast", "download", "storageConfig", "setStorageConfig", "client", "config", "handleToast", "setToast", "setTimeout", "clearTimeout", "Blob", "JSON", "stringify", "data", "undefined", "type", "fileName", "onUpload", "personalSpace", "error", "description", "title", "info", "t", "ndjson", "checked", "handleTraceAllChange", "localStorage", "String", "value", "handleStorageAdapterChange", "disabled", "wireframe", "onCheckedChange", "traceAll", "icon", "iconOnly", "label", "onClick", "handleOpenTracingPanel", "handleDownload", "handleDownloadLogs", "handleRepair", "classNames", "Object", "entries", "find", "_name", "onValueChange", "TriggerButton", "key", "updateConfig", "path", "storageConfigCopy", "setConfig", "queueMicrotask"]
7
+ }
@@ -0,0 +1,34 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx
4
+ import React, { useState } from "react";
5
+ import { ObjectsTree } from "@dxos/devtools";
6
+ import { Filter, Query } from "@dxos/echo";
7
+ import { useQuery } from "@dxos/react-client/echo";
8
+ import { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from "@dxos/react-ui";
9
+ import { JsonHighlighter } from "@dxos/react-ui-syntax-highlighter";
10
+ var DebugSpaceObjectsPanel = ({ space }) => {
11
+ const [selectedId, setSelectedId] = useState(null);
12
+ const [selectedObject] = useQuery(space.db, selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()));
13
+ return /* @__PURE__ */ React.createElement(Clipboard.Provider, null, /* @__PURE__ */ React.createElement(Panel.Root, null, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
14
+ asChild: true
15
+ }, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
16
+ disabled: true,
17
+ placeholder: "Search..."
18
+ })))), /* @__PURE__ */ React.createElement(Panel.Content, {
19
+ asChild: true
20
+ }, /* @__PURE__ */ React.createElement(Grid, {
21
+ rows: 2,
22
+ classNames: "divide-y divide-separator"
23
+ }, /* @__PURE__ */ React.createElement(ScrollArea.Root, null, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement(ObjectsTree, {
24
+ db: space.db,
25
+ onSelect: (entity) => setSelectedId(entity.id)
26
+ }))), selectedObject && /* @__PURE__ */ React.createElement(JsonHighlighter, {
27
+ classNames: "p-1",
28
+ data: selectedObject
29
+ })))));
30
+ };
31
+ export {
32
+ DebugSpaceObjectsPanel as default
33
+ };
34
+ //# sourceMappingURL=DebugSpaceObjectsPanel-NISULU6U.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useState } from 'react';\n\nimport { type AppSurface } from '@dxos/app-toolkit/ui';\nimport { ObjectsTree } from '@dxos/devtools';\nimport { Filter, Query } from '@dxos/echo';\nimport { type ObjectId } from '@dxos/keys';\nimport { useQuery } from '@dxos/react-client/echo';\nimport { Clipboard, Grid, Input, Panel, ScrollArea, Toolbar } from '@dxos/react-ui';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\n\nexport type DebugSpaceObjectsPanelProps = AppSurface.SpaceArticleProps;\n\nexport const DebugSpaceObjectsPanel = ({ space }: DebugSpaceObjectsPanelProps) => {\n const [selectedId, setSelectedId] = useState<ObjectId | null>(null);\n const [selectedObject] = useQuery(\n space.db,\n selectedId ? Query.select(Filter.id(selectedId)) : Query.select(Filter.nothing()),\n );\n\n return (\n <Clipboard.Provider>\n <Panel.Root>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <Input.Root>\n <Input.TextInput disabled placeholder='Search...' />\n </Input.Root>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <Grid rows={2} classNames='divide-y divide-separator'>\n <ScrollArea.Root>\n <ScrollArea.Viewport>\n <ObjectsTree db={space.db} onSelect={(entity) => setSelectedId(entity.id)} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n {selectedObject && <JsonHighlighter classNames='p-1' data={selectedObject} />}\n </Grid>\n </Panel.Content>\n </Panel.Root>\n </Clipboard.Provider>\n );\n};\n"],
5
+ "mappings": ";;;AAIA,OAAOA,SAASC,gBAAgB;AAGhC,SAASC,mBAAmB;AAC5B,SAASC,QAAQC,aAAa;AAE9B,SAASC,gBAAgB;AACzB,SAASC,WAAWC,MAAMC,OAAOC,OAAOC,YAAYC,eAAe;AACnE,SAASC,uBAAuB;AAIzB,IAAMC,yBAAyB,CAAC,EAAEC,MAAK,MAA+B;AAC3E,QAAM,CAACC,YAAYC,aAAAA,IAAiBf,SAA0B,IAAA;AAC9D,QAAM,CAACgB,cAAAA,IAAkBZ,SACvBS,MAAMI,IACNH,aAAaX,MAAMe,OAAOhB,OAAOiB,GAAGL,UAAAA,CAAAA,IAAeX,MAAMe,OAAOhB,OAAOkB,QAAO,CAAA,CAAA;AAGhF,SACE,sBAAA,cAACf,UAAUgB,UAAQ,MACjB,sBAAA,cAACb,MAAMc,MAAI,MACT,sBAAA,cAACd,MAAME,SAAO;IAACa,SAAAA;KACb,sBAAA,cAACb,QAAQY,MAAI,MACX,sBAAA,cAACf,MAAMe,MAAI,MACT,sBAAA,cAACf,MAAMiB,WAAS;IAACC,UAAAA;IAASC,aAAY;SAI5C,sBAAA,cAAClB,MAAMmB,SAAO;IAACJ,SAAAA;KACb,sBAAA,cAACjB,MAAAA;IAAKsB,MAAM;IAAGC,YAAW;KACxB,sBAAA,cAACpB,WAAWa,MAAI,MACd,sBAAA,cAACb,WAAWqB,UAAQ,MAClB,sBAAA,cAAC7B,aAAAA;IAAYgB,IAAIJ,MAAMI;IAAIc,UAAU,CAACC,WAAWjB,cAAciB,OAAOb,EAAE;QAG3EH,kBAAkB,sBAAA,cAACL,iBAAAA;IAAgBkB,YAAW;IAAMI,MAAMjB;;AAMvE;",
6
+ "names": ["React", "useState", "ObjectsTree", "Filter", "Query", "useQuery", "Clipboard", "Grid", "Input", "Panel", "ScrollArea", "Toolbar", "JsonHighlighter", "DebugSpaceObjectsPanel", "space", "selectedId", "setSelectedId", "selectedObject", "db", "select", "id", "nothing", "Provider", "Root", "asChild", "TextInput", "disabled", "placeholder", "Content", "rows", "classNames", "Viewport", "onSelect", "entity", "data"]
7
+ }
@@ -0,0 +1,121 @@
1
+ import "./chunk-J5LGTIGS.mjs";
2
+
3
+ // src/containers/DebugStatus/DebugStatus.tsx
4
+ import React, { useEffect, useRef, useState } from "react";
5
+ import { TimeoutError } from "@dxos/async";
6
+ import { StatusBar } from "@dxos/plugin-status-bar/components";
7
+ import { ConnectionState } from "@dxos/protocols/proto/dxos/client/services";
8
+ import { useNetworkStatus } from "@dxos/react-client/mesh";
9
+ import { IconButton } from "@dxos/react-ui";
10
+ var styles = {
11
+ success: "text-sky-300 dark:text-green-700",
12
+ warning: "text-orange-300 dark:text-orange-600",
13
+ error: "text-red-300 dark:text-red-600"
14
+ };
15
+ var ErrorIndicator = () => {
16
+ const [, forceUpdate] = useState({});
17
+ const errorRef = useRef(null);
18
+ useEffect(() => {
19
+ const errorListener = (event) => {
20
+ const error = event.error ?? event.reason;
21
+ if (errorRef.current !== error) {
22
+ errorRef.current = error;
23
+ forceUpdate({});
24
+ }
25
+ };
26
+ window.addEventListener("error", errorListener);
27
+ window.addEventListener("unhandledrejection", errorListener);
28
+ return () => {
29
+ window.removeEventListener("error", errorListener);
30
+ window.removeEventListener("unhandledrejection", errorListener);
31
+ };
32
+ }, []);
33
+ const handleReset = () => {
34
+ errorRef.current = null;
35
+ forceUpdate({});
36
+ };
37
+ if (errorRef.current) {
38
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
39
+ icon: "ph--warning-circle--duotone",
40
+ iconOnly: true,
41
+ label: errorRef.current.message,
42
+ classNames: styles.error,
43
+ onClick: handleReset
44
+ }));
45
+ } else {
46
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
47
+ variant: "ghost",
48
+ icon: "ph--check--regular",
49
+ iconOnly: true,
50
+ label: "No errors."
51
+ }));
52
+ }
53
+ };
54
+ var SwarmIndicator = () => {
55
+ const [state, setState] = useState(0);
56
+ const { swarm } = useNetworkStatus();
57
+ useEffect(() => {
58
+ setState(swarm === ConnectionState.ONLINE ? 0 : 1);
59
+ }, [
60
+ swarm
61
+ ]);
62
+ if (state === 0) {
63
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
64
+ variant: "ghost",
65
+ icon: "ph--lightning--regular",
66
+ iconOnly: true,
67
+ label: "Connected to swarm."
68
+ }));
69
+ } else {
70
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
71
+ variant: "ghost",
72
+ icon: "ph--lightning-slash--regular",
73
+ iconOnly: true,
74
+ label: "Disconnected from swarm.",
75
+ classNames: styles.warning
76
+ }));
77
+ }
78
+ };
79
+ var SavingIndicator = () => {
80
+ const [state, _setState] = useState(0);
81
+ switch (state) {
82
+ case 2:
83
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
84
+ variant: "ghost",
85
+ icon: "ph--circle--duotone",
86
+ iconOnly: true,
87
+ label: "Edit not saved.",
88
+ classNames: styles.warning
89
+ }));
90
+ case 1:
91
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
92
+ variant: "ghost",
93
+ icon: "ph--circle--duotone",
94
+ iconOnly: true,
95
+ label: "Saving...",
96
+ classNames: styles.success
97
+ }));
98
+ case 0:
99
+ default:
100
+ return /* @__PURE__ */ React.createElement(StatusBar.Item, null, /* @__PURE__ */ React.createElement(IconButton, {
101
+ variant: "ghost",
102
+ icon: "ph--circle--duotone",
103
+ iconOnly: true,
104
+ label: "Modified indicator."
105
+ }));
106
+ }
107
+ };
108
+ var indicators = [
109
+ SavingIndicator,
110
+ SwarmIndicator,
111
+ ErrorIndicator
112
+ ];
113
+ var DebugStatus = () => {
114
+ return /* @__PURE__ */ React.createElement(React.Fragment, null, indicators.map((Indicator) => /* @__PURE__ */ React.createElement(Indicator, {
115
+ key: Indicator.name
116
+ })));
117
+ };
118
+ export {
119
+ DebugStatus as default
120
+ };
121
+ //# sourceMappingURL=DebugStatus-YB3KFP7G.mjs.map