@gtkx/react 0.19.0 → 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 (189) 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 +5 -6
  6. package/dist/generated/internal.d.ts.map +1 -1
  7. package/dist/generated/internal.js +3473 -260
  8. package/dist/generated/internal.js.map +1 -1
  9. package/dist/generated/jsx.d.ts +0 -324
  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 +2 -0
  15. package/dist/host-config.js.map +1 -1
  16. package/dist/jsx.d.ts +42 -105
  17. package/dist/jsx.d.ts.map +1 -1
  18. package/dist/jsx.js +2 -66
  19. package/dist/jsx.js.map +1 -1
  20. package/dist/metadata.d.ts.map +1 -1
  21. package/dist/metadata.js +7 -3
  22. package/dist/metadata.js.map +1 -1
  23. package/dist/node.d.ts +0 -4
  24. package/dist/node.d.ts.map +1 -1
  25. package/dist/node.js +19 -41
  26. package/dist/node.js.map +1 -1
  27. package/dist/nodes/application.d.ts.map +1 -1
  28. package/dist/nodes/application.js +4 -0
  29. package/dist/nodes/application.js.map +1 -1
  30. package/dist/nodes/column-view-column.d.ts +19 -19
  31. package/dist/nodes/column-view-column.d.ts.map +1 -1
  32. package/dist/nodes/column-view-column.js +130 -119
  33. package/dist/nodes/column-view-column.js.map +1 -1
  34. package/dist/nodes/event-controller.d.ts.map +1 -1
  35. package/dist/nodes/event-controller.js +3 -9
  36. package/dist/nodes/event-controller.js.map +1 -1
  37. package/dist/nodes/internal/accessible.d.ts.map +1 -1
  38. package/dist/nodes/internal/accessible.js.map +1 -1
  39. package/dist/nodes/internal/bound-item.d.ts +4 -0
  40. package/dist/nodes/internal/bound-item.d.ts.map +1 -0
  41. package/dist/nodes/internal/bound-item.js +2 -0
  42. package/dist/nodes/internal/bound-item.js.map +1 -0
  43. package/dist/nodes/internal/construct.d.ts +1 -8
  44. package/dist/nodes/internal/construct.d.ts.map +1 -1
  45. package/dist/nodes/internal/construct.js +30 -54
  46. package/dist/nodes/internal/construct.js.map +1 -1
  47. package/dist/nodes/internal/widget.d.ts.map +1 -1
  48. package/dist/nodes/internal/widget.js +4 -1
  49. package/dist/nodes/internal/widget.js.map +1 -1
  50. package/dist/nodes/list-item-node.d.ts +12 -0
  51. package/dist/nodes/list-item-node.d.ts.map +1 -0
  52. package/dist/nodes/list-item-node.js +23 -0
  53. package/dist/nodes/list-item-node.js.map +1 -0
  54. package/dist/nodes/list.d.ts +100 -0
  55. package/dist/nodes/list.d.ts.map +1 -0
  56. package/dist/nodes/list.js +950 -0
  57. package/dist/nodes/list.js.map +1 -0
  58. package/dist/nodes/notebook-page.d.ts.map +1 -1
  59. package/dist/nodes/notebook-page.js +4 -0
  60. package/dist/nodes/notebook-page.js.map +1 -1
  61. package/dist/nodes/widget.d.ts.map +1 -1
  62. package/dist/nodes/widget.js +9 -8
  63. package/dist/nodes/widget.js.map +1 -1
  64. package/dist/nodes/window.d.ts.map +1 -1
  65. package/dist/nodes/window.js +2 -2
  66. package/dist/nodes/window.js.map +1 -1
  67. package/dist/registry.d.ts +0 -2
  68. package/dist/registry.d.ts.map +1 -1
  69. package/dist/registry.js +4 -13
  70. package/dist/registry.js.map +1 -1
  71. package/dist/types.d.ts +2 -2
  72. package/dist/types.d.ts.map +1 -1
  73. package/package.json +5 -4
  74. package/src/components/list.tsx +83 -0
  75. package/src/generated/internal.ts +3479 -258
  76. package/src/generated/jsx.ts +0 -324
  77. package/src/host-config.ts +2 -0
  78. package/src/jsx.ts +49 -141
  79. package/src/metadata.ts +6 -3
  80. package/src/node.ts +23 -39
  81. package/src/nodes/application.ts +5 -0
  82. package/src/nodes/column-view-column.ts +125 -128
  83. package/src/nodes/event-controller.ts +3 -11
  84. package/src/nodes/internal/accessible.ts +0 -1
  85. package/src/nodes/internal/bound-item.ts +4 -0
  86. package/src/nodes/internal/construct.ts +38 -68
  87. package/src/nodes/internal/widget.ts +3 -1
  88. package/src/nodes/list-item-node.ts +29 -0
  89. package/src/nodes/list.ts +1082 -0
  90. package/src/nodes/notebook-page.ts +4 -0
  91. package/src/nodes/widget.ts +8 -13
  92. package/src/nodes/window.ts +2 -2
  93. package/src/registry.ts +11 -19
  94. package/src/types.ts +7 -2
  95. package/dist/fiber-root.d.ts +0 -4
  96. package/dist/fiber-root.d.ts.map +0 -1
  97. package/dist/fiber-root.js +0 -6
  98. package/dist/fiber-root.js.map +0 -1
  99. package/dist/nodes/column-view.d.ts +0 -37
  100. package/dist/nodes/column-view.d.ts.map +0 -1
  101. package/dist/nodes/column-view.js +0 -205
  102. package/dist/nodes/column-view.js.map +0 -1
  103. package/dist/nodes/drop-down.d.ts +0 -37
  104. package/dist/nodes/drop-down.d.ts.map +0 -1
  105. package/dist/nodes/drop-down.js +0 -231
  106. package/dist/nodes/drop-down.js.map +0 -1
  107. package/dist/nodes/grid-view.d.ts +0 -30
  108. package/dist/nodes/grid-view.d.ts.map +0 -1
  109. package/dist/nodes/grid-view.js +0 -90
  110. package/dist/nodes/grid-view.js.map +0 -1
  111. package/dist/nodes/internal/base-item-renderer.d.ts +0 -28
  112. package/dist/nodes/internal/base-item-renderer.d.ts.map +0 -1
  113. package/dist/nodes/internal/base-item-renderer.js +0 -85
  114. package/dist/nodes/internal/base-item-renderer.js.map +0 -1
  115. package/dist/nodes/internal/grid-item-renderer.d.ts +0 -20
  116. package/dist/nodes/internal/grid-item-renderer.d.ts.map +0 -1
  117. package/dist/nodes/internal/grid-item-renderer.js +0 -66
  118. package/dist/nodes/internal/grid-item-renderer.js.map +0 -1
  119. package/dist/nodes/internal/header-item-renderer.d.ts +0 -23
  120. package/dist/nodes/internal/header-item-renderer.d.ts.map +0 -1
  121. package/dist/nodes/internal/header-item-renderer.js +0 -87
  122. package/dist/nodes/internal/header-item-renderer.js.map +0 -1
  123. package/dist/nodes/internal/header-renderer-manager.d.ts +0 -13
  124. package/dist/nodes/internal/header-renderer-manager.d.ts.map +0 -1
  125. package/dist/nodes/internal/header-renderer-manager.js +0 -20
  126. package/dist/nodes/internal/header-renderer-manager.js.map +0 -1
  127. package/dist/nodes/internal/list-item-renderer.d.ts +0 -27
  128. package/dist/nodes/internal/list-item-renderer.d.ts.map +0 -1
  129. package/dist/nodes/internal/list-item-renderer.js +0 -131
  130. package/dist/nodes/internal/list-item-renderer.js.map +0 -1
  131. package/dist/nodes/internal/list-store.d.ts +0 -21
  132. package/dist/nodes/internal/list-store.d.ts.map +0 -1
  133. package/dist/nodes/internal/list-store.js +0 -90
  134. package/dist/nodes/internal/list-store.js.map +0 -1
  135. package/dist/nodes/internal/sectioned-list-store.d.ts +0 -50
  136. package/dist/nodes/internal/sectioned-list-store.d.ts.map +0 -1
  137. package/dist/nodes/internal/sectioned-list-store.js +0 -250
  138. package/dist/nodes/internal/sectioned-list-store.js.map +0 -1
  139. package/dist/nodes/internal/selection-helpers.d.ts +0 -12
  140. package/dist/nodes/internal/selection-helpers.d.ts.map +0 -1
  141. package/dist/nodes/internal/selection-helpers.js +0 -25
  142. package/dist/nodes/internal/selection-helpers.js.map +0 -1
  143. package/dist/nodes/internal/selection-model-controller.d.ts +0 -26
  144. package/dist/nodes/internal/selection-model-controller.d.ts.map +0 -1
  145. package/dist/nodes/internal/selection-model-controller.js +0 -82
  146. package/dist/nodes/internal/selection-model-controller.js.map +0 -1
  147. package/dist/nodes/internal/simple-list-store.d.ts +0 -15
  148. package/dist/nodes/internal/simple-list-store.d.ts.map +0 -1
  149. package/dist/nodes/internal/simple-list-store.js +0 -110
  150. package/dist/nodes/internal/simple-list-store.js.map +0 -1
  151. package/dist/nodes/internal/tree-store.d.ts +0 -37
  152. package/dist/nodes/internal/tree-store.d.ts.map +0 -1
  153. package/dist/nodes/internal/tree-store.js +0 -253
  154. package/dist/nodes/internal/tree-store.js.map +0 -1
  155. package/dist/nodes/list-item.d.ts +0 -24
  156. package/dist/nodes/list-item.d.ts.map +0 -1
  157. package/dist/nodes/list-item.js +0 -83
  158. package/dist/nodes/list-item.js.map +0 -1
  159. package/dist/nodes/list-section.d.ts +0 -27
  160. package/dist/nodes/list-section.d.ts.map +0 -1
  161. package/dist/nodes/list-section.js +0 -43
  162. package/dist/nodes/list-section.js.map +0 -1
  163. package/dist/nodes/list-view.d.ts +0 -32
  164. package/dist/nodes/list-view.d.ts.map +0 -1
  165. package/dist/nodes/list-view.js +0 -123
  166. package/dist/nodes/list-view.js.map +0 -1
  167. package/dist/nodes/models/list.d.ts +0 -39
  168. package/dist/nodes/models/list.d.ts.map +0 -1
  169. package/dist/nodes/models/list.js +0 -207
  170. package/dist/nodes/models/list.js.map +0 -1
  171. package/src/fiber-root.ts +0 -20
  172. package/src/nodes/column-view.ts +0 -262
  173. package/src/nodes/drop-down.ts +0 -284
  174. package/src/nodes/grid-view.ts +0 -119
  175. package/src/nodes/internal/base-item-renderer.ts +0 -107
  176. package/src/nodes/internal/grid-item-renderer.ts +0 -78
  177. package/src/nodes/internal/header-item-renderer.ts +0 -105
  178. package/src/nodes/internal/header-renderer-manager.ts +0 -33
  179. package/src/nodes/internal/list-item-renderer.ts +0 -162
  180. package/src/nodes/internal/list-store.ts +0 -107
  181. package/src/nodes/internal/sectioned-list-store.ts +0 -287
  182. package/src/nodes/internal/selection-helpers.ts +0 -35
  183. package/src/nodes/internal/selection-model-controller.ts +0 -119
  184. package/src/nodes/internal/simple-list-store.ts +0 -116
  185. package/src/nodes/internal/tree-store.ts +0 -289
  186. package/src/nodes/list-item.ts +0 -107
  187. package/src/nodes/list-section.ts +0 -64
  188. package/src/nodes/list-view.ts +0 -164
  189. package/src/nodes/models/list.ts +0 -250
@@ -1,39 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- import type { GtkListViewProps } from "../../jsx.js";
3
- import { ListStore } from "../internal/list-store.js";
4
- import type { SignalStore } from "../internal/signal-store.js";
5
- import { TreeStore } from "../internal/tree-store.js";
6
- import { ListItemNode } from "../list-item.js";
7
- import { ListSectionNode } from "../list-section.js";
8
- export type ListModelProps = Pick<GtkListViewProps, "autoexpand" | "selectionMode" | "selected" | "onSelectionChanged">;
9
- type ListModelConfig = {
10
- owner: object;
11
- signalStore: SignalStore;
12
- };
13
- export declare class ListModel {
14
- private config;
15
- private flatMode;
16
- private treeStore;
17
- private treeListModel;
18
- private flatStore;
19
- private selectionManager;
20
- private initialSelected;
21
- constructor(config: ListModelConfig, props?: ListModelProps, flat?: boolean);
22
- isFlatMode(): boolean;
23
- flushBatch(): void;
24
- private createChildModel;
25
- getStore(): TreeStore;
26
- getFlatStore(): ListStore;
27
- setOnItemUpdated(callback: (id: string) => void): void;
28
- getSelectionModel(): Gtk.NoSelection | Gtk.SingleSelection | Gtk.MultiSelection;
29
- appendChild(child: ListItemNode | ListSectionNode): void;
30
- private addItemWithChildren;
31
- insertBefore(child: ListItemNode | ListSectionNode, before: ListItemNode | ListSectionNode): void;
32
- removeChild(child: ListItemNode | ListSectionNode): void;
33
- updateProps(oldProps: ListModelProps | null, newProps: ListModelProps): void;
34
- private getNItems;
35
- private getSelection;
36
- private resolveSelectionIndices;
37
- }
38
- export {};
39
- //# sourceMappingURL=list.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/nodes/models/list.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,GAAG,MAAM,eAAe,CAAC;AACrC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAGtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,YAAY,GAAG,eAAe,GAAG,UAAU,GAAG,oBAAoB,CAAC,CAAC;AAExH,KAAK,eAAe,GAAG;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,WAAW,CAAC;CAC5B,CAAC;AAEF,qBAAa,SAAS;IAClB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,QAAQ,CAAU;IAE1B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,aAAa,CAAkC;IAEvD,OAAO,CAAC,SAAS,CAA0B;IAE3C,OAAO,CAAC,gBAAgB,CAA2B;IACnD,OAAO,CAAC,eAAe,CAA8B;gBAEzC,MAAM,EAAE,eAAe,EAAE,KAAK,GAAE,cAAmB,EAAE,IAAI,UAAQ;IAkCtE,UAAU,IAAI,OAAO;IAIrB,UAAU,IAAI,IAAI;IAczB,OAAO,CAAC,gBAAgB;IAOjB,QAAQ,IAAI,SAAS;IAOrB,YAAY,IAAI,SAAS;IAOzB,gBAAgB,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAQtD,iBAAiB,IAAI,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,eAAe,GAAG,GAAG,CAAC,cAAc;IAI/E,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI;IAe/D,OAAO,CAAC,mBAAmB;IAWpB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,EAAE,MAAM,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI;IAoBjG,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,GAAG,IAAI;IAexD,WAAW,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAiBnF,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,uBAAuB;CAsBlC"}
@@ -1,207 +0,0 @@
1
- import * as Gtk from "@gtkx/ffi/gtk";
2
- import { ListStore } from "../internal/list-store.js";
3
- import { getSelectionFromStore, resolveSelectionIndices } from "../internal/selection-helpers.js";
4
- import { SelectionModelController } from "../internal/selection-model-controller.js";
5
- import { TreeStore } from "../internal/tree-store.js";
6
- import { ListItemNode } from "../list-item.js";
7
- import { ListSectionNode } from "../list-section.js";
8
- export class ListModel {
9
- config;
10
- flatMode;
11
- treeStore = null;
12
- treeListModel = null;
13
- flatStore = null;
14
- selectionManager;
15
- initialSelected;
16
- constructor(config, props = {}, flat = false) {
17
- this.config = config;
18
- this.flatMode = flat;
19
- this.initialSelected = props.selected;
20
- let model;
21
- if (flat) {
22
- const store = new ListStore();
23
- store.beginBatch();
24
- this.flatStore = store;
25
- model = store.getModel();
26
- }
27
- else {
28
- const store = new TreeStore();
29
- store.beginBatch();
30
- this.treeStore = store;
31
- this.treeListModel = new Gtk.TreeListModel(store.getRootModel(), false, props.autoexpand ?? false, (item) => this.createChildModel(item));
32
- model = this.treeListModel;
33
- }
34
- this.selectionManager = new SelectionModelController({ ...config, ...props }, model, () => this.getSelection(), (ids) => this.resolveSelectionIndices(ids), () => this.getNItems());
35
- }
36
- isFlatMode() {
37
- return this.flatMode;
38
- }
39
- flushBatch() {
40
- if (this.flatStore) {
41
- this.flatStore.flushBatch();
42
- const model = this.flatStore.getModel();
43
- if (this.selectionManager.getSelectionModel().getModel() !== model) {
44
- this.selectionManager.update(null, { ...this.config }, model);
45
- }
46
- }
47
- else if (this.treeStore) {
48
- this.treeStore.flushBatch();
49
- }
50
- this.selectionManager.reapplySelection(this.initialSelected);
51
- this.initialSelected = undefined;
52
- }
53
- createChildModel(item) {
54
- if (!this.treeStore)
55
- return null;
56
- if (!(item instanceof Gtk.StringObject))
57
- return null;
58
- const parentId = item.getString();
59
- return this.treeStore.getChildrenModel(parentId);
60
- }
61
- getStore() {
62
- if (!this.treeStore) {
63
- throw new Error("getStore() called in flat mode. Use getFlatStore() instead.");
64
- }
65
- return this.treeStore;
66
- }
67
- getFlatStore() {
68
- if (!this.flatStore) {
69
- throw new Error("getFlatStore() called in tree mode. Use getStore() instead.");
70
- }
71
- return this.flatStore;
72
- }
73
- setOnItemUpdated(callback) {
74
- if (this.flatStore) {
75
- this.flatStore.setOnItemUpdated(callback);
76
- }
77
- else if (this.treeStore) {
78
- this.treeStore.setOnItemUpdated(callback);
79
- }
80
- }
81
- getSelectionModel() {
82
- return this.selectionManager.getSelectionModel();
83
- }
84
- appendChild(child) {
85
- if (this.flatStore) {
86
- if (child instanceof ListSectionNode) {
87
- this.flatStore.addSection(child.props.id, child.props.value);
88
- child.setStore(this.flatStore);
89
- }
90
- else {
91
- child.setStore(this.flatStore);
92
- this.flatStore.addItem(child.props.id, child.props.value);
93
- }
94
- }
95
- else if (child instanceof ListItemNode && this.treeStore) {
96
- child.setStore(this.treeStore);
97
- this.addItemWithChildren(child);
98
- }
99
- }
100
- addItemWithChildren(node, parentId) {
101
- if (!this.treeStore)
102
- return;
103
- const id = node.props.id;
104
- for (const child of node.getChildNodes()) {
105
- this.addItemWithChildren(child, id);
106
- }
107
- this.treeStore.addItem(id, ListItemNode.createItemData(node.props), parentId);
108
- }
109
- insertBefore(child, before) {
110
- if (this.flatStore) {
111
- if (child instanceof ListSectionNode) {
112
- this.flatStore.addSection(child.props.id, child.props.value);
113
- child.setStore(this.flatStore);
114
- return;
115
- }
116
- if (before instanceof ListSectionNode) {
117
- child.setStore(this.flatStore);
118
- this.flatStore.addItem(child.props.id, child.props.value);
119
- return;
120
- }
121
- child.setStore(this.flatStore);
122
- this.flatStore.insertItemBefore(child.props.id, before.props.id, child.props.value);
123
- }
124
- else if (child instanceof ListItemNode && before instanceof ListItemNode && this.treeStore) {
125
- child.setStore(this.treeStore);
126
- this.treeStore.insertItemBefore(child.props.id, before.props.id, ListItemNode.createItemData(child.props));
127
- }
128
- }
129
- removeChild(child) {
130
- if (this.flatStore) {
131
- if (child instanceof ListSectionNode) {
132
- this.flatStore.removeSection(child.props.id);
133
- child.setStore(null);
134
- }
135
- else {
136
- this.flatStore.removeItem(child.props.id);
137
- child.setStore(null);
138
- }
139
- }
140
- else if (child instanceof ListItemNode && this.treeStore) {
141
- this.treeStore.removeItem(child.props.id);
142
- child.setStore(null);
143
- }
144
- }
145
- updateProps(oldProps, newProps) {
146
- if (this.treeListModel) {
147
- if (!oldProps || oldProps.autoexpand !== newProps.autoexpand) {
148
- this.treeListModel.setAutoexpand(newProps.autoexpand ?? false);
149
- }
150
- }
151
- const model = this.flatStore ? this.flatStore.getModel() : this.treeListModel;
152
- if (model) {
153
- this.selectionManager.update(oldProps ? { ...this.config, ...oldProps } : null, { ...this.config, ...newProps }, model);
154
- }
155
- }
156
- getNItems() {
157
- if (this.flatStore) {
158
- return this.flatStore.getNItems();
159
- }
160
- if (this.treeListModel) {
161
- return this.treeListModel.getNItems();
162
- }
163
- return 0;
164
- }
165
- getSelection() {
166
- const selection = this.selectionManager.getSelectionModel().getSelection();
167
- if (this.flatStore) {
168
- return getSelectionFromStore(selection, this.flatStore);
169
- }
170
- const size = selection.getSize();
171
- const ids = [];
172
- for (let i = 0; i < size; i++) {
173
- const index = selection.getNth(i);
174
- if (!this.treeListModel)
175
- continue;
176
- const row = this.treeListModel.getRow(index);
177
- if (!row)
178
- continue;
179
- const item = row.getItem();
180
- if (item instanceof Gtk.StringObject) {
181
- ids.push(item.getString());
182
- }
183
- }
184
- return ids;
185
- }
186
- resolveSelectionIndices(ids) {
187
- if (this.flatStore) {
188
- return resolveSelectionIndices(ids, this.flatStore);
189
- }
190
- const selected = new Gtk.Bitset();
191
- if (!this.treeListModel)
192
- return selected;
193
- const nItems = this.treeListModel.getNItems();
194
- const idSet = new Set(ids);
195
- for (let i = 0; i < nItems; i++) {
196
- const row = this.treeListModel.getRow(i);
197
- if (!row)
198
- continue;
199
- const item = row.getItem();
200
- if (item instanceof Gtk.StringObject && idSet.has(item.getString())) {
201
- selected.add(i);
202
- }
203
- }
204
- return selected;
205
- }
206
- }
207
- //# sourceMappingURL=list.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/nodes/models/list.ts"],"names":[],"mappings":"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"}
package/src/fiber-root.ts DELETED
@@ -1,20 +0,0 @@
1
- import type * as Gtk from "@gtkx/ffi/gtk";
2
- import type Reconciler from "react-reconciler";
3
- import { reconciler } from "./reconciler.js";
4
-
5
- export const createFiberRoot = (container: Gtk.Widget): Reconciler.FiberRoot => {
6
- const instance = reconciler.getInstance();
7
-
8
- return instance.createContainer(
9
- container,
10
- 1,
11
- null,
12
- false,
13
- null,
14
- "",
15
- (error: Error) => console.error("Fiber root render error:", error),
16
- () => {},
17
- () => {},
18
- () => {},
19
- );
20
- };
@@ -1,262 +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 type { HeaderItemRenderer } from "./internal/header-item-renderer.js";
9
- import { updateHeaderRenderer } from "./internal/header-renderer-manager.js";
10
- import { filterProps, hasChanged } from "./internal/props.js";
11
- import { ListItemNode } from "./list-item.js";
12
- import { ListSectionNode } from "./list-section.js";
13
- import { ListModel, type ListModelProps } from "./models/list.js";
14
- import { SlotNode } from "./slot.js";
15
- import { WidgetNode } from "./widget.js";
16
-
17
- const OWN_PROPS = ["sortColumn", "sortOrder", "onSortChanged", "estimatedRowHeight", "renderHeader"] as const;
18
-
19
- type ColumnViewProps = Pick<GtkColumnViewProps, (typeof OWN_PROPS)[number]> & ListModelProps;
20
- type ColumnViewChild =
21
- | ListItemNode
22
- | ListSectionNode
23
- | ColumnViewColumnNode
24
- | EventControllerNode
25
- | SlotNode
26
- | ContainerSlotNode;
27
-
28
- export class ColumnViewNode extends WidgetNode<Gtk.ColumnView, ColumnViewProps, ColumnViewChild> {
29
- private list: ListModel;
30
- private headerRenderer: HeaderItemRenderer | null = null;
31
-
32
- public override isValidChild(child: Node): boolean {
33
- return (
34
- child instanceof ListItemNode ||
35
- child instanceof ListSectionNode ||
36
- child instanceof ColumnViewColumnNode ||
37
- child instanceof EventControllerNode ||
38
- child instanceof SlotNode ||
39
- child instanceof ContainerSlotNode
40
- );
41
- }
42
- private columnNodes = new Set<ColumnViewColumnNode>();
43
- private estimatedRowHeight: number | null = null;
44
-
45
- constructor(typeName: string, props: ColumnViewProps, container: Gtk.ColumnView, rootContainer: Container) {
46
- super(typeName, props, container, rootContainer);
47
-
48
- const flat = props.renderHeader != null;
49
-
50
- this.list = new ListModel(
51
- { owner: this, signalStore: this.signalStore },
52
- {
53
- selectionMode: props.selectionMode,
54
- selected: props.selected,
55
- onSelectionChanged: props.onSelectionChanged,
56
- },
57
- flat,
58
- );
59
- this.list.setOnItemUpdated((id) => {
60
- for (const column of this.columnNodes) {
61
- column.rebindItem(id);
62
- }
63
- });
64
- }
65
-
66
- public override appendChild(child: ColumnViewChild): void {
67
- super.appendChild(child);
68
-
69
- if (child instanceof ListItemNode || child instanceof ListSectionNode) {
70
- this.list.appendChild(child);
71
- return;
72
- }
73
-
74
- if (!(child instanceof ColumnViewColumnNode)) return;
75
-
76
- const existingColumn = this.findColumnInView(child.getColumn());
77
-
78
- if (existingColumn) {
79
- this.container.removeColumn(existingColumn);
80
- }
81
-
82
- if (this.list.isFlatMode()) {
83
- child.setFlatStore(this.list.getFlatStore());
84
- } else {
85
- child.setStore(this.list.getStore());
86
- }
87
- child.setEstimatedRowHeight(this.estimatedRowHeight);
88
- this.container.appendColumn(child.getColumn());
89
- child.attachToColumnView(this.container);
90
- this.columnNodes.add(child);
91
- }
92
-
93
- public override insertBefore(child: ColumnViewChild, before: ColumnViewChild): void {
94
- super.insertBefore(child, before);
95
-
96
- if (child instanceof ListItemNode || child instanceof ListSectionNode) {
97
- if (before instanceof ListItemNode || before instanceof ListSectionNode) {
98
- this.list.insertBefore(child, before);
99
- }
100
- return;
101
- }
102
-
103
- if (!(child instanceof ColumnViewColumnNode)) return;
104
-
105
- const existingColumn = this.findColumnInView(child.getColumn());
106
-
107
- if (existingColumn) {
108
- this.container.removeColumn(existingColumn);
109
- }
110
-
111
- if (this.list.isFlatMode()) {
112
- child.setFlatStore(this.list.getFlatStore());
113
- } else {
114
- child.setStore(this.list.getStore());
115
- }
116
- child.setEstimatedRowHeight(this.estimatedRowHeight);
117
-
118
- if (before instanceof ColumnViewColumnNode) {
119
- const beforeIndex = this.getColumnIndex(before.getColumn());
120
- this.container.insertColumn(beforeIndex, child.getColumn());
121
- } else {
122
- this.container.appendColumn(child.getColumn());
123
- }
124
-
125
- child.attachToColumnView(this.container);
126
- this.columnNodes.add(child);
127
- }
128
-
129
- public override removeChild(child: ColumnViewChild): void {
130
- if (child instanceof ListItemNode || child instanceof ListSectionNode) {
131
- this.list.removeChild(child);
132
- super.removeChild(child);
133
- return;
134
- }
135
-
136
- if (child instanceof ColumnViewColumnNode) {
137
- child.detachFromColumnView();
138
-
139
- const existingColumn = this.findColumnInView(child.getColumn());
140
-
141
- if (existingColumn) {
142
- this.container.removeColumn(existingColumn);
143
- }
144
-
145
- child.setStore(null);
146
- this.columnNodes.delete(child);
147
- }
148
-
149
- super.removeChild(child);
150
- }
151
-
152
- public override finalizeInitialChildren(props: ColumnViewProps): boolean {
153
- super.finalizeInitialChildren(props);
154
- return true;
155
- }
156
-
157
- public override commitUpdate(oldProps: ColumnViewProps | null, newProps: ColumnViewProps): void {
158
- super.commitUpdate(oldProps ? filterProps(oldProps, OWN_PROPS) : null, filterProps(newProps, OWN_PROPS));
159
- this.applyOwnProps(oldProps, newProps);
160
-
161
- const previousModel = this.list.getSelectionModel();
162
- this.list.updateProps(oldProps ? filterProps(oldProps, OWN_PROPS) : null, filterProps(newProps, OWN_PROPS));
163
- const currentModel = this.list.getSelectionModel();
164
-
165
- if (previousModel !== currentModel) {
166
- this.container.setModel(currentModel);
167
- }
168
- }
169
-
170
- public override commitMount(): void {
171
- super.commitMount();
172
- this.list.flushBatch();
173
- this.container.setModel(this.list.getSelectionModel());
174
- }
175
-
176
- public override detachDeletedInstance(): void {
177
- this.columnNodes.clear();
178
- this.headerRenderer?.dispose();
179
- super.detachDeletedInstance();
180
- }
181
-
182
- private applyOwnProps(oldProps: ColumnViewProps | null, newProps: ColumnViewProps): void {
183
- if (hasChanged(oldProps, newProps, "onSortChanged")) {
184
- const sorter = this.container.getSorter();
185
- const onSortChanged = newProps.onSortChanged;
186
-
187
- if (sorter instanceof Gtk.ColumnViewSorter) {
188
- const handleSortChange = onSortChanged
189
- ? () => {
190
- onSortChanged(sorter.getPrimarySortColumn()?.getId() ?? null, sorter.getPrimarySortOrder());
191
- }
192
- : undefined;
193
-
194
- this.signalStore.set(this, sorter, "changed", handleSortChange);
195
- }
196
- }
197
-
198
- if (hasChanged(oldProps, newProps, "sortColumn") || hasChanged(oldProps, newProps, "sortOrder")) {
199
- const sortColumn = newProps.sortColumn;
200
- const sortOrder = newProps.sortOrder ?? Gtk.SortType.ASCENDING;
201
-
202
- if (!sortColumn) {
203
- this.container.sortByColumn(sortOrder, undefined);
204
- } else {
205
- this.container.sortByColumn(sortOrder, this.getColumn(sortColumn));
206
- }
207
- }
208
-
209
- if (hasChanged(oldProps, newProps, "estimatedRowHeight")) {
210
- this.estimatedRowHeight = newProps.estimatedRowHeight ?? null;
211
- for (const column of this.columnNodes) {
212
- column.setEstimatedRowHeight(this.estimatedRowHeight);
213
- }
214
- }
215
-
216
- if (hasChanged(oldProps, newProps, "renderHeader")) {
217
- this.headerRenderer = updateHeaderRenderer(
218
- this.headerRenderer,
219
- {
220
- signalStore: this.signalStore,
221
- isEnabled: () => this.list.isFlatMode(),
222
- resolveItem: (id) => this.list.getFlatStore().getHeaderValue(id),
223
- setFactory: (factory) => this.container.setHeaderFactory(factory),
224
- },
225
- newProps.renderHeader,
226
- );
227
- }
228
- }
229
-
230
- private findColumn<T>(predicate: (column: Gtk.ColumnViewColumn, index: number) => T | null): T | null {
231
- const columns = this.container.getColumns();
232
- for (let i = 0; i < columns.getNItems(); i++) {
233
- const column = columns.getObject(i);
234
- if (!(column instanceof Gtk.ColumnViewColumn)) continue;
235
- const result = predicate(column, i);
236
- if (result !== null) return result;
237
- }
238
- return null;
239
- }
240
-
241
- private getColumn(columnId: string): Gtk.ColumnViewColumn {
242
- const column = this.findColumn((col) => (col.getId() === columnId ? col : null));
243
- if (!column) {
244
- throw new Error(`Unable to find column '${columnId}' in ${this.typeName}`);
245
- }
246
- return column;
247
- }
248
-
249
- private getColumnIndex(column: Gtk.ColumnViewColumn): number {
250
- const targetId = column.getId();
251
- const index = this.findColumn((col, i) => (col.getId() === targetId ? i : null));
252
- if (index === null) {
253
- throw new Error(`Unable to find column '${targetId}' in ${this.typeName}`);
254
- }
255
- return index;
256
- }
257
-
258
- private findColumnInView(column: Gtk.ColumnViewColumn): Gtk.ColumnViewColumn | null {
259
- const targetId = column.getId();
260
- return this.findColumn((col) => (col.getId() === targetId ? col : null));
261
- }
262
- }