@react-x11/components 0.2.1 → 0.4.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 (137) hide show
  1. package/README.md +6 -0
  2. package/dist/index.d.ts +4 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +5 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/internal/heights.d.ts +26 -1
  7. package/dist/internal/heights.d.ts.map +1 -1
  8. package/dist/internal/heights.js +57 -6
  9. package/dist/internal/heights.js.map +1 -1
  10. package/dist/internal/scroll.d.ts +11 -0
  11. package/dist/internal/scroll.d.ts.map +1 -1
  12. package/dist/internal/scroll.js +43 -3
  13. package/dist/internal/scroll.js.map +1 -1
  14. package/dist/internal/timers.d.ts +8 -0
  15. package/dist/internal/timers.d.ts.map +1 -1
  16. package/dist/internal/timers.js +10 -0
  17. package/dist/internal/timers.js.map +1 -1
  18. package/dist/internal/window.d.ts +161 -0
  19. package/dist/internal/window.d.ts.map +1 -0
  20. package/dist/internal/window.js +417 -0
  21. package/dist/internal/window.js.map +1 -0
  22. package/dist/qml/containers.d.ts +3 -0
  23. package/dist/qml/containers.d.ts.map +1 -0
  24. package/dist/qml/containers.js +331 -0
  25. package/dist/qml/containers.js.map +1 -0
  26. package/dist/qml/controls.d.ts +12 -0
  27. package/dist/qml/controls.d.ts.map +1 -0
  28. package/dist/qml/controls.js +21 -0
  29. package/dist/qml/controls.js.map +1 -0
  30. package/dist/qml/globals.d.ts +6 -0
  31. package/dist/qml/globals.d.ts.map +1 -0
  32. package/dist/qml/globals.js +25 -0
  33. package/dist/qml/globals.js.map +1 -0
  34. package/dist/qml/index.d.ts +15 -0
  35. package/dist/qml/index.d.ts.map +1 -0
  36. package/dist/qml/index.js +25 -0
  37. package/dist/qml/index.js.map +1 -0
  38. package/dist/qml/interaction.d.ts +12 -0
  39. package/dist/qml/interaction.d.ts.map +1 -0
  40. package/dist/qml/interaction.js +246 -0
  41. package/dist/qml/interaction.js.map +1 -0
  42. package/dist/qml/ir.d.ts +106 -0
  43. package/dist/qml/ir.d.ts.map +1 -0
  44. package/dist/qml/ir.js +7 -0
  45. package/dist/qml/ir.js.map +1 -0
  46. package/dist/qml/layouts.d.ts +3 -0
  47. package/dist/qml/layouts.d.ts.map +1 -0
  48. package/dist/qml/layouts.js +122 -0
  49. package/dist/qml/layouts.js.map +1 -0
  50. package/dist/qml/models.d.ts +14 -0
  51. package/dist/qml/models.d.ts.map +1 -0
  52. package/dist/qml/models.js +80 -0
  53. package/dist/qml/models.js.map +1 -0
  54. package/dist/qml/objects.d.ts +228 -0
  55. package/dist/qml/objects.d.ts.map +1 -0
  56. package/dist/qml/objects.js +1103 -0
  57. package/dist/qml/objects.js.map +1 -0
  58. package/dist/qml/parse.d.ts +10 -0
  59. package/dist/qml/parse.d.ts.map +1 -0
  60. package/dist/qml/parse.js +607 -0
  61. package/dist/qml/parse.js.map +1 -0
  62. package/dist/qml/qtquick.d.ts +7 -0
  63. package/dist/qml/qtquick.d.ts.map +1 -0
  64. package/dist/qml/qtquick.js +347 -0
  65. package/dist/qml/qtquick.js.map +1 -0
  66. package/dist/qml/react.d.ts +83 -0
  67. package/dist/qml/react.d.ts.map +1 -0
  68. package/dist/qml/react.js +323 -0
  69. package/dist/qml/react.js.map +1 -0
  70. package/dist/qml/resolver.d.ts +38 -0
  71. package/dist/qml/resolver.d.ts.map +1 -0
  72. package/dist/qml/resolver.js +64 -0
  73. package/dist/qml/resolver.js.map +1 -0
  74. package/dist/qml/slots.d.ts +65 -0
  75. package/dist/qml/slots.d.ts.map +1 -0
  76. package/dist/qml/slots.js +230 -0
  77. package/dist/qml/slots.js.map +1 -0
  78. package/dist/qml/states.d.ts +5 -0
  79. package/dist/qml/states.d.ts.map +1 -0
  80. package/dist/qml/states.js +276 -0
  81. package/dist/qml/states.js.map +1 -0
  82. package/dist/qml/view-utils.d.ts +42 -0
  83. package/dist/qml/view-utils.d.ts.map +1 -0
  84. package/dist/qml/view-utils.js +121 -0
  85. package/dist/qml/view-utils.js.map +1 -0
  86. package/dist/table/index.d.ts +73 -2
  87. package/dist/table/index.d.ts.map +1 -1
  88. package/dist/table/index.js +405 -161
  89. package/dist/table/index.js.map +1 -1
  90. package/dist/tabs/hx.d.ts +18 -0
  91. package/dist/tabs/hx.d.ts.map +1 -0
  92. package/dist/tabs/hx.js +10 -0
  93. package/dist/tabs/hx.js.map +1 -0
  94. package/dist/tabs/index.d.ts +143 -0
  95. package/dist/tabs/index.d.ts.map +1 -0
  96. package/dist/tabs/index.js +602 -0
  97. package/dist/tabs/index.js.map +1 -0
  98. package/dist/terminal/vt/index.d.ts +1 -1
  99. package/dist/terminal/vt/index.d.ts.map +1 -1
  100. package/dist/terminal/vt/index.js +3 -3
  101. package/dist/terminal/vt/index.js.map +1 -1
  102. package/dist/terminal/vt/pty.d.ts +16 -0
  103. package/dist/terminal/vt/pty.d.ts.map +1 -1
  104. package/dist/terminal/vt/pty.js +186 -0
  105. package/dist/terminal/vt/pty.js.map +1 -1
  106. package/dist/tree/index.d.ts +65 -5
  107. package/dist/tree/index.d.ts.map +1 -1
  108. package/dist/tree/index.js +446 -189
  109. package/dist/tree/index.js.map +1 -1
  110. package/package.json +11 -1
  111. package/src/index.ts +44 -0
  112. package/src/internal/heights.ts +57 -6
  113. package/src/internal/scroll.ts +59 -3
  114. package/src/internal/timers.ts +13 -0
  115. package/src/internal/window.ts +570 -0
  116. package/src/qml/containers.tsx +380 -0
  117. package/src/qml/controls.tsx +47 -0
  118. package/src/qml/globals.ts +33 -0
  119. package/src/qml/index.ts +67 -0
  120. package/src/qml/interaction.tsx +317 -0
  121. package/src/qml/ir.ts +80 -0
  122. package/src/qml/layouts.tsx +141 -0
  123. package/src/qml/models.ts +101 -0
  124. package/src/qml/objects.ts +1431 -0
  125. package/src/qml/parse.ts +624 -0
  126. package/src/qml/qtquick.tsx +413 -0
  127. package/src/qml/react.tsx +454 -0
  128. package/src/qml/resolver.ts +99 -0
  129. package/src/qml/slots.ts +249 -0
  130. package/src/qml/states.ts +318 -0
  131. package/src/qml/view-utils.ts +140 -0
  132. package/src/table/index.ts +599 -178
  133. package/src/tabs/hx.ts +31 -0
  134. package/src/tabs/index.ts +850 -0
  135. package/src/terminal/vt/index.ts +4 -2
  136. package/src/terminal/vt/pty.ts +243 -0
  137. package/src/tree/index.ts +687 -260
@@ -0,0 +1,323 @@
1
+ import { jsx as _jsx } from "react-x11/jsx-runtime";
2
+ // The React bridge: one small component per live QML object.
3
+ //
4
+ // Each QmlNode subscribes to exactly one instance (useSyncExternalStore on
5
+ // the instance's version counter), so a scalar property change re-renders
6
+ // one element's worth of tree and React reconciliation is reserved for
7
+ // structural change (Repeater rebuilds). The QML side never reaches around
8
+ // React: every pixel on screen is a `<box>`/`<text>`/`<image>` committed
9
+ // through the ordinary renderer.
10
+ import { forwardRef, useEffect, useImperativeHandle, useRef, useSyncExternalStore, } from 'react';
11
+ import { warn } from './globals.js';
12
+ import { parseQml } from './parse.js';
13
+ import { Context, QmlInstance, instantiateDocument, migrateUserState, registerQmlModule, } from './objects.js';
14
+ import { flushBindings } from './slots.js';
15
+ import { afterLayout, cancelAfterLayout } from '../internal/timers.js';
16
+ export function useQmlVersion(inst) {
17
+ return useSyncExternalStore((cb) => inst.subscribe(cb), () => inst.version);
18
+ }
19
+ export function QmlNode({ inst }) {
20
+ useQmlVersion(inst);
21
+ if (inst.destroyed)
22
+ return null;
23
+ const View = inst.typeInfo.view;
24
+ if (!View)
25
+ return null;
26
+ return _jsx(View, { inst: inst });
27
+ }
28
+ export function renderQmlChildren(inst) {
29
+ return inst.visualChildren().map((c) => _jsx(QmlNode, { inst: c }, c.uid));
30
+ }
31
+ /**
32
+ * A QML document as a react-x11 element tree.
33
+ *
34
+ * The wrapper box takes the root object's declared size when it has one;
35
+ * otherwise it is sized by the app (the `style` prop) and feeds its
36
+ * laid-out size back into the root's implicit size, so `width`/`height`
37
+ * bindings inside the document see the real number — the "root fills the
38
+ * window" behavior.
39
+ */
40
+ export const QmlView = forwardRef(function QmlView({ source, file, context, onSignal, hotReload = true, resolver, reloadToken, style, }, ref) {
41
+ const state = useRef(null);
42
+ if (!state.current ||
43
+ state.current.source !== source ||
44
+ !Object.is(state.current.token, reloadToken)) {
45
+ const doc = parseQml(source, { fileName: file ?? '<inline>' });
46
+ const next = instantiateDocument(doc, {
47
+ extras: { ...context },
48
+ resolver: resolver ?? null,
49
+ });
50
+ if (state.current) {
51
+ if (hotReload)
52
+ migrateUserState(state.current.res.context, next.context);
53
+ state.current.res.root.destroy();
54
+ }
55
+ state.current = { source, token: reloadToken, res: next };
56
+ }
57
+ const { res } = state.current;
58
+ const root = res.root;
59
+ useQmlVersion(root); // the wrapper box tracks the root's size
60
+ // Context-property updates ride ordinary commits.
61
+ useEffect(() => {
62
+ if (!context)
63
+ return;
64
+ for (const [k, v] of Object.entries(context)) {
65
+ const slot = res.context.extras.get(k);
66
+ if (slot && !Object.is(slot.peek(), v))
67
+ slot.assign(v);
68
+ }
69
+ flushBindings();
70
+ });
71
+ useEffect(() => {
72
+ if (!onSignal)
73
+ return;
74
+ const offs = Object.entries(onSignal).map(([name, fn]) => root.onSignal(name, fn));
75
+ return () => offs.forEach((off) => off());
76
+ }, [root, onSignal]);
77
+ useEffect(() => {
78
+ const mounted = state.current;
79
+ return () => {
80
+ mounted?.res.root.destroy();
81
+ if (state.current === mounted)
82
+ state.current = null;
83
+ };
84
+ }, []);
85
+ useImperativeHandle(ref, () => ({
86
+ root: root.facade,
87
+ id: (name) => res.context.ids.get(name)?.facade ?? null,
88
+ instance: root,
89
+ }), [root, res]);
90
+ // Root-size feedback. `afterLayout` (not a bare effect): react-x11 lays
91
+ // out on the frame flush, so an effect body reads the geometry of the
92
+ // previous pass — src/internal/timers.ts documents the shape.
93
+ const wrapRef = useRef(null);
94
+ const rootW = root.slots.get('width');
95
+ const rootH = root.slots.get('height');
96
+ const sized = !!rootW && !rootW.isDefault;
97
+ useEffect(() => {
98
+ if (sized)
99
+ return;
100
+ const tick = afterLayout(() => {
101
+ const abs = wrapRef.current?.abs;
102
+ if (!abs || root.destroyed)
103
+ return;
104
+ if (abs.width)
105
+ root.slots.get('implicitWidth')?.assign(abs.width);
106
+ if (abs.height)
107
+ root.slots.get('implicitHeight')?.assign(abs.height);
108
+ flushBindings();
109
+ });
110
+ return () => cancelAfterLayout(tick);
111
+ });
112
+ return (_jsx("box", { ref: wrapRef, style: [
113
+ { position: 'relative' },
114
+ sized && rootH
115
+ ? { width: num(rootW.peek()), height: num(rootH.peek()) }
116
+ : false,
117
+ style,
118
+ ], children: _jsx(QmlNode, { inst: root }) }));
119
+ });
120
+ const num = (v) => typeof v === 'number' && Number.isFinite(v) ? v : 0;
121
+ /**
122
+ * Register a React component as a QML type — the "extend in code" seam.
123
+ *
124
+ * registerReactComponent('Shop.Widgets', 'PriceTag', PriceTag, {
125
+ * properties: { amount: { default: 0 } },
126
+ * signals: { activated: [] },
127
+ * });
128
+ *
129
+ * Declared properties arrive as props (live: a binding update re-renders
130
+ * the component); declared signals arrive as `on<Signal>` callback props
131
+ * that emit back into QML.
132
+ */
133
+ export function registerReactComponent(moduleName, typeName, Component, { properties = {}, signals = {}, toProps, } = {}) {
134
+ const View = ({ inst }) => {
135
+ const props = {};
136
+ for (const name of Object.keys(properties)) {
137
+ props[name] = inst.slots.get(name)?.peek();
138
+ }
139
+ for (const name of Object.keys(signals)) {
140
+ props[`on${name[0].toUpperCase()}${name.slice(1)}`] = (...args) => inst.emit(name, ...args);
141
+ }
142
+ const shaped = toProps ? toProps(props, inst) : props;
143
+ const kids = renderQmlChildren(inst);
144
+ return (_jsx("box", { style: geometryStyle(inst), children: _jsx(Component, { ...shaped, children: kids.length ? kids : shaped.children }) }));
145
+ };
146
+ registerQmlModule(moduleName, {
147
+ types: {
148
+ [typeName]: { extends: 'Item', properties, signals, view: View },
149
+ },
150
+ });
151
+ }
152
+ // Shared with qtquick.tsx (kept here so registerReactComponent has no
153
+ // dependency on the QtQuick module being loaded).
154
+ export function geometryStyle(inst, { contentSized = false } = {}) {
155
+ // Inside a RowLayout/ColumnLayout the item is a flex item: yoga decides
156
+ // its geometry from the Layout.* attached properties, and the container
157
+ // reflects the answers back into x/y/width/height afterwards.
158
+ if (inst.parentInst?.typeInfo.managesChildLayout) {
159
+ return layoutChildStyle(inst);
160
+ }
161
+ const s = inst.slots;
162
+ const style = {
163
+ position: 'absolute',
164
+ left: num(s.get('x')?.peek()),
165
+ top: num(s.get('y')?.peek()),
166
+ };
167
+ const w = s.get('width');
168
+ const h = s.get('height');
169
+ if (w && !(contentSized && w.isDefault))
170
+ style.width = num(w.peek());
171
+ if (h && !(contentSized && h.isDefault))
172
+ style.height = num(h.peek());
173
+ if (s.get('visible')?.peek() === false)
174
+ style.display = 'none';
175
+ if (s.get('clip')?.peek() === true)
176
+ style.overflow = 'hidden';
177
+ const z = s.get('z')?.peek();
178
+ if (typeof z === 'number' && z)
179
+ style.zIndex = z;
180
+ warnUnrenderable(inst);
181
+ return style;
182
+ }
183
+ // --- QtQuick.Layouts: the flex-item half -----------------------------------
184
+ // Qt.AlignmentFlag values (the subset Layout.alignment uses).
185
+ const ALIGN = {
186
+ left: 1,
187
+ right: 2,
188
+ hcenter: 4,
189
+ top: 32,
190
+ bottom: 64,
191
+ vcenter: 128,
192
+ };
193
+ const layoutNumOf = (v) => typeof v === 'number' && Number.isFinite(v) && v >= 0 ? v : null;
194
+ /**
195
+ * An item's size hint on one axis, in Qt's order: `Layout.preferredWidth`,
196
+ * then an author-set `width` (friendlier than Qt, which ignores it — ours
197
+ * reads as a preferred size), then `implicitWidth`. `read` decides
198
+ * tracking: `.get` inside the container's implicit-size bindings, `.peek`
199
+ * during render.
200
+ */
201
+ export function preferredSpan(inst, horizontal, read, filling = false) {
202
+ const pref = inst.slots.get(horizontal ? 'Layout.preferredWidth' : 'Layout.preferredHeight');
203
+ if (pref) {
204
+ const v = layoutNumOf(read(pref));
205
+ if (v !== null)
206
+ return v;
207
+ }
208
+ if (!filling) {
209
+ const own = inst.slots.get(horizontal ? 'width' : 'height');
210
+ if (own && !own.isDefault) {
211
+ const v = layoutNumOf(read(own));
212
+ if (v !== null && v > 0)
213
+ return v;
214
+ }
215
+ }
216
+ const implicit = inst.slots.get(horizontal ? 'implicitWidth' : 'implicitHeight');
217
+ if (implicit) {
218
+ const v = layoutNumOf(read(implicit));
219
+ if (v !== null && v > 0)
220
+ return v;
221
+ }
222
+ return null;
223
+ }
224
+ function layoutChildStyle(inst) {
225
+ const parent = inst.parentInst;
226
+ const horizontal = parent?.typeInfo.name === 'RowLayout';
227
+ const style = {};
228
+ const la = (name) => inst.slots.get(`Layout.${name}`)?.peek();
229
+ const peek = (slot) => slot.peek();
230
+ const fillMain = la(horizontal ? 'fillWidth' : 'fillHeight') === true;
231
+ const fillCross = la(horizontal ? 'fillHeight' : 'fillWidth') === true;
232
+ const stretchRaw = la(horizontal ? 'horizontalStretchFactor' : 'verticalStretchFactor');
233
+ const stretch = layoutNumOf(stretchRaw) ?? 0;
234
+ // Main axis: preferred size is the flex basis; `fillWidth` grows.
235
+ const basis = preferredSpan(inst, horizontal, peek, fillMain);
236
+ if (fillMain) {
237
+ style.flexGrow = stretch > 0 ? stretch : 1;
238
+ style.flexBasis = basis ?? 0;
239
+ }
240
+ else {
241
+ style.flexGrow = 0;
242
+ style.flexShrink = 0;
243
+ if (basis !== null) {
244
+ if (horizontal)
245
+ style.width = basis;
246
+ else
247
+ style.height = basis;
248
+ }
249
+ }
250
+ // Cross axis: fill stretches; otherwise the preferred size holds and
251
+ // `Layout.alignment` places the item (Qt's defaults: vertically centered
252
+ // in a row, left in a column).
253
+ const crossPref = preferredSpan(inst, !horizontal, peek, fillCross);
254
+ if (fillCross) {
255
+ style.alignSelf = 'stretch';
256
+ }
257
+ else {
258
+ if (crossPref !== null) {
259
+ if (horizontal)
260
+ style.height = crossPref;
261
+ else
262
+ style.width = crossPref;
263
+ }
264
+ const alignment = layoutNumOf(la('alignment')) ?? 0;
265
+ const startFlag = horizontal ? ALIGN.top : ALIGN.left;
266
+ const endFlag = horizontal ? ALIGN.bottom : ALIGN.right;
267
+ const centerFlag = horizontal ? ALIGN.vcenter : ALIGN.hcenter;
268
+ style.alignSelf =
269
+ alignment & startFlag
270
+ ? 'flex-start'
271
+ : alignment & endFlag
272
+ ? 'flex-end'
273
+ : alignment & centerFlag
274
+ ? 'center'
275
+ : horizontal
276
+ ? 'center'
277
+ : 'flex-start';
278
+ }
279
+ const minW = layoutNumOf(la('minimumWidth'));
280
+ if (minW !== null)
281
+ style.minWidth = minW;
282
+ const minH = layoutNumOf(la('minimumHeight'));
283
+ if (minH !== null)
284
+ style.minHeight = minH;
285
+ const maxW = layoutNumOf(la('maximumWidth'));
286
+ if (maxW !== null)
287
+ style.maxWidth = maxW;
288
+ const maxH = layoutNumOf(la('maximumHeight'));
289
+ if (maxH !== null)
290
+ style.maxHeight = maxH;
291
+ const margins = layoutNumOf(la('margins')) ?? 0;
292
+ const side = (name) => layoutNumOf(la(name)) ?? margins;
293
+ if (margins || la('leftMargin') !== undefined) {
294
+ style.marginLeft = side('leftMargin');
295
+ }
296
+ if (margins || la('rightMargin') !== undefined)
297
+ style.marginRight = side('rightMargin');
298
+ if (margins || la('topMargin') !== undefined)
299
+ style.marginTop = side('topMargin');
300
+ if (margins || la('bottomMargin') !== undefined)
301
+ style.marginBottom = side('bottomMargin');
302
+ if (inst.slots.get('visible')?.peek() === false)
303
+ style.display = 'none';
304
+ if (inst.slots.get('clip')?.peek() === true)
305
+ style.overflow = 'hidden';
306
+ warnUnrenderable(inst);
307
+ return style;
308
+ }
309
+ const INERT = { opacity: 1, rotation: 0, scale: 1 };
310
+ const warned = new Set();
311
+ function warnUnrenderable(inst) {
312
+ for (const name of Object.keys(INERT)) {
313
+ const v = inst.slots.get(name)?.peek();
314
+ if (v !== undefined && v !== INERT[name] && !warned.has(name)) {
315
+ warned.add(name);
316
+ warn(`QML: '${name}' is declared but react-x11 cannot render it yet ` +
317
+ `(needs offscreen composition); the value is ignored.`);
318
+ }
319
+ }
320
+ }
321
+ // Re-exported here so the family's public surface sits in one place.
322
+ export { Context, QmlInstance };
323
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../../src/qml/react.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface QmlResolver {
2
+ /** Where the root document lives — the starting directory for its
3
+ * implicit import. Opaque to the engine. */
4
+ rootDir: string;
5
+ /** The source of `<name>.qml` in `dir`, or null when there is no such
6
+ * component. Called often (every type name is probed here first, in
7
+ * Qt's shadowing order) but cached by the engine per instantiation —
8
+ * a plain `existsSync` + `readFileSync` implementation is fine. */
9
+ load(dir: string, name: string): {
10
+ source: string;
11
+ fileName: string;
12
+ } | null;
13
+ /** A quoted relative import (`"./widgets"`, `"../shared"`) resolved
14
+ * against a document's directory. */
15
+ join(dir: string, relative: string): string;
16
+ }
17
+ /** How a document was loaded — carried on `QmlDocument` so the types it
18
+ * names can resolve relative to it. */
19
+ export interface DocLoad {
20
+ resolver: QmlResolver;
21
+ dir: string;
22
+ }
23
+ /**
24
+ * The standard filesystem resolver — pass the directory your root document
25
+ * lives in:
26
+ *
27
+ * const resolver = await createFileResolver(dirname(qmlPath));
28
+ * <QmlView source={source} file={qmlPath} resolver={resolver} />
29
+ *
30
+ * Async because the node builtins load through a dynamic import (the build
31
+ * has no node types); the resolver it returns is fully synchronous. It
32
+ * reads through on every engine request — no content cache — so a changed
33
+ * sibling file is picked up on the next root reload; the engine's own
34
+ * per-instantiation cache keeps a 1000-delegate ListView from re-reading
35
+ * its component 1000 times.
36
+ */
37
+ export declare function createFileResolver(baseDir: string): Promise<QmlResolver>;
38
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/qml/resolver.ts"],"names":[],"mappings":"AAkBA,MAAM,WAAW,WAAW;IAC1B;gDAC4C;IAC5C,OAAO,EAAE,MAAM,CAAC;IAChB;;;uEAGmE;IACnE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7E;yCACqC;IACrC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CAC7C;AAED;uCACuC;AACvC,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,WAAW,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;CACb;AA8BD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,WAAW,CAAC,CAetB"}
@@ -0,0 +1,64 @@
1
+ // The resolver seam: how `.qml` files find each other.
2
+ //
3
+ // The engine never touches a filesystem — it asks a `QmlResolver` for
4
+ // component sources and treats directory strings as opaque tokens only the
5
+ // resolver interprets. That keeps the engine host-neutral (the headless
6
+ // tests hand it plain objects) and makes "where do components come from"
7
+ // an app decision: a directory on disk, a bundle, an HTTP cache, a test
8
+ // fixture.
9
+ //
10
+ // Three ways a type name resolves, in Qt's precedence order:
11
+ // 1. the *implicit import* — `<Name>.qml` beside the document (no import
12
+ // line at all, and a local `Button.qml` shadows a module's `Button`);
13
+ // 2. quoted-path imports — `import "./widgets"` brings in that
14
+ // directory's components;
15
+ // 3. registered modules — `import QtQuick 2.15` and anything an app adds
16
+ // with `registerQmlModule`.
17
+ // The first two exist only when a resolver is provided.
18
+ /**
19
+ * Load a node builtin without naming it to the compiler — `src/` compiles
20
+ * with `types: []` on purpose, and a literal `import('node:fs')` would
21
+ * need `@types/node` in the build program (the `embed/host.ts` pattern).
22
+ */
23
+ const builtins = new Map();
24
+ function builtin(name) {
25
+ let mod = builtins.get(name);
26
+ if (!mod) {
27
+ const specifier = name;
28
+ mod = import(/* @vite-ignore */ specifier);
29
+ builtins.set(name, mod);
30
+ }
31
+ return mod;
32
+ }
33
+ /**
34
+ * The standard filesystem resolver — pass the directory your root document
35
+ * lives in:
36
+ *
37
+ * const resolver = await createFileResolver(dirname(qmlPath));
38
+ * <QmlView source={source} file={qmlPath} resolver={resolver} />
39
+ *
40
+ * Async because the node builtins load through a dynamic import (the build
41
+ * has no node types); the resolver it returns is fully synchronous. It
42
+ * reads through on every engine request — no content cache — so a changed
43
+ * sibling file is picked up on the next root reload; the engine's own
44
+ * per-instantiation cache keeps a 1000-delegate ListView from re-reading
45
+ * its component 1000 times.
46
+ */
47
+ export async function createFileResolver(baseDir) {
48
+ const fs = await builtin('node:fs');
49
+ const path = await builtin('node:path');
50
+ const rootDir = path.resolve(baseDir);
51
+ return {
52
+ rootDir,
53
+ load(dir, name) {
54
+ const file = path.join(dir, `${name}.qml`);
55
+ if (!fs.existsSync(file))
56
+ return null;
57
+ return { source: fs.readFileSync(file, 'utf8'), fileName: file };
58
+ },
59
+ join(dir, relative) {
60
+ return path.resolve(dir, relative);
61
+ },
62
+ };
63
+ }
64
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/qml/resolver.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,EAAE;AACF,sEAAsE;AACtE,2EAA2E;AAC3E,wEAAwE;AACxE,yEAAyE;AACzE,wEAAwE;AACxE,WAAW;AACX,EAAE;AACF,6DAA6D;AAC7D,2EAA2E;AAC3E,2EAA2E;AAC3E,iEAAiE;AACjE,+BAA+B;AAC/B,2EAA2E;AAC3E,iCAAiC;AACjC,wDAAwD;AAmCxD;;;;GAIG;AACH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA4B,CAAC;AACrD,SAAS,OAAO,CAAI,IAAY;IAC9B,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,SAAS,GAAG,IAAI,CAAC;QACvB,GAAG,GAAG,MAAM,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC3C,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,GAAiB,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,OAAe;IAEf,MAAM,EAAE,GAAG,MAAM,OAAO,CAAW,SAAS,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAa,WAAW,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO;QACL,OAAO;QACP,IAAI,CAAC,GAAG,EAAE,IAAI;YACZ,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,GAAG,EAAE,QAAQ;YAChB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACrC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type BindingFn = () => unknown;
2
+ export interface SlotOwner {
3
+ _changed?(slot: Slot): void;
4
+ }
5
+ export declare function trackedEval<T>(fn: () => T): {
6
+ value: T;
7
+ deps: Set<Slot>;
8
+ };
9
+ export declare function flushBindings(): void;
10
+ export declare class Slot {
11
+ owner: SlotOwner | null;
12
+ name: string;
13
+ /** The current effective value — the top layer's answer, cached. */
14
+ value: unknown;
15
+ private base;
16
+ private overrides;
17
+ subscribers: Set<Slot> | null;
18
+ watchers: Set<() => void> | null;
19
+ /** True while the implicit `width ← implicitWidth` default binding holds
20
+ * (Qt's `widthValid`): the renderer may size the element by content. */
21
+ isDefault: boolean;
22
+ /** True once assigned at runtime — interactive state, carried across
23
+ * hot reloads. */
24
+ userSet: boolean;
25
+ lastError: unknown;
26
+ constructor(owner: SlotOwner | null, name: string, value: unknown);
27
+ get(): unknown;
28
+ peek(): unknown;
29
+ hasBinding(): boolean;
30
+ private active;
31
+ /** Imperative assignment: breaks the active layer's binding. */
32
+ set(value: unknown): void;
33
+ /** Activation-time write (literals, model context): breaks the binding
34
+ * but is not user state — hot-reload migration must not preserve it. */
35
+ assign(value: unknown): void;
36
+ setBinding(fn: BindingFn, { isDefault }?: {
37
+ isDefault?: boolean | undefined;
38
+ }): void;
39
+ /**
40
+ * States and the `Binding` element: sit a value or binding above the
41
+ * base. The base keeps evaluating underneath, so popping is instant and
42
+ * exact. `owner` is the pop token.
43
+ */
44
+ pushOverride(owner: unknown, init: {
45
+ binding?: BindingFn;
46
+ value?: unknown;
47
+ }): void;
48
+ popOverride(owner: unknown): void;
49
+ private _dropLayerBinding;
50
+ private _evaluateLayer;
51
+ /** A dependency changed: re-evaluate every bound layer, then settle. */
52
+ _reevaluate(): void;
53
+ private _settle;
54
+ /**
55
+ * Layout read-back: reflect an externally computed value — yoga's answer
56
+ * for a Layout-managed item — into the slot without disturbing its
57
+ * binding, default or user flags. A later binding evaluation may
58
+ * overwrite it; the next layout pass reflects again. Expressions reading
59
+ * the slot see the laid-out number either way.
60
+ */
61
+ reflect(value: unknown): void;
62
+ watch(fn: () => void): () => void;
63
+ destroy(): void;
64
+ }
65
+ //# sourceMappingURL=slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/qml/slots.ts"],"names":[],"mappings":"AAqBA,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC;AAEtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;CAC7B;AAeD,wBAAgB,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG;IAAE,KAAK,EAAE,CAAC,CAAC;IAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAA;CAAE,CASzE;AAQD,wBAAgB,aAAa,IAAI,IAAI,CAsBpC;AAED,qBAAa,IAAI;IACf,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,oEAAoE;IACpE,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,SAAS,CAAe;IAChC,WAAW,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAQ;IACrC,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAQ;IACxC;4EACwE;IACxE,SAAS,UAAS;IAClB;sBACkB;IAClB,OAAO,UAAS;IAChB,SAAS,EAAE,OAAO,CAAQ;IAE1B,YAAY,KAAK,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAKhE;IAED,GAAG,IAAI,OAAO,CAGb;IAED,IAAI,IAAI,OAAO,CAEd;IAED,UAAU,IAAI,OAAO,CAEpB;IAED,OAAO,CAAC,MAAM;IAMd,gEAAgE;IAChE,GAAG,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAGxB;IAED;4EACwE;IACxE,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAM3B;IAED,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,SAAiB,EAAE;;KAAK,GAAG,IAAI,CAM1D;IAED;;;;OAIG;IACH,YAAY,CACV,KAAK,EAAE,OAAO,EACd,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7C,IAAI,CAUN;IAED,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAQhC;IAED,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,cAAc;IAStB,wEAAwE;IACxE,WAAW,IAAI,IAAI,CAMlB;IAED,OAAO,CAAC,OAAO;IAgBf;;;;;;OAMG;IACH,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAO5B;IAED,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAGhC;IAED,OAAO,IAAI,IAAI,CAMd;CACF"}