@gtkx/react 0.18.9 → 0.20.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 (212) hide show
  1. package/dist/components/list.d.ts +35 -0
  2. package/dist/components/list.d.ts.map +1 -0
  3. package/dist/components/list.js +40 -0
  4. package/dist/components/list.js.map +1 -0
  5. package/dist/generated/internal.d.ts +8 -3
  6. package/dist/generated/internal.d.ts.map +1 -1
  7. package/dist/generated/internal.js +3553 -53
  8. package/dist/generated/internal.js.map +1 -1
  9. package/dist/generated/jsx.d.ts +178 -326
  10. package/dist/generated/jsx.d.ts.map +1 -1
  11. package/dist/generated/jsx.js +0 -324
  12. package/dist/generated/jsx.js.map +1 -1
  13. package/dist/host-config.d.ts.map +1 -1
  14. package/dist/host-config.js +48 -10
  15. package/dist/host-config.js.map +1 -1
  16. package/dist/jsx.d.ts +111 -54
  17. package/dist/jsx.d.ts.map +1 -1
  18. package/dist/jsx.js +3 -28
  19. package/dist/jsx.js.map +1 -1
  20. package/dist/metadata.d.ts +1 -0
  21. package/dist/metadata.d.ts.map +1 -1
  22. package/dist/metadata.js +7 -1
  23. package/dist/metadata.js.map +1 -1
  24. package/dist/node.d.ts +0 -2
  25. package/dist/node.d.ts.map +1 -1
  26. package/dist/node.js +19 -25
  27. package/dist/node.js.map +1 -1
  28. package/dist/nodes/application.d.ts.map +1 -1
  29. package/dist/nodes/application.js +4 -0
  30. package/dist/nodes/application.js.map +1 -1
  31. package/dist/nodes/column-view-column.d.ts +19 -16
  32. package/dist/nodes/column-view-column.d.ts.map +1 -1
  33. package/dist/nodes/column-view-column.js +129 -97
  34. package/dist/nodes/column-view-column.js.map +1 -1
  35. package/dist/nodes/event-controller.d.ts +1 -0
  36. package/dist/nodes/event-controller.d.ts.map +1 -1
  37. package/dist/nodes/event-controller.js +9 -7
  38. package/dist/nodes/event-controller.js.map +1 -1
  39. package/dist/nodes/fixed-child.d.ts +1 -2
  40. package/dist/nodes/fixed-child.d.ts.map +1 -1
  41. package/dist/nodes/fixed-child.js +21 -21
  42. package/dist/nodes/fixed-child.js.map +1 -1
  43. package/dist/nodes/font-dialog-button.d.ts +1 -1
  44. package/dist/nodes/font-dialog-button.d.ts.map +1 -1
  45. package/dist/nodes/font-dialog-button.js +8 -0
  46. package/dist/nodes/font-dialog-button.js.map +1 -1
  47. package/dist/nodes/internal/accessible.d.ts +5 -0
  48. package/dist/nodes/internal/accessible.d.ts.map +1 -0
  49. package/dist/nodes/internal/accessible.js +119 -0
  50. package/dist/nodes/internal/accessible.js.map +1 -0
  51. package/dist/nodes/internal/bound-item.d.ts +4 -0
  52. package/dist/nodes/internal/bound-item.d.ts.map +1 -0
  53. package/dist/nodes/internal/bound-item.js +2 -0
  54. package/dist/nodes/internal/bound-item.js.map +1 -0
  55. package/dist/nodes/internal/construct.d.ts +3 -0
  56. package/dist/nodes/internal/construct.d.ts.map +1 -0
  57. package/dist/nodes/internal/construct.js +44 -0
  58. package/dist/nodes/internal/construct.js.map +1 -0
  59. package/dist/nodes/internal/text-buffer-controller.d.ts +4 -0
  60. package/dist/nodes/internal/text-buffer-controller.d.ts.map +1 -1
  61. package/dist/nodes/internal/text-buffer-controller.js +49 -9
  62. package/dist/nodes/internal/text-buffer-controller.js.map +1 -1
  63. package/dist/nodes/internal/widget.d.ts.map +1 -1
  64. package/dist/nodes/internal/widget.js +4 -1
  65. package/dist/nodes/internal/widget.js.map +1 -1
  66. package/dist/nodes/list-item-node.d.ts +12 -0
  67. package/dist/nodes/list-item-node.d.ts.map +1 -0
  68. package/dist/nodes/list-item-node.js +23 -0
  69. package/dist/nodes/list-item-node.js.map +1 -0
  70. package/dist/nodes/list.d.ts +100 -0
  71. package/dist/nodes/list.d.ts.map +1 -0
  72. package/dist/nodes/list.js +950 -0
  73. package/dist/nodes/list.js.map +1 -0
  74. package/dist/nodes/notebook-page.d.ts.map +1 -1
  75. package/dist/nodes/notebook-page.js +4 -0
  76. package/dist/nodes/notebook-page.js.map +1 -1
  77. package/dist/nodes/shortcut.d.ts +3 -2
  78. package/dist/nodes/shortcut.d.ts.map +1 -1
  79. package/dist/nodes/shortcut.js +19 -4
  80. package/dist/nodes/shortcut.js.map +1 -1
  81. package/dist/nodes/text-anchor.d.ts.map +1 -1
  82. package/dist/nodes/text-anchor.js +7 -1
  83. package/dist/nodes/text-anchor.js.map +1 -1
  84. package/dist/nodes/text-tag.d.ts.map +1 -1
  85. package/dist/nodes/text-tag.js +5 -1
  86. package/dist/nodes/text-tag.js.map +1 -1
  87. package/dist/nodes/text-view.d.ts +1 -0
  88. package/dist/nodes/text-view.d.ts.map +1 -1
  89. package/dist/nodes/text-view.js +4 -0
  90. package/dist/nodes/text-view.js.map +1 -1
  91. package/dist/nodes/widget.d.ts +0 -2
  92. package/dist/nodes/widget.d.ts.map +1 -1
  93. package/dist/nodes/widget.js +51 -67
  94. package/dist/nodes/widget.js.map +1 -1
  95. package/dist/nodes/window.d.ts.map +1 -1
  96. package/dist/nodes/window.js +2 -2
  97. package/dist/nodes/window.js.map +1 -1
  98. package/dist/registry.d.ts +0 -2
  99. package/dist/registry.d.ts.map +1 -1
  100. package/dist/registry.js +4 -13
  101. package/dist/registry.js.map +1 -1
  102. package/dist/types.d.ts +2 -2
  103. package/dist/types.d.ts.map +1 -1
  104. package/package.json +5 -4
  105. package/src/components/list.tsx +83 -0
  106. package/src/generated/internal.ts +3559 -49
  107. package/src/generated/jsx.ts +178 -326
  108. package/src/host-config.ts +43 -10
  109. package/src/jsx.ts +121 -62
  110. package/src/metadata.ts +8 -1
  111. package/src/node.ts +23 -25
  112. package/src/nodes/application.ts +5 -0
  113. package/src/nodes/column-view-column.ts +125 -104
  114. package/src/nodes/event-controller.ts +8 -8
  115. package/src/nodes/fixed-child.ts +24 -23
  116. package/src/nodes/font-dialog-button.ts +10 -0
  117. package/src/nodes/internal/accessible.ts +155 -0
  118. package/src/nodes/internal/bound-item.ts +4 -0
  119. package/src/nodes/internal/construct.ts +60 -0
  120. package/src/nodes/internal/text-buffer-controller.ts +51 -8
  121. package/src/nodes/internal/widget.ts +3 -1
  122. package/src/nodes/list-item-node.ts +29 -0
  123. package/src/nodes/list.ts +1082 -0
  124. package/src/nodes/notebook-page.ts +4 -0
  125. package/src/nodes/shortcut.ts +22 -5
  126. package/src/nodes/text-anchor.ts +6 -1
  127. package/src/nodes/text-tag.ts +7 -1
  128. package/src/nodes/text-view.ts +5 -0
  129. package/src/nodes/widget.ts +47 -69
  130. package/src/nodes/window.ts +2 -2
  131. package/src/registry.ts +11 -17
  132. package/src/types.ts +7 -2
  133. package/dist/fiber-root.d.ts +0 -4
  134. package/dist/fiber-root.d.ts.map +0 -1
  135. package/dist/fiber-root.js +0 -6
  136. package/dist/fiber-root.js.map +0 -1
  137. package/dist/nodes/column-view.d.ts +0 -36
  138. package/dist/nodes/column-view.d.ts.map +0 -1
  139. package/dist/nodes/column-view.js +0 -175
  140. package/dist/nodes/column-view.js.map +0 -1
  141. package/dist/nodes/drop-down.d.ts +0 -27
  142. package/dist/nodes/drop-down.d.ts.map +0 -1
  143. package/dist/nodes/drop-down.js +0 -85
  144. package/dist/nodes/drop-down.js.map +0 -1
  145. package/dist/nodes/grid-view.d.ts +0 -29
  146. package/dist/nodes/grid-view.d.ts.map +0 -1
  147. package/dist/nodes/grid-view.js +0 -85
  148. package/dist/nodes/grid-view.js.map +0 -1
  149. package/dist/nodes/internal/base-item-renderer.d.ts +0 -28
  150. package/dist/nodes/internal/base-item-renderer.d.ts.map +0 -1
  151. package/dist/nodes/internal/base-item-renderer.js +0 -86
  152. package/dist/nodes/internal/base-item-renderer.js.map +0 -1
  153. package/dist/nodes/internal/grid-item-renderer.d.ts +0 -20
  154. package/dist/nodes/internal/grid-item-renderer.d.ts.map +0 -1
  155. package/dist/nodes/internal/grid-item-renderer.js +0 -66
  156. package/dist/nodes/internal/grid-item-renderer.js.map +0 -1
  157. package/dist/nodes/internal/list-item-renderer.d.ts +0 -27
  158. package/dist/nodes/internal/list-item-renderer.d.ts.map +0 -1
  159. package/dist/nodes/internal/list-item-renderer.js +0 -131
  160. package/dist/nodes/internal/list-item-renderer.js.map +0 -1
  161. package/dist/nodes/internal/list-store.d.ts +0 -22
  162. package/dist/nodes/internal/list-store.d.ts.map +0 -1
  163. package/dist/nodes/internal/list-store.js +0 -91
  164. package/dist/nodes/internal/list-store.js.map +0 -1
  165. package/dist/nodes/internal/selection-model-controller.d.ts +0 -26
  166. package/dist/nodes/internal/selection-model-controller.d.ts.map +0 -1
  167. package/dist/nodes/internal/selection-model-controller.js +0 -79
  168. package/dist/nodes/internal/selection-model-controller.js.map +0 -1
  169. package/dist/nodes/internal/simple-list-store.d.ts +0 -20
  170. package/dist/nodes/internal/simple-list-store.d.ts.map +0 -1
  171. package/dist/nodes/internal/simple-list-store.js +0 -87
  172. package/dist/nodes/internal/simple-list-store.js.map +0 -1
  173. package/dist/nodes/internal/tree-store.d.ts +0 -34
  174. package/dist/nodes/internal/tree-store.d.ts.map +0 -1
  175. package/dist/nodes/internal/tree-store.js +0 -208
  176. package/dist/nodes/internal/tree-store.js.map +0 -1
  177. package/dist/nodes/list-item.d.ts +0 -24
  178. package/dist/nodes/list-item.d.ts.map +0 -1
  179. package/dist/nodes/list-item.js +0 -83
  180. package/dist/nodes/list-item.js.map +0 -1
  181. package/dist/nodes/list-view.d.ts +0 -29
  182. package/dist/nodes/list-view.d.ts.map +0 -1
  183. package/dist/nodes/list-view.js +0 -83
  184. package/dist/nodes/list-view.js.map +0 -1
  185. package/dist/nodes/models/grid.d.ts +0 -28
  186. package/dist/nodes/models/grid.d.ts.map +0 -1
  187. package/dist/nodes/models/grid.js +0 -69
  188. package/dist/nodes/models/grid.js.map +0 -1
  189. package/dist/nodes/models/list.d.ts +0 -31
  190. package/dist/nodes/models/list.d.ts.map +0 -1
  191. package/dist/nodes/models/list.js +0 -93
  192. package/dist/nodes/models/list.js.map +0 -1
  193. package/dist/nodes/shortcut-controller.d.ts +0 -10
  194. package/dist/nodes/shortcut-controller.d.ts.map +0 -1
  195. package/dist/nodes/shortcut-controller.js +0 -23
  196. package/dist/nodes/shortcut-controller.js.map +0 -1
  197. package/src/fiber-root.ts +0 -20
  198. package/src/nodes/column-view.ts +0 -217
  199. package/src/nodes/drop-down.ts +0 -108
  200. package/src/nodes/grid-view.ts +0 -109
  201. package/src/nodes/internal/base-item-renderer.ts +0 -108
  202. package/src/nodes/internal/grid-item-renderer.ts +0 -78
  203. package/src/nodes/internal/list-item-renderer.ts +0 -162
  204. package/src/nodes/internal/list-store.ts +0 -105
  205. package/src/nodes/internal/selection-model-controller.ts +0 -115
  206. package/src/nodes/internal/simple-list-store.ts +0 -99
  207. package/src/nodes/internal/tree-store.ts +0 -237
  208. package/src/nodes/list-item.ts +0 -107
  209. package/src/nodes/list-view.ts +0 -113
  210. package/src/nodes/models/grid.ts +0 -105
  211. package/src/nodes/models/list.ts +0 -140
  212. package/src/nodes/shortcut-controller.ts +0 -27
@@ -81,6 +81,10 @@ export class NotebookPageNode extends VirtualNode<NotebookPageProps, WidgetNode<
81
81
  public override detachDeletedInstance(): void {
82
82
  const childWidget = this.findContentChild()?.container ?? null;
83
83
  if (childWidget && this.parent) {
84
+ const notebook = this.getParentWidget();
85
+ if (notebook.getNPages() <= 1) {
86
+ notebook.setShowTabs(false);
87
+ }
84
88
  this.detachPage(childWidget);
85
89
  }
86
90
  super.detachDeletedInstance();
@@ -13,25 +13,42 @@ export class ShortcutNode extends VirtualNode<ShortcutProps, EventControllerNode
13
13
  public override isValidParent(parent: Node): boolean {
14
14
  return parent instanceof EventControllerNode && parent.container instanceof Gtk.ShortcutController;
15
15
  }
16
+
16
17
  private shortcut: Gtk.Shortcut | null = null;
17
18
  private action: Gtk.CallbackAction | null = null;
18
19
 
20
+ public override setParent(parent: EventControllerNode<Gtk.ShortcutController> | null): void {
21
+ if (!parent && this.parent) {
22
+ this.removeFromController();
23
+ }
24
+
25
+ super.setParent(parent);
26
+
27
+ if (parent && !this.shortcut) {
28
+ this.createShortcut();
29
+ const shortcut = this.shortcut;
30
+ if (shortcut) parent.container.addShortcut(shortcut);
31
+ }
32
+ }
33
+
19
34
  public override commitUpdate(oldProps: ShortcutProps | null, newProps: ShortcutProps): void {
20
35
  super.commitUpdate(oldProps, newProps);
21
36
  this.applyOwnProps(oldProps, newProps);
22
37
  }
23
38
 
24
39
  public override detachDeletedInstance(): void {
25
- this.shortcut = null;
26
- this.action = null;
40
+ this.removeFromController();
27
41
  super.detachDeletedInstance();
28
42
  }
29
43
 
30
- public getShortcut(): Gtk.Shortcut | null {
31
- return this.shortcut;
44
+ private removeFromController(): void {
45
+ if (!this.parent || !this.shortcut) return;
46
+ this.parent.container.removeShortcut(this.shortcut);
47
+ this.shortcut = null;
48
+ this.action = null;
32
49
  }
33
50
 
34
- public createShortcut(): void {
51
+ private createShortcut(): void {
35
52
  const trigger = this.createTrigger();
36
53
  this.action = new Gtk.CallbackAction(() => {
37
54
  const result = this.props.onActivate();
@@ -49,7 +49,12 @@ export class TextAnchorNode extends VirtualNode<TextAnchorProps, Node & TextCont
49
49
  const iter = new Gtk.TextIter();
50
50
  this.buffer.getIterAtOffset(iter, this.bufferOffset);
51
51
 
52
- this.anchor = this.buffer.createChildAnchor(iter);
52
+ if (this.props.replacementChar) {
53
+ this.anchor = Gtk.TextChildAnchor.newWithReplacement(this.props.replacementChar);
54
+ this.buffer.insertChildAnchor(iter, this.anchor);
55
+ } else {
56
+ this.anchor = this.buffer.createChildAnchor(iter);
57
+ }
53
58
 
54
59
  const widgetChild = this.children[0];
55
60
  if (widgetChild?.container && this.anchor) {
@@ -4,6 +4,7 @@ import type { Node } from "../node.js";
4
4
  import { hasChanged } from "./internal/props.js";
5
5
  import { TextAnchorNode } from "./text-anchor.js";
6
6
  import type { TextContentChild, TextContentParent } from "./text-content.js";
7
+ import { TextPaintableNode } from "./text-paintable.js";
7
8
  import { isTextContentParent, TextSegmentNode } from "./text-segment.js";
8
9
  import { VirtualNode } from "./virtual.js";
9
10
 
@@ -282,6 +283,11 @@ export class TextTagNode
282
283
  }
283
284
 
284
285
  private isTextContentChild(child: Node): child is TextContentChild {
285
- return child instanceof TextSegmentNode || child instanceof TextTagNode || child instanceof TextAnchorNode;
286
+ return (
287
+ child instanceof TextSegmentNode ||
288
+ child instanceof TextTagNode ||
289
+ child instanceof TextAnchorNode ||
290
+ child instanceof TextPaintableNode
291
+ );
286
292
  }
287
293
  }
@@ -52,6 +52,11 @@ export class TextViewNode extends WidgetNode<Gtk.TextView, TextViewProps, TextVi
52
52
  return new TextBufferController(this, this.container, () => new Gtk.TextBuffer());
53
53
  }
54
54
 
55
+ public override finalizeInitialChildren(props: TextViewProps): boolean {
56
+ this.bufferController?.finalizeInitialMount();
57
+ return super.finalizeInitialChildren(props);
58
+ }
59
+
55
60
  public override commitUpdate(oldProps: TextViewProps | null, newProps: TextViewProps): void {
56
61
  super.commitUpdate(oldProps ? filterProps(oldProps, OWN_PROPS) : null, filterProps(newProps, OWN_PROPS));
57
62
  this.ensureBufferController().applyOwnProps(oldProps, newProps);
@@ -11,10 +11,11 @@ import {
11
11
  typeNameFromInstance,
12
12
  } from "@gtkx/ffi/gobject";
13
13
  import * as Gtk from "@gtkx/ffi/gtk";
14
- import { CONSTRUCTOR_PROPS } from "../generated/internal.js";
15
- import { resolvePropMeta, resolveSignal } from "../metadata.js";
14
+ import { isConstructOnlyProp, resolvePropMeta, resolveSignal } from "../metadata.js";
16
15
  import { Node } from "../node.js";
17
16
  import type { Container, Props } from "../types.js";
17
+ import { applyAccessibleProps, isAccessibleProp } from "./internal/accessible.js";
18
+ import { createContainerWithProperties } from "./internal/construct.js";
18
19
  import {
19
20
  type InsertableWidget,
20
21
  isAddable,
@@ -30,7 +31,7 @@ import { filterProps } from "./internal/props.js";
30
31
  import type { SignalHandler } from "./internal/signal-store.js";
31
32
  import { attachChild, detachChild } from "./internal/widget.js";
32
33
 
33
- const EXCLUDED_PROPS = ["children", "widthRequest", "heightRequest", "grabFocus"];
34
+ const EXCLUDED_PROPS = ["children"];
34
35
 
35
36
  function findProperty(obj: NativeObject, key: string): GObject.ParamSpec | null {
36
37
  const propertyName = key.replace(/([A-Z])/g, "-$1").toLowerCase();
@@ -54,11 +55,7 @@ export class WidgetNode<
54
55
  containerClass: typeof Gtk.Widget,
55
56
  _rootContainer?: Container,
56
57
  ): Container | null {
57
- const WidgetClass = containerClass;
58
- const typeName = WidgetClass.glibTypeName;
59
- const args = (CONSTRUCTOR_PROPS[typeName] ?? []).map((name) => props[name]);
60
-
61
- return new WidgetClass(...(args as ConstructorParameters<typeof Gtk.Widget>));
58
+ return createContainerWithProperties(containerClass, props);
62
59
  }
63
60
 
64
61
  public override isValidChild(_child: Node): boolean {
@@ -123,57 +120,54 @@ export class WidgetNode<
123
120
  throw new Error(`Container is undefined for '${this.typeName}'`);
124
121
  }
125
122
 
126
- this.signalStore.blockAll();
127
- try {
128
- this.updateSizeRequest(oldProps, newProps);
129
- this.updateGrabFocus(oldProps, newProps);
123
+ applyAccessibleProps(this.container, oldProps, newProps);
130
124
 
131
- const propNames = new Set([
132
- ...Object.keys(filterProps(oldProps ?? {}, EXCLUDED_PROPS)),
133
- ...Object.keys(filterProps(newProps ?? {}, EXCLUDED_PROPS)),
134
- ]);
125
+ const propNames = new Set([
126
+ ...Object.keys(filterProps(oldProps ?? {}, EXCLUDED_PROPS)),
127
+ ...Object.keys(filterProps(newProps ?? {}, EXCLUDED_PROPS)),
128
+ ]);
135
129
 
136
- const pendingSignals: Array<{ name: string; newValue: unknown }> = [];
137
- const pendingProperties: Array<{ name: string; oldValue: unknown; newValue: unknown }> = [];
130
+ const pendingSignals: Array<{ name: string; newValue: unknown }> = [];
131
+ const pendingProperties: Array<{ name: string; oldValue: unknown; newValue: unknown }> = [];
138
132
 
139
- for (const name of propNames) {
140
- const oldValue = oldProps?.[name];
141
- const newValue = newProps[name];
133
+ for (const name of propNames) {
134
+ if (isAccessibleProp(name)) continue;
135
+ if (isConstructOnlyProp(this.container, name)) continue;
142
136
 
143
- if (oldValue === newValue) continue;
137
+ const oldValue = oldProps?.[name];
138
+ const newValue = newProps[name];
144
139
 
145
- const signalName = resolveSignal(this.container, name);
140
+ if (oldValue === newValue) continue;
146
141
 
147
- if (signalName) {
148
- pendingSignals.push({ name, newValue });
149
- } else if (newValue !== undefined) {
150
- pendingProperties.push({ name, oldValue, newValue });
151
- } else if (oldValue !== undefined) {
152
- const defaultValue = this.getPropertyDefaultValue(name);
153
- if (defaultValue !== undefined) {
154
- pendingProperties.push({ name, oldValue, newValue: defaultValue });
155
- }
142
+ const signalName = resolveSignal(this.container, name);
143
+
144
+ if (signalName) {
145
+ pendingSignals.push({ name, newValue });
146
+ } else if (newValue !== undefined) {
147
+ pendingProperties.push({ name, oldValue, newValue });
148
+ } else if (oldValue !== undefined) {
149
+ const defaultValue = this.getPropertyDefaultValue(name);
150
+ if (defaultValue !== undefined) {
151
+ pendingProperties.push({ name, oldValue, newValue: defaultValue });
156
152
  }
157
153
  }
154
+ }
158
155
 
159
- for (const { name, newValue } of pendingSignals) {
160
- const signalName = resolveSignal(this.container, name);
161
- if (!signalName) continue;
162
- const handler = typeof newValue === "function" ? (newValue as SignalHandler) : undefined;
163
- this.signalStore.set(this, this.container, signalName, handler);
164
- }
156
+ for (const { name, newValue } of pendingSignals) {
157
+ const signalName = resolveSignal(this.container, name);
158
+ if (!signalName) continue;
159
+ const handler = typeof newValue === "function" ? (newValue as SignalHandler) : undefined;
160
+ this.signalStore.set(this, this.container, signalName, handler);
161
+ }
165
162
 
166
- for (const { name, oldValue, newValue } of pendingProperties) {
167
- if (name === "text" && oldValue !== undefined && isEditable(this.container)) {
168
- if (oldValue !== this.container.getText()) {
169
- continue;
170
- }
163
+ for (const { name, oldValue, newValue } of pendingProperties) {
164
+ if (name === "text" && oldValue !== undefined && isEditable(this.container)) {
165
+ if (oldValue !== this.container.getText()) {
166
+ continue;
171
167
  }
172
-
173
- this.setProperty(name, newValue);
174
168
  }
175
- } finally {
176
- this.signalStore.unblockAll();
169
+
170
+ this.setProperty(name, newValue);
177
171
  }
178
172
  }
179
173
 
@@ -276,26 +270,6 @@ export class WidgetNode<
276
270
  }
277
271
  }
278
272
 
279
- private updateSizeRequest(oldProps: P | null, newProps: P): void {
280
- const oldWidth = oldProps?.widthRequest as number | undefined;
281
- const oldHeight = oldProps?.heightRequest as number | undefined;
282
- const newWidth = newProps.widthRequest as number | undefined;
283
- const newHeight = newProps.heightRequest as number | undefined;
284
-
285
- if (oldWidth !== newWidth || oldHeight !== newHeight) {
286
- this.container.setSizeRequest(newWidth ?? -1, newHeight ?? -1);
287
- }
288
- }
289
-
290
- private updateGrabFocus(oldProps: P | null, newProps: P): void {
291
- const oldGrabFocus = oldProps?.grabFocus as boolean | undefined;
292
- const newGrabFocus = newProps.grabFocus as boolean | undefined;
293
-
294
- if (!oldGrabFocus && newGrabFocus) {
295
- this.container.grabFocus();
296
- }
297
- }
298
-
299
273
  private getPropertyDefaultValue(key: string): unknown {
300
274
  if (!resolvePropMeta(this.container, key)) return undefined;
301
275
 
@@ -392,7 +366,11 @@ export class WidgetNode<
392
366
 
393
367
  function detachChildFromParent(child: WidgetNode): void {
394
368
  const currentParent = child.container.getParent();
395
- if (currentParent !== null && isRemovable(currentParent)) {
396
- currentParent.remove(child.container);
369
+ if (currentParent !== null) {
370
+ if (isRemovable(currentParent)) {
371
+ currentParent.remove(child.container);
372
+ } else {
373
+ child.container.unparent();
374
+ }
397
375
  }
398
376
  }
@@ -107,6 +107,7 @@ export class WindowNode extends WidgetNode<Gtk.Window, WindowProps, WindowChild>
107
107
 
108
108
  public override removeChild(child: WindowChild): void {
109
109
  if (child instanceof WindowNode) {
110
+ child.container.setVisible(false);
110
111
  child.container.setTransientFor(null);
111
112
  super.removeChild(child);
112
113
  return;
@@ -152,9 +153,8 @@ export class WindowNode extends WidgetNode<Gtk.Window, WindowProps, WindowChild>
152
153
  }
153
154
 
154
155
  public override detachDeletedInstance(): void {
155
- this.container.setVisible(false);
156
- this.container.destroy();
157
156
  super.detachDeletedInstance();
157
+ this.container.destroy();
158
158
  }
159
159
 
160
160
  private applyOwnProps(oldProps: WindowProps | null, newProps: WindowProps): void {
package/src/registry.ts CHANGED
@@ -10,20 +10,17 @@ import { AnimationNode } from "./nodes/animation.js";
10
10
  import { ApplicationNode } from "./nodes/application.js";
11
11
  import { CalendarNode } from "./nodes/calendar.js";
12
12
  import { ColorDialogButtonNode } from "./nodes/color-dialog-button.js";
13
- import { ColumnViewNode } from "./nodes/column-view.js";
14
13
  import { ColumnViewColumnNode } from "./nodes/column-view-column.js";
15
14
  import { ContainerSlotNode } from "./nodes/container-slot.js";
16
15
  import { DialogNode } from "./nodes/dialog.js";
17
16
  import { DrawingAreaNode } from "./nodes/drawing-area.js";
18
- import { DropDownNode } from "./nodes/drop-down.js";
19
17
  import { EventControllerNode } from "./nodes/event-controller.js";
20
18
  import { FixedChildNode } from "./nodes/fixed-child.js";
21
19
  import { FontDialogButtonNode } from "./nodes/font-dialog-button.js";
22
20
  import { GridChildNode } from "./nodes/grid-child.js";
23
- import { GridViewNode } from "./nodes/grid-view.js";
24
21
  import { LevelBarNode } from "./nodes/level-bar.js";
25
- import { ListItemNode } from "./nodes/list-item.js";
26
- import { ListViewNode } from "./nodes/list-view.js";
22
+ import { ListNode } from "./nodes/list.js";
23
+ import { ListItemNode } from "./nodes/list-item-node.js";
27
24
  import { MenuNode } from "./nodes/menu.js";
28
25
  import { NavigationPageNode } from "./nodes/navigation-page.js";
29
26
  import { NavigationViewNode } from "./nodes/navigation-view.js";
@@ -36,7 +33,6 @@ import { ScaleNode } from "./nodes/scale.js";
36
33
  import { ScrolledWindowNode } from "./nodes/scrolled-window.js";
37
34
  import { SearchBarNode } from "./nodes/search-bar.js";
38
35
  import { ShortcutNode } from "./nodes/shortcut.js";
39
- import { ShortcutControllerNode } from "./nodes/shortcut-controller.js";
40
36
  import { SlotNode } from "./nodes/slot.js";
41
37
  import { SourceViewNode } from "./nodes/source-view.js";
42
38
  import { StackNode } from "./nodes/stack.js";
@@ -58,14 +54,16 @@ export type AdjustableWidget = InstanceType<(typeof AdjustableWidgets)[number]>;
58
54
  export const StackWidgets = [Gtk.Stack, Adw.ViewStack] as const;
59
55
  export type StackWidget = InstanceType<(typeof StackWidgets)[number]>;
60
56
 
61
- export const DropDownWidgets = [Gtk.DropDown, Adw.ComboRow] as const;
62
- export type DropDownWidget = InstanceType<(typeof DropDownWidgets)[number]>;
63
-
64
57
  export const PopoverMenuWidgets = [Gtk.PopoverMenu, Gtk.PopoverMenuBar, Gtk.MenuButton] as const;
65
58
  export type PopoverMenuWidget = InstanceType<(typeof PopoverMenuWidgets)[number]>;
66
59
 
67
- // biome-ignore lint/suspicious/noExplicitAny: Registry entries require flexible typing for varied node constructors
68
- export type NodeClass = (new (...args: any[]) => Node) & { createContainer(...args: any[]): unknown };
60
+ export type NodeClass = (new (
61
+ // biome-ignore lint/suspicious/noExplicitAny: Registry entries require flexible typing for varied node constructors
62
+ ...args: any[]
63
+ ) => Node) & {
64
+ // biome-ignore lint/suspicious/noExplicitAny: Registry entries require flexible typing for varied node constructors
65
+ createContainer(...args: any[]): unknown;
66
+ };
69
67
 
70
68
  // biome-ignore lint/suspicious/noExplicitAny: Class keys require flexible typing for GTK class hierarchy matching
71
69
  type ClassKey = new (...args: any[]) => any;
@@ -79,7 +77,6 @@ export const NODE_REGISTRY: NodeRegistryEntry[] = [
79
77
  ["ColumnViewColumn", ColumnViewColumnNode],
80
78
  ["FixedChild", FixedChildNode],
81
79
  ["GridChild", GridChildNode],
82
- ["ListItem", ListItemNode],
83
80
  [["MenuItem", "MenuSection", "MenuSubmenu"], MenuNode],
84
81
  ["NavigationPage", NavigationPageNode],
85
82
  ["NotebookPage", NotebookPageNode],
@@ -94,7 +91,6 @@ export const NODE_REGISTRY: NodeRegistryEntry[] = [
94
91
  ["TextTag", TextTagNode],
95
92
  ["Toggle", ToggleNode],
96
93
  [Gtk.Application, ApplicationNode],
97
- [Gtk.ShortcutController, ShortcutControllerNode],
98
94
  [Gtk.EventController, EventControllerNode],
99
95
  [GtkSource.View, SourceViewNode],
100
96
  [Gtk.TextView, TextViewNode],
@@ -113,11 +109,9 @@ export const NODE_REGISTRY: NodeRegistryEntry[] = [
113
109
  [Adw.ToggleGroup, ToggleGroupNode],
114
110
  [Gtk.Notebook, NotebookNode],
115
111
  [StackWidgets, StackNode],
116
- [Gtk.ColumnView, ColumnViewNode],
117
- [Gtk.ListView, ListViewNode],
118
- [Gtk.GridView, GridViewNode],
119
- [DropDownWidgets, DropDownNode],
112
+ [[Gtk.ListView, Gtk.ColumnView, Gtk.GridView, Gtk.DropDown, Adw.ComboRow], ListNode],
120
113
  [PopoverMenuWidgets, PopoverMenuNode],
121
114
  [AdjustableWidgets, AdjustableNode],
115
+ [[Gtk.ListItem, Gtk.ListHeader], ListItemNode],
122
116
  [Gtk.Widget, WidgetNode],
123
117
  ];
package/src/types.ts CHANGED
@@ -1,7 +1,12 @@
1
1
  import type * as Gtk from "@gtkx/ffi/gtk";
2
2
 
3
- export type Container = Gtk.Widget | Gtk.Application | Gtk.EventController;
3
+ export type Container = Gtk.Widget | Gtk.Application | Gtk.EventController | Gtk.ListItem | Gtk.ListHeader;
4
4
 
5
5
  export type Props = Record<string, unknown>;
6
6
 
7
- export type ContainerClass = typeof Gtk.Widget | typeof Gtk.Application | typeof Gtk.EventController;
7
+ export type ContainerClass =
8
+ | typeof Gtk.Widget
9
+ | typeof Gtk.Application
10
+ | typeof Gtk.EventController
11
+ | typeof Gtk.ListItem
12
+ | typeof Gtk.ListHeader;
@@ -1,4 +0,0 @@
1
- import type * as Gtk from "@gtkx/ffi/gtk";
2
- import type Reconciler from "react-reconciler";
3
- export declare const createFiberRoot: (container: Gtk.Widget) => Reconciler.FiberRoot;
4
- //# sourceMappingURL=fiber-root.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiber-root.d.ts","sourceRoot":"","sources":["../src/fiber-root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,UAAU,MAAM,kBAAkB,CAAC;AAG/C,eAAO,MAAM,eAAe,GAAI,WAAW,GAAG,CAAC,MAAM,KAAG,UAAU,CAAC,SAelE,CAAC"}
@@ -1,6 +0,0 @@
1
- import { reconciler } from "./reconciler.js";
2
- export const createFiberRoot = (container) => {
3
- const instance = reconciler.getInstance();
4
- return instance.createContainer(container, 1, null, false, null, "", (error) => console.error("Fiber root render error:", error), () => { }, () => { }, () => { });
5
- };
6
- //# sourceMappingURL=fiber-root.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiber-root.js","sourceRoot":"","sources":["../src/fiber-root.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,SAAqB,EAAwB,EAAE;IAC3E,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAE1C,OAAO,QAAQ,CAAC,eAAe,CAC3B,SAAS,EACT,CAAC,EACD,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,EAAE,EACF,CAAC,KAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,EAClE,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,EACR,GAAG,EAAE,GAAE,CAAC,CACX,CAAC;AACN,CAAC,CAAC"}
@@ -1,36 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- import type { GtkColumnViewProps } from "../jsx.js";
3
- import type { Node } from "../node.js";
4
- import type { Container } from "../types.js";
5
- import { ColumnViewColumnNode } from "./column-view-column.js";
6
- import { ContainerSlotNode } from "./container-slot.js";
7
- import { EventControllerNode } from "./event-controller.js";
8
- import { ListItemNode } from "./list-item.js";
9
- import { type ListModelProps } from "./models/list.js";
10
- import { SlotNode } from "./slot.js";
11
- import { WidgetNode } from "./widget.js";
12
- declare const OWN_PROPS: readonly ["sortColumn", "sortOrder", "onSortChanged", "estimatedRowHeight"];
13
- type ColumnViewProps = Pick<GtkColumnViewProps, (typeof OWN_PROPS)[number]> & ListModelProps;
14
- type ColumnViewChild = ListItemNode | ColumnViewColumnNode | EventControllerNode | SlotNode | ContainerSlotNode;
15
- export declare class ColumnViewNode extends WidgetNode<Gtk.ColumnView, ColumnViewProps, ColumnViewChild> {
16
- private handleSortChange;
17
- private list;
18
- isValidChild(child: Node): boolean;
19
- private columnNodes;
20
- private estimatedRowHeight;
21
- constructor(typeName: string, props: ColumnViewProps, container: Gtk.ColumnView, rootContainer: Container);
22
- appendChild(child: ColumnViewChild): void;
23
- insertBefore(child: ColumnViewChild, before: ColumnViewChild): void;
24
- removeChild(child: ColumnViewChild): void;
25
- finalizeInitialChildren(props: ColumnViewProps): boolean;
26
- commitUpdate(oldProps: ColumnViewProps | null, newProps: ColumnViewProps): void;
27
- commitMount(): void;
28
- detachDeletedInstance(): void;
29
- private applyOwnProps;
30
- private findColumn;
31
- private getColumn;
32
- private getColumnIndex;
33
- private findColumnInView;
34
- }
35
- export {};
36
- //# sourceMappingURL=column-view.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-view.d.ts","sourceRoot":"","sources":["../../src/nodes/column-view.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAE5D,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,QAAA,MAAM,SAAS,6EAA8E,CAAC;AAE9F,KAAK,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,cAAc,CAAC;AAC7F,KAAK,eAAe,GAAG,YAAY,GAAG,oBAAoB,GAAG,mBAAmB,GAAG,QAAQ,GAAG,iBAAiB,CAAC;AAEhH,qBAAa,cAAe,SAAQ,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,eAAe,CAAC;IAC5F,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,IAAI,CAAY;IAER,YAAY,CAAC,KAAK,EAAE,IAAI,GAAG,OAAO;IASlD,OAAO,CAAC,WAAW,CAAmC;IACtD,OAAO,CAAC,kBAAkB,CAAuB;gBAErC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS;IAiBzF,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAuBzC,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI;IAgCnE,WAAW,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAuBzC,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAKxD,YAAY,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI,EAAE,QAAQ,EAAE,eAAe,GAAG,IAAI;IAM/E,WAAW,IAAI,IAAI;IAMnB,qBAAqB,IAAI,IAAI;IAK7C,OAAO,CAAC,aAAa;IAiCrB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,gBAAgB;CAI3B"}
@@ -1,175 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- import { ColumnViewColumnNode } from "./column-view-column.js";
3
- import { ContainerSlotNode } from "./container-slot.js";
4
- import { EventControllerNode } from "./event-controller.js";
5
- import { filterProps, hasChanged } from "./internal/props.js";
6
- import { ListItemNode } from "./list-item.js";
7
- import { ListModel } from "./models/list.js";
8
- import { SlotNode } from "./slot.js";
9
- import { WidgetNode } from "./widget.js";
10
- const OWN_PROPS = ["sortColumn", "sortOrder", "onSortChanged", "estimatedRowHeight"];
11
- export class ColumnViewNode extends WidgetNode {
12
- handleSortChange = null;
13
- list;
14
- isValidChild(child) {
15
- return (child instanceof ListItemNode ||
16
- child instanceof ColumnViewColumnNode ||
17
- child instanceof EventControllerNode ||
18
- child instanceof SlotNode ||
19
- child instanceof ContainerSlotNode);
20
- }
21
- columnNodes = new Set();
22
- estimatedRowHeight = null;
23
- constructor(typeName, props, container, rootContainer) {
24
- super(typeName, props, container, rootContainer);
25
- this.list = new ListModel({ owner: this, signalStore: this.signalStore }, {
26
- selectionMode: props.selectionMode,
27
- selected: props.selected,
28
- onSelectionChanged: props.onSelectionChanged,
29
- });
30
- this.list.getStore().setOnItemUpdated((id) => {
31
- for (const column of this.columnNodes) {
32
- column.rebindItem(id);
33
- }
34
- });
35
- }
36
- appendChild(child) {
37
- super.appendChild(child);
38
- if (child instanceof ListItemNode) {
39
- this.list.appendChild(child);
40
- return;
41
- }
42
- if (!(child instanceof ColumnViewColumnNode))
43
- return;
44
- const existingColumn = this.findColumnInView(child.getColumn());
45
- if (existingColumn) {
46
- this.container.removeColumn(existingColumn);
47
- }
48
- child.setStore(this.list.getStore());
49
- child.setEstimatedRowHeight(this.estimatedRowHeight);
50
- this.container.appendColumn(child.getColumn());
51
- child.attachToColumnView(this.container);
52
- this.columnNodes.add(child);
53
- }
54
- insertBefore(child, before) {
55
- super.insertBefore(child, before);
56
- if (child instanceof ListItemNode) {
57
- if (before instanceof ListItemNode) {
58
- this.list.insertBefore(child, before);
59
- }
60
- return;
61
- }
62
- if (!(child instanceof ColumnViewColumnNode))
63
- return;
64
- const existingColumn = this.findColumnInView(child.getColumn());
65
- if (existingColumn) {
66
- this.container.removeColumn(existingColumn);
67
- }
68
- child.setStore(this.list.getStore());
69
- child.setEstimatedRowHeight(this.estimatedRowHeight);
70
- if (before instanceof ColumnViewColumnNode) {
71
- const beforeIndex = this.getColumnIndex(before.getColumn());
72
- this.container.insertColumn(beforeIndex, child.getColumn());
73
- }
74
- else {
75
- this.container.appendColumn(child.getColumn());
76
- }
77
- child.attachToColumnView(this.container);
78
- this.columnNodes.add(child);
79
- }
80
- removeChild(child) {
81
- if (child instanceof ListItemNode) {
82
- this.list.removeChild(child);
83
- super.removeChild(child);
84
- return;
85
- }
86
- if (child instanceof ColumnViewColumnNode) {
87
- child.detachFromColumnView();
88
- const existingColumn = this.findColumnInView(child.getColumn());
89
- if (existingColumn) {
90
- this.container.removeColumn(existingColumn);
91
- }
92
- child.setStore(null);
93
- this.columnNodes.delete(child);
94
- }
95
- super.removeChild(child);
96
- }
97
- finalizeInitialChildren(props) {
98
- super.finalizeInitialChildren(props);
99
- return true;
100
- }
101
- commitUpdate(oldProps, newProps) {
102
- super.commitUpdate(oldProps ? filterProps(oldProps, OWN_PROPS) : null, filterProps(newProps, OWN_PROPS));
103
- this.applyOwnProps(oldProps, newProps);
104
- this.list.updateProps(oldProps ? filterProps(oldProps, OWN_PROPS) : null, filterProps(newProps, OWN_PROPS));
105
- }
106
- commitMount() {
107
- super.commitMount();
108
- this.list.flushBatch();
109
- this.container.setModel(this.list.getSelectionModel());
110
- }
111
- detachDeletedInstance() {
112
- this.columnNodes.clear();
113
- super.detachDeletedInstance();
114
- }
115
- applyOwnProps(oldProps, newProps) {
116
- if (hasChanged(oldProps, newProps, "onSortChanged")) {
117
- const sorter = this.container.getSorter();
118
- const onSortChanged = newProps.onSortChanged;
119
- if (sorter instanceof Gtk.ColumnViewSorter) {
120
- this.handleSortChange = () => {
121
- onSortChanged?.(sorter.getPrimarySortColumn()?.getId() ?? null, sorter.getPrimarySortOrder());
122
- };
123
- this.signalStore.set(this, sorter, "changed", this.handleSortChange);
124
- }
125
- }
126
- if (hasChanged(oldProps, newProps, "sortColumn") || hasChanged(oldProps, newProps, "sortOrder")) {
127
- const sortColumn = newProps.sortColumn;
128
- const sortOrder = newProps.sortOrder ?? Gtk.SortType.ASCENDING;
129
- if (!sortColumn) {
130
- this.container.sortByColumn(sortOrder, undefined);
131
- }
132
- else {
133
- this.container.sortByColumn(sortOrder, this.getColumn(sortColumn));
134
- }
135
- }
136
- if (hasChanged(oldProps, newProps, "estimatedRowHeight")) {
137
- this.estimatedRowHeight = newProps.estimatedRowHeight ?? null;
138
- for (const column of this.columnNodes) {
139
- column.setEstimatedRowHeight(this.estimatedRowHeight);
140
- }
141
- }
142
- }
143
- findColumn(predicate) {
144
- const columns = this.container.getColumns();
145
- for (let i = 0; i < columns.getNItems(); i++) {
146
- const column = columns.getObject(i);
147
- if (!(column instanceof Gtk.ColumnViewColumn))
148
- continue;
149
- const result = predicate(column, i);
150
- if (result !== null)
151
- return result;
152
- }
153
- return null;
154
- }
155
- getColumn(columnId) {
156
- const column = this.findColumn((col) => (col.getId() === columnId ? col : null));
157
- if (!column) {
158
- throw new Error(`Unable to find column '${columnId}' in ${this.typeName}`);
159
- }
160
- return column;
161
- }
162
- getColumnIndex(column) {
163
- const targetId = column.getId();
164
- const index = this.findColumn((col, i) => (col.getId() === targetId ? i : null));
165
- if (index === null) {
166
- throw new Error(`Unable to find column '${targetId}' in ${this.typeName}`);
167
- }
168
- return index;
169
- }
170
- findColumnInView(column) {
171
- const targetId = column.getId();
172
- return this.findColumn((col) => (col.getId() === targetId ? col : null));
173
- }
174
- }
175
- //# sourceMappingURL=column-view.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-view.js","sourceRoot":"","sources":["../../src/nodes/column-view.ts"],"names":[],"mappings":"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"}