@gtkx/components 0.21.0 → 1.0.0-rc.2

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 (192) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +173 -0
  3. package/dist/adw/index.d.ts +3 -0
  4. package/dist/adw/index.d.ts.map +1 -0
  5. package/dist/adw/index.js +2 -0
  6. package/dist/adw/index.js.map +1 -0
  7. package/dist/adw/toast.d.ts +10 -0
  8. package/dist/adw/toast.d.ts.map +1 -0
  9. package/dist/adw/toast.js +51 -0
  10. package/dist/adw/toast.js.map +1 -0
  11. package/dist/adw/types.d.ts +28 -0
  12. package/dist/adw/types.d.ts.map +1 -0
  13. package/dist/adw/types.js +2 -0
  14. package/dist/adw/types.js.map +1 -0
  15. package/dist/column-view.d.ts +6 -14
  16. package/dist/column-view.d.ts.map +1 -1
  17. package/dist/column-view.js +98 -100
  18. package/dist/column-view.js.map +1 -1
  19. package/dist/drop-down.d.ts +8 -37
  20. package/dist/drop-down.d.ts.map +1 -1
  21. package/dist/drop-down.js +109 -118
  22. package/dist/drop-down.js.map +1 -1
  23. package/dist/grid-view.d.ts +4 -11
  24. package/dist/grid-view.d.ts.map +1 -1
  25. package/dist/grid-view.js +25 -19
  26. package/dist/grid-view.js.map +1 -1
  27. package/dist/index.d.ts +6 -18
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +2 -14
  30. package/dist/index.js.map +1 -1
  31. package/dist/internal/cells.d.ts +50 -0
  32. package/dist/internal/cells.d.ts.map +1 -0
  33. package/dist/internal/cells.js +185 -0
  34. package/dist/internal/cells.js.map +1 -0
  35. package/dist/internal/collection-index.d.ts +21 -0
  36. package/dist/internal/collection-index.d.ts.map +1 -0
  37. package/dist/internal/collection-index.js +106 -0
  38. package/dist/internal/collection-index.js.map +1 -0
  39. package/dist/internal/collection-model.d.ts +12 -0
  40. package/dist/internal/collection-model.d.ts.map +1 -0
  41. package/dist/internal/collection-model.js +164 -0
  42. package/dist/internal/collection-model.js.map +1 -0
  43. package/dist/internal/collection.d.ts +18 -0
  44. package/dist/internal/collection.d.ts.map +1 -0
  45. package/dist/internal/collection.js +64 -0
  46. package/dist/internal/collection.js.map +1 -0
  47. package/dist/internal/expansion.d.ts +9 -0
  48. package/dist/internal/expansion.d.ts.map +1 -0
  49. package/dist/internal/expansion.js +75 -0
  50. package/dist/internal/expansion.js.map +1 -0
  51. package/dist/internal/selection.d.ts +12 -0
  52. package/dist/internal/selection.d.ts.map +1 -0
  53. package/dist/internal/selection.js +99 -0
  54. package/dist/internal/selection.js.map +1 -0
  55. package/dist/internal/use-collection.d.ts +18 -0
  56. package/dist/internal/use-collection.d.ts.map +1 -0
  57. package/dist/internal/use-collection.js +42 -0
  58. package/dist/internal/use-collection.js.map +1 -0
  59. package/dist/internal/use-widget-ref.d.ts +4 -0
  60. package/dist/internal/use-widget-ref.d.ts.map +1 -0
  61. package/dist/internal/use-widget-ref.js +8 -0
  62. package/dist/internal/use-widget-ref.js.map +1 -0
  63. package/dist/list-view.d.ts +4 -11
  64. package/dist/list-view.d.ts.map +1 -1
  65. package/dist/list-view.js +32 -28
  66. package/dist/list-view.js.map +1 -1
  67. package/dist/size-group.d.ts +12 -0
  68. package/dist/size-group.d.ts.map +1 -0
  69. package/dist/size-group.js +41 -0
  70. package/dist/size-group.js.map +1 -0
  71. package/dist/types.d.ts +104 -161
  72. package/dist/types.d.ts.map +1 -1
  73. package/dist/types.js.map +1 -1
  74. package/package.json +62 -52
  75. package/src/adw/index.ts +2 -0
  76. package/src/adw/toast.tsx +74 -0
  77. package/src/adw/types.ts +32 -0
  78. package/src/column-view.tsx +184 -184
  79. package/src/drop-down.tsx +173 -227
  80. package/src/grid-view.tsx +29 -65
  81. package/src/index.ts +16 -25
  82. package/src/internal/cells.tsx +345 -0
  83. package/src/internal/collection-index.ts +168 -0
  84. package/src/internal/collection-model.ts +246 -0
  85. package/src/internal/collection.ts +104 -0
  86. package/src/internal/expansion.ts +123 -0
  87. package/src/internal/selection.tsx +159 -0
  88. package/src/internal/use-collection.tsx +70 -0
  89. package/src/internal/use-widget-ref.ts +11 -0
  90. package/src/list-view.tsx +45 -78
  91. package/src/size-group.tsx +77 -0
  92. package/src/types.ts +171 -191
  93. package/dist/collection-view.d.ts +0 -30
  94. package/dist/collection-view.d.ts.map +0 -1
  95. package/dist/collection-view.js +0 -52
  96. package/dist/collection-view.js.map +0 -1
  97. package/dist/column-view-column.d.ts +0 -17
  98. package/dist/column-view-column.d.ts.map +0 -1
  99. package/dist/column-view-column.js +0 -51
  100. package/dist/column-view-column.js.map +0 -1
  101. package/dist/constraint-layout-apply.d.ts +0 -6
  102. package/dist/constraint-layout-apply.d.ts.map +0 -1
  103. package/dist/constraint-layout-apply.js +0 -107
  104. package/dist/constraint-layout-apply.js.map +0 -1
  105. package/dist/constraint-layout.d.ts +0 -13
  106. package/dist/constraint-layout.d.ts.map +0 -1
  107. package/dist/constraint-layout.js +0 -85
  108. package/dist/constraint-layout.js.map +0 -1
  109. package/dist/contexts/column-view-context.d.ts +0 -17
  110. package/dist/contexts/column-view-context.d.ts.map +0 -1
  111. package/dist/contexts/column-view-context.js +0 -10
  112. package/dist/contexts/column-view-context.js.map +0 -1
  113. package/dist/hooks/use-drop-down-selection.d.ts +0 -15
  114. package/dist/hooks/use-drop-down-selection.d.ts.map +0 -1
  115. package/dist/hooks/use-drop-down-selection.js +0 -35
  116. package/dist/hooks/use-drop-down-selection.js.map +0 -1
  117. package/dist/hooks/use-header-menu.d.ts +0 -4
  118. package/dist/hooks/use-header-menu.d.ts.map +0 -1
  119. package/dist/hooks/use-header-menu.js +0 -32
  120. package/dist/hooks/use-header-menu.js.map +0 -1
  121. package/dist/hooks/use-list-model.d.ts +0 -20
  122. package/dist/hooks/use-list-model.d.ts.map +0 -1
  123. package/dist/hooks/use-list-model.js +0 -70
  124. package/dist/hooks/use-list-model.js.map +0 -1
  125. package/dist/hooks/use-model-installation.d.ts +0 -9
  126. package/dist/hooks/use-model-installation.d.ts.map +0 -1
  127. package/dist/hooks/use-model-installation.js +0 -20
  128. package/dist/hooks/use-model-installation.js.map +0 -1
  129. package/dist/hooks/use-realized-slots.d.ts +0 -20
  130. package/dist/hooks/use-realized-slots.d.ts.map +0 -1
  131. package/dist/hooks/use-realized-slots.js +0 -66
  132. package/dist/hooks/use-realized-slots.js.map +0 -1
  133. package/dist/hooks/use-selection-model.d.ts +0 -12
  134. package/dist/hooks/use-selection-model.d.ts.map +0 -1
  135. package/dist/hooks/use-selection-model.js +0 -111
  136. package/dist/hooks/use-selection-model.js.map +0 -1
  137. package/dist/hooks/use-sort-handler.d.ts +0 -12
  138. package/dist/hooks/use-sort-handler.d.ts.map +0 -1
  139. package/dist/hooks/use-sort-handler.js +0 -87
  140. package/dist/hooks/use-sort-handler.js.map +0 -1
  141. package/dist/list-portal-host.d.ts +0 -11
  142. package/dist/list-portal-host.d.ts.map +0 -1
  143. package/dist/list-portal-host.js +0 -8
  144. package/dist/list-portal-host.js.map +0 -1
  145. package/dist/list-slot.d.ts +0 -14
  146. package/dist/list-slot.d.ts.map +0 -1
  147. package/dist/list-slot.js +0 -29
  148. package/dist/list-slot.js.map +0 -1
  149. package/dist/menu-items.d.ts +0 -5
  150. package/dist/menu-items.d.ts.map +0 -1
  151. package/dist/menu-items.js +0 -48
  152. package/dist/menu-items.js.map +0 -1
  153. package/dist/menu.d.ts +0 -18
  154. package/dist/menu.d.ts.map +0 -1
  155. package/dist/menu.js +0 -26
  156. package/dist/menu.js.map +0 -1
  157. package/dist/utils/item-resolver.d.ts +0 -28
  158. package/dist/utils/item-resolver.d.ts.map +0 -1
  159. package/dist/utils/item-resolver.js +0 -111
  160. package/dist/utils/item-resolver.js.map +0 -1
  161. package/dist/utils/list-item-flatten.d.ts +0 -32
  162. package/dist/utils/list-item-flatten.d.ts.map +0 -1
  163. package/dist/utils/list-item-flatten.js +0 -88
  164. package/dist/utils/list-item-flatten.js.map +0 -1
  165. package/dist/utils/position-only-model.d.ts +0 -10
  166. package/dist/utils/position-only-model.d.ts.map +0 -1
  167. package/dist/utils/position-only-model.js +0 -83
  168. package/dist/utils/position-only-model.js.map +0 -1
  169. package/dist/utils/realized-slot-store.d.ts +0 -30
  170. package/dist/utils/realized-slot-store.d.ts.map +0 -1
  171. package/dist/utils/realized-slot-store.js +0 -103
  172. package/dist/utils/realized-slot-store.js.map +0 -1
  173. package/src/collection-view.tsx +0 -125
  174. package/src/column-view-column.tsx +0 -73
  175. package/src/constraint-layout-apply.ts +0 -121
  176. package/src/constraint-layout.tsx +0 -130
  177. package/src/contexts/column-view-context.ts +0 -28
  178. package/src/hooks/use-drop-down-selection.ts +0 -53
  179. package/src/hooks/use-header-menu.ts +0 -33
  180. package/src/hooks/use-list-model.ts +0 -145
  181. package/src/hooks/use-model-installation.ts +0 -25
  182. package/src/hooks/use-realized-slots.ts +0 -93
  183. package/src/hooks/use-selection-model.ts +0 -121
  184. package/src/hooks/use-sort-handler.ts +0 -102
  185. package/src/list-portal-host.tsx +0 -27
  186. package/src/list-slot.tsx +0 -56
  187. package/src/menu-items.ts +0 -48
  188. package/src/menu.tsx +0 -34
  189. package/src/utils/item-resolver.ts +0 -143
  190. package/src/utils/list-item-flatten.ts +0 -113
  191. package/src/utils/position-only-model.ts +0 -115
  192. package/src/utils/realized-slot-store.ts +0 -126
@@ -1,28 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,111 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-resolver.js","sourceRoot":"","sources":["../../src/utils/item-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,32 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,88 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"list-item-flatten.js","sourceRoot":"","sources":["../../src/utils/list-item-flatten.ts"],"names":[],"mappings":"AA2BA;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAO,KAAmC,EAAiB,EAAE;IACxF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,UAAU,CAAC;QAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,GAAG,IAAI,CAAC;IAChF,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;AACrC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAO,KAAmC,EAAU,EAAE;IACrF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IACnC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,IAAI,GAAG,CAAC,IAAsB,EAAQ,EAAE;QAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5E,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC,CAAC;IACF,IAAI,CAAC,KAAK,CAAC,CAAC;IACZ,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAO,IAAoB,EAAoB,EAAE;IAC7E,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;IAChF,CAAC;IACD,OAAO;QACH,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,KAAK;QACxC,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI;QAC3C,aAAa,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI;KAC5C,CAAC;AACN,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAO,IAAoB,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAErH,MAAM,YAAY,GAAG,CAAO,IAAoB,EAAE,MAA2B,EAAE,eAAwB,EAAQ,EAAE;IAC7G,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IACvC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;QAChB,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,QAAQ,EAAE,IAAI,CAAC,OAAO,KAAK,IAAI;QAC/B,WAAW,EAAE,WAAW,CAAC,IAAI,CAAC;QAC9B,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE;QAC7B,QAAQ,EAAE,gBAAgB,CAAC,IAAI,CAAC;KACnC,CAAC,CAAC;IACH,IAAI,eAAe,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;YAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;IACpF,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC5B,KAAmC,EACnC,mBAA4B,EACT,EAAE;IACrB,MAAM,MAAM,GAAwB;QAChC,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,YAAY,EAAE,IAAI,GAAG,EAAE;QACvB,MAAM,EAAE,KAAK;QACb,WAAW,EAAE,KAAK;KACrB,CAAC;IACF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACvC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC9B,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ;oBAAE,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACzE,CAAC;YACD,SAAS;QACb,CAAC;QACD,IAAI,WAAW,CAAC,IAAI,CAAC;YAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;QAC5C,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC"}
@@ -1,10 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,83 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"position-only-model.js","sourceRoot":"","sources":["../../src/utils/position-only-model.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,103 +0,0 @@
1
- let nextKey = 0;
2
- export class RealizedSlotStore {
3
- entries = new Map();
4
- published = new Map();
5
- setListeners = new Set();
6
- positionListeners = new Map();
7
- positionFlushers = new Map();
8
- keys = new WeakMap();
9
- snapshot = [];
10
- subscribeSet = (onChange) => {
11
- this.setListeners.add(onChange);
12
- return () => {
13
- this.setListeners.delete(onChange);
14
- };
15
- };
16
- getSlotsSnapshot = () => this.snapshot;
17
- subscribePosition = (container, onChange) => {
18
- let listeners = this.positionListeners.get(container);
19
- if (listeners === undefined) {
20
- listeners = new Set();
21
- this.positionListeners.set(container, listeners);
22
- }
23
- listeners.add(onChange);
24
- return () => {
25
- const current = this.positionListeners.get(container);
26
- if (current === undefined)
27
- return;
28
- current.delete(onChange);
29
- if (current.size === 0)
30
- this.positionListeners.delete(container);
31
- };
32
- };
33
- getPosition = (container) => {
34
- let entry = this.published.get(container);
35
- if (entry === undefined) {
36
- entry = { container, position: -1, treeRow: null, item: null };
37
- this.published.set(container, entry);
38
- }
39
- return entry;
40
- };
41
- keyFor = (container) => {
42
- const existing = this.keys.get(container);
43
- if (existing !== undefined)
44
- return existing;
45
- const key = `slot-${nextKey++}`;
46
- this.keys.set(container, key);
47
- return key;
48
- };
49
- addContainer = (container) => {
50
- if (this.entries.has(container))
51
- return;
52
- this.entries.set(container, { container, position: -1, treeRow: null, item: null });
53
- this.notifySet();
54
- };
55
- bind = (container, position, treeRow, item) => {
56
- if (!this.entries.has(container)) {
57
- this.entries.set(container, { container, position, treeRow, item });
58
- this.notifySet();
59
- return;
60
- }
61
- this.entries.set(container, { container, position, treeRow, item });
62
- this.notifyPosition(container);
63
- };
64
- unbind = (container) => {
65
- if (!this.entries.has(container))
66
- return;
67
- this.entries.set(container, { container, position: -1, treeRow: null, item: null });
68
- this.notifyPosition(container);
69
- };
70
- removeContainer = (container) => {
71
- if (!this.entries.delete(container))
72
- return;
73
- this.published.delete(container);
74
- this.positionFlushers.delete(container);
75
- this.notifySet();
76
- };
77
- flushSet = () => {
78
- this.snapshot = [...this.entries.keys()];
79
- for (const listener of [...this.setListeners])
80
- listener();
81
- };
82
- notifySet() {
83
- this.flushSet();
84
- }
85
- notifyPosition(container) {
86
- let flush = this.positionFlushers.get(container);
87
- if (flush === undefined) {
88
- flush = () => {
89
- const live = this.entries.get(container);
90
- if (live !== undefined)
91
- this.published.set(container, live);
92
- const listeners = this.positionListeners.get(container);
93
- if (listeners === undefined)
94
- return;
95
- for (const listener of [...listeners])
96
- listener();
97
- };
98
- this.positionFlushers.set(container, flush);
99
- }
100
- flush();
101
- }
102
- }
103
- //# sourceMappingURL=realized-slot-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"realized-slot-store.js","sourceRoot":"","sources":["../../src/utils/realized-slot-store.ts"],"names":[],"mappings":"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"}