@react-x11/components 0.3.0 → 0.5.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.
- package/README.md +131 -4
- package/dist/charts/components.d.ts +3 -1
- package/dist/charts/components.d.ts.map +1 -1
- package/dist/charts/components.js +8 -4
- package/dist/charts/components.js.map +1 -1
- package/dist/charts/node.d.ts +13 -6
- package/dist/charts/node.d.ts.map +1 -1
- package/dist/charts/node.js +75 -24
- package/dist/charts/node.js.map +1 -1
- package/dist/charts/render.d.ts +4 -0
- package/dist/charts/render.d.ts.map +1 -1
- package/dist/charts/render.js +11 -6
- package/dist/charts/render.js.map +1 -1
- package/dist/code-editor/node.d.ts +47 -16
- package/dist/code-editor/node.d.ts.map +1 -1
- package/dist/code-editor/node.js +121 -51
- package/dist/code-editor/node.js.map +1 -1
- package/dist/flow/draw.d.ts +19 -1
- package/dist/flow/draw.d.ts.map +1 -1
- package/dist/flow/draw.js +64 -35
- package/dist/flow/draw.js.map +1 -1
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +24 -8
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/model.d.ts +4 -2
- package/dist/flow/model.d.ts.map +1 -1
- package/dist/flow/model.js +4 -2
- package/dist/flow/model.js.map +1 -1
- package/dist/flow/node.d.ts +40 -9
- package/dist/flow/node.d.ts.map +1 -1
- package/dist/flow/node.js +142 -53
- package/dist/flow/node.js.map +1 -1
- package/dist/flow/types.d.ts +46 -21
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/formula/index.d.ts +4 -2
- package/dist/formula/index.d.ts.map +1 -1
- package/dist/formula/index.js.map +1 -1
- package/dist/formula/node.d.ts +5 -1
- package/dist/formula/node.d.ts.map +1 -1
- package/dist/formula/node.js +19 -3
- package/dist/formula/node.js.map +1 -1
- package/dist/html/controls.d.ts +4 -1
- package/dist/html/controls.d.ts.map +1 -1
- package/dist/html/controls.js.map +1 -1
- package/dist/html/css/cascade.d.ts +11 -5
- package/dist/html/css/cascade.d.ts.map +1 -1
- package/dist/html/css/cascade.js +18 -8
- package/dist/html/css/cascade.js.map +1 -1
- package/dist/html/css/parse.d.ts +15 -10
- package/dist/html/css/parse.d.ts.map +1 -1
- package/dist/html/css/parse.js +41 -16
- package/dist/html/css/parse.js.map +1 -1
- package/dist/html/css/style.d.ts +3 -0
- package/dist/html/css/style.d.ts.map +1 -1
- package/dist/html/css/style.js +3 -1
- package/dist/html/css/style.js.map +1 -1
- package/dist/html/css/values.d.ts +14 -1
- package/dist/html/css/values.d.ts.map +1 -1
- package/dist/html/css/values.js +11 -8
- package/dist/html/css/values.js.map +1 -1
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +1 -0
- package/dist/html/index.js.map +1 -1
- package/dist/html/layout/boxes.d.ts +12 -5
- package/dist/html/layout/boxes.d.ts.map +1 -1
- package/dist/html/layout/boxes.js +7 -4
- package/dist/html/layout/boxes.js.map +1 -1
- package/dist/html/layout/inline.d.ts.map +1 -1
- package/dist/html/layout/inline.js +22 -1
- package/dist/html/layout/inline.js.map +1 -1
- package/dist/html/node.d.ts +22 -8
- package/dist/html/node.d.ts.map +1 -1
- package/dist/html/node.js +97 -15
- package/dist/html/node.js.map +1 -1
- package/dist/html/paint.d.ts +3 -0
- package/dist/html/paint.d.ts.map +1 -1
- package/dist/html/paint.js +2 -2
- package/dist/html/paint.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/dist/maps/clip.d.ts +43 -0
- package/dist/maps/clip.d.ts.map +1 -0
- package/dist/maps/clip.js +171 -0
- package/dist/maps/clip.js.map +1 -0
- package/dist/maps/gzip.d.ts +15 -0
- package/dist/maps/gzip.d.ts.map +1 -0
- package/dist/maps/gzip.js +56 -0
- package/dist/maps/gzip.js.map +1 -0
- package/dist/maps/index.d.ts +55 -0
- package/dist/maps/index.d.ts.map +1 -0
- package/dist/maps/index.js +141 -0
- package/dist/maps/index.js.map +1 -0
- package/dist/maps/labels.d.ts +123 -0
- package/dist/maps/labels.d.ts.map +1 -0
- package/dist/maps/labels.js +323 -0
- package/dist/maps/labels.js.map +1 -0
- package/dist/maps/mvt.d.ts +244 -0
- package/dist/maps/mvt.d.ts.map +1 -0
- package/dist/maps/mvt.js +820 -0
- package/dist/maps/mvt.js.map +1 -0
- package/dist/maps/node.d.ts +278 -0
- package/dist/maps/node.d.ts.map +1 -0
- package/dist/maps/node.js +1459 -0
- package/dist/maps/node.js.map +1 -0
- package/dist/maps/overlay.d.ts +157 -0
- package/dist/maps/overlay.d.ts.map +1 -0
- package/dist/maps/overlay.js +472 -0
- package/dist/maps/overlay.js.map +1 -0
- package/dist/maps/paint.d.ts +226 -0
- package/dist/maps/paint.d.ts.map +1 -0
- package/dist/maps/paint.js +705 -0
- package/dist/maps/paint.js.map +1 -0
- package/dist/maps/proj.d.ts +281 -0
- package/dist/maps/proj.d.ts.map +1 -0
- package/dist/maps/proj.js +451 -0
- package/dist/maps/proj.js.map +1 -0
- package/dist/maps/sources.d.ts +256 -0
- package/dist/maps/sources.d.ts.map +1 -0
- package/dist/maps/sources.js +210 -0
- package/dist/maps/sources.js.map +1 -0
- package/dist/maps/style.d.ts +141 -0
- package/dist/maps/style.d.ts.map +1 -0
- package/dist/maps/style.js +147 -0
- package/dist/maps/style.js.map +1 -0
- package/dist/maps/styles.d.ts +82 -0
- package/dist/maps/styles.d.ts.map +1 -0
- package/dist/maps/styles.js +898 -0
- package/dist/maps/styles.js.map +1 -0
- package/dist/maps/tiles.d.ts +283 -0
- package/dist/maps/tiles.d.ts.map +1 -0
- package/dist/maps/tiles.js +469 -0
- package/dist/maps/tiles.js.map +1 -0
- package/dist/maps/types.d.ts +244 -0
- package/dist/maps/types.d.ts.map +1 -0
- package/dist/maps/types.js +2 -0
- package/dist/maps/types.js.map +1 -0
- package/dist/qml/containers.d.ts +3 -0
- package/dist/qml/containers.d.ts.map +1 -0
- package/dist/qml/containers.js +331 -0
- package/dist/qml/containers.js.map +1 -0
- package/dist/qml/controls.d.ts +12 -0
- package/dist/qml/controls.d.ts.map +1 -0
- package/dist/qml/controls.js +21 -0
- package/dist/qml/controls.js.map +1 -0
- package/dist/qml/globals.d.ts +6 -0
- package/dist/qml/globals.d.ts.map +1 -0
- package/dist/qml/globals.js +25 -0
- package/dist/qml/globals.js.map +1 -0
- package/dist/qml/index.d.ts +15 -0
- package/dist/qml/index.d.ts.map +1 -0
- package/dist/qml/index.js +25 -0
- package/dist/qml/index.js.map +1 -0
- package/dist/qml/interaction.d.ts +12 -0
- package/dist/qml/interaction.d.ts.map +1 -0
- package/dist/qml/interaction.js +246 -0
- package/dist/qml/interaction.js.map +1 -0
- package/dist/qml/ir.d.ts +106 -0
- package/dist/qml/ir.d.ts.map +1 -0
- package/dist/qml/ir.js +7 -0
- package/dist/qml/ir.js.map +1 -0
- package/dist/qml/layouts.d.ts +3 -0
- package/dist/qml/layouts.d.ts.map +1 -0
- package/dist/qml/layouts.js +122 -0
- package/dist/qml/layouts.js.map +1 -0
- package/dist/qml/models.d.ts +14 -0
- package/dist/qml/models.d.ts.map +1 -0
- package/dist/qml/models.js +80 -0
- package/dist/qml/models.js.map +1 -0
- package/dist/qml/objects.d.ts +228 -0
- package/dist/qml/objects.d.ts.map +1 -0
- package/dist/qml/objects.js +1103 -0
- package/dist/qml/objects.js.map +1 -0
- package/dist/qml/parse.d.ts +10 -0
- package/dist/qml/parse.d.ts.map +1 -0
- package/dist/qml/parse.js +607 -0
- package/dist/qml/parse.js.map +1 -0
- package/dist/qml/qtquick.d.ts +7 -0
- package/dist/qml/qtquick.d.ts.map +1 -0
- package/dist/qml/qtquick.js +347 -0
- package/dist/qml/qtquick.js.map +1 -0
- package/dist/qml/react.d.ts +83 -0
- package/dist/qml/react.d.ts.map +1 -0
- package/dist/qml/react.js +323 -0
- package/dist/qml/react.js.map +1 -0
- package/dist/qml/resolver.d.ts +38 -0
- package/dist/qml/resolver.d.ts.map +1 -0
- package/dist/qml/resolver.js +64 -0
- package/dist/qml/resolver.js.map +1 -0
- package/dist/qml/slots.d.ts +65 -0
- package/dist/qml/slots.d.ts.map +1 -0
- package/dist/qml/slots.js +230 -0
- package/dist/qml/slots.js.map +1 -0
- package/dist/qml/states.d.ts +5 -0
- package/dist/qml/states.d.ts.map +1 -0
- package/dist/qml/states.js +276 -0
- package/dist/qml/states.js.map +1 -0
- package/dist/qml/view-utils.d.ts +42 -0
- package/dist/qml/view-utils.d.ts.map +1 -0
- package/dist/qml/view-utils.js +121 -0
- package/dist/qml/view-utils.js.map +1 -0
- package/dist/reorder/hx.d.ts +18 -0
- package/dist/reorder/hx.d.ts.map +1 -0
- package/dist/reorder/hx.js +10 -0
- package/dist/reorder/hx.js.map +1 -0
- package/dist/reorder/index.d.ts +314 -0
- package/dist/reorder/index.d.ts.map +1 -0
- package/dist/reorder/index.js +1539 -0
- package/dist/reorder/index.js.map +1 -0
- package/dist/reorder/model.d.ts +107 -0
- package/dist/reorder/model.d.ts.map +1 -0
- package/dist/reorder/model.js +162 -0
- package/dist/reorder/model.js.map +1 -0
- package/dist/richtext/node.d.ts +15 -5
- package/dist/richtext/node.d.ts.map +1 -1
- package/dist/richtext/node.js +40 -11
- package/dist/richtext/node.js.map +1 -1
- package/dist/richtext/runs.d.ts +35 -13
- package/dist/richtext/runs.d.ts.map +1 -1
- package/dist/richtext/runs.js +83 -27
- package/dist/richtext/runs.js.map +1 -1
- package/dist/tabs/hx.d.ts +18 -0
- package/dist/tabs/hx.d.ts.map +1 -0
- package/dist/tabs/hx.js +10 -0
- package/dist/tabs/hx.js.map +1 -0
- package/dist/tabs/index.d.ts +160 -0
- package/dist/tabs/index.d.ts.map +1 -0
- package/dist/tabs/index.js +1265 -0
- package/dist/tabs/index.js.map +1 -0
- package/dist/terminal/vt/fonts.d.ts +45 -15
- package/dist/terminal/vt/fonts.d.ts.map +1 -1
- package/dist/terminal/vt/fonts.js +89 -19
- package/dist/terminal/vt/fonts.js.map +1 -1
- package/dist/terminal/vt/index.d.ts +1 -1
- package/dist/terminal/vt/index.d.ts.map +1 -1
- package/dist/terminal/vt/index.js +3 -3
- package/dist/terminal/vt/index.js.map +1 -1
- package/dist/terminal/vt/node.d.ts +42 -0
- package/dist/terminal/vt/node.d.ts.map +1 -1
- package/dist/terminal/vt/node.js +95 -11
- package/dist/terminal/vt/node.js.map +1 -1
- package/dist/terminal/vt/pty.d.ts +16 -0
- package/dist/terminal/vt/pty.d.ts.map +1 -1
- package/dist/terminal/vt/pty.js +186 -0
- package/dist/terminal/vt/pty.js.map +1 -1
- package/dist/terminal/vt/renderer.d.ts.map +1 -1
- package/dist/terminal/vt/renderer.js +13 -3
- package/dist/terminal/vt/renderer.js.map +1 -1
- package/package.json +23 -3
- package/src/charts/components.ts +14 -7
- package/src/charts/node.ts +81 -26
- package/src/charts/render.ts +16 -6
- package/src/code-editor/node.ts +147 -53
- package/src/flow/draw.ts +104 -35
- package/src/flow/index.ts +33 -13
- package/src/flow/model.ts +4 -2
- package/src/flow/node.ts +158 -59
- package/src/flow/types.ts +46 -21
- package/src/formula/index.ts +4 -2
- package/src/formula/node.ts +24 -5
- package/src/html/controls.ts +4 -1
- package/src/html/css/cascade.ts +18 -7
- package/src/html/css/parse.ts +46 -21
- package/src/html/css/style.ts +6 -1
- package/src/html/css/values.ts +25 -9
- package/src/html/index.ts +1 -0
- package/src/html/layout/boxes.ts +19 -9
- package/src/html/layout/inline.ts +23 -1
- package/src/html/node.ts +110 -17
- package/src/html/paint.ts +17 -2
- package/src/index.ts +142 -0
- package/src/maps/clip.ts +184 -0
- package/src/maps/gzip.ts +66 -0
- package/src/maps/index.ts +316 -0
- package/src/maps/labels.ts +442 -0
- package/src/maps/mvt.ts +857 -0
- package/src/maps/node.ts +1819 -0
- package/src/maps/overlay.ts +639 -0
- package/src/maps/paint.ts +978 -0
- package/src/maps/proj.ts +641 -0
- package/src/maps/sources.ts +425 -0
- package/src/maps/style.ts +309 -0
- package/src/maps/styles.ts +1040 -0
- package/src/maps/tiles.ts +676 -0
- package/src/maps/types.ts +260 -0
- package/src/qml/containers.tsx +380 -0
- package/src/qml/controls.tsx +47 -0
- package/src/qml/globals.ts +33 -0
- package/src/qml/index.ts +67 -0
- package/src/qml/interaction.tsx +317 -0
- package/src/qml/ir.ts +80 -0
- package/src/qml/layouts.tsx +141 -0
- package/src/qml/models.ts +101 -0
- package/src/qml/objects.ts +1431 -0
- package/src/qml/parse.ts +624 -0
- package/src/qml/qtquick.tsx +413 -0
- package/src/qml/react.tsx +454 -0
- package/src/qml/resolver.ts +99 -0
- package/src/qml/slots.ts +249 -0
- package/src/qml/states.ts +318 -0
- package/src/qml/view-utils.ts +140 -0
- package/src/reorder/hx.ts +31 -0
- package/src/reorder/index.ts +2223 -0
- package/src/reorder/model.ts +232 -0
- package/src/richtext/node.ts +49 -14
- package/src/richtext/runs.ts +115 -30
- package/src/tabs/hx.ts +31 -0
- package/src/tabs/index.ts +1686 -0
- package/src/terminal/vt/fonts.ts +128 -36
- package/src/terminal/vt/index.ts +4 -2
- package/src/terminal/vt/node.ts +105 -12
- package/src/terminal/vt/pty.ts +243 -0
- package/src/terminal/vt/renderer.ts +13 -3
|
@@ -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"}
|