@dxos/plugin-debug 0.10.0 → 0.11.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.
Files changed (236) hide show
  1. package/PLUGIN.mdl +12 -325
  2. package/README.md +4 -14
  3. package/dist/lib/DebugPlugin.mjs +29 -0
  4. package/dist/lib/DebugPlugin.mjs.map +1 -0
  5. package/dist/lib/DebugPlugin.node.mjs +10 -0
  6. package/dist/lib/DebugPlugin.node.mjs.map +1 -0
  7. package/dist/lib/DebugPlugin.workerd.mjs +8 -0
  8. package/dist/lib/DebugPlugin.workerd.mjs.map +1 -0
  9. package/dist/lib/capabilities.mjs +11 -0
  10. package/dist/lib/capabilities.mjs.map +1 -0
  11. package/dist/lib/chunk-DebugObjectPanel.mjs +58 -0
  12. package/dist/lib/chunk-DebugObjectPanel.mjs.map +1 -0
  13. package/dist/lib/chunk-DebugSettings.mjs +237 -0
  14. package/dist/lib/chunk-DebugSettings.mjs.map +1 -0
  15. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs +39 -0
  16. package/dist/lib/chunk-DebugSpaceObjectsPanel.mjs.map +1 -0
  17. package/dist/lib/chunk-DebugStatus.mjs +117 -0
  18. package/dist/lib/chunk-DebugStatus.mjs.map +1 -0
  19. package/dist/lib/chunk-LogStatus.mjs +44 -0
  20. package/dist/lib/chunk-LogStatus.mjs.map +1 -0
  21. package/dist/lib/chunk-SpaceGenerator.mjs +208 -0
  22. package/dist/lib/chunk-SpaceGenerator.mjs.map +1 -0
  23. package/dist/lib/chunk-StatsPanel.mjs +58 -0
  24. package/dist/lib/chunk-StatsPanel.mjs.map +1 -0
  25. package/dist/lib/chunk-Wireframe.mjs +60 -0
  26. package/dist/lib/chunk-Wireframe.mjs.map +1 -0
  27. package/dist/lib/chunk-app-graph-builder.mjs +76 -0
  28. package/dist/lib/chunk-app-graph-builder.mjs.map +1 -0
  29. package/dist/lib/chunk-log-recording.mjs +17 -0
  30. package/dist/lib/chunk-log-recording.mjs.map +1 -0
  31. package/dist/lib/chunk-meta.mjs +36 -0
  32. package/dist/lib/chunk-meta.mjs.map +1 -0
  33. package/dist/lib/chunk-react-surface.mjs +193 -0
  34. package/dist/lib/chunk-react-surface.mjs.map +1 -0
  35. package/dist/lib/chunk-settings.mjs +23 -0
  36. package/dist/lib/chunk-settings.mjs.map +1 -0
  37. package/dist/lib/chunk-stats-panel.mjs +56 -0
  38. package/dist/lib/chunk-stats-panel.mjs.map +1 -0
  39. package/dist/lib/chunk-types.mjs +60 -0
  40. package/dist/lib/chunk-types.mjs.map +1 -0
  41. package/dist/lib/components.mjs +763 -0
  42. package/dist/lib/components.mjs.map +1 -0
  43. package/dist/lib/containers.mjs +14 -0
  44. package/dist/lib/containers.mjs.map +1 -0
  45. package/dist/lib/index.mjs +3 -0
  46. package/dist/lib/meta.mjs +2 -0
  47. package/dist/lib/plugin.mjs +8 -0
  48. package/dist/lib/plugin.mjs.map +1 -0
  49. package/dist/lib/translations.mjs +38 -0
  50. package/dist/lib/translations.mjs.map +1 -0
  51. package/dist/lib/types.mjs +2 -0
  52. package/dist/types/src/DebugPlugin.d.ts.map +1 -1
  53. package/dist/types/src/capabilities/DebugSurfaces.d.ts +25 -0
  54. package/dist/types/src/capabilities/DebugSurfaces.d.ts.map +1 -0
  55. package/dist/types/src/capabilities/app-graph-builder.d.ts +1 -1
  56. package/dist/types/src/capabilities/index.d.ts +4 -1
  57. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  58. package/dist/types/src/capabilities/log-recording.d.ts +10 -0
  59. package/dist/types/src/capabilities/log-recording.d.ts.map +1 -0
  60. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  61. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  62. package/dist/types/src/capabilities/settings.d.ts +1 -1
  63. package/dist/types/src/capabilities/stats-panel.d.ts +16 -0
  64. package/dist/types/src/capabilities/stats-panel.d.ts.map +1 -0
  65. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts +4 -3
  66. package/dist/types/src/components/SchemaTable/SchemaTable.d.ts.map +1 -1
  67. package/dist/types/src/components/SpaceGenerator/ObjectGenerator.d.ts.map +1 -1
  68. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts +4 -1
  69. package/dist/types/src/containers/DebugObjectPanel/DebugObjectPanel.d.ts.map +1 -1
  70. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts +4 -1
  71. package/dist/types/src/containers/DebugSettings/DebugSettings.d.ts.map +1 -1
  72. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts +30 -58
  73. package/dist/types/src/containers/DebugSettings/DebugSettings.stories.d.ts.map +1 -1
  74. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts +4 -1
  75. package/dist/types/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.d.ts.map +1 -1
  76. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts +4 -1
  77. package/dist/types/src/containers/DebugStatus/DebugStatus.d.ts.map +1 -1
  78. package/dist/types/src/containers/LogStatus/LogStatus.d.ts +6 -0
  79. package/dist/types/src/containers/LogStatus/LogStatus.d.ts.map +1 -0
  80. package/dist/types/src/containers/LogStatus/index.d.ts +2 -0
  81. package/dist/types/src/containers/LogStatus/index.d.ts.map +1 -0
  82. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts +1 -1
  83. package/dist/types/src/containers/SpaceGenerator/SpaceGenerator.d.ts.map +1 -1
  84. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts +6 -0
  85. package/dist/types/src/containers/StatsPanel/StatsPanel.d.ts.map +1 -0
  86. package/dist/types/src/containers/StatsPanel/index.d.ts +2 -0
  87. package/dist/types/src/containers/StatsPanel/index.d.ts.map +1 -0
  88. package/dist/types/src/containers/Wireframe/Wireframe.d.ts +4 -1
  89. package/dist/types/src/containers/Wireframe/Wireframe.d.ts.map +1 -1
  90. package/dist/types/src/containers/index.d.ts +4 -6
  91. package/dist/types/src/containers/index.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +26 -57
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/types/DebugNodes.d.ts +7 -0
  95. package/dist/types/src/types/DebugNodes.d.ts.map +1 -0
  96. package/dist/types/src/types/DebugSurface.d.ts +8 -0
  97. package/dist/types/src/types/DebugSurface.d.ts.map +1 -0
  98. package/dist/types/src/types/debug.d.ts +3 -1
  99. package/dist/types/src/types/debug.d.ts.map +1 -1
  100. package/dist/types/src/types/index.d.ts +2 -2
  101. package/dist/types/src/types/index.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/dx.config.ts +8 -13
  104. package/package.json +61 -63
  105. package/src/DebugPlugin.node.ts +1 -1
  106. package/src/DebugPlugin.tsx +10 -27
  107. package/src/DebugPlugin.workerd.ts +1 -1
  108. package/src/capabilities/DebugSurfaces.tsx +146 -0
  109. package/src/capabilities/app-graph-builder.ts +39 -373
  110. package/src/capabilities/index.ts +3 -2
  111. package/src/capabilities/log-recording.ts +20 -0
  112. package/src/capabilities/react-surface.ts +123 -0
  113. package/src/capabilities/stats-panel.ts +74 -0
  114. package/src/components/SchemaTable/SchemaTable.tsx +6 -5
  115. package/src/components/SpaceGenerator/ObjectGenerator.tsx +9 -3
  116. package/src/components/SpaceGenerator/presets.ts +2 -2
  117. package/src/components/index.ts +1 -1
  118. package/src/containers/DebugObjectPanel/DebugObjectPanel.tsx +20 -20
  119. package/src/containers/DebugSettings/DebugSettings.tsx +4 -3
  120. package/src/containers/DebugSpaceObjectsPanel/DebugSpaceObjectsPanel.tsx +4 -2
  121. package/src/containers/DebugStatus/DebugStatus.tsx +2 -0
  122. package/src/containers/LogStatus/LogStatus.tsx +51 -0
  123. package/src/containers/LogStatus/index.ts +5 -0
  124. package/src/containers/SpaceGenerator/SpaceGenerator.tsx +108 -10
  125. package/src/containers/StatsPanel/StatsPanel.tsx +74 -0
  126. package/src/containers/StatsPanel/index.ts +5 -0
  127. package/src/containers/Wireframe/Wireframe.tsx +2 -0
  128. package/src/containers/index.ts +9 -7
  129. package/src/index.ts +1 -1
  130. package/src/meta.ts +1 -1
  131. package/src/plugin.ts +1 -1
  132. package/src/translations.ts +8 -52
  133. package/src/types/DebugNodes.ts +18 -0
  134. package/src/types/DebugSurface.ts +16 -0
  135. package/src/types/debug.ts +3 -1
  136. package/src/types/index.ts +3 -3
  137. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs +0 -15
  138. package/dist/lib/neutral/DebugGraph-G4FWS57E.mjs.map +0 -7
  139. package/dist/lib/neutral/DebugObjectPanel-QSGQJ3LM.mjs +0 -61
  140. package/dist/lib/neutral/DebugObjectPanel-QSGQJ3LM.mjs.map +0 -7
  141. package/dist/lib/neutral/DebugPlugin.mjs +0 -59
  142. package/dist/lib/neutral/DebugPlugin.mjs.map +0 -7
  143. package/dist/lib/neutral/DebugPlugin.node.mjs +0 -18
  144. package/dist/lib/neutral/DebugPlugin.node.mjs.map +0 -7
  145. package/dist/lib/neutral/DebugPlugin.workerd.mjs +0 -12
  146. package/dist/lib/neutral/DebugPlugin.workerd.mjs.map +0 -7
  147. package/dist/lib/neutral/DebugSettings-Q3WUL6YQ.mjs +0 -229
  148. package/dist/lib/neutral/DebugSettings-Q3WUL6YQ.mjs.map +0 -7
  149. package/dist/lib/neutral/DebugSpaceObjectsPanel-AXFZWEIM.mjs +0 -36
  150. package/dist/lib/neutral/DebugSpaceObjectsPanel-AXFZWEIM.mjs.map +0 -7
  151. package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs +0 -122
  152. package/dist/lib/neutral/DebugStatus-H2BAHN26.mjs.map +0 -7
  153. package/dist/lib/neutral/DevtoolsOverviewContainer-DWQHTK7D.mjs +0 -24
  154. package/dist/lib/neutral/DevtoolsOverviewContainer-DWQHTK7D.mjs.map +0 -7
  155. package/dist/lib/neutral/GithubPanel-4CSJRVKE.mjs +0 -177
  156. package/dist/lib/neutral/GithubPanel-4CSJRVKE.mjs.map +0 -7
  157. package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs +0 -161
  158. package/dist/lib/neutral/RegistryPanel-64GIYJHN.mjs.map +0 -7
  159. package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs +0 -146
  160. package/dist/lib/neutral/SpaceGenerator-Y35G6DRV.mjs.map +0 -7
  161. package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs +0 -52
  162. package/dist/lib/neutral/Wireframe-WD7S2AUU.mjs.map +0 -7
  163. package/dist/lib/neutral/app-graph-builder-UKG4WVYK.mjs +0 -619
  164. package/dist/lib/neutral/app-graph-builder-UKG4WVYK.mjs.map +0 -7
  165. package/dist/lib/neutral/capabilities/index.mjs +0 -15
  166. package/dist/lib/neutral/capabilities/index.mjs.map +0 -7
  167. package/dist/lib/neutral/chunk-72QXLYMI.mjs +0 -118
  168. package/dist/lib/neutral/chunk-72QXLYMI.mjs.map +0 -7
  169. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  170. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  171. package/dist/lib/neutral/chunk-R5C4CKOF.mjs +0 -54
  172. package/dist/lib/neutral/chunk-R5C4CKOF.mjs.map +0 -7
  173. package/dist/lib/neutral/components/index.mjs +0 -961
  174. package/dist/lib/neutral/components/index.mjs.map +0 -7
  175. package/dist/lib/neutral/containers/index.mjs +0 -27
  176. package/dist/lib/neutral/containers/index.mjs.map +0 -7
  177. package/dist/lib/neutral/index.mjs +0 -20
  178. package/dist/lib/neutral/index.mjs.map +0 -7
  179. package/dist/lib/neutral/meta.json +0 -1
  180. package/dist/lib/neutral/meta.mjs +0 -8
  181. package/dist/lib/neutral/meta.mjs.map +0 -7
  182. package/dist/lib/neutral/plugin.mjs +0 -12
  183. package/dist/lib/neutral/plugin.mjs.map +0 -7
  184. package/dist/lib/neutral/react-context-UJURDOO6.mjs +0 -17
  185. package/dist/lib/neutral/react-context-UJURDOO6.mjs.map +0 -7
  186. package/dist/lib/neutral/react-surface-URESE7J4.mjs +0 -484
  187. package/dist/lib/neutral/react-surface-URESE7J4.mjs.map +0 -7
  188. package/dist/lib/neutral/settings-5I2674B6.mjs +0 -28
  189. package/dist/lib/neutral/settings-5I2674B6.mjs.map +0 -7
  190. package/dist/lib/neutral/translations.mjs +0 -91
  191. package/dist/lib/neutral/translations.mjs.map +0 -7
  192. package/dist/lib/neutral/types/index.mjs +0 -16
  193. package/dist/lib/neutral/types/index.mjs.map +0 -7
  194. package/dist/types/src/DebugPlugin.test.d.ts +0 -2
  195. package/dist/types/src/DebugPlugin.test.d.ts.map +0 -1
  196. package/dist/types/src/capabilities/react-context.d.ts +0 -5
  197. package/dist/types/src/capabilities/react-context.d.ts.map +0 -1
  198. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts +0 -8
  199. package/dist/types/src/containers/DebugGraph/DebugGraph.d.ts.map +0 -1
  200. package/dist/types/src/containers/DebugGraph/index.d.ts +0 -2
  201. package/dist/types/src/containers/DebugGraph/index.d.ts.map +0 -1
  202. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts +0 -3
  203. package/dist/types/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.d.ts.map +0 -1
  204. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts +0 -2
  205. package/dist/types/src/containers/DevtoolsOverviewContainer/index.d.ts.map +0 -1
  206. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts +0 -15
  207. package/dist/types/src/containers/GithubPanel/GithubComponent.d.ts.map +0 -1
  208. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts +0 -106
  209. package/dist/types/src/containers/GithubPanel/GithubComponent.stories.d.ts.map +0 -1
  210. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts +0 -3
  211. package/dist/types/src/containers/GithubPanel/GithubPanel.d.ts.map +0 -1
  212. package/dist/types/src/containers/GithubPanel/index.d.ts +0 -2
  213. package/dist/types/src/containers/GithubPanel/index.d.ts.map +0 -1
  214. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts +0 -3
  215. package/dist/types/src/containers/RegistryPanel/RegistryPanel.d.ts.map +0 -1
  216. package/dist/types/src/containers/RegistryPanel/index.d.ts +0 -2
  217. package/dist/types/src/containers/RegistryPanel/index.d.ts.map +0 -1
  218. package/dist/types/src/types/Devtools.d.ts +0 -57
  219. package/dist/types/src/types/Devtools.d.ts.map +0 -1
  220. package/dist/types/src/types/surface.d.ts +0 -4
  221. package/dist/types/src/types/surface.d.ts.map +0 -1
  222. package/src/DebugPlugin.test.ts +0 -29
  223. package/src/capabilities/react-context.tsx +0 -25
  224. package/src/capabilities/react-surface.tsx +0 -504
  225. package/src/containers/DebugGraph/DebugGraph.tsx +0 -14
  226. package/src/containers/DebugGraph/index.ts +0 -5
  227. package/src/containers/DevtoolsOverviewContainer/DevtoolsOverviewContainer.tsx +0 -27
  228. package/src/containers/DevtoolsOverviewContainer/index.ts +0 -5
  229. package/src/containers/GithubPanel/GithubComponent.stories.tsx +0 -38
  230. package/src/containers/GithubPanel/GithubComponent.tsx +0 -192
  231. package/src/containers/GithubPanel/GithubPanel.tsx +0 -17
  232. package/src/containers/GithubPanel/index.ts +0 -5
  233. package/src/containers/RegistryPanel/RegistryPanel.tsx +0 -150
  234. package/src/containers/RegistryPanel/index.ts +0 -5
  235. package/src/types/Devtools.ts +0 -73
  236. package/src/types/surface.ts +0 -10
@@ -1,177 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/GithubPanel/GithubPanel.tsx
4
- import React2 from "react";
5
-
6
- // src/containers/GithubPanel/GithubComponent.tsx
7
- import React, { createContext, useContext, useEffect, useState } from "react";
8
- import { IconButton, ScrollArea, useTranslation } from "@dxos/react-ui";
9
- import { meta } from "#meta";
10
- var DEFAULT_REPO = "dxos/dxos";
11
- var DEFAULT_LIMIT = 20;
12
- var ComponentContext = /* @__PURE__ */ createContext(null);
13
- var useComponentContext = () => {
14
- const ctx = useContext(ComponentContext);
15
- if (!ctx) {
16
- throw new Error("GithubComponent.* parts must be rendered inside GithubComponent.Root.");
17
- }
18
- return ctx;
19
- };
20
- var Root = ({ repo = DEFAULT_REPO, limit = DEFAULT_LIMIT, children }) => {
21
- const [pulls, setPulls] = useState([]);
22
- const [unavailable, setUnavailable] = useState(false);
23
- useEffect(() => {
24
- const controller = new AbortController();
25
- setPulls([]);
26
- setUnavailable(false);
27
- void (async () => {
28
- try {
29
- const url = new URL(`https://api.github.com/repos/${repo}/pulls`);
30
- url.searchParams.set("state", "closed");
31
- url.searchParams.set("sort", "updated");
32
- url.searchParams.set("direction", "desc");
33
- url.searchParams.set("per_page", String(limit * 2));
34
- const response = await fetch(url.toString(), {
35
- signal: controller.signal,
36
- headers: {
37
- Accept: "application/vnd.github+json"
38
- }
39
- });
40
- if (!response.ok) {
41
- setUnavailable(true);
42
- return;
43
- }
44
- const items = await response.json();
45
- setPulls(items.filter((pull) => pull.merged_at !== null).slice(0, limit));
46
- setUnavailable(false);
47
- } catch {
48
- if (controller.signal.aborted) {
49
- return;
50
- }
51
- setPulls([]);
52
- setUnavailable(true);
53
- }
54
- })();
55
- return () => controller.abort();
56
- }, [
57
- repo,
58
- limit
59
- ]);
60
- return /* @__PURE__ */ React.createElement(ComponentContext.Provider, {
61
- value: {
62
- repo,
63
- pulls,
64
- unavailable
65
- }
66
- }, children);
67
- };
68
- var Header = () => {
69
- const { t } = useTranslation(meta.profile.key);
70
- const { repo, pulls, unavailable } = useComponentContext();
71
- return /* @__PURE__ */ React.createElement("header", {
72
- className: "flex items-center justify-between gap-1 px-4 py-3 bg-modal-surface border-b border-subdued-separator"
73
- }, /* @__PURE__ */ React.createElement("a", {
74
- href: `https://github.com/${repo}`,
75
- target: "_blank",
76
- rel: "noopener noreferrer",
77
- className: "text-sm font-medium truncate"
78
- }, "@", repo), /* @__PURE__ */ React.createElement("div", {
79
- className: "text-xs text-description"
80
- }, unavailable ? t("github-unavailable.message") : pulls.length > 0 ? t("recent-prs.label", {
81
- count: pulls.length
82
- }) : t("github-loading.message")));
83
- };
84
- var RELATIVE_UNITS = [
85
- [
86
- "year",
87
- 60 * 60 * 24 * 365
88
- ],
89
- [
90
- "month",
91
- 60 * 60 * 24 * 30
92
- ],
93
- [
94
- "week",
95
- 60 * 60 * 24 * 7
96
- ],
97
- [
98
- "day",
99
- 60 * 60 * 24
100
- ],
101
- [
102
- "hour",
103
- 60 * 60
104
- ],
105
- [
106
- "minute",
107
- 60
108
- ]
109
- ];
110
- var formatRelative = (iso) => {
111
- const formatter = new Intl.RelativeTimeFormat(void 0, {
112
- numeric: "auto"
113
- });
114
- const diffSeconds = (Date.parse(iso) - Date.now()) / 1e3;
115
- const absDiff = Math.abs(diffSeconds);
116
- for (const [unit, secondsInUnit] of RELATIVE_UNITS) {
117
- if (absDiff >= secondsInUnit) {
118
- return formatter.format(Math.round(diffSeconds / secondsInUnit), unit);
119
- }
120
- }
121
- return formatter.format(Math.round(diffSeconds), "second");
122
- };
123
- var PullRow = ({ pull }) => /* @__PURE__ */ React.createElement("li", null, /* @__PURE__ */ React.createElement("a", {
124
- href: pull.html_url,
125
- target: "_blank",
126
- rel: "noopener noreferrer",
127
- className: "flex items-start gap-2 px-2 py-1 rounded-sm hover:bg-hover-surface"
128
- }, /* @__PURE__ */ React.createElement("img", {
129
- src: pull.user.avatar_url,
130
- alt: "",
131
- className: "w-6 h-6 rounded-full shrink-0 mt-0.5"
132
- }), /* @__PURE__ */ React.createElement("div", {
133
- className: "flex flex-col min-w-0 flex-1"
134
- }, /* @__PURE__ */ React.createElement("span", {
135
- className: "text-sm truncate"
136
- }, pull.title), /* @__PURE__ */ React.createElement("span", {
137
- className: "text-xs text-description truncate"
138
- }, "#", pull.number, " \xB7 ", pull.user.login, " \xB7 ", pull.merged_at ? formatRelative(pull.merged_at) : ""))));
139
- var Content = () => {
140
- const { pulls } = useComponentContext();
141
- return /* @__PURE__ */ React.createElement(ScrollArea.Root, {
142
- orientation: "vertical"
143
- }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, null, /* @__PURE__ */ React.createElement("ul", {
144
- className: "flex flex-col p-1"
145
- }, pulls.map((pull) => /* @__PURE__ */ React.createElement(PullRow, {
146
- key: pull.number,
147
- pull
148
- })))));
149
- };
150
- var StatusBar = () => {
151
- const { t } = useTranslation(meta.profile.key);
152
- const { repo } = useComponentContext();
153
- return /* @__PURE__ */ React.createElement(IconButton, {
154
- icon: "ph--github-logo--regular",
155
- label: t("view-on-github.button"),
156
- variant: "primary",
157
- classNames: "w-full",
158
- onClick: () => {
159
- window.open(`https://github.com/${repo}`, "_blank", "noopener,noreferrer");
160
- }
161
- });
162
- };
163
- var GithubComponent = {
164
- Root,
165
- Header,
166
- Content,
167
- StatusBar
168
- };
169
-
170
- // src/containers/GithubPanel/GithubPanel.tsx
171
- var GithubPanel = () => /* @__PURE__ */ React2.createElement(GithubComponent.Root, null, /* @__PURE__ */ React2.createElement("div", {
172
- className: "h-full grid grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden h-full is-full"
173
- }, /* @__PURE__ */ React2.createElement(GithubComponent.Header, null), /* @__PURE__ */ React2.createElement(GithubComponent.Content, null), /* @__PURE__ */ React2.createElement(GithubComponent.StatusBar, null)));
174
- export {
175
- GithubPanel as default
176
- };
177
- //# sourceMappingURL=GithubPanel-4CSJRVKE.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/GithubPanel/GithubPanel.tsx", "../../../src/containers/GithubPanel/GithubComponent.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React from 'react';\n\nimport { GithubComponent } from './GithubComponent';\n\nexport const GithubPanel = () => (\n <GithubComponent.Root>\n <div className='h-full grid grid-rows-[auto_minmax(0,1fr)_auto] overflow-hidden h-full is-full'>\n <GithubComponent.Header />\n <GithubComponent.Content />\n <GithubComponent.StatusBar />\n </div>\n </GithubComponent.Root>\n);\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { type ReactNode, createContext, useContext, useEffect, useState } from 'react';\n\nimport { IconButton, ScrollArea, useTranslation } from '@dxos/react-ui';\n\nimport { meta } from '#meta';\n\nconst DEFAULT_REPO = 'dxos/dxos';\nconst DEFAULT_LIMIT = 20;\n\ntype GithubUser = {\n login: string;\n avatar_url: string;\n html_url: string;\n};\n\ntype GithubPullRequest = {\n number: number;\n title: string;\n html_url: string;\n merged_at: string | null;\n user: GithubUser;\n};\n\ntype ComponentContextValue = {\n repo: string;\n pulls: GithubPullRequest[];\n unavailable: boolean;\n};\n\nconst ComponentContext = createContext<ComponentContextValue | null>(null);\n\nconst useComponentContext = () => {\n const ctx = useContext(ComponentContext);\n if (!ctx) {\n throw new Error('GithubComponent.* parts must be rendered inside GithubComponent.Root.');\n }\n return ctx;\n};\n\nexport type GithubComponentRootProps = {\n /** `<owner>/<name>`. Defaults to `dxos/dxos`. */\n repo?: string;\n /** Maximum number of merged PRs to fetch. */\n limit?: number;\n children?: ReactNode;\n};\n\nconst Root = ({ repo = DEFAULT_REPO, limit = DEFAULT_LIMIT, children }: GithubComponentRootProps) => {\n const [pulls, setPulls] = useState<GithubPullRequest[]>([]);\n const [unavailable, setUnavailable] = useState(false);\n\n useEffect(() => {\n const controller = new AbortController();\n setPulls([]);\n setUnavailable(false);\n void (async () => {\n try {\n const url = new URL(`https://api.github.com/repos/${repo}/pulls`);\n url.searchParams.set('state', 'closed');\n url.searchParams.set('sort', 'updated');\n url.searchParams.set('direction', 'desc');\n url.searchParams.set('per_page', String(limit * 2));\n const response = await fetch(url.toString(), {\n signal: controller.signal,\n headers: { Accept: 'application/vnd.github+json' },\n });\n if (!response.ok) {\n setUnavailable(true);\n return;\n }\n const items = (await response.json()) as GithubPullRequest[];\n setPulls(items.filter((pull) => pull.merged_at !== null).slice(0, limit));\n setUnavailable(false);\n } catch {\n if (controller.signal.aborted) {\n return;\n }\n setPulls([]);\n setUnavailable(true);\n }\n })();\n return () => controller.abort();\n }, [repo, limit]);\n\n return <ComponentContext.Provider value={{ repo, pulls, unavailable }}>{children}</ComponentContext.Provider>;\n};\n\nconst Header = () => {\n const { t } = useTranslation(meta.profile.key);\n const { repo, pulls, unavailable } = useComponentContext();\n return (\n <header className='flex items-center justify-between gap-1 px-4 py-3 bg-modal-surface border-b border-subdued-separator'>\n <a\n href={`https://github.com/${repo}`}\n target='_blank'\n rel='noopener noreferrer'\n className='text-sm font-medium truncate'\n >\n @{repo}\n </a>\n <div className='text-xs text-description'>\n {unavailable\n ? t('github-unavailable.message')\n : pulls.length > 0\n ? t('recent-prs.label', { count: pulls.length })\n : t('github-loading.message')}\n </div>\n </header>\n );\n};\n\nconst RELATIVE_UNITS: Array<[Intl.RelativeTimeFormatUnit, number]> = [\n ['year', 60 * 60 * 24 * 365],\n ['month', 60 * 60 * 24 * 30],\n ['week', 60 * 60 * 24 * 7],\n ['day', 60 * 60 * 24],\n ['hour', 60 * 60],\n ['minute', 60],\n];\n\nconst formatRelative = (iso: string): string => {\n const formatter = new Intl.RelativeTimeFormat(undefined, { numeric: 'auto' });\n const diffSeconds = (Date.parse(iso) - Date.now()) / 1000;\n const absDiff = Math.abs(diffSeconds);\n for (const [unit, secondsInUnit] of RELATIVE_UNITS) {\n if (absDiff >= secondsInUnit) {\n return formatter.format(Math.round(diffSeconds / secondsInUnit), unit);\n }\n }\n return formatter.format(Math.round(diffSeconds), 'second');\n};\n\nconst PullRow = ({ pull }: { pull: GithubPullRequest }) => (\n <li>\n <a\n href={pull.html_url}\n target='_blank'\n rel='noopener noreferrer'\n className='flex items-start gap-2 px-2 py-1 rounded-sm hover:bg-hover-surface'\n >\n <img src={pull.user.avatar_url} alt='' className='w-6 h-6 rounded-full shrink-0 mt-0.5' />\n <div className='flex flex-col min-w-0 flex-1'>\n <span className='text-sm truncate'>{pull.title}</span>\n <span className='text-xs text-description truncate'>\n #{pull.number} · {pull.user.login} · {pull.merged_at ? formatRelative(pull.merged_at) : ''}\n </span>\n </div>\n </a>\n </li>\n);\n\nconst Content = () => {\n const { pulls } = useComponentContext();\n return (\n <ScrollArea.Root orientation='vertical'>\n <ScrollArea.Viewport>\n <ul className='flex flex-col p-1'>\n {pulls.map((pull) => (\n <PullRow key={pull.number} pull={pull} />\n ))}\n </ul>\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n );\n};\n\nconst StatusBar = () => {\n const { t } = useTranslation(meta.profile.key);\n const { repo } = useComponentContext();\n return (\n <IconButton\n icon='ph--github-logo--regular'\n label={t('view-on-github.button')}\n variant='primary'\n classNames='w-full'\n onClick={() => {\n window.open(`https://github.com/${repo}`, '_blank', 'noopener,noreferrer');\n }}\n />\n );\n};\n\nexport const GithubComponent = {\n Root,\n Header,\n Content,\n StatusBar,\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "React", "createContext", "useContext", "useEffect", "useState", "IconButton", "ScrollArea", "useTranslation", "meta", "DEFAULT_REPO", "DEFAULT_LIMIT", "ComponentContext", "useComponentContext", "ctx", "Error", "Root", "repo", "limit", "children", "pulls", "setPulls", "unavailable", "setUnavailable", "controller", "AbortController", "url", "URL", "searchParams", "set", "String", "response", "fetch", "toString", "signal", "headers", "Accept", "ok", "items", "json", "filter", "pull", "merged_at", "slice", "aborted", "abort", "Provider", "value", "Header", "t", "profile", "key", "header", "className", "a", "href", "target", "rel", "div", "length", "count", "RELATIVE_UNITS", "formatRelative", "iso", "formatter", "Intl", "RelativeTimeFormat", "undefined", "numeric", "diffSeconds", "Date", "parse", "now", "absDiff", "Math", "abs", "unit", "secondsInUnit", "format", "round", "PullRow", "li", "html_url", "img", "src", "user", "avatar_url", "alt", "span", "title", "number", "login", "Content", "orientation", "Viewport", "ul", "map", "StatusBar", "icon", "label", "variant", "classNames", "onClick", "window", "open", "GithubComponent", "GithubPanel", "React", "GithubComponent", "Root", "div", "className", "Header", "Content", "StatusBar"]
7
- }
@@ -1,161 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/RegistryPanel/RegistryPanel.tsx
4
- import React, { useCallback, useEffect, useMemo, useState } from "react";
5
- import { Operation } from "@dxos/compute";
6
- import { JsonView, PanelContainer, Placeholder, Searchbar } from "@dxos/devtools";
7
- import { Entity, Format, Obj, Type } from "@dxos/echo";
8
- import { useClient } from "@dxos/react-client";
9
- import { Toolbar } from "@dxos/react-ui";
10
- import { DynamicTable } from "@dxos/react-ui-table";
11
- import { mx } from "@dxos/ui-theme";
12
- var textFilter = (text) => {
13
- if (!text) {
14
- return () => true;
15
- }
16
- const matcher = new RegExp(text, "i");
17
- return (entity) => {
18
- const typename = Entity.getTypename(entity) ?? "";
19
- const metaKey = Obj.isObject(entity) ? Obj.getMeta(entity).key ?? "" : "";
20
- const uri = Type.isType(entity) ? Type.getURI(entity)?.toString() ?? "" : "";
21
- const operationKey = Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity) ? Operation.getKey(entity) ?? "" : "";
22
- const name = Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity) ? entity.name : "";
23
- return [
24
- typename,
25
- metaKey,
26
- uri,
27
- operationKey,
28
- name,
29
- getEntityId(entity)
30
- ].some((value) => value.match(matcher));
31
- };
32
- };
33
- var getEntityId = (entity) => {
34
- if (entity.id) {
35
- return entity.id;
36
- }
37
- if (Type.isType(entity)) {
38
- return Type.getURI(entity)?.toString() ?? Type.getTypename(entity) ?? "unknown-type";
39
- }
40
- return Entity.getTypename(entity) ?? "unknown";
41
- };
42
- var getKind = (entity) => {
43
- if (Type.isType(entity)) {
44
- return "type";
45
- }
46
- if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {
47
- return "operation";
48
- }
49
- return "other";
50
- };
51
- var getLabel = (entity) => {
52
- if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {
53
- return entity.name || Operation.getKey(entity) || getEntityId(entity);
54
- }
55
- if (Type.isType(entity)) {
56
- return Type.getTypename(entity) ?? getEntityId(entity);
57
- }
58
- return getEntityId(entity);
59
- };
60
- var toDetailJson = (entity) => {
61
- if (Type.isType(entity)) {
62
- return {
63
- id: getEntityId(entity),
64
- typename: Type.getTypename(entity),
65
- uri: Type.getURI(entity)?.toString(),
66
- version: Type.getVersion(entity),
67
- jsonSchema: entity.jsonSchema
68
- };
69
- }
70
- if (Obj.isObject(entity)) {
71
- return Obj.toJSON(entity);
72
- }
73
- return {
74
- id: getEntityId(entity),
75
- typename: Entity.getTypename(entity)
76
- };
77
- };
78
- var RegistryPanel = () => {
79
- const client = useClient();
80
- const [entities, setEntities] = useState([]);
81
- const [filter, setFilter] = useState("");
82
- const [selected, setSelected] = useState();
83
- useEffect(() => {
84
- const registry = client.graph.registry;
85
- const refresh = () => setEntities([
86
- ...registry.list()
87
- ]);
88
- refresh();
89
- return registry.changed.on(refresh);
90
- }, [
91
- client
92
- ]);
93
- const properties = useMemo(() => [
94
- {
95
- name: "kind",
96
- format: Format.TypeFormat.String,
97
- size: 100
98
- },
99
- {
100
- name: "label",
101
- format: Format.TypeFormat.String
102
- },
103
- {
104
- name: "id",
105
- format: Format.TypeFormat.String,
106
- size: 280
107
- }
108
- ], []);
109
- const rows = useMemo(() => {
110
- return entities.filter(textFilter(filter)).map((entity) => ({
111
- id: getEntityId(entity),
112
- kind: getKind(entity),
113
- label: getLabel(entity),
114
- _entity: entity
115
- })).toSorted((left, right) => left.label.localeCompare(right.label));
116
- }, [
117
- entities,
118
- filter
119
- ]);
120
- const handleRowClicked = useCallback((row) => {
121
- if (!row?._entity) {
122
- return;
123
- }
124
- setSelected(row._entity);
125
- }, []);
126
- const detailJson = useMemo(() => selected ? toDetailJson(selected) : void 0, [
127
- selected
128
- ]);
129
- const features = useMemo(() => ({
130
- selection: {
131
- enabled: true,
132
- mode: "single"
133
- }
134
- }), []);
135
- return /* @__PURE__ */ React.createElement(PanelContainer, {
136
- toolbar: /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(Searchbar, {
137
- placeholder: "Filter...",
138
- onChange: setFilter
139
- }))
140
- }, /* @__PURE__ */ React.createElement("div", {
141
- className: mx("h-full grid grid-cols-[2fr_1fr] overflow-hidden")
142
- }, /* @__PURE__ */ React.createElement("div", {
143
- className: mx("flex flex-col min-h-0 overflow-hidden")
144
- }, /* @__PURE__ */ React.createElement(DynamicTable, {
145
- properties,
146
- rows,
147
- features,
148
- onRowClick: handleRowClicked
149
- })), /* @__PURE__ */ React.createElement("div", {
150
- className: mx("min-h-0 h-full overflow-auto border-s border-separator text-sm")
151
- }, detailJson ? /* @__PURE__ */ React.createElement(JsonView, {
152
- data: detailJson
153
- }) : /* @__PURE__ */ React.createElement(Placeholder, {
154
- label: "Details"
155
- }))));
156
- };
157
- export {
158
- RegistryPanel,
159
- RegistryPanel as default
160
- };
161
- //# sourceMappingURL=RegistryPanel-64GIYJHN.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/RegistryPanel/RegistryPanel.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2026 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { Operation } from '@dxos/compute';\nimport { JsonView, PanelContainer, Placeholder, Searchbar } from '@dxos/devtools';\nimport { Entity, Format, Obj, Type } from '@dxos/echo';\nimport { useClient } from '@dxos/react-client';\nimport { Toolbar } from '@dxos/react-ui';\nimport { DynamicTable, type TableFeatures } from '@dxos/react-ui-table';\nimport { mx } from '@dxos/ui-theme';\n\ntype RegistryRow = {\n id: string;\n kind: string;\n label: string;\n _entity: Entity.Unknown;\n};\n\nconst textFilter = (text?: string) => {\n if (!text) {\n return () => true;\n }\n\n const matcher = new RegExp(text, 'i');\n return (entity: Entity.Unknown) => {\n const typename = Entity.getTypename(entity) ?? '';\n const metaKey = Obj.isObject(entity) ? (Obj.getMeta(entity).key ?? '') : '';\n const uri = Type.isType(entity) ? (Type.getURI(entity)?.toString() ?? '') : '';\n const operationKey =\n Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)\n ? (Operation.getKey(entity) ?? '')\n : '';\n const name = Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity) ? entity.name : '';\n return [typename, metaKey, uri, operationKey, name, getEntityId(entity)].some((value) => value.match(matcher));\n };\n};\n\nconst getEntityId = (entity: Entity.Unknown): string => {\n if (entity.id) {\n return entity.id;\n }\n if (Type.isType(entity)) {\n return Type.getURI(entity)?.toString() ?? Type.getTypename(entity) ?? 'unknown-type';\n }\n return Entity.getTypename(entity) ?? 'unknown';\n};\n\nconst getKind = (entity: Entity.Unknown): string => {\n if (Type.isType(entity)) {\n return 'type';\n }\n if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {\n return 'operation';\n }\n return 'other';\n};\n\nconst getLabel = (entity: Entity.Unknown): string => {\n if (Obj.isObject(entity) && Obj.instanceOf(Operation.PersistentOperation, entity)) {\n return entity.name || Operation.getKey(entity) || getEntityId(entity);\n }\n if (Type.isType(entity)) {\n return Type.getTypename(entity) ?? getEntityId(entity);\n }\n return getEntityId(entity);\n};\n\nconst toDetailJson = (entity: Entity.Unknown): object => {\n if (Type.isType(entity)) {\n return {\n id: getEntityId(entity),\n typename: Type.getTypename(entity),\n uri: Type.getURI(entity)?.toString(),\n version: Type.getVersion(entity),\n jsonSchema: entity.jsonSchema,\n };\n }\n if (Obj.isObject(entity)) {\n return Obj.toJSON(entity);\n }\n return { id: getEntityId(entity), typename: Entity.getTypename(entity) };\n};\n\nexport const RegistryPanel = () => {\n const client = useClient();\n const [entities, setEntities] = useState<Entity.Unknown[]>([]);\n const [filter, setFilter] = useState('');\n const [selected, setSelected] = useState<Entity.Unknown>();\n\n useEffect(() => {\n const registry = client.graph.registry;\n const refresh = () => setEntities([...registry.list()]);\n refresh();\n return registry.changed.on(refresh);\n }, [client]);\n\n const properties = useMemo(\n () => [\n { name: 'kind', format: Format.TypeFormat.String, size: 100 },\n { name: 'label', format: Format.TypeFormat.String },\n { name: 'id', format: Format.TypeFormat.String, size: 280 },\n ],\n [],\n );\n\n const rows = useMemo((): RegistryRow[] => {\n return entities\n .filter(textFilter(filter))\n .map((entity) => ({\n id: getEntityId(entity),\n kind: getKind(entity),\n label: getLabel(entity),\n _entity: entity,\n }))\n .toSorted((left, right) => left.label.localeCompare(right.label));\n }, [entities, filter]);\n\n const handleRowClicked = useCallback((row: RegistryRow | undefined) => {\n if (!row?._entity) {\n return;\n }\n setSelected(row._entity);\n }, []);\n\n const detailJson = useMemo(() => (selected ? toDetailJson(selected) : undefined), [selected]);\n\n const features: Partial<TableFeatures> = useMemo(() => ({ selection: { enabled: true, mode: 'single' } }), []);\n\n return (\n <PanelContainer\n toolbar={\n <Toolbar.Root>\n <Searchbar placeholder='Filter...' onChange={setFilter} />\n </Toolbar.Root>\n }\n >\n <div className={mx('h-full grid grid-cols-[2fr_1fr] overflow-hidden')}>\n <div className={mx('flex flex-col min-h-0 overflow-hidden')}>\n <DynamicTable properties={properties} rows={rows} features={features} onRowClick={handleRowClicked} />\n </div>\n <div className={mx('min-h-0 h-full overflow-auto border-s border-separator text-sm')}>\n {detailJson ? <JsonView data={detailJson} /> : <Placeholder label='Details' />}\n </div>\n </div>\n </PanelContainer>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useEffect", "useMemo", "useState", "Operation", "JsonView", "PanelContainer", "Placeholder", "Searchbar", "Entity", "Format", "Obj", "Type", "useClient", "Toolbar", "DynamicTable", "mx", "textFilter", "text", "matcher", "RegExp", "entity", "typename", "getTypename", "metaKey", "isObject", "getMeta", "key", "uri", "isType", "getURI", "toString", "operationKey", "instanceOf", "PersistentOperation", "getKey", "name", "getEntityId", "some", "value", "match", "id", "getKind", "getLabel", "toDetailJson", "version", "getVersion", "jsonSchema", "toJSON", "RegistryPanel", "client", "entities", "setEntities", "filter", "setFilter", "selected", "setSelected", "registry", "graph", "refresh", "list", "changed", "on", "properties", "format", "TypeFormat", "String", "size", "rows", "map", "kind", "label", "_entity", "toSorted", "left", "right", "localeCompare", "handleRowClicked", "row", "detailJson", "undefined", "features", "selection", "enabled", "mode", "toolbar", "Root", "placeholder", "onChange", "div", "className", "onRowClick", "data"]
7
- }
@@ -1,146 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/SpaceGenerator/SpaceGenerator.tsx
4
- import React, { useCallback, useMemo, useState } from "react";
5
- import { useOperationInvoker } from "@dxos/app-framework/ui";
6
- import { ComputeGraph } from "@dxos/conductor";
7
- import { Filter, Obj, Type } from "@dxos/echo";
8
- import { Markdown } from "@dxos/plugin-markdown";
9
- import { Sheet } from "@dxos/plugin-sheet";
10
- import { Sketch } from "@dxos/plugin-sketch";
11
- import { useClient } from "@dxos/react-client";
12
- import { IconButton, Input, Panel, ScrollArea, Toolbar, useAsyncEffect } from "@dxos/react-ui";
13
- import { composable, composableProps } from "@dxos/react-ui";
14
- import { Organization, Person, Task } from "@dxos/types";
15
- import { sortKeys } from "@dxos/util";
16
- import { SchemaTable, createGenerator, generator, staticGenerators } from "#components";
17
- var staticTypes = [
18
- Markdown.Document,
19
- Sketch.Sketch,
20
- Sheet.Sheet,
21
- ComputeGraph
22
- ];
23
- var recordTypes = [
24
- Organization.Organization,
25
- Person.Person,
26
- Task.Task
27
- ];
28
- var SpaceGenerator = composable(({ space, onCreateObjects, children, ...props }, forwardedRef) => {
29
- const { invokePromise } = useOperationInvoker();
30
- const client = useClient();
31
- const [count, setCount] = useState(1);
32
- const [info, setInfo] = useState({});
33
- const presets = useMemo(() => generator(), []);
34
- useAsyncEffect(async () => {
35
- await client.addTypes([
36
- ...staticTypes,
37
- ...recordTypes,
38
- ...presets.schemas
39
- ]);
40
- }, [
41
- client,
42
- presets
43
- ]);
44
- const typeMap = useMemo(() => {
45
- const recordGenerators = new Map(recordTypes.map((type) => [
46
- Type.getTypename(type),
47
- createGenerator(client, invokePromise, type)
48
- ]));
49
- return new Map([
50
- ...staticGenerators,
51
- ...presets.items,
52
- ...recordGenerators
53
- ]);
54
- }, [
55
- client,
56
- invokePromise,
57
- presets
58
- ]);
59
- const updateInfo = useCallback(async () => {
60
- const allSchema = [
61
- ...space.db.graph.registry.list().filter(Type.isType)
62
- ];
63
- const echoSchema = allSchema.filter((t) => Type.isTypeKind(t));
64
- const staticSchema = allSchema.filter((t) => !Type.isTypeKind(t));
65
- const objects = await space.db.query(Filter.everything()).run();
66
- const objectMap = sortKeys(objects.reduce((map, obj) => {
67
- const type = Obj.getTypename(obj);
68
- if (type) {
69
- const count2 = map[type] ?? 0;
70
- map[type] = count2 + 1;
71
- }
72
- return map;
73
- }, {}));
74
- setInfo({
75
- schema: {
76
- static: staticSchema.length,
77
- mutable: echoSchema.length
78
- },
79
- objects: objectMap
80
- });
81
- }, [
82
- space
83
- ]);
84
- useAsyncEffect(updateInfo, [
85
- updateInfo
86
- ]);
87
- const handleCreateData = useCallback(async (typename) => {
88
- const constructor = typeMap.get(typename);
89
- if (constructor) {
90
- await constructor(space, count, onCreateObjects);
91
- await updateInfo();
92
- }
93
- }, [
94
- typeMap,
95
- count,
96
- space,
97
- onCreateObjects,
98
- updateInfo
99
- ]);
100
- return /* @__PURE__ */ React.createElement(Panel.Root, {
101
- ...composableProps(props),
102
- ref: forwardedRef
103
- }, /* @__PURE__ */ React.createElement(Panel.Toolbar, {
104
- asChild: true
105
- }, /* @__PURE__ */ React.createElement(Toolbar.Root, null, /* @__PURE__ */ React.createElement(IconButton, {
106
- icon: "ph--arrow-clockwise--regular",
107
- iconOnly: true,
108
- label: "Refresh",
109
- onClick: updateInfo
110
- }), /* @__PURE__ */ React.createElement(Toolbar.Separator, null), /* @__PURE__ */ React.createElement(Input.Root, null, /* @__PURE__ */ React.createElement(Input.TextInput, {
111
- type: "number",
112
- placeholder: "Count",
113
- classNames: "w-[4rem] text-right",
114
- min: 1,
115
- max: 100,
116
- size: 8,
117
- value: count,
118
- onChange: (event) => setCount(parseInt(event.target.value))
119
- })))), /* @__PURE__ */ React.createElement(Panel.Content, {
120
- asChild: true
121
- }, /* @__PURE__ */ React.createElement(ScrollArea.Root, {
122
- thin: true,
123
- orientation: "vertical"
124
- }, /* @__PURE__ */ React.createElement(ScrollArea.Viewport, {
125
- classNames: "dx-document gap-4 divide-y divide-subdued-separator"
126
- }, /* @__PURE__ */ React.createElement(SchemaTable, {
127
- types: staticTypes,
128
- objects: info.objects,
129
- label: "Static Types",
130
- onClick: handleCreateData
131
- }), /* @__PURE__ */ React.createElement(SchemaTable, {
132
- types: recordTypes,
133
- objects: info.objects,
134
- label: "Record Types",
135
- onClick: handleCreateData
136
- }), /* @__PURE__ */ React.createElement(SchemaTable, {
137
- types: presets.types,
138
- objects: info.objects,
139
- label: "Presets",
140
- onClick: handleCreateData
141
- })))));
142
- });
143
- export {
144
- SpaceGenerator as default
145
- };
146
- //# sourceMappingURL=SpaceGenerator-Y35G6DRV.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/SpaceGenerator/SpaceGenerator.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo, useState } from 'react';\n\nimport { useOperationInvoker } from '@dxos/app-framework/ui';\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Filter, Obj, Type } from '@dxos/echo';\nimport { Markdown } from '@dxos/plugin-markdown';\nimport { Sheet } from '@dxos/plugin-sheet';\nimport { Sketch } from '@dxos/plugin-sketch';\nimport { useClient } from '@dxos/react-client';\nimport { type Space } from '@dxos/react-client/echo';\nimport { IconButton, Input, Panel, ScrollArea, Toolbar, useAsyncEffect } from '@dxos/react-ui';\nimport { composable, composableProps } from '@dxos/react-ui';\nimport { Organization, Person, Task } from '@dxos/types';\nimport { sortKeys } from '@dxos/util';\n\nimport { type ObjectGenerator, SchemaTable, createGenerator, generator, staticGenerators } from '#components';\n\n// TODO(burdon): Make extensible.\nconst staticTypes = [Markdown.Document, Sketch.Sketch, Sheet.Sheet, ComputeGraph];\nconst recordTypes: Type.AnyObj[] = [Organization.Organization, Person.Person, Task.Task];\n\nexport type SpaceGeneratorProps = {\n space: Space;\n onCreateObjects?: (objects: Obj.Unknown[]) => void;\n};\n\nexport const SpaceGenerator = composable<HTMLDivElement, SpaceGeneratorProps>(\n ({ space, onCreateObjects, children, ...props }, forwardedRef) => {\n const { invokePromise } = useOperationInvoker();\n const client = useClient();\n const [count, setCount] = useState(1);\n const [info, setInfo] = useState<any>({});\n const presets = useMemo(() => generator(), []);\n\n // Register types.\n useAsyncEffect(async () => {\n await client.addTypes([...staticTypes, ...recordTypes, ...presets.schemas]);\n }, [client, presets]);\n\n // Create type generators.\n const typeMap = useMemo(() => {\n const recordGenerators = new Map<string, ObjectGenerator<any>>(\n recordTypes.map((type) => [Type.getTypename(type), createGenerator(client, invokePromise, type)]),\n );\n\n return new Map([...staticGenerators, ...presets.items, ...recordGenerators]);\n }, [client, invokePromise, presets]);\n\n // Query space to get info.\n const updateInfo = useCallback(async () => {\n const allSchema = [...space.db.graph.registry.list().filter(Type.isType)];\n const echoSchema = allSchema.filter((t) => Type.isTypeKind(t));\n const staticSchema = allSchema.filter((t) => !Type.isTypeKind(t));\n\n const objects = await space.db.query(Filter.everything()).run();\n const objectMap = sortKeys(\n objects.reduce<Record<string, number>>((map, obj) => {\n const type = Obj.getTypename(obj);\n if (type) {\n const count = map[type] ?? 0;\n map[type] = count + 1;\n }\n\n return map;\n }, {}),\n );\n\n setInfo({\n schema: {\n static: staticSchema.length,\n mutable: echoSchema.length,\n },\n objects: objectMap,\n });\n }, [space]);\n\n useAsyncEffect(updateInfo, [updateInfo]);\n\n const handleCreateData = useCallback(\n async (typename: string) => {\n const constructor = typeMap.get(typename);\n if (constructor) {\n // TODO(burdon): Input to specify number of objects.\n await constructor(space, count, onCreateObjects);\n await updateInfo();\n }\n },\n [typeMap, count, space, onCreateObjects, updateInfo],\n );\n\n return (\n <Panel.Root {...composableProps(props)} ref={forwardedRef}>\n <Panel.Toolbar asChild>\n <Toolbar.Root>\n <IconButton icon='ph--arrow-clockwise--regular' iconOnly label='Refresh' onClick={updateInfo} />\n <Toolbar.Separator />\n <Input.Root>\n <Input.TextInput\n type='number'\n placeholder='Count'\n classNames='w-[4rem] text-right'\n min={1}\n max={100}\n size={8}\n value={count}\n onChange={(event) => setCount(parseInt(event.target.value))}\n />\n </Input.Root>\n </Toolbar.Root>\n </Panel.Toolbar>\n <Panel.Content asChild>\n <ScrollArea.Root thin orientation='vertical'>\n <ScrollArea.Viewport classNames='dx-document gap-4 divide-y divide-subdued-separator'>\n <SchemaTable types={staticTypes} objects={info.objects} label='Static Types' onClick={handleCreateData} />\n <SchemaTable types={recordTypes} objects={info.objects} label='Record Types' onClick={handleCreateData} />\n <SchemaTable types={presets.types} objects={info.objects} label='Presets' onClick={handleCreateData} />\n </ScrollArea.Viewport>\n </ScrollArea.Root>\n </Panel.Content>\n </Panel.Root>\n );\n },\n);\n"],
5
- "mappings": "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",
6
- "names": ["React", "useCallback", "useMemo", "useState", "useOperationInvoker", "ComputeGraph", "Filter", "Obj", "Type", "Markdown", "Sheet", "Sketch", "useClient", "IconButton", "Input", "Panel", "ScrollArea", "Toolbar", "useAsyncEffect", "composable", "composableProps", "Organization", "Person", "Task", "sortKeys", "SchemaTable", "createGenerator", "generator", "staticGenerators", "staticTypes", "Document", "recordTypes", "SpaceGenerator", "space", "onCreateObjects", "children", "props", "forwardedRef", "invokePromise", "client", "count", "setCount", "info", "setInfo", "presets", "addTypes", "schemas", "typeMap", "recordGenerators", "Map", "map", "type", "getTypename", "items", "updateInfo", "allSchema", "db", "graph", "registry", "list", "filter", "isType", "echoSchema", "t", "isTypeKind", "staticSchema", "objects", "query", "everything", "run", "objectMap", "reduce", "obj", "schema", "static", "length", "mutable", "handleCreateData", "typename", "constructor", "get", "Root", "ref", "asChild", "icon", "iconOnly", "label", "onClick", "Separator", "TextInput", "placeholder", "classNames", "min", "max", "size", "value", "onChange", "event", "parseInt", "target", "Content", "thin", "orientation", "Viewport", "types"]
7
- }
@@ -1,52 +0,0 @@
1
- import "./chunk-J5LGTIGS.mjs";
2
-
3
- // src/containers/Wireframe/Wireframe.tsx
4
- import React from "react";
5
- import { useResizeDetector } from "react-resize-detector";
6
- import { Obj } from "@dxos/echo";
7
- import { useAttentionAttributes } from "@dxos/react-ui-attention";
8
- import { JsonHighlighter } from "@dxos/react-ui-syntax-highlighter";
9
- import { mx } from "@dxos/ui-theme";
10
- var Wireframe = ({ classNames, label, object }) => {
11
- const attentionAttrs = useAttentionAttributes(Obj.getURI(object));
12
- const { width, height, ref } = useResizeDetector();
13
- return /* @__PURE__ */ React.createElement("div", {
14
- ref,
15
- className: mx("relative grow min-h-96", classNames),
16
- ...attentionAttrs
17
- }, /* @__PURE__ */ React.createElement("div", {
18
- className: "absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono"
19
- }, /* @__PURE__ */ React.createElement("div", {
20
- className: "flex justify-between"
21
- }, /* @__PURE__ */ React.createElement("div", null, label), /* @__PURE__ */ React.createElement("div", null, `[${width}x${height}]`)), object && /* @__PURE__ */ React.createElement(JsonHighlighter, {
22
- data: object,
23
- classNames: "text-xs opacity-75 rounded-sm"
24
- })), /* @__PURE__ */ React.createElement("svg", {
25
- width,
26
- height,
27
- className: "bg-transparent *:text-subdued"
28
- }, /* @__PURE__ */ React.createElement("rect", {
29
- x: 0,
30
- y: 0,
31
- width,
32
- height,
33
- strokeWidth: 1,
34
- fill: "none"
35
- }), /* @__PURE__ */ React.createElement("line", {
36
- x1: 0,
37
- y1: 0,
38
- x2: width,
39
- y2: height,
40
- strokeWidth: 1
41
- }), /* @__PURE__ */ React.createElement("line", {
42
- x1: 0,
43
- y1: height,
44
- x2: width,
45
- y2: 0,
46
- strokeWidth: 1
47
- })));
48
- };
49
- export {
50
- Wireframe as default
51
- };
52
- //# sourceMappingURL=Wireframe-WD7S2AUU.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/containers/Wireframe/Wireframe.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\n\nimport { Obj } from '@dxos/echo';\nimport { type ThemedClassName } from '@dxos/react-ui';\nimport { useAttentionAttributes } from '@dxos/react-ui-attention';\nimport { JsonHighlighter } from '@dxos/react-ui-syntax-highlighter';\nimport { mx } from '@dxos/ui-theme';\n\n// TODO(burdon): Create generic container with wireframe mode.\nexport type WireframeProps = ThemedClassName<{\n object: Obj.Unknown;\n label?: string;\n}>;\n\n// TODO(burdon): Make focusable and attendable with input.\nexport const Wireframe = ({ classNames, label, object }: WireframeProps) => {\n const attentionAttrs = useAttentionAttributes(Obj.getURI(object));\n const { width, height, ref } = useResizeDetector();\n\n return (\n <div ref={ref} className={mx('relative grow min-h-96', classNames)} {...attentionAttrs}>\n <div className='absolute inset-2 flex flex-col gap-2 overflow-hidden font-mono'>\n <div className='flex justify-between'>\n <div>{label}</div>\n <div>{`[${width}x${height}]`}</div>\n </div>\n {object && <JsonHighlighter data={object} classNames='text-xs opacity-75 rounded-sm' />}\n </div>\n <svg width={width} height={height} className='bg-transparent *:text-subdued'>\n <rect x={0} y={0} width={width} height={height} strokeWidth={1} fill='none' />\n <line x1={0} y1={0} x2={width} y2={height} strokeWidth={1} />\n <line x1={0} y1={height} x2={width} y2={0} strokeWidth={1} />\n </svg>\n </div>\n );\n};\n"],
5
- "mappings": ";;;AAIA,OAAOA,WAAW;AAClB,SAASC,yBAAyB;AAElC,SAASC,WAAW;AAEpB,SAASC,8BAA8B;AACvC,SAASC,uBAAuB;AAChC,SAASC,UAAU;AASZ,IAAMC,YAAY,CAAC,EAAEC,YAAYC,OAAOC,OAAM,MAAkB;AACrE,QAAMC,iBAAiBP,uBAAuBD,IAAIS,OAAOF,MAAAA,CAAAA;AACzD,QAAM,EAAEG,OAAOC,QAAQC,IAAG,IAAKb,kBAAAA;AAE/B,SACE,sBAAA,cAACc,OAAAA;IAAID;IAAUE,WAAWX,GAAG,0BAA0BE,UAAAA;IAAc,GAAGG;KACtE,sBAAA,cAACK,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA;IAAIC,WAAU;KACb,sBAAA,cAACD,OAAAA,MAAKP,KAAAA,GACN,sBAAA,cAACO,OAAAA,MAAK,IAAIH,KAAAA,IAASC,MAAAA,GAAS,CAAA,GAE7BJ,UAAU,sBAAA,cAACL,iBAAAA;IAAgBa,MAAMR;IAAQF,YAAW;OAEvD,sBAAA,cAACW,OAAAA;IAAIN;IAAcC;IAAgBG,WAAU;KAC3C,sBAAA,cAACG,QAAAA;IAAKC,GAAG;IAAGC,GAAG;IAAGT;IAAcC;IAAgBS,aAAa;IAAGC,MAAK;MACrE,sBAAA,cAACC,QAAAA;IAAKC,IAAI;IAAGC,IAAI;IAAGC,IAAIf;IAAOgB,IAAIf;IAAQS,aAAa;MACxD,sBAAA,cAACE,QAAAA;IAAKC,IAAI;IAAGC,IAAIb;IAAQc,IAAIf;IAAOgB,IAAI;IAAGN,aAAa;;AAIhE;",
6
- "names": ["React", "useResizeDetector", "Obj", "useAttentionAttributes", "JsonHighlighter", "mx", "Wireframe", "classNames", "label", "object", "attentionAttrs", "getURI", "width", "height", "ref", "div", "className", "data", "svg", "rect", "x", "y", "strokeWidth", "fill", "line", "x1", "y1", "x2", "y2"]
7
- }