@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,246 @@
1
+ import { jsx as _jsx } from "react-x11/jsx-runtime";
2
+ // Pointer and keyboard: MouseArea, the `Keys` attached handlers, `focus`/
3
+ // `activeFocus`, and the two text editors over core's `<textinput>` /
4
+ // `<textarea>`.
5
+ import { useEffect } from 'react';
6
+ import { XK_BACKSPACE, XK_DELETE, XK_DOWN, XK_ESCAPE, XK_KP_ENTER, XK_LEFT, XK_RETURN, XK_RIGHT, XK_SPACE, XK_TAB, XK_UP, } from 'react-x11/keysyms';
7
+ import { QmlInstance } from './objects.js';
8
+ import { renderQmlChildren, geometryStyle } from './react.js';
9
+ import { applyMotion, captureNode, hostNode, num, qmlColor, str, } from './view-utils.js';
10
+ // Qt's modifier flags, so `mouse.modifiers & Qt.ShiftModifier` reads as
11
+ // ported code expects.
12
+ const SHIFT = 0x02000000;
13
+ const CTRL = 0x04000000;
14
+ const ALT = 0x08000000;
15
+ const META = 0x10000000;
16
+ const modifiersOf = (e) => (e.shiftKey ? SHIFT : 0) |
17
+ (e.ctrlKey ? CTRL : 0) |
18
+ (e.altKey ? ALT : 0) |
19
+ (e.metaKey ? META : 0);
20
+ const NAMED_KEYS = {
21
+ [XK_RETURN]: 'Return',
22
+ [XK_KP_ENTER]: 'Enter',
23
+ [XK_ESCAPE]: 'Escape',
24
+ [XK_UP]: 'Up',
25
+ [XK_DOWN]: 'Down',
26
+ [XK_LEFT]: 'Left',
27
+ [XK_RIGHT]: 'Right',
28
+ [XK_TAB]: 'Tab',
29
+ [XK_SPACE]: 'Space',
30
+ [XK_DELETE]: 'Delete',
31
+ [XK_BACKSPACE]: 'Back',
32
+ };
33
+ function dispatchKeys(inst, e) {
34
+ const ev = {
35
+ key: e.keysym ?? 0,
36
+ text: e.key ?? '',
37
+ modifiers: modifiersOf(e),
38
+ accepted: false,
39
+ };
40
+ const named = NAMED_KEYS[ev.key];
41
+ if (named)
42
+ inst.attachedHandlers.get(`Keys.on${named}Pressed`)?.(ev);
43
+ if (!ev.accepted)
44
+ inst.attachedHandlers.get('Keys.onPressed')?.(ev);
45
+ if (ev.accepted)
46
+ e.stopPropagation?.();
47
+ }
48
+ /**
49
+ * The focus/keyboard props an Item earns from `focus: true`, `Keys.*`
50
+ * handlers, or being told to be focusable. `activeFocus` follows the real
51
+ * focus events.
52
+ */
53
+ export function keyFocusProps(inst) {
54
+ const wantsFocus = inst.slots.get('focus')?.peek() === true;
55
+ let hasKeys = false;
56
+ for (const k of inst.attachedHandlers.keys()) {
57
+ if (k.startsWith('Keys.')) {
58
+ hasKeys = true;
59
+ break;
60
+ }
61
+ }
62
+ if (!wantsFocus && !hasKeys)
63
+ return {};
64
+ const props = {
65
+ focusable: true,
66
+ onFocus: () => inst.slots.get('activeFocus')?.assign(true),
67
+ onBlur: () => inst.slots.get('activeFocus')?.assign(false),
68
+ };
69
+ if (wantsFocus)
70
+ props.autoFocus = true;
71
+ if (hasKeys)
72
+ props.onKeyDown = (e) => dispatchKeys(inst, e);
73
+ return props;
74
+ }
75
+ // --- MouseArea -------------------------------------------------------------
76
+ function MouseAreaView({ inst }) {
77
+ const enabled = inst.slot('enabled').peek() !== false;
78
+ const hoverEnabled = inst.slot('hoverEnabled').peek() === true;
79
+ const style = geometryStyle(inst);
80
+ applyMotion(inst, style);
81
+ const mouse = (e) => {
82
+ const abs = hostNode(inst)?.abs;
83
+ return {
84
+ x: e.x - (abs?.x ?? 0),
85
+ y: e.y - (abs?.y ?? 0),
86
+ button: e.button,
87
+ modifiers: modifiersOf(e),
88
+ accepted: true,
89
+ };
90
+ };
91
+ const handlers = {};
92
+ if (enabled) {
93
+ handlers.onClick = (e) => {
94
+ e.stopPropagation?.();
95
+ inst.emit('clicked', mouse(e));
96
+ if (e.detail === 2)
97
+ inst.emit('doubleClicked', mouse(e));
98
+ };
99
+ handlers.onMouseDown = (e) => {
100
+ e.stopPropagation?.();
101
+ inst.slot('pressed').assign(true);
102
+ inst.emit('pressed', mouse(e));
103
+ };
104
+ handlers.onMouseUp = (e) => {
105
+ e.stopPropagation?.();
106
+ inst.slot('pressed').assign(false);
107
+ inst.emit('released', mouse(e));
108
+ };
109
+ handlers.onMouseMove = (e) => {
110
+ inst.emit('positionChanged', mouse(e));
111
+ };
112
+ handlers.onWheel = (e) => {
113
+ inst.emit('wheel', {
114
+ ...mouse(e),
115
+ angleDelta: { x: e.deltaX ?? 0, y: e.deltaY ?? 0 },
116
+ });
117
+ };
118
+ if (hoverEnabled) {
119
+ handlers.onMouseEnter = () => {
120
+ inst.slot('containsMouse').assign(true);
121
+ inst.emit('entered');
122
+ };
123
+ handlers.onMouseLeave = () => {
124
+ inst.slot('containsMouse').assign(false);
125
+ inst.emit('exited');
126
+ };
127
+ }
128
+ }
129
+ return (_jsx("box", { ref: captureNode(inst), style: style, ...handlers, ...keyFocusProps(inst), children: renderQmlChildren(inst) }));
130
+ }
131
+ // --- TextInput / TextEdit --------------------------------------------------
132
+ /** The font/colour subset Text and the editors share. */
133
+ export function applyFontStyle(inst, style) {
134
+ const color = inst.slots.get('color')?.peek();
135
+ if (color !== undefined)
136
+ style.color = qmlColor(color);
137
+ const px = num(inst.slots.get('font.pixelSize')?.peek());
138
+ const pt = num(inst.slots.get('font.pointSize')?.peek());
139
+ if (px)
140
+ style.fontSize = px;
141
+ else if (pt)
142
+ style.fontSize = Math.round((pt * 96) / 72); // CSS's 1pt
143
+ const family = inst.slots.get('font.family')?.peek();
144
+ if (family)
145
+ style.fontFamily = String(family);
146
+ if (inst.slots.get('font.bold')?.peek())
147
+ style.fontWeight = 700;
148
+ else {
149
+ const weight = num(inst.slots.get('font.weight')?.peek());
150
+ if (weight)
151
+ style.fontWeight = weight;
152
+ }
153
+ if (inst.slots.get('font.italic')?.peek())
154
+ style.fontStyle = 'italic';
155
+ }
156
+ function useImplicitLineHeight(inst, text) {
157
+ useEffect(() => {
158
+ const node = hostNode(inst);
159
+ if (!node?.app?.fonts || !node.resolvedTextStyle)
160
+ return;
161
+ try {
162
+ const probe = node.app.fonts.layout(text || 'Mg', node.resolvedTextStyle());
163
+ inst.slots.get('implicitHeight')?.assign(Math.ceil(probe.height) + 8);
164
+ }
165
+ catch {
166
+ // No fonts loaded (headless without the fonts option): leave 0.
167
+ }
168
+ });
169
+ }
170
+ function editorView(tag) {
171
+ return function EditorView({ inst }) {
172
+ const style = geometryStyle(inst);
173
+ applyFontStyle(inst, style);
174
+ applyMotion(inst, style);
175
+ const text = str(inst.slot('text').peek());
176
+ useImplicitLineHeight(inst, text);
177
+ const maxLen = num(inst.slots.get('maximumLength')?.peek());
178
+ const props = {
179
+ ref: captureNode(inst),
180
+ style,
181
+ value: text,
182
+ onChange: (ev) => inst.slot('text').set(ev.value),
183
+ ...keyFocusProps(inst),
184
+ };
185
+ if (tag === 'textinput') {
186
+ props.onSubmit = () => inst.emit('accepted');
187
+ if (maxLen > 0 && maxLen < 32767)
188
+ props.maxLength = maxLen;
189
+ return _jsx("textinput", { ...props });
190
+ }
191
+ return _jsx("textarea", { ...props });
192
+ };
193
+ }
194
+ // --- the type definitions --------------------------------------------------
195
+ export const interactionTypes = {
196
+ MouseArea: {
197
+ extends: 'Item',
198
+ view: MouseAreaView,
199
+ properties: {
200
+ pressed: { default: false },
201
+ containsMouse: { default: false },
202
+ hoverEnabled: { default: false },
203
+ },
204
+ signals: {
205
+ clicked: ['mouse'],
206
+ doubleClicked: ['mouse'],
207
+ pressed: ['mouse'],
208
+ released: ['mouse'],
209
+ positionChanged: ['mouse'],
210
+ entered: [],
211
+ exited: [],
212
+ wheel: ['wheel'],
213
+ },
214
+ },
215
+ TextInput: {
216
+ extends: 'Item',
217
+ view: editorView('textinput'),
218
+ properties: {
219
+ text: { default: '' },
220
+ color: { default: undefined },
221
+ maximumLength: { default: 32767 },
222
+ 'font.pixelSize': { default: 0 },
223
+ 'font.pointSize': { default: 0 },
224
+ 'font.family': { default: '' },
225
+ 'font.bold': { default: false },
226
+ 'font.italic': { default: false },
227
+ 'font.weight': { default: 0 },
228
+ },
229
+ signals: { accepted: [], editingFinished: [] },
230
+ },
231
+ TextEdit: {
232
+ extends: 'Item',
233
+ view: editorView('textarea'),
234
+ properties: {
235
+ text: { default: '' },
236
+ color: { default: undefined },
237
+ 'font.pixelSize': { default: 0 },
238
+ 'font.pointSize': { default: 0 },
239
+ 'font.family': { default: '' },
240
+ 'font.bold': { default: false },
241
+ 'font.italic': { default: false },
242
+ 'font.weight': { default: 0 },
243
+ },
244
+ },
245
+ };
246
+ //# sourceMappingURL=interaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interaction.js","sourceRoot":"","sources":["../../src/qml/interaction.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ export interface QmlImport {
2
+ /** `import QtQuick 2.15` — a registry module name. */
3
+ module?: string;
4
+ /** `import "./widgets"` — a path import (resolved by the host app). */
5
+ path?: string;
6
+ version?: string;
7
+ alias?: string;
8
+ }
9
+ export interface ObjectIR {
10
+ type: string;
11
+ id: string | null;
12
+ members: MemberIR[];
13
+ loc: number;
14
+ }
15
+ export type ValueIR =
16
+ /** A JavaScript expression, compiled lazily by the runtime. */
17
+ {
18
+ kind: 'expr';
19
+ src: string;
20
+ loc: number;
21
+ }
22
+ /** `prop: { …statements }` — a script binding (still reactive). */
23
+ | {
24
+ kind: 'block';
25
+ src: string;
26
+ loc: number;
27
+ }
28
+ /** `delegate: Component { … }`, `background: Rectangle { … }`. */
29
+ | {
30
+ kind: 'object';
31
+ object: ObjectIR;
32
+ }
33
+ /** `states: [State { … }, …]` — an array of object templates. */
34
+ | {
35
+ kind: 'array';
36
+ items: ValueIR[];
37
+ };
38
+ export interface AliasTargetIR {
39
+ kind: 'alias-target';
40
+ path: string[];
41
+ }
42
+ export type MemberIR = {
43
+ kind: 'property';
44
+ name: string;
45
+ propType: string;
46
+ readonly: boolean;
47
+ default: boolean;
48
+ required: boolean;
49
+ value: ValueIR | AliasTargetIR | null;
50
+ loc: number;
51
+ } | {
52
+ kind: 'signal';
53
+ name: string;
54
+ params: Array<{
55
+ type: string;
56
+ name: string;
57
+ }>;
58
+ loc: number;
59
+ } | {
60
+ kind: 'function';
61
+ name: string;
62
+ params: string[];
63
+ body: string;
64
+ loc: number;
65
+ } | {
66
+ kind: 'binding';
67
+ path: string[];
68
+ value: ValueIR;
69
+ loc: number;
70
+ } | {
71
+ kind: 'group';
72
+ bindings: BindingMemberIR[];
73
+ loc: number;
74
+ } | {
75
+ kind: 'object';
76
+ object: ObjectIR;
77
+ loc: number;
78
+ } | {
79
+ kind: 'value-source';
80
+ object: ObjectIR;
81
+ on: string[];
82
+ loc: number;
83
+ } | {
84
+ kind: 'id';
85
+ id: string;
86
+ loc: number;
87
+ } | {
88
+ kind: 'inline-component';
89
+ name: string;
90
+ object: ObjectIR;
91
+ loc: number;
92
+ };
93
+ export type BindingMemberIR = Extract<MemberIR, {
94
+ kind: 'binding';
95
+ }>;
96
+ export interface QmlDocument {
97
+ fileName: string;
98
+ imports: QmlImport[];
99
+ pragmas: string[];
100
+ root: ObjectIR;
101
+ /** How this document was loaded — set by the engine when a resolver is
102
+ * in play, so the type names it uses can resolve `.qml` files relative
103
+ * to it (resolver.ts). */
104
+ load?: import('./resolver.js').DocLoad;
105
+ }
106
+ //# sourceMappingURL=ir.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.d.ts","sourceRoot":"","sources":["../../src/qml/ir.ts"],"names":[],"mappings":"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"}
package/dist/qml/ir.js ADDED
@@ -0,0 +1,7 @@
1
+ // The intermediate representation both halves share: the parser produces it,
2
+ // the runtime instantiates it, and the future compiler will serialize it.
3
+ // Everything is plain data — no methods, no cycles — so a document parses
4
+ // once and instantiates many times (a Repeater's delegate is one ObjectIR,
5
+ // however many rows exist).
6
+ export {};
7
+ //# sourceMappingURL=ir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ir.js","sourceRoot":"","sources":["../../src/qml/ir.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,0EAA0E;AAC1E,0EAA0E;AAC1E,2EAA2E;AAC3E,4BAA4B"}
@@ -0,0 +1,3 @@
1
+ import { type QmlTypeDef } from './objects.js';
2
+ export declare const layoutTypes: Record<string, QmlTypeDef>;
3
+ //# sourceMappingURL=layouts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.d.ts","sourceRoot":"","sources":["../../src/qml/layouts.tsx"],"names":[],"mappings":"AAuBA,OAAO,EAAe,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAkH5D,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAGlD,CAAC"}
@@ -0,0 +1,122 @@
1
+ import { jsx as _jsx } from "react-x11/jsx-runtime";
2
+ // QtQuick.Layouts — RowLayout and ColumnLayout, lowered onto yoga.
3
+ //
4
+ // This is react-x11's home turf: the container renders a flex `<box>` and
5
+ // every child renders as a flex item styled from its `Layout.*` attached
6
+ // properties (react.tsx, `layoutChildStyle`) — `fillWidth` is `flexGrow`,
7
+ // `preferredWidth` is the basis, `alignment` is `alignSelf`, margins are
8
+ // margins. Yoga decides the geometry; the renderer never re-implements it.
9
+ //
10
+ // What QML still needs from that arrangement is *readable geometry*:
11
+ // `item.x` and `item.width` are ordinary properties other bindings consume.
12
+ // After each layout pass the container reads its children's laid-out rects
13
+ // and `reflect()`s them into the x/y/width/height slots — a write that
14
+ // disturbs no binding and no flag, so the implicit-width default keeps
15
+ // meaning "content-sized" and an author `width:` keeps reading as a size
16
+ // hint. Expressions see yoga's answer; yoga sees the hints.
17
+ //
18
+ // GridLayout is not here yet — yoga has no grid, and a half-true one would
19
+ // be worse than the clear unknown-type error; RowLayout, ColumnLayout and
20
+ // the full Layout.* set cover the linked reference page.
21
+ import { useEffect } from 'react';
22
+ import { QmlInstance } from './objects.js';
23
+ import { renderQmlChildren, geometryStyle, preferredSpan } from './react.js';
24
+ import { applyMotion, captureNode, hostNode, initItem, num, } from './view-utils.js';
25
+ import { afterLayout, cancelAfterLayout, } from '../internal/timers.js';
26
+ function isRow(inst) {
27
+ return inst.typeInfo.name === 'RowLayout';
28
+ }
29
+ /** Reflect yoga's answers into the managed children's geometry slots. */
30
+ function feedbackLayout(inst) {
31
+ if (inst.destroyed)
32
+ return;
33
+ const containerAbs = hostNode(inst)?.abs;
34
+ if (!containerAbs)
35
+ return;
36
+ for (const child of inst.visualChildren()) {
37
+ const abs = hostNode(child)?.abs;
38
+ if (!abs)
39
+ continue; // a custom view without captureNode: skip quietly
40
+ child.slots.get('x')?.reflect(abs.x - containerAbs.x);
41
+ child.slots.get('y')?.reflect(abs.y - containerAbs.y);
42
+ child.slots.get('width')?.reflect(abs.width);
43
+ child.slots.get('height')?.reflect(abs.height);
44
+ }
45
+ }
46
+ function LayoutView({ inst }) {
47
+ const horizontal = isRow(inst);
48
+ const style = geometryStyle(inst);
49
+ style.display = 'flex';
50
+ style.flexDirection = horizontal ? 'row' : 'column';
51
+ style.gap = num(inst.slot('spacing').peek());
52
+ applyMotion(inst, style);
53
+ // Feed geometry back after the layout flush — and again whenever any
54
+ // child re-renders (its size hints may have moved yoga). A reflect that
55
+ // changes nothing notifies nobody, so this settles.
56
+ useEffect(() => {
57
+ let tick = null;
58
+ const schedule = () => {
59
+ cancelAfterLayout(tick);
60
+ tick = afterLayout(() => feedbackLayout(inst));
61
+ };
62
+ schedule();
63
+ const offs = inst.visualChildren().map((c) => c.subscribe(schedule));
64
+ return () => {
65
+ cancelAfterLayout(tick);
66
+ offs.forEach((off) => off());
67
+ };
68
+ });
69
+ return (_jsx("box", { ref: captureNode(inst), style: style, children: renderQmlChildren(inst) }));
70
+ }
71
+ /** The container's own size hint: sum of children's preferred spans on the
72
+ * main axis (plus spacing), max on the cross — tracked bindings, so a
73
+ * child's hint change resizes a content-sized layout. */
74
+ function layoutImplicit(inst) {
75
+ const horizontal = isRow(inst);
76
+ const tracked = (slot) => slot.get();
77
+ const mainExtent = () => {
78
+ let sum = 0;
79
+ let count = 0;
80
+ const spacing = num(inst.slot('spacing').get());
81
+ for (const child of inst.visualChildren()) {
82
+ if (child.slot('visible').get() === false)
83
+ continue;
84
+ sum += preferredSpan(child, horizontal, tracked) ?? 0;
85
+ count++;
86
+ }
87
+ return sum + spacing * Math.max(0, count - 1);
88
+ };
89
+ const crossExtent = () => {
90
+ let max = 0;
91
+ for (const child of inst.visualChildren()) {
92
+ if (child.slot('visible').get() === false)
93
+ continue;
94
+ max = Math.max(max, preferredSpan(child, !horizontal, tracked) ?? 0);
95
+ }
96
+ return max;
97
+ };
98
+ inst
99
+ .slot(horizontal ? 'implicitWidth' : 'implicitHeight')
100
+ .setBinding(mainExtent);
101
+ inst
102
+ .slot(horizontal ? 'implicitHeight' : 'implicitWidth')
103
+ .setBinding(crossExtent);
104
+ }
105
+ function layoutInit(inst) {
106
+ initItem(inst);
107
+ layoutImplicit(inst);
108
+ }
109
+ const layoutContainer = {
110
+ extends: 'Item',
111
+ managesChildLayout: true,
112
+ view: LayoutView,
113
+ // Qt's RowLayout/ColumnLayout default spacing.
114
+ properties: { spacing: { default: 5 } },
115
+ init: layoutInit,
116
+ onStructure: layoutImplicit, // a Repeater spliced new children in
117
+ };
118
+ export const layoutTypes = {
119
+ RowLayout: { ...layoutContainer },
120
+ ColumnLayout: { ...layoutContainer },
121
+ };
122
+ //# sourceMappingURL=layouts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layouts.js","sourceRoot":"","sources":["../../src/qml/layouts.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { type QmlTypeDef } from './objects.js';
2
+ import { Slot } from './slots.js';
3
+ export declare const modelTypes: Record<string, QmlTypeDef>;
4
+ export interface ResolvedModel {
5
+ rows: unknown[];
6
+ /** Present for a ListModel: the revision slot a consumer watches. */
7
+ revSlot: Slot | null;
8
+ }
9
+ /** number | array | ListModel → rows a Repeater/ListView can walk. */
10
+ export declare function resolveModel(value: unknown): ResolvedModel;
11
+ /** The context properties a delegate row sees: index, modelData, and — for
12
+ * object rows — each role by name, the way QML exposes ListModel roles. */
13
+ export declare function delegateExtras(rows: unknown[], index: number): Record<string, unknown>;
14
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/qml/models.ts"],"names":[],"mappings":"AAQA,OAAO,EAA2B,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAYlC,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAyCjD,CAAC;AAEF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,qEAAqE;IACrE,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;CACtB;AAED,sEAAsE;AACtE,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAa1D;AAED;2EAC2E;AAC3E,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EAAE,EACf,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB"}
@@ -0,0 +1,80 @@
1
+ // ListModel / ListElement, and the one helper every model consumer shares.
2
+ //
3
+ // A ListModel is rows of plain objects. Inline `ListElement` children seed
4
+ // it; the mutation methods (`append`, `remove`, `set`, …) are facade
5
+ // methods, and every mutation bumps a hidden revision slot the consumers
6
+ // (Repeater, ListView) watch — a coarse rebuild, which is the honest P1
7
+ // answer; incremental delegate reuse is DelegateModel's job, later.
8
+ import { QmlInstance, instanceOf } from './objects.js';
9
+ import { Slot } from './slots.js';
10
+ const rowsOf = (m) => m.state.rows;
11
+ function mutate(m, fn) {
12
+ fn(rowsOf(m));
13
+ m.slot('count').assign(rowsOf(m).length);
14
+ m.slot('__rev').assign(m.slot('__rev').peek() + 1);
15
+ }
16
+ export const modelTypes = {
17
+ ListElement: {
18
+ nonVisual: true,
19
+ dynamicProperties: true,
20
+ properties: {},
21
+ },
22
+ ListModel: {
23
+ nonVisual: true,
24
+ properties: { count: { default: 0 }, __rev: { default: 0 } },
25
+ init(m) {
26
+ const rows = [];
27
+ for (const el of m.children) {
28
+ if (el.typeInfo.name !== 'ListElement')
29
+ continue;
30
+ const row = {};
31
+ for (const [name, slot] of el.slots)
32
+ row[name] = slot.peek();
33
+ rows.push(row);
34
+ }
35
+ m.state.rows = rows;
36
+ m.slot('count').assign(rows.length);
37
+ m.methods.set('get', (i) => rowsOf(m)[Number(i)]);
38
+ m.methods.set('append', (row) => mutate(m, (r) => r.push(row)));
39
+ m.methods.set('insert', (i, row) => mutate(m, (r) => r.splice(Number(i), 0, row)));
40
+ m.methods.set('remove', (i, n) => mutate(m, (r) => r.splice(Number(i), n === undefined ? 1 : Number(n))));
41
+ m.methods.set('set', (i, row) => mutate(m, (r) => {
42
+ r[Number(i)] = { ...r[Number(i)], ...row };
43
+ }));
44
+ m.methods.set('setProperty', (i, name, value) => mutate(m, (r) => {
45
+ r[Number(i)] = { ...r[Number(i)], [String(name)]: value };
46
+ }));
47
+ m.methods.set('clear', () => mutate(m, (r) => (r.length = 0)));
48
+ },
49
+ },
50
+ };
51
+ /** number | array | ListModel → rows a Repeater/ListView can walk. */
52
+ export function resolveModel(value) {
53
+ const inst = instanceOf(value);
54
+ if (inst && inst.typeInfo.name === 'ListModel') {
55
+ return { rows: rowsOf(inst), revSlot: inst.slot('__rev') };
56
+ }
57
+ if (typeof value === 'number') {
58
+ return {
59
+ rows: Array.from({ length: Math.max(0, Math.floor(value)) }, (_, i) => i),
60
+ revSlot: null,
61
+ };
62
+ }
63
+ if (Array.isArray(value))
64
+ return { rows: value, revSlot: null };
65
+ return { rows: [], revSlot: null };
66
+ }
67
+ /** The context properties a delegate row sees: index, modelData, and — for
68
+ * object rows — each role by name, the way QML exposes ListModel roles. */
69
+ export function delegateExtras(rows, index) {
70
+ const data = rows[index];
71
+ const extras = { index, modelData: data };
72
+ if (data && typeof data === 'object' && !Array.isArray(data)) {
73
+ for (const [k, v] of Object.entries(data)) {
74
+ if (!(k in extras))
75
+ extras[k] = v;
76
+ }
77
+ }
78
+ return extras;
79
+ }
80
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/qml/models.ts"],"names":[],"mappings":"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"}