@gtkx/components 0.21.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 (131) hide show
  1. package/dist/collection-view.d.ts +30 -0
  2. package/dist/collection-view.d.ts.map +1 -0
  3. package/dist/collection-view.js +52 -0
  4. package/dist/collection-view.js.map +1 -0
  5. package/dist/column-view-column.d.ts +17 -0
  6. package/dist/column-view-column.d.ts.map +1 -0
  7. package/dist/column-view-column.js +51 -0
  8. package/dist/column-view-column.js.map +1 -0
  9. package/dist/column-view.d.ts +18 -0
  10. package/dist/column-view.d.ts.map +1 -0
  11. package/dist/column-view.js +108 -0
  12. package/dist/column-view.js.map +1 -0
  13. package/dist/constraint-layout-apply.d.ts +6 -0
  14. package/dist/constraint-layout-apply.d.ts.map +1 -0
  15. package/dist/constraint-layout-apply.js +107 -0
  16. package/dist/constraint-layout-apply.js.map +1 -0
  17. package/dist/constraint-layout.d.ts +13 -0
  18. package/dist/constraint-layout.d.ts.map +1 -0
  19. package/dist/constraint-layout.js +85 -0
  20. package/dist/constraint-layout.js.map +1 -0
  21. package/dist/contexts/column-view-context.d.ts +17 -0
  22. package/dist/contexts/column-view-context.d.ts.map +1 -0
  23. package/dist/contexts/column-view-context.js +10 -0
  24. package/dist/contexts/column-view-context.js.map +1 -0
  25. package/dist/drop-down.d.ts +41 -0
  26. package/dist/drop-down.d.ts.map +1 -0
  27. package/dist/drop-down.js +129 -0
  28. package/dist/drop-down.js.map +1 -0
  29. package/dist/grid-view.d.ts +16 -0
  30. package/dist/grid-view.d.ts.map +1 -0
  31. package/dist/grid-view.js +22 -0
  32. package/dist/grid-view.js.map +1 -0
  33. package/dist/hooks/use-drop-down-selection.d.ts +15 -0
  34. package/dist/hooks/use-drop-down-selection.d.ts.map +1 -0
  35. package/dist/hooks/use-drop-down-selection.js +35 -0
  36. package/dist/hooks/use-drop-down-selection.js.map +1 -0
  37. package/dist/hooks/use-header-menu.d.ts +4 -0
  38. package/dist/hooks/use-header-menu.d.ts.map +1 -0
  39. package/dist/hooks/use-header-menu.js +32 -0
  40. package/dist/hooks/use-header-menu.js.map +1 -0
  41. package/dist/hooks/use-list-model.d.ts +20 -0
  42. package/dist/hooks/use-list-model.d.ts.map +1 -0
  43. package/dist/hooks/use-list-model.js +70 -0
  44. package/dist/hooks/use-list-model.js.map +1 -0
  45. package/dist/hooks/use-model-installation.d.ts +9 -0
  46. package/dist/hooks/use-model-installation.d.ts.map +1 -0
  47. package/dist/hooks/use-model-installation.js +20 -0
  48. package/dist/hooks/use-model-installation.js.map +1 -0
  49. package/dist/hooks/use-realized-slots.d.ts +20 -0
  50. package/dist/hooks/use-realized-slots.d.ts.map +1 -0
  51. package/dist/hooks/use-realized-slots.js +66 -0
  52. package/dist/hooks/use-realized-slots.js.map +1 -0
  53. package/dist/hooks/use-selection-model.d.ts +12 -0
  54. package/dist/hooks/use-selection-model.d.ts.map +1 -0
  55. package/dist/hooks/use-selection-model.js +111 -0
  56. package/dist/hooks/use-selection-model.js.map +1 -0
  57. package/dist/hooks/use-sort-handler.d.ts +12 -0
  58. package/dist/hooks/use-sort-handler.d.ts.map +1 -0
  59. package/dist/hooks/use-sort-handler.js +87 -0
  60. package/dist/hooks/use-sort-handler.js.map +1 -0
  61. package/dist/index.d.ts +19 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +18 -0
  64. package/dist/index.js.map +1 -0
  65. package/dist/list-portal-host.d.ts +11 -0
  66. package/dist/list-portal-host.d.ts.map +1 -0
  67. package/dist/list-portal-host.js +8 -0
  68. package/dist/list-portal-host.js.map +1 -0
  69. package/dist/list-slot.d.ts +14 -0
  70. package/dist/list-slot.d.ts.map +1 -0
  71. package/dist/list-slot.js +29 -0
  72. package/dist/list-slot.js.map +1 -0
  73. package/dist/list-view.d.ts +16 -0
  74. package/dist/list-view.d.ts.map +1 -0
  75. package/dist/list-view.js +31 -0
  76. package/dist/list-view.js.map +1 -0
  77. package/dist/menu-items.d.ts +5 -0
  78. package/dist/menu-items.d.ts.map +1 -0
  79. package/dist/menu-items.js +48 -0
  80. package/dist/menu-items.js.map +1 -0
  81. package/dist/menu.d.ts +18 -0
  82. package/dist/menu.d.ts.map +1 -0
  83. package/dist/menu.js +26 -0
  84. package/dist/menu.js.map +1 -0
  85. package/dist/types.d.ts +198 -0
  86. package/dist/types.d.ts.map +1 -0
  87. package/dist/types.js +2 -0
  88. package/dist/types.js.map +1 -0
  89. package/dist/utils/item-resolver.d.ts +28 -0
  90. package/dist/utils/item-resolver.d.ts.map +1 -0
  91. package/dist/utils/item-resolver.js +111 -0
  92. package/dist/utils/item-resolver.js.map +1 -0
  93. package/dist/utils/list-item-flatten.d.ts +32 -0
  94. package/dist/utils/list-item-flatten.d.ts.map +1 -0
  95. package/dist/utils/list-item-flatten.js +88 -0
  96. package/dist/utils/list-item-flatten.js.map +1 -0
  97. package/dist/utils/position-only-model.d.ts +10 -0
  98. package/dist/utils/position-only-model.d.ts.map +1 -0
  99. package/dist/utils/position-only-model.js +83 -0
  100. package/dist/utils/position-only-model.js.map +1 -0
  101. package/dist/utils/realized-slot-store.d.ts +30 -0
  102. package/dist/utils/realized-slot-store.d.ts.map +1 -0
  103. package/dist/utils/realized-slot-store.js +103 -0
  104. package/dist/utils/realized-slot-store.js.map +1 -0
  105. package/package.json +55 -0
  106. package/src/collection-view.tsx +125 -0
  107. package/src/column-view-column.tsx +73 -0
  108. package/src/column-view.tsx +206 -0
  109. package/src/constraint-layout-apply.ts +121 -0
  110. package/src/constraint-layout.tsx +130 -0
  111. package/src/contexts/column-view-context.ts +28 -0
  112. package/src/drop-down.tsx +259 -0
  113. package/src/grid-view.tsx +73 -0
  114. package/src/hooks/use-drop-down-selection.ts +53 -0
  115. package/src/hooks/use-header-menu.ts +33 -0
  116. package/src/hooks/use-list-model.ts +145 -0
  117. package/src/hooks/use-model-installation.ts +25 -0
  118. package/src/hooks/use-realized-slots.ts +93 -0
  119. package/src/hooks/use-selection-model.ts +121 -0
  120. package/src/hooks/use-sort-handler.ts +102 -0
  121. package/src/index.ts +31 -0
  122. package/src/list-portal-host.tsx +27 -0
  123. package/src/list-slot.tsx +56 -0
  124. package/src/list-view.tsx +85 -0
  125. package/src/menu-items.ts +48 -0
  126. package/src/menu.tsx +34 -0
  127. package/src/types.ts +227 -0
  128. package/src/utils/item-resolver.ts +143 -0
  129. package/src/utils/list-item-flatten.ts +113 -0
  130. package/src/utils/position-only-model.ts +115 -0
  131. package/src/utils/realized-slot-store.ts +126 -0
@@ -0,0 +1,198 @@
1
+ import type * as Gio from "@gtkx/gi/gio";
2
+ import type * as GObject from "@gtkx/gi/gobject";
3
+ import type * as Gtk from "@gtkx/gi/gtk";
4
+ import type { ReactNode } from "react";
5
+ /**
6
+ * A declarative item rendered by the {@link ListView}, {@link GridView},
7
+ * {@link ColumnView}, and {@link DropDown} components.
8
+ *
9
+ * A non-section item carries an arbitrary value of type `T` and may declare
10
+ * tree `children`. A section item carries a value of type `S` and groups a list
11
+ * of child items underneath a header.
12
+ */
13
+ export type ListItem<T = unknown, S = unknown> = {
14
+ id: string;
15
+ value: T;
16
+ section?: false | undefined;
17
+ children?: ListItem<T, S>[] | undefined;
18
+ hideExpander?: boolean | undefined;
19
+ indentForDepth?: boolean | undefined;
20
+ indentForIcon?: boolean | undefined;
21
+ } | {
22
+ id: string;
23
+ value: S;
24
+ section: true;
25
+ children: ListItem<T, S>[];
26
+ };
27
+ type ListViewSharedProps = {
28
+ estimatedItemHeight?: number | undefined;
29
+ estimatedItemWidth?: number | undefined;
30
+ };
31
+ type ListViewControlledSelectionProps = {
32
+ selected?: string[] | null | undefined;
33
+ onSelectionChanged?: ((ids: string[]) => void) | null | undefined;
34
+ selectionMode?: Gtk.SelectionMode | null | undefined;
35
+ };
36
+ type UncontrolledItemType<T> = [T] extends [GObject.Object] ? T : GObject.Object;
37
+ /**
38
+ * Props for the {@link ListView} component, replacing the raw `GtkListView`
39
+ * factory/model surface with a declarative `items`/`renderItem` API, optional
40
+ * controlled selection, section headers, and tree autoexpansion. Supplying an
41
+ * external `model` switches to the uncontrolled form.
42
+ */
43
+ export type ListViewProps<T = unknown, S = unknown> = ListViewSharedProps & ((ListViewControlledSelectionProps & {
44
+ items?: ListItem<T, S>[] | undefined;
45
+ renderItem: (item: T, row?: Gtk.TreeListRow | null) => ReactNode;
46
+ autoexpand?: boolean | undefined;
47
+ renderHeader?: ((item: S) => ReactNode) | null | undefined;
48
+ model?: never;
49
+ }) | {
50
+ model: Gio.ListModel;
51
+ renderItem: (item: UncontrolledItemType<T>) => ReactNode;
52
+ items?: never;
53
+ autoexpand?: never;
54
+ renderHeader?: never;
55
+ selected?: never;
56
+ onSelectionChanged?: never;
57
+ selectionMode?: never;
58
+ });
59
+ /**
60
+ * Props for the {@link GridView} component, replacing the raw `GtkGridView`
61
+ * factory/model surface with a declarative `items`/`renderItem` API and
62
+ * optional controlled selection. Supplying an external `model` switches to the
63
+ * uncontrolled form.
64
+ */
65
+ export type GridViewProps<T = unknown> = ListViewSharedProps & ((ListViewControlledSelectionProps & {
66
+ items?: ListItem<T>[] | undefined;
67
+ renderItem: (item: T) => ReactNode;
68
+ model?: never;
69
+ }) | {
70
+ model: Gio.ListModel;
71
+ renderItem: (item: UncontrolledItemType<T>) => ReactNode;
72
+ items?: never;
73
+ selected?: never;
74
+ onSelectionChanged?: never;
75
+ selectionMode?: never;
76
+ });
77
+ type ColumnViewSortProps = {
78
+ sortColumn?: string | null | undefined;
79
+ sortOrder?: Gtk.SortType | null | undefined;
80
+ onSortChanged?: ((column: string | null, order: Gtk.SortType) => void) | null | undefined;
81
+ estimatedRowHeight?: number | null | undefined;
82
+ };
83
+ /**
84
+ * Props for the {@link ColumnView} component, replacing the raw `GtkColumnView`
85
+ * surface with a declarative `items` model, optional controlled selection,
86
+ * controlled sorting, and section headers. Columns are declared as
87
+ * {@link ColumnViewColumn} children. Supplying an external `model` switches to
88
+ * the uncontrolled form.
89
+ */
90
+ export type ColumnViewProps<T = unknown, S = unknown> = ColumnViewSortProps & ((ListViewControlledSelectionProps & {
91
+ items?: ListItem<T, S>[] | undefined;
92
+ renderHeader?: ((item: S) => ReactNode) | null | undefined;
93
+ model?: never;
94
+ }) | {
95
+ model: Gio.ListModel;
96
+ items?: never;
97
+ renderHeader?: never;
98
+ selected?: never;
99
+ onSelectionChanged?: never;
100
+ selectionMode?: never;
101
+ });
102
+ /**
103
+ * Props for a single {@link ColumnViewColumn} of a {@link ColumnView},
104
+ * replacing the raw `GtkColumnViewColumn` factory/sorter surface with a
105
+ * declarative `renderCell` callback and an optional header context menu.
106
+ */
107
+ export type ColumnViewColumnProps<T = unknown> = {
108
+ title: string;
109
+ expand?: boolean | undefined;
110
+ resizable?: boolean | undefined;
111
+ fixedWidth?: number | undefined;
112
+ id: string;
113
+ sortable?: boolean | undefined;
114
+ visible?: boolean | undefined;
115
+ renderCell: (item: T) => ReactNode;
116
+ headerMenu?: ReactNode;
117
+ };
118
+ /**
119
+ * Props shared by the {@link DropDown} and {@link ComboRow} components,
120
+ * replacing the raw factory/model surface with declarative `items`, controlled
121
+ * `selectedId`, and per-slot renderers for the selected face, the popup list,
122
+ * and section headers. Supplying an external `model` switches to the
123
+ * uncontrolled form.
124
+ */
125
+ export type DropDownProps<T = unknown, S = unknown> = {
126
+ items?: ListItem<T, S>[] | undefined;
127
+ selectedId?: string | null | undefined;
128
+ onSelectionChanged?: ((id: string) => void) | null | undefined;
129
+ renderItem?: ((item: T) => ReactNode) | null | undefined;
130
+ renderListItem?: ((item: T) => ReactNode) | null | undefined;
131
+ renderHeader?: ((item: S) => ReactNode) | null | undefined;
132
+ model?: never;
133
+ } | {
134
+ model: Gio.ListModel;
135
+ renderItem?: ((item: UncontrolledItemType<T>) => ReactNode) | null | undefined;
136
+ renderListItem?: ((item: UncontrolledItemType<T>) => ReactNode) | null | undefined;
137
+ items?: never;
138
+ selectedId?: never;
139
+ onSelectionChanged?: never;
140
+ renderHeader?: never;
141
+ };
142
+ /**
143
+ * A single declarative entry in a {@link Menu} model. An entry is a plain item
144
+ * (`label` plus `action`), a `submenu`, or a `section` of nested entries.
145
+ */
146
+ export type MenuEntry = {
147
+ label?: string | undefined;
148
+ action?: string | undefined;
149
+ submenu?: MenuEntry[] | undefined;
150
+ section?: MenuEntry[] | undefined;
151
+ };
152
+ /**
153
+ * The declarative menu-model surface added by the {@link Menu} component on top
154
+ * of the raw `GMenu` element.
155
+ */
156
+ export type MenuItemsProps = {
157
+ items?: MenuEntry[] | null | undefined;
158
+ };
159
+ /**
160
+ * Props for a `<ConstraintLayout.Constraint>` declaring a single relation
161
+ * between a target attribute and a source attribute within a
162
+ * {@link ConstraintLayout}.
163
+ */
164
+ export type ConstraintProps = {
165
+ target?: string;
166
+ targetAttribute: Gtk.ConstraintAttribute;
167
+ relation?: Gtk.ConstraintRelation;
168
+ source?: string;
169
+ sourceAttribute?: Gtk.ConstraintAttribute;
170
+ multiplier?: number;
171
+ constant?: number;
172
+ strength?: number;
173
+ };
174
+ /**
175
+ * Props for a `<ConstraintLayout.Guide>` declaring an invisible layout guide
176
+ * that other constraints can reference by `id` within a {@link ConstraintLayout}.
177
+ */
178
+ export type ConstraintGuideProps = {
179
+ id: string;
180
+ minWidth?: number;
181
+ minHeight?: number;
182
+ natWidth?: number;
183
+ natHeight?: number;
184
+ maxWidth?: number;
185
+ maxHeight?: number;
186
+ strength?: Gtk.ConstraintStrength;
187
+ };
188
+ /**
189
+ * Props for a `<ConstraintLayout.Vfl>` declaring constraints through the GTK
190
+ * Visual Format Language within a {@link ConstraintLayout}.
191
+ */
192
+ export type ConstraintVflProps = {
193
+ lines: string[];
194
+ hspacing?: number;
195
+ vspacing?: number;
196
+ };
197
+ export {};
198
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import type * as Gio from "@gtkx/gi/gio";
2
+ import type * as GObject from "@gtkx/gi/gobject";
3
+ import type * as Gtk from "@gtkx/gi/gtk";
4
+ import type { ListItem } from "../types.js";
5
+ import { type TreeItemMetadata } from "./list-item-flatten.js";
6
+ export interface Resolved<T = unknown, S = unknown> {
7
+ value: T | S | undefined;
8
+ present: boolean;
9
+ isHeader: boolean;
10
+ treeRow: Gtk.TreeListRow | null;
11
+ metadata: TreeItemMetadata;
12
+ }
13
+ export interface ItemResolver<T = unknown, S = unknown> {
14
+ resolve(position: number, treeRow: Gtk.TreeListRow | null, boundItem: GObject.Object | null): Resolved<T, S>;
15
+ positionOf(id: string): number;
16
+ idOf(position: number): string | undefined;
17
+ count: number;
18
+ }
19
+ export interface RowValue<T = unknown, S = unknown> {
20
+ id: string;
21
+ value: T | S;
22
+ isHeader: boolean;
23
+ metadata: TreeItemMetadata;
24
+ }
25
+ export declare const createControlledResolver: <T, S>(items: ListItem<T, S>[] | undefined, flattenTreeChildren: boolean, rowValues: WeakMap<GObject.Object, RowValue<T, S>>) => ItemResolver<T, S>;
26
+ export declare const createModelResolver: <T, S>(model: Gio.ListModel) => ItemResolver<T, S>;
27
+ export declare const createSectionHeaderResolver: <T, S>(items: ListItem<T, S>[] | undefined) => ItemResolver<T, S>;
28
+ //# sourceMappingURL=item-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-resolver.d.ts","sourceRoot":"","sources":["../../src/utils/item-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAcjF,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAC9C,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IAChC,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAClD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7G,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC3C,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IAC9C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAED,eAAO,MAAM,wBAAwB,GAAI,CAAC,EAAE,CAAC,EACzC,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EACnC,qBAAqB,OAAO,EAC5B,WAAW,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KACnD,YAAY,CAAC,CAAC,EAAE,CAAC,CA8CnB,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,GAAG,CAAC,SAAS,KAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAuBjF,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,KAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAyBxG,CAAC"}
@@ -0,0 +1,111 @@
1
+ import { flattenListItems } from "./list-item-flatten.js";
2
+ const NO_TREE_METADATA = { hideExpander: false, indentForDepth: true, indentForIcon: true };
3
+ const treeItemCache = new WeakMap();
4
+ const treeRowItem = (treeRow) => {
5
+ const cached = treeItemCache.get(treeRow);
6
+ if (cached !== undefined)
7
+ return cached;
8
+ const item = treeRow.getItem();
9
+ if (item !== null)
10
+ treeItemCache.set(treeRow, item);
11
+ return item;
12
+ };
13
+ export const createControlledResolver = (items, flattenTreeChildren, rowValues) => {
14
+ const flattened = flattenListItems(items, flattenTreeChildren);
15
+ return {
16
+ count: flattened.records.length,
17
+ positionOf(id) {
18
+ const position = flattened.idToPosition.get(id);
19
+ return position === undefined ? -1 : position;
20
+ },
21
+ idOf(position) {
22
+ return flattened.positionToId.get(position);
23
+ },
24
+ resolve(position, treeRow, _boundItem) {
25
+ if (treeRow !== null && !flattenTreeChildren) {
26
+ const rowItem = treeRowItem(treeRow);
27
+ if (rowItem !== null) {
28
+ const tagged = rowValues.get(rowItem);
29
+ if (tagged !== undefined) {
30
+ return {
31
+ value: tagged.value,
32
+ present: true,
33
+ isHeader: tagged.isHeader,
34
+ treeRow,
35
+ metadata: tagged.metadata,
36
+ };
37
+ }
38
+ }
39
+ }
40
+ const record = flattened.records[position];
41
+ if (record === undefined) {
42
+ return {
43
+ value: undefined,
44
+ present: false,
45
+ isHeader: false,
46
+ treeRow,
47
+ metadata: NO_TREE_METADATA,
48
+ };
49
+ }
50
+ return {
51
+ value: record.value,
52
+ present: true,
53
+ isHeader: record.isHeader,
54
+ treeRow,
55
+ metadata: record.metadata,
56
+ };
57
+ },
58
+ };
59
+ };
60
+ export const createModelResolver = (model) => {
61
+ return {
62
+ get count() {
63
+ return model.getNItems();
64
+ },
65
+ positionOf(id) {
66
+ const numeric = Number(id);
67
+ return Number.isInteger(numeric) ? numeric : -1;
68
+ },
69
+ idOf(position) {
70
+ return String(position);
71
+ },
72
+ resolve(position, treeRow, boundItem) {
73
+ const item = boundItem ?? model.getItem(position);
74
+ return {
75
+ value: (item ?? undefined),
76
+ present: item !== null,
77
+ isHeader: false,
78
+ treeRow,
79
+ metadata: NO_TREE_METADATA,
80
+ };
81
+ },
82
+ };
83
+ };
84
+ export const createSectionHeaderResolver = (items) => {
85
+ const valueByStart = new Map();
86
+ let start = 0;
87
+ for (const section of items ?? []) {
88
+ if (section.section !== true)
89
+ continue;
90
+ valueByStart.set(start, section.value);
91
+ start += section.children?.length ?? 0;
92
+ }
93
+ return {
94
+ count: valueByStart.size,
95
+ positionOf: () => -1,
96
+ idOf: () => undefined,
97
+ resolve(position) {
98
+ if (!valueByStart.has(position)) {
99
+ return { value: undefined, present: false, isHeader: true, treeRow: null, metadata: NO_TREE_METADATA };
100
+ }
101
+ return {
102
+ value: valueByStart.get(position),
103
+ present: true,
104
+ isHeader: true,
105
+ treeRow: null,
106
+ metadata: NO_TREE_METADATA,
107
+ };
108
+ },
109
+ };
110
+ };
111
+ //# sourceMappingURL=item-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"item-resolver.js","sourceRoot":"","sources":["../../src/utils/item-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ import type { ListItem } from "../types.js";
2
+ export interface TreeItemMetadata {
3
+ hideExpander: boolean;
4
+ indentForDepth: boolean;
5
+ indentForIcon: boolean;
6
+ }
7
+ export interface FlattenedRecord<T = unknown, S = unknown> {
8
+ id: string;
9
+ value: T | S;
10
+ isHeader: boolean;
11
+ hasChildren: boolean;
12
+ children: ListItem<T, S>[];
13
+ metadata: TreeItemMetadata;
14
+ }
15
+ export interface FlattenResult<T = unknown, S = unknown> {
16
+ records: FlattenedRecord<T, S>[];
17
+ idToPosition: Map<string, number>;
18
+ positionToId: Map<number, string>;
19
+ isTree: boolean;
20
+ isSectioned: boolean;
21
+ }
22
+ export type ListStructure = "flat" | "tree" | "sections";
23
+ /**
24
+ * Classify a controlled item list as flat, tree, or sectioned without building a
25
+ * {@link FlattenResult}. A list is sectioned if any top-level item is a section, a
26
+ * tree if any top-level item carries children, and flat otherwise.
27
+ */
28
+ export declare const detectStructure: <T, S>(items: ListItem<T, S>[] | undefined) => ListStructure;
29
+ export declare const structuralSignature: <T, S>(items: ListItem<T, S>[] | undefined) => string;
30
+ export declare const treeItemMetadata: <T, S>(item: ListItem<T, S>) => TreeItemMetadata;
31
+ export declare const flattenListItems: <T, S>(items: ListItem<T, S>[] | undefined, flattenTreeChildren: boolean) => FlattenResult<T, S>;
32
+ //# sourceMappingURL=list-item-flatten.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-item-flatten.d.ts","sourceRoot":"","sources":["../../src/utils/list-item-flatten.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC7B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACrD,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IAC3B,QAAQ,EAAE,gBAAgB,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO;IACnD,OAAO,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACjC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzD;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,KAAG,aAQ3E,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,KAAG,MAc/E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,KAAG,gBAS7D,CAAC;AAqBF,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,EACjC,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,EACnC,qBAAqB,OAAO,KAC7B,aAAa,CAAC,CAAC,EAAE,CAAC,CAqBpB,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Classify a controlled item list as flat, tree, or sectioned without building a
3
+ * {@link FlattenResult}. A list is sectioned if any top-level item is a section, a
4
+ * tree if any top-level item carries children, and flat otherwise.
5
+ */
6
+ export const detectStructure = (items) => {
7
+ if (items === undefined)
8
+ return "flat";
9
+ let sawTree = false;
10
+ for (const item of items) {
11
+ if (item.section === true)
12
+ return "sections";
13
+ if (item.children !== undefined && item.children.length > 0)
14
+ sawTree = true;
15
+ }
16
+ return sawTree ? "tree" : "flat";
17
+ };
18
+ export const structuralSignature = (items) => {
19
+ if (items === undefined)
20
+ return "";
21
+ const parts = [];
22
+ const walk = (list) => {
23
+ parts.push("[");
24
+ for (const item of list) {
25
+ const hidden = item.section === true ? false : item.hideExpander === true;
26
+ parts.push(`${item.id}|${item.section === true ? 1 : 0}|${hidden ? 1 : 0}`);
27
+ if (item.children !== undefined && item.children.length > 0)
28
+ walk(item.children);
29
+ }
30
+ parts.push("]");
31
+ };
32
+ walk(items);
33
+ return parts.join(",");
34
+ };
35
+ export const treeItemMetadata = (item) => {
36
+ if (item.section === true) {
37
+ return { hideExpander: false, indentForDepth: false, indentForIcon: false };
38
+ }
39
+ return {
40
+ hideExpander: item.hideExpander ?? false,
41
+ indentForDepth: item.indentForDepth ?? true,
42
+ indentForIcon: item.indentForIcon ?? true,
43
+ };
44
+ };
45
+ const hasChildren = (item) => item.children !== undefined && item.children.length > 0;
46
+ const appendRecord = (item, result, includeChildren) => {
47
+ const position = result.records.length;
48
+ result.idToPosition.set(item.id, position);
49
+ result.positionToId.set(position, item.id);
50
+ result.records.push({
51
+ id: item.id,
52
+ value: item.value,
53
+ isHeader: item.section === true,
54
+ hasChildren: hasChildren(item),
55
+ children: item.children ?? [],
56
+ metadata: treeItemMetadata(item),
57
+ });
58
+ if (includeChildren && item.children !== undefined) {
59
+ for (const child of item.children)
60
+ appendRecord(child, result, includeChildren);
61
+ }
62
+ };
63
+ export const flattenListItems = (items, flattenTreeChildren) => {
64
+ const result = {
65
+ records: [],
66
+ idToPosition: new Map(),
67
+ positionToId: new Map(),
68
+ isTree: false,
69
+ isSectioned: false,
70
+ };
71
+ if (items === undefined)
72
+ return result;
73
+ for (const item of items) {
74
+ if (item.section === true) {
75
+ result.isSectioned = true;
76
+ if (item.children !== undefined) {
77
+ for (const child of item.children)
78
+ appendRecord(child, result, true);
79
+ }
80
+ continue;
81
+ }
82
+ if (hasChildren(item))
83
+ result.isTree = true;
84
+ appendRecord(item, result, flattenTreeChildren);
85
+ }
86
+ return result;
87
+ };
88
+ //# sourceMappingURL=list-item-flatten.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-item-flatten.js","sourceRoot":"","sources":["../../src/utils/list-item-flatten.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type * as GObject from "@gtkx/gi/gobject";
2
+ import * as Gtk from "@gtkx/gi/gtk";
3
+ import type { ListItem } from "../types.js";
4
+ import type { RowValue } from "./item-resolver.js";
5
+ export declare const retagRows: <T, S>(items: ListItem<T, S>[], rowValues: WeakMap<GObject.Object, RowValue<T, S>>, placeholdersById: Map<string, GObject.Object>) => void;
6
+ export declare const createFlatModel: (count: number) => Gtk.StringList;
7
+ export declare const resizeFlatModel: (model: Gtk.StringList, count: number) => void;
8
+ export declare const createTreeModel: <T, S>(items: ListItem<T, S>[], autoexpand: boolean, rowValues: WeakMap<GObject.Object, RowValue<T, S>>, placeholdersById: Map<string, GObject.Object>) => Gtk.TreeListModel;
9
+ export declare const createSectionModel: <T, S>(items: ListItem<T, S>[]) => Gtk.FlattenListModel;
10
+ //# sourceMappingURL=position-only-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position-only-model.d.ts","sourceRoot":"","sources":["../../src/utils/position-only-model.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,EAC1B,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EACvB,WAAW,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAClD,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAC9C,IAgBF,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,OAAO,MAAM,KAAG,GAAG,CAAC,UAAqD,CAAC;AAE1G,eAAO,MAAM,eAAe,GAAI,OAAO,GAAG,CAAC,UAAU,EAAE,OAAO,MAAM,KAAG,IAStE,CAAC;AA+BF,eAAO,MAAM,eAAe,GAAI,CAAC,EAAE,CAAC,EAChC,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EACvB,YAAY,OAAO,EACnB,WAAW,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAClD,kBAAkB,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAC9C,GAAG,CAAC,aA4BN,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,EAAE,OAAO,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAG,GAAG,CAAC,gBAMtE,CAAC"}
@@ -0,0 +1,83 @@
1
+ import * as Gio from "@gtkx/gi/gio";
2
+ import * as Gtk from "@gtkx/gi/gtk";
3
+ import { treeItemMetadata } from "./list-item-flatten.js";
4
+ const emptyStrings = (count) => new Array(Math.max(0, count)).fill("");
5
+ export const retagRows = (items, rowValues, placeholdersById) => {
6
+ const walk = (list) => {
7
+ for (const item of list) {
8
+ const placeholder = placeholdersById.get(item.id);
9
+ if (placeholder !== undefined) {
10
+ rowValues.set(placeholder, {
11
+ id: item.id,
12
+ value: item.value,
13
+ isHeader: item.section === true,
14
+ metadata: treeItemMetadata(item),
15
+ });
16
+ }
17
+ if (item.children !== undefined && item.children.length > 0)
18
+ walk(item.children);
19
+ }
20
+ };
21
+ walk(items);
22
+ };
23
+ export const createFlatModel = (count) => Gtk.StringList.new(emptyStrings(count));
24
+ export const resizeFlatModel = (model, count) => {
25
+ const target = Math.max(0, count);
26
+ const current = model.getNItems();
27
+ if (current === target)
28
+ return;
29
+ if (target > current) {
30
+ model.splice(current, 0, emptyStrings(target - current));
31
+ return;
32
+ }
33
+ model.splice(target, current - target, null);
34
+ };
35
+ const createTaggedRow = (row, rowValues, placeholdersById) => {
36
+ const placeholder = Gtk.StringObject.new("");
37
+ rowValues.set(placeholder, row);
38
+ if (placeholdersById !== undefined)
39
+ placeholdersById.set(row.id, placeholder);
40
+ return placeholder;
41
+ };
42
+ const childModelOf = (children, rowValues, placeholdersById) => {
43
+ const store = Gio.ListStore.new(Gtk.StringObject.prototype.__gtype__);
44
+ for (const child of children) {
45
+ store.append(createTaggedRow({ id: child.id, value: child.value, isHeader: false, metadata: treeItemMetadata(child) }, rowValues, placeholdersById));
46
+ }
47
+ return store;
48
+ };
49
+ export const createTreeModel = (items, autoexpand, rowValues, placeholdersById) => {
50
+ const childrenByRow = new WeakMap();
51
+ const root = Gio.ListStore.new(Gtk.StringObject.prototype.__gtype__);
52
+ for (const item of items) {
53
+ const placeholder = createTaggedRow({ id: item.id, value: item.value, isHeader: item.section === true, metadata: treeItemMetadata(item) }, rowValues, placeholdersById);
54
+ if (item.children !== undefined && item.children.length > 0) {
55
+ childrenByRow.set(placeholder, item.children);
56
+ }
57
+ root.append(placeholder);
58
+ }
59
+ const createFunc = (rowItem) => {
60
+ const children = childrenByRow.get(rowItem);
61
+ if (children === undefined)
62
+ return null;
63
+ const store = childModelOf(children, rowValues, placeholdersById);
64
+ for (let index = 0; index < children.length; index++) {
65
+ const child = children[index];
66
+ if (child !== undefined && child.children !== undefined && child.children.length > 0) {
67
+ const placeholder = store.getItem(index);
68
+ if (placeholder !== null)
69
+ childrenByRow.set(placeholder, child.children);
70
+ }
71
+ }
72
+ return store;
73
+ };
74
+ return Gtk.TreeListModel.new(root, false, autoexpand, createFunc);
75
+ };
76
+ export const createSectionModel = (items) => {
77
+ const sections = Gio.ListStore.new(Gtk.StringList.prototype.__gtype__);
78
+ for (const section of items) {
79
+ sections.append(Gtk.StringList.new(emptyStrings(section.children?.length ?? 0)));
80
+ }
81
+ return Gtk.FlattenListModel.new(sections);
82
+ };
83
+ //# sourceMappingURL=position-only-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position-only-model.js","sourceRoot":"","sources":["../../src/utils/position-only-model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type * as GObject from "@gtkx/gi/gobject";
2
+ import type * as Gtk from "@gtkx/gi/gtk";
3
+ export interface SlotEntry {
4
+ container: GObject.Object;
5
+ position: number;
6
+ treeRow: Gtk.TreeListRow | null;
7
+ item: GObject.Object | null;
8
+ }
9
+ export declare class RealizedSlotStore {
10
+ private entries;
11
+ private published;
12
+ private setListeners;
13
+ private positionListeners;
14
+ private positionFlushers;
15
+ private keys;
16
+ private snapshot;
17
+ subscribeSet: (onChange: () => void) => (() => void);
18
+ getSlotsSnapshot: () => GObject.Object[];
19
+ subscribePosition: (container: GObject.Object, onChange: () => void) => (() => void);
20
+ getPosition: (container: GObject.Object) => SlotEntry;
21
+ keyFor: (container: GObject.Object) => string;
22
+ addContainer: (container: GObject.Object) => void;
23
+ bind: (container: GObject.Object, position: number, treeRow: Gtk.TreeListRow | null, item: GObject.Object | null) => void;
24
+ unbind: (container: GObject.Object) => void;
25
+ removeContainer: (container: GObject.Object) => void;
26
+ private flushSet;
27
+ private notifySet;
28
+ private notifyPosition;
29
+ }
30
+ //# sourceMappingURL=realized-slot-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realized-slot-store.d.ts","sourceRoot":"","sources":["../../src/utils/realized-slot-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAEzC,MAAM,WAAW,SAAS;IACtB,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;IAChC,IAAI,EAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAC/B;AAID,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,SAAS,CAAwC;IAEzD,OAAO,CAAC,YAAY,CAAyB;IAE7C,OAAO,CAAC,iBAAiB,CAA8C;IAEvE,OAAO,CAAC,gBAAgB,CAAyC;IAEjE,OAAO,CAAC,IAAI,CAAyC;IAErD,OAAO,CAAC,QAAQ,CAAwB;IAExC,YAAY,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAKjD;IAEF,gBAAgB,QAAO,OAAO,CAAC,MAAM,EAAE,CAAkB;IAEzD,iBAAiB,GAAI,WAAW,OAAO,CAAC,MAAM,EAAE,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAajF;IAEF,WAAW,GAAI,WAAW,OAAO,CAAC,MAAM,KAAG,SAAS,CAOlD;IAEF,MAAM,GAAI,WAAW,OAAO,CAAC,MAAM,KAAG,MAAM,CAM1C;IAEF,YAAY,GAAI,WAAW,OAAO,CAAC,MAAM,KAAG,IAAI,CAI9C;IAEF,IAAI,GACA,WAAW,OAAO,CAAC,MAAM,EACzB,UAAU,MAAM,EAChB,SAAS,GAAG,CAAC,WAAW,GAAG,IAAI,EAC/B,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,KAC5B,IAAI,CAQL;IAEF,MAAM,GAAI,WAAW,OAAO,CAAC,MAAM,KAAG,IAAI,CAIxC;IAEF,eAAe,GAAI,WAAW,OAAO,CAAC,MAAM,KAAG,IAAI,CAKjD;IAEF,OAAO,CAAC,QAAQ,CAGd;IAEF,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;CAczB"}