react-x11 1.2.0 → 2.0.0

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 (158) hide show
  1. package/README.md +330 -81
  2. package/package.json +132 -14
  3. package/src/ClickToComponent.js +9 -2
  4. package/src/DevToolsIntegration.js +440 -32
  5. package/src/Reconciler.js +463 -165
  6. package/src/a11y.js +1299 -0
  7. package/src/acceleratorhooks.js +86 -0
  8. package/src/accelerators.js +128 -0
  9. package/src/activate.js +168 -0
  10. package/src/anchor.js +360 -0
  11. package/src/appcontext.js +161 -0
  12. package/src/appearance.js +748 -0
  13. package/src/appearancehooks.js +96 -0
  14. package/src/apphooks.js +73 -0
  15. package/src/application.js +748 -0
  16. package/src/atspi.js +1953 -0
  17. package/src/bus.js +545 -0
  18. package/src/bushooks.js +136 -0
  19. package/src/clientmessage.js +140 -0
  20. package/src/clipboard.js +121 -0
  21. package/src/components/Button.js +148 -33
  22. package/src/components/Checkbox.js +66 -32
  23. package/src/components/Dialog.js +96 -29
  24. package/src/components/FileDialog.js +491 -0
  25. package/src/components/Icon.js +329 -0
  26. package/src/components/Menu.js +797 -133
  27. package/src/components/PasswordInput.js +434 -0
  28. package/src/components/ProgressBar.js +91 -12
  29. package/src/components/Radio.js +78 -35
  30. package/src/components/Select.js +255 -65
  31. package/src/components/Slider.js +102 -41
  32. package/src/components/SplitPane.js +206 -0
  33. package/src/components/Switch.js +100 -22
  34. package/src/components/Table.js +529 -0
  35. package/src/components/Tabs.js +211 -0
  36. package/src/components/Tooltip.js +528 -54
  37. package/src/components/anchor.js +154 -107
  38. package/src/components/change.js +34 -0
  39. package/src/components/dnd.js +103 -0
  40. package/src/components/index.js +16 -3
  41. package/src/components/keys.js +17 -20
  42. package/src/components/scribble.js +247 -0
  43. package/src/components/theme.js +350 -42
  44. package/src/components/typeahead.js +12 -2
  45. package/src/compose.js +868 -0
  46. package/src/compositing.js +224 -0
  47. package/src/dbusmenu.js +384 -0
  48. package/src/debug.d.ts +63 -0
  49. package/src/debug.js +642 -0
  50. package/src/decorations.js +486 -0
  51. package/src/desktopsettings.js +209 -0
  52. package/src/desktopsettingshooks.js +62 -0
  53. package/src/dnd.js +1725 -0
  54. package/src/editmenu.js +272 -0
  55. package/src/errors.js +98 -0
  56. package/src/events.js +1406 -162
  57. package/src/extensions.js +45 -0
  58. package/src/filedialog.js +375 -0
  59. package/src/filedialoghooks.js +132 -0
  60. package/src/fonthooks.js +64 -0
  61. package/src/fonts.js +301 -0
  62. package/src/foreignnodes.js +519 -0
  63. package/src/frame/child.js +33 -0
  64. package/src/frame/childmain.js +274 -0
  65. package/src/frame/env.js +140 -0
  66. package/src/frame/index.js +444 -0
  67. package/src/frame/lifecycle.js +67 -0
  68. package/src/frame/protocol.js +179 -0
  69. package/src/frames.js +73 -0
  70. package/src/glbackend.js +114 -0
  71. package/src/glnodes.js +125 -67
  72. package/src/globalmenu.js +683 -0
  73. package/src/host.d.ts +88 -0
  74. package/src/host.js +42 -0
  75. package/src/idle.js +490 -0
  76. package/src/idlehooks.js +100 -0
  77. package/src/imagesource.js +349 -0
  78. package/src/index.d.ts +475 -0
  79. package/src/index.js +83 -9
  80. package/src/inputtime.js +206 -0
  81. package/src/jsx-dev-runtime.d.ts +21 -0
  82. package/src/jsx-dev-runtime.js +2 -0
  83. package/src/jsx-runtime.d.ts +39 -0
  84. package/src/jsx-runtime.js +6 -0
  85. package/src/keyboard.js +256 -0
  86. package/src/keyboardstate.js +278 -0
  87. package/src/keyboardstatehooks.js +58 -0
  88. package/src/keysyms.d.ts +149 -0
  89. package/src/keysyms.js +270 -0
  90. package/src/locale.js +170 -0
  91. package/src/localehooks.js +47 -0
  92. package/src/menuitem.js +223 -0
  93. package/src/node.d.ts +597 -0
  94. package/src/node.js +44 -0
  95. package/src/nodes.js +9546 -690
  96. package/src/ntk.d.ts +44 -0
  97. package/src/ntk.js +25 -0
  98. package/src/paintcache.js +366 -0
  99. package/src/palette.js +380 -0
  100. package/src/pastestate.js +66 -0
  101. package/src/portal.js +461 -0
  102. package/src/priority.js +26 -0
  103. package/src/refresh/index.d.ts +40 -0
  104. package/src/refresh/index.js +122 -0
  105. package/src/refresh/loader.d.ts +37 -0
  106. package/src/refresh/loader.js +401 -0
  107. package/src/refresh/register.d.ts +5 -0
  108. package/src/refresh/register.js +13 -0
  109. package/src/registry.js +232 -0
  110. package/src/scale.js +626 -0
  111. package/src/scalehooks.js +27 -0
  112. package/src/screencolor.js +640 -0
  113. package/src/screencolorhooks.js +101 -0
  114. package/src/screens.js +754 -0
  115. package/src/screenshooks.js +137 -0
  116. package/src/startup.js +302 -0
  117. package/src/style.d.ts +126 -0
  118. package/src/style.js +33 -0
  119. package/src/styles.js +1482 -6
  120. package/src/svgnodes.js +306 -0
  121. package/src/testing/a11y.js +484 -0
  122. package/src/testing/components.js +414 -0
  123. package/src/testing/events.js +407 -0
  124. package/src/testing/harness.js +455 -0
  125. package/src/testing/index.d.ts +558 -0
  126. package/src/testing/index.js +85 -0
  127. package/src/testing/mock-app.js +463 -0
  128. package/src/testing/pixels.js +152 -0
  129. package/src/testing/queries.js +224 -0
  130. package/src/textrange.js +83 -0
  131. package/src/textselection.js +439 -0
  132. package/src/trace-registry.js +63 -0
  133. package/src/transfer.js +93 -0
  134. package/src/types/appearance.d.ts +84 -0
  135. package/src/types/application.d.ts +173 -0
  136. package/src/types/components.d.ts +820 -0
  137. package/src/types/dbus.d.ts +177 -0
  138. package/src/types/elements.d.ts +897 -0
  139. package/src/types/events.d.ts +549 -0
  140. package/src/types/filedialog.d.ts +260 -0
  141. package/src/types/fonts.d.ts +124 -0
  142. package/src/types/frame.d.ts +146 -0
  143. package/src/types/globalmenu.d.ts +42 -0
  144. package/src/types/nodes.d.ts +199 -0
  145. package/src/types/screencolor.d.ts +84 -0
  146. package/src/types/style.d.ts +434 -0
  147. package/src/types/system.d.ts +287 -0
  148. package/src/windowid.js +151 -0
  149. package/src/windowstate.js +393 -0
  150. package/src/xsettings.js +336 -0
  151. package/src/yoga.d.ts +55 -0
  152. package/src/yoga.js +135 -0
  153. package/src/components/Canvas3D.js +0 -28
  154. package/src/geometry3d.js +0 -223
  155. package/src/pointer3d.js +0 -158
  156. package/src/raycast3d.js +0 -146
  157. package/src/richnodes.js +0 -436
  158. package/src/scene3d.js +0 -683
package/package.json CHANGED
@@ -1,32 +1,69 @@
1
1
  {
2
2
  "name": "react-x11",
3
- "version": "1.2.0",
3
+ "version": "2.0.0",
4
4
  "description": "react renderer with X11 as a target",
5
5
  "main": "./src/index.js",
6
6
  "files": [
7
7
  "src"
8
8
  ],
9
9
  "scripts": {
10
- "test": "node --test",
10
+ "test": "node --import tsx --test --test-timeout=60000",
11
+ "typecheck": "tsc -p tsconfig.json",
11
12
  "lint": "eslint .",
12
13
  "format": "prettier --write .",
13
14
  "format:check": "prettier --check .",
15
+ "examples:app": "tsx examples/app.jsx",
16
+ "examples:theming": "tsx examples/theming.jsx",
17
+ "examples:appearance": "tsx examples/appearance.jsx",
14
18
  "examples:simple": "tsx examples/simple.jsx",
15
19
  "examples:simple-nojsx": "node examples/simple-nojsx.js",
16
20
  "examples:xeyes": "tsx examples/xeyes.jsx",
17
21
  "examples:dashboard": "tsx examples/dashboard.jsx",
18
22
  "examples:tasks": "tsx examples/tasks.jsx",
19
- "examples:tasks:hot": "node --enable-source-maps --import ./examples/hmr-register.mjs examples/tasks-hot.jsx",
23
+ "examples:tasks:hot": "node --enable-source-maps --import react-x11/refresh/register examples/tasks-hot.jsx",
20
24
  "examples:menu": "tsx examples/menu.jsx",
25
+ "examples:monitor": "tsx examples/monitor.jsx",
26
+ "examples:attention": "tsx examples/attention.jsx",
27
+ "examples:tooltips": "tsx examples/tooltips.jsx",
28
+ "examples:chat": "tsx examples/chat.jsx",
29
+ "examples:clipboard": "tsx examples/clipboard.jsx",
30
+ "labs:urischeme": "tsx examples/labs/urischeme.jsx",
31
+ "filedialog:probe": "node scripts/filedialog-probe.mjs",
32
+ "a11y:probe": "node scripts/a11y-probe.mjs",
33
+ "scale:probe": "node scripts/scale-probe.mjs",
34
+ "xi2:probe": "node scripts/xi2-probe.mjs",
35
+ "globalmenu:host": "node scripts/globalmenu-host.mjs",
36
+ "devtools:proxy": "node scripts/devtools-proxy.mjs",
37
+ "examples:fonts": "tsx examples/fonts.jsx",
21
38
  "examples:form": "tsx examples/form.jsx",
22
- "examples:richtext": "tsx examples/richtext.jsx",
39
+ "examples:rules": "tsx examples/rules.jsx",
40
+ "examples:selection": "tsx examples/selection.jsx",
41
+ "examples:settings": "tsx examples/settings.jsx",
42
+ "examples:timer": "tsx examples/timer.jsx",
23
43
  "examples:widgets": "tsx examples/widgets.jsx",
24
- "examples:gl": "tsx examples/gl.jsx",
25
- "examples:three": "tsx examples/three.jsx",
44
+ "examples:password": "tsx examples/password.jsx",
45
+ "examples:icons": "tsx examples/icons.jsx",
46
+ "examples:raster-gate": "tsx examples/raster-gate.jsx",
47
+ "examples:stress": "tsx examples/stress/index.jsx",
48
+ "examples:finder": "tsx examples/finder.jsx",
49
+ "examples:foreign": "tsx examples/foreign.jsx",
50
+ "examples:frame": "tsx examples/frame.jsx",
51
+ "labs:text-baseline": "tsx examples/labs/text-baseline.jsx",
52
+ "examples:viewer3d": "tsx examples/viewer3d.jsx",
53
+ "examples:transparent": "tsx examples/transparent.jsx",
26
54
  "examples:windows": "tsx examples/windows.jsx",
55
+ "examples:wm": "tsx examples/wm.jsx",
56
+ "examples:dnd-source": "tsx examples/dnd-source.jsx",
57
+ "examples:dnd-target": "tsx examples/dnd-target.jsx",
58
+ "stress:check": "tsx scripts/check-stress.jsx",
27
59
  "screenshots": "tsx scripts/screenshots.jsx",
28
60
  "screenshots:framed": "tsx scripts/screenshots-framed.jsx",
29
- "bench": "tsx scripts/bench/protocol.js"
61
+ "bench": "tsx scripts/bench/protocol.js",
62
+ "bench:pixels": "tsx scripts/bench/pixels.js",
63
+ "bench:frames": "tsx scripts/bench/frames.js",
64
+ "docs:dev": "npm --prefix website start",
65
+ "docs:build": "npm --prefix website run build",
66
+ "docs:test": "npm --prefix website test"
30
67
  },
31
68
  "repository": {
32
69
  "type": "git",
@@ -45,11 +82,33 @@
45
82
  "node": ">=20.19"
46
83
  },
47
84
  "dependencies": {
48
- "ntk": "^3.7.2",
49
- "react-reconciler": "^0.33.0"
85
+ "ntk": "^8.3.0",
86
+ "react-reconciler": "^0.33.0",
87
+ "yoga-layout": "^3.2.1"
88
+ },
89
+ "optionalDependencies": {
90
+ "dbus-native": "^0.15.1"
50
91
  },
51
92
  "peerDependencies": {
52
- "react": "^19.0.0"
93
+ "react": "^19.0.0",
94
+ "@babel/core": "^8.0.0",
95
+ "@babel/plugin-transform-react-jsx": "^8.0.0",
96
+ "hot-module-replacement": "^4.0.1",
97
+ "react-refresh": "^0.18.0"
98
+ },
99
+ "peerDependenciesMeta": {
100
+ "@babel/core": {
101
+ "optional": true
102
+ },
103
+ "@babel/plugin-transform-react-jsx": {
104
+ "optional": true
105
+ },
106
+ "hot-module-replacement": {
107
+ "optional": true
108
+ },
109
+ "react-refresh": {
110
+ "optional": true
111
+ }
53
112
  },
54
113
  "overrides": {
55
114
  "brace-expansion": "^5.0.8"
@@ -58,19 +117,78 @@
58
117
  "@babel/core": "^8.0.1",
59
118
  "@babel/plugin-transform-react-jsx": "^8.0.1",
60
119
  "@eslint/js": "^9.32.0",
120
+ "@types/react": "^19.2.17",
61
121
  "eslint": "^9.32.0",
62
122
  "eslint-plugin-react": "^7.37.5",
63
- "globals": "^16.0.0",
64
- "hot-module-replacement": "^4.0.0",
123
+ "globals": "^17.8.0",
124
+ "hot-module-replacement": "^4.0.1",
125
+ "katex": "^0.18.1",
65
126
  "prettier": "^3.6.0",
66
127
  "react": "^19.2.8",
67
128
  "react-devtools-core": "^7.0.1",
68
129
  "react-refresh": "^0.18.0",
69
130
  "tsx": "^4.23.1",
131
+ "typescript": "^7.0.2",
70
132
  "ws": "^8.21.1"
71
133
  },
72
134
  "type": "module",
73
135
  "exports": {
74
- ".": "./src/index.js"
75
- }
136
+ ".": {
137
+ "types": "./src/index.d.ts",
138
+ "default": "./src/index.js"
139
+ },
140
+ "./jsx-runtime": {
141
+ "types": "./src/jsx-runtime.d.ts",
142
+ "default": "./src/jsx-runtime.js"
143
+ },
144
+ "./jsx-dev-runtime": {
145
+ "types": "./src/jsx-dev-runtime.d.ts",
146
+ "default": "./src/jsx-dev-runtime.js"
147
+ },
148
+ "./debug": {
149
+ "types": "./src/debug.d.ts",
150
+ "default": "./src/debug.js"
151
+ },
152
+ "./host": {
153
+ "types": "./src/host.d.ts",
154
+ "default": "./src/host.js"
155
+ },
156
+ "./node": {
157
+ "types": "./src/node.d.ts",
158
+ "default": "./src/node.js"
159
+ },
160
+ "./style": {
161
+ "types": "./src/style.d.ts",
162
+ "default": "./src/style.js"
163
+ },
164
+ "./yoga": {
165
+ "types": "./src/yoga.d.ts",
166
+ "default": "./src/yoga.js"
167
+ },
168
+ "./ntk": {
169
+ "types": "./src/ntk.d.ts",
170
+ "default": "./src/ntk.js"
171
+ },
172
+ "./test": {
173
+ "types": "./src/testing/index.d.ts",
174
+ "default": "./src/testing/index.js"
175
+ },
176
+ "./refresh": {
177
+ "types": "./src/refresh/index.d.ts",
178
+ "default": "./src/refresh/index.js"
179
+ },
180
+ "./refresh/register": {
181
+ "types": "./src/refresh/register.d.ts",
182
+ "default": "./src/refresh/register.js"
183
+ },
184
+ "./refresh/loader": {
185
+ "types": "./src/refresh/loader.d.ts",
186
+ "default": "./src/refresh/loader.js"
187
+ },
188
+ "./keysyms": {
189
+ "types": "./src/keysyms.d.ts",
190
+ "default": "./src/keysyms.js"
191
+ }
192
+ },
193
+ "types": "./src/index.d.ts"
76
194
  }
@@ -13,12 +13,15 @@
13
13
  import { spawn } from 'node:child_process';
14
14
  import { fileURLToPath } from 'node:url';
15
15
  import { setClickToComponentHandler } from './events.js';
16
+ import { selectInDevTools } from './DevToolsIntegration.js';
16
17
 
17
18
  const STACK_FRAME = /^\s*at\s+(?:(.+?)\s+\()?(.+?):(\d+):(\d+)\)?\s*$/;
18
19
 
19
20
  /** The first stack frame outside React/the reconciler/node internals — the
20
- * user's own JSX call site for whatever element this Error was captured at. */
21
- function resolveLocation(debugStack) {
21
+ * user's own JSX call site for whatever element this Error was captured at.
22
+ * Exported because `react-x11/test`'s `sourceOf` answers the same question
23
+ * for a test that a click answers for an editor. */
24
+ export function resolveLocation(debugStack) {
22
25
  const stack = debugStack?.stack;
23
26
  if (!stack) return null;
24
27
  for (const line of stack.split('\n').slice(1)) {
@@ -159,6 +162,10 @@ function handleClick(node, native) {
159
162
  // Alt+Shift+Click
160
163
  logOwnerChain(fiber);
161
164
  }
165
+ // With DevTools attached, the click that says which element this is says
166
+ // it there too — the tree jumps to the component instead of the user
167
+ // hunting for the row they just clicked. Nothing to do when it is not.
168
+ selectInDevTools(node);
162
169
  flashHighlight(node);
163
170
  openInEditor(location);
164
171
  }