@gtkx/components 1.0.0-rc.1 → 1.0.0-rc.3

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 (220) hide show
  1. package/dist/adw/combo-row.d.ts +11 -0
  2. package/dist/adw/combo-row.d.ts.map +1 -0
  3. package/dist/adw/combo-row.js +14 -0
  4. package/dist/adw/combo-row.js.map +1 -0
  5. package/dist/adw/index.d.ts +4 -0
  6. package/dist/adw/index.d.ts.map +1 -0
  7. package/dist/adw/index.js +3 -0
  8. package/dist/adw/index.js.map +1 -0
  9. package/dist/adw/toast.d.ts +10 -0
  10. package/dist/adw/toast.d.ts.map +1 -0
  11. package/dist/adw/toast.js +51 -0
  12. package/dist/adw/toast.js.map +1 -0
  13. package/dist/adw/types.d.ts +35 -0
  14. package/dist/adw/types.d.ts.map +1 -0
  15. package/dist/adw/types.js +2 -0
  16. package/dist/adw/types.js.map +1 -0
  17. package/dist/column-view.d.ts +7 -29
  18. package/dist/column-view.d.ts.map +1 -1
  19. package/dist/column-view.js +98 -70
  20. package/dist/column-view.js.map +1 -1
  21. package/dist/drop-down.d.ts +7 -28
  22. package/dist/drop-down.d.ts.map +1 -1
  23. package/dist/drop-down.js +10 -86
  24. package/dist/drop-down.js.map +1 -1
  25. package/dist/grid-view.d.ts +6 -16
  26. package/dist/grid-view.d.ts.map +1 -1
  27. package/dist/grid-view.js +25 -33
  28. package/dist/grid-view.js.map +1 -1
  29. package/dist/index.d.ts +6 -12
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +1 -6
  32. package/dist/index.js.map +1 -1
  33. package/dist/internal/cells.d.ts +50 -0
  34. package/dist/internal/cells.d.ts.map +1 -0
  35. package/dist/internal/cells.js +185 -0
  36. package/dist/internal/cells.js.map +1 -0
  37. package/dist/internal/collection-index.d.ts +21 -0
  38. package/dist/internal/collection-index.d.ts.map +1 -0
  39. package/dist/internal/collection-index.js +106 -0
  40. package/dist/internal/collection-index.js.map +1 -0
  41. package/dist/internal/collection-model.d.ts +12 -0
  42. package/dist/internal/collection-model.d.ts.map +1 -0
  43. package/dist/internal/collection-model.js +164 -0
  44. package/dist/internal/collection-model.js.map +1 -0
  45. package/dist/internal/collection.d.ts +18 -0
  46. package/dist/internal/collection.d.ts.map +1 -0
  47. package/dist/internal/collection.js +64 -0
  48. package/dist/internal/collection.js.map +1 -0
  49. package/dist/internal/drop-down.d.ts +16 -0
  50. package/dist/internal/drop-down.d.ts.map +1 -0
  51. package/dist/internal/drop-down.js +110 -0
  52. package/dist/internal/drop-down.js.map +1 -0
  53. package/dist/internal/expansion.d.ts +9 -0
  54. package/dist/internal/expansion.d.ts.map +1 -0
  55. package/dist/internal/expansion.js +74 -0
  56. package/dist/internal/expansion.js.map +1 -0
  57. package/dist/internal/selection.d.ts +13 -0
  58. package/dist/internal/selection.d.ts.map +1 -0
  59. package/dist/internal/selection.js +100 -0
  60. package/dist/internal/selection.js.map +1 -0
  61. package/dist/internal/use-collection.d.ts +17 -0
  62. package/dist/internal/use-collection.d.ts.map +1 -0
  63. package/dist/internal/use-collection.js +34 -0
  64. package/dist/internal/use-collection.js.map +1 -0
  65. package/dist/internal/use-widget-ref.d.ts +4 -0
  66. package/dist/internal/use-widget-ref.d.ts.map +1 -0
  67. package/dist/internal/use-widget-ref.js +8 -0
  68. package/dist/internal/use-widget-ref.js.map +1 -0
  69. package/dist/list-view.d.ts +5 -20
  70. package/dist/list-view.d.ts.map +1 -1
  71. package/dist/list-view.js +32 -53
  72. package/dist/list-view.js.map +1 -1
  73. package/dist/size-group.d.ts +8 -16
  74. package/dist/size-group.d.ts.map +1 -1
  75. package/dist/size-group.js +35 -51
  76. package/dist/size-group.js.map +1 -1
  77. package/dist/types.d.ts +98 -27
  78. package/dist/types.d.ts.map +1 -1
  79. package/dist/types.js.map +1 -1
  80. package/package.json +17 -6
  81. package/src/adw/combo-row.tsx +20 -0
  82. package/src/adw/index.ts +9 -0
  83. package/src/adw/toast.tsx +74 -0
  84. package/src/adw/types.ts +45 -0
  85. package/src/column-view.tsx +176 -160
  86. package/src/drop-down.tsx +12 -185
  87. package/src/grid-view.tsx +29 -73
  88. package/src/index.ts +18 -26
  89. package/src/internal/cells.tsx +345 -0
  90. package/src/internal/collection-index.ts +168 -0
  91. package/src/internal/collection-model.ts +246 -0
  92. package/src/internal/collection.ts +104 -0
  93. package/src/internal/drop-down.tsx +186 -0
  94. package/src/internal/expansion.ts +122 -0
  95. package/src/internal/selection.tsx +162 -0
  96. package/src/internal/use-collection.tsx +57 -0
  97. package/src/internal/use-widget-ref.ts +11 -0
  98. package/src/list-view.tsx +43 -139
  99. package/src/size-group.tsx +63 -82
  100. package/src/types.ts +158 -28
  101. package/dist/cell.d.ts +0 -30
  102. package/dist/cell.d.ts.map +0 -1
  103. package/dist/cell.js +0 -45
  104. package/dist/cell.js.map +0 -1
  105. package/dist/column-view-column.d.ts +0 -27
  106. package/dist/column-view-column.d.ts.map +0 -1
  107. package/dist/column-view-column.js +0 -30
  108. package/dist/column-view-column.js.map +0 -1
  109. package/dist/constraint-layout-apply.d.ts +0 -55
  110. package/dist/constraint-layout-apply.d.ts.map +0 -1
  111. package/dist/constraint-layout-apply.js +0 -107
  112. package/dist/constraint-layout-apply.js.map +0 -1
  113. package/dist/constraint-layout.d.ts +0 -20
  114. package/dist/constraint-layout.d.ts.map +0 -1
  115. package/dist/constraint-layout.js +0 -88
  116. package/dist/constraint-layout.js.map +0 -1
  117. package/dist/fixed.d.ts +0 -26
  118. package/dist/fixed.d.ts.map +0 -1
  119. package/dist/fixed.js +0 -40
  120. package/dist/fixed.js.map +0 -1
  121. package/dist/grid.d.ts +0 -27
  122. package/dist/grid.d.ts.map +0 -1
  123. package/dist/grid.js +0 -48
  124. package/dist/grid.js.map +0 -1
  125. package/dist/hooks/use-cell-containers.d.ts +0 -18
  126. package/dist/hooks/use-cell-containers.d.ts.map +0 -1
  127. package/dist/hooks/use-cell-containers.js +0 -67
  128. package/dist/hooks/use-cell-containers.js.map +0 -1
  129. package/dist/hooks/use-collection-model.d.ts +0 -26
  130. package/dist/hooks/use-collection-model.d.ts.map +0 -1
  131. package/dist/hooks/use-collection-model.js +0 -35
  132. package/dist/hooks/use-collection-model.js.map +0 -1
  133. package/dist/hooks/use-collection-widget.d.ts +0 -28
  134. package/dist/hooks/use-collection-widget.d.ts.map +0 -1
  135. package/dist/hooks/use-collection-widget.js +0 -21
  136. package/dist/hooks/use-collection-widget.js.map +0 -1
  137. package/dist/hooks/use-drop-down-selection.d.ts +0 -16
  138. package/dist/hooks/use-drop-down-selection.d.ts.map +0 -1
  139. package/dist/hooks/use-drop-down-selection.js +0 -35
  140. package/dist/hooks/use-drop-down-selection.js.map +0 -1
  141. package/dist/hooks/use-expansion-model.d.ts +0 -12
  142. package/dist/hooks/use-expansion-model.d.ts.map +0 -1
  143. package/dist/hooks/use-expansion-model.js +0 -71
  144. package/dist/hooks/use-expansion-model.js.map +0 -1
  145. package/dist/hooks/use-header-menu.d.ts +0 -4
  146. package/dist/hooks/use-header-menu.d.ts.map +0 -1
  147. package/dist/hooks/use-header-menu.js +0 -20
  148. package/dist/hooks/use-header-menu.js.map +0 -1
  149. package/dist/hooks/use-installed-model.d.ts +0 -4
  150. package/dist/hooks/use-installed-model.d.ts.map +0 -1
  151. package/dist/hooks/use-installed-model.js +0 -15
  152. package/dist/hooks/use-installed-model.js.map +0 -1
  153. package/dist/hooks/use-list-model.d.ts +0 -19
  154. package/dist/hooks/use-list-model.d.ts.map +0 -1
  155. package/dist/hooks/use-list-model.js +0 -97
  156. package/dist/hooks/use-list-model.js.map +0 -1
  157. package/dist/hooks/use-placed-child.d.ts +0 -18
  158. package/dist/hooks/use-placed-child.d.ts.map +0 -1
  159. package/dist/hooks/use-placed-child.js +0 -47
  160. package/dist/hooks/use-placed-child.js.map +0 -1
  161. package/dist/hooks/use-selection-model.d.ts +0 -13
  162. package/dist/hooks/use-selection-model.d.ts.map +0 -1
  163. package/dist/hooks/use-selection-model.js +0 -103
  164. package/dist/hooks/use-selection-model.js.map +0 -1
  165. package/dist/hooks/use-sort-handler.d.ts +0 -17
  166. package/dist/hooks/use-sort-handler.d.ts.map +0 -1
  167. package/dist/hooks/use-sort-handler.js +0 -87
  168. package/dist/hooks/use-sort-handler.js.map +0 -1
  169. package/dist/menu-items.d.ts +0 -5
  170. package/dist/menu-items.d.ts.map +0 -1
  171. package/dist/menu-items.js +0 -48
  172. package/dist/menu-items.js.map +0 -1
  173. package/dist/menu.d.ts +0 -14
  174. package/dist/menu.d.ts.map +0 -1
  175. package/dist/menu.js +0 -24
  176. package/dist/menu.js.map +0 -1
  177. package/dist/overlay.d.ts +0 -24
  178. package/dist/overlay.d.ts.map +0 -1
  179. package/dist/overlay.js +0 -49
  180. package/dist/overlay.js.map +0 -1
  181. package/dist/utils/cell-container-store.d.ts +0 -28
  182. package/dist/utils/cell-container-store.d.ts.map +0 -1
  183. package/dist/utils/cell-container-store.js +0 -98
  184. package/dist/utils/cell-container-store.js.map +0 -1
  185. package/dist/utils/item-models.d.ts +0 -10
  186. package/dist/utils/item-models.d.ts.map +0 -1
  187. package/dist/utils/item-models.js +0 -82
  188. package/dist/utils/item-models.js.map +0 -1
  189. package/dist/utils/item-resolver.d.ts +0 -25
  190. package/dist/utils/item-resolver.d.ts.map +0 -1
  191. package/dist/utils/item-resolver.js +0 -102
  192. package/dist/utils/item-resolver.js.map +0 -1
  193. package/dist/utils/list-item-flatten.d.ts +0 -24
  194. package/dist/utils/list-item-flatten.d.ts.map +0 -1
  195. package/dist/utils/list-item-flatten.js +0 -68
  196. package/dist/utils/list-item-flatten.js.map +0 -1
  197. package/src/cell.tsx +0 -144
  198. package/src/column-view-column.tsx +0 -82
  199. package/src/constraint-layout-apply.ts +0 -173
  200. package/src/constraint-layout.tsx +0 -135
  201. package/src/fixed.tsx +0 -86
  202. package/src/grid.tsx +0 -88
  203. package/src/hooks/use-cell-containers.ts +0 -93
  204. package/src/hooks/use-collection-model.ts +0 -60
  205. package/src/hooks/use-collection-widget.ts +0 -47
  206. package/src/hooks/use-drop-down-selection.ts +0 -52
  207. package/src/hooks/use-expansion-model.ts +0 -82
  208. package/src/hooks/use-header-menu.ts +0 -34
  209. package/src/hooks/use-installed-model.ts +0 -20
  210. package/src/hooks/use-list-model.ts +0 -161
  211. package/src/hooks/use-placed-child.ts +0 -79
  212. package/src/hooks/use-selection-model.ts +0 -114
  213. package/src/hooks/use-sort-handler.ts +0 -107
  214. package/src/menu-items.ts +0 -48
  215. package/src/menu.tsx +0 -32
  216. package/src/overlay.tsx +0 -88
  217. package/src/utils/cell-container-store.ts +0 -114
  218. package/src/utils/item-models.ts +0 -113
  219. package/src/utils/item-resolver.ts +0 -138
  220. package/src/utils/list-item-flatten.ts +0 -90
@@ -1,87 +0,0 @@
1
- import * as Gtk from "@gtkx/gi/gtk";
2
- import { resolveObjectProp } from "@gtkx/react/internal";
3
- import { useLayoutEffect, useRef } from "react";
4
- const neutralSorter = () => Gtk.CustomSorter.new(() => 0);
5
- const ensureColumnSorters = (columns, activeId) => {
6
- for (const registration of columns) {
7
- const wantsSorter = registration.sortable || registration.id === activeId;
8
- const hasSorter = registration.column.getSorter() !== null;
9
- if (wantsSorter && !hasSorter) {
10
- registration.column.setSorter(neutralSorter());
11
- }
12
- else if (!wantsSorter && hasSorter) {
13
- registration.column.setSorter(null);
14
- }
15
- }
16
- };
17
- const columnForId = (columns, id) => {
18
- if (id === null)
19
- return null;
20
- for (const registration of columns) {
21
- if (registration.id === id)
22
- return registration.column;
23
- }
24
- return null;
25
- };
26
- const idForColumn = (columns, column) => {
27
- if (column === null)
28
- return null;
29
- for (const registration of columns) {
30
- if (registration.column === column)
31
- return registration.id;
32
- }
33
- return column.getId();
34
- };
35
- const primarySort = (sorter) => sorter instanceof Gtk.ColumnViewSorter
36
- ? { column: sorter.getPrimarySortColumn(), order: sorter.getPrimarySortOrder() }
37
- : { column: null, order: Gtk.SortType.ASCENDING };
38
- const disconnectSorter = (subscription) => {
39
- if (subscription.sorter !== null && subscription.handler !== null) {
40
- subscription.sorter.off("changed", subscription.handler);
41
- }
42
- subscription.sorter = null;
43
- subscription.handler = null;
44
- };
45
- export const useSortHandler = (options) => {
46
- const { columnView, sortColumn, sortOrder, onSortChanged, columns } = options;
47
- const activeId = sortColumn ?? null;
48
- const order = sortOrder ?? Gtk.SortType.ASCENDING;
49
- const onChangedRef = useRef(onSortChanged);
50
- onChangedRef.current = onSortChanged;
51
- const columnsRef = useRef(columns);
52
- columnsRef.current = columns;
53
- const suppressRef = useRef(false);
54
- const subscriptionRef = useRef({ sorter: null, handler: null });
55
- const resubscribe = (sorter) => {
56
- const subscription = subscriptionRef.current;
57
- if (sorter === subscription.sorter)
58
- return;
59
- disconnectSorter(subscription);
60
- if (sorter === null)
61
- return;
62
- const handler = () => {
63
- if (suppressRef.current)
64
- return;
65
- const callback = onChangedRef.current;
66
- if (!callback)
67
- return;
68
- const { column, order: primaryOrder } = primarySort(sorter);
69
- callback(idForColumn(columnsRef.current, column), primaryOrder);
70
- };
71
- subscription.sorter = sorter;
72
- subscription.handler = handler;
73
- sorter.on("changed", handler);
74
- };
75
- useLayoutEffect(() => {
76
- const view = resolveObjectProp(columnView);
77
- if (view === null)
78
- return;
79
- ensureColumnSorters(columns, activeId);
80
- suppressRef.current = true;
81
- view.sortByColumn(columnForId(columns, activeId), order);
82
- suppressRef.current = false;
83
- resubscribe(view.getSorter());
84
- });
85
- useLayoutEffect(() => () => disconnectSorter(subscriptionRef.current), []);
86
- };
87
- //# sourceMappingURL=use-sort-handler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use-sort-handler.js","sourceRoot":"","sources":["../../src/hooks/use-sort-handler.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gtk from \"@gtkx/gi/gtk\";\nimport { type ObjectProp, resolveObjectProp } from \"@gtkx/react/internal\";\nimport { useLayoutEffect, useRef } from \"react\";\n\nexport type ColumnRegistration = {\n id: string;\n column: Gtk.ColumnViewColumn;\n sortable: boolean;\n};\n\ntype SortHandlerOptions = {\n columnView: ObjectProp<Gtk.ColumnView>;\n sortColumn: string | null | undefined;\n sortOrder: Gtk.SortType | null | undefined;\n onSortChanged: ((column: string | null, order: Gtk.SortType) => void) | null | undefined;\n columns: ColumnRegistration[];\n};\n\nconst neutralSorter = (): Gtk.CustomSorter => Gtk.CustomSorter.new(() => 0);\n\nconst ensureColumnSorters = (columns: ColumnRegistration[], activeId: string | null): void => {\n for (const registration of columns) {\n const wantsSorter = registration.sortable || registration.id === activeId;\n const hasSorter = registration.column.getSorter() !== null;\n if (wantsSorter && !hasSorter) {\n registration.column.setSorter(neutralSorter());\n } else if (!wantsSorter && hasSorter) {\n registration.column.setSorter(null);\n }\n }\n};\n\nconst columnForId = (columns: ColumnRegistration[], id: string | null): Gtk.ColumnViewColumn | null => {\n if (id === null) return null;\n for (const registration of columns) {\n if (registration.id === id) return registration.column;\n }\n return null;\n};\n\nconst idForColumn = (columns: ColumnRegistration[], column: Gtk.ColumnViewColumn | null): string | null => {\n if (column === null) return null;\n for (const registration of columns) {\n if (registration.column === column) return registration.id;\n }\n return column.getId();\n};\n\nconst primarySort = (sorter: Gtk.Sorter): { column: Gtk.ColumnViewColumn | null; order: Gtk.SortType } =>\n sorter instanceof Gtk.ColumnViewSorter\n ? { column: sorter.getPrimarySortColumn(), order: sorter.getPrimarySortOrder() }\n : { column: null, order: Gtk.SortType.ASCENDING };\n\ntype SorterSubscription = {\n sorter: Gtk.Sorter | null;\n handler: ((change: Gtk.SorterChange) => void) | null;\n};\n\nconst disconnectSorter = (subscription: SorterSubscription): void => {\n if (subscription.sorter !== null && subscription.handler !== null) {\n subscription.sorter.off(\"changed\", subscription.handler);\n }\n subscription.sorter = null;\n subscription.handler = null;\n};\n\nexport const useSortHandler = (options: SortHandlerOptions): void => {\n const { columnView, sortColumn, sortOrder, onSortChanged, columns } = options;\n const activeId = sortColumn ?? null;\n const order = sortOrder ?? Gtk.SortType.ASCENDING;\n\n const onChangedRef = useRef(onSortChanged);\n onChangedRef.current = onSortChanged;\n const columnsRef = useRef(columns);\n columnsRef.current = columns;\n const suppressRef = useRef(false);\n const subscriptionRef = useRef<SorterSubscription>({ sorter: null, handler: null });\n\n const resubscribe = (sorter: Gtk.Sorter | null): void => {\n const subscription = subscriptionRef.current;\n if (sorter === subscription.sorter) return;\n disconnectSorter(subscription);\n if (sorter === null) return;\n const handler = (): void => {\n if (suppressRef.current) return;\n const callback = onChangedRef.current;\n if (!callback) return;\n const { column, order: primaryOrder } = primarySort(sorter);\n callback(idForColumn(columnsRef.current, column), primaryOrder);\n };\n subscription.sorter = sorter;\n subscription.handler = handler;\n sorter.on(\"changed\", handler);\n };\n\n useLayoutEffect(() => {\n const view = resolveObjectProp(columnView);\n if (view === null) return;\n ensureColumnSorters(columns, activeId);\n suppressRef.current = true;\n view.sortByColumn(columnForId(columns, activeId), order);\n suppressRef.current = false;\n resubscribe(view.getSorter());\n });\n\n useLayoutEffect(() => () => disconnectSorter(subscriptionRef.current), []);\n};\n"]}
@@ -1,5 +0,0 @@
1
- import * as Gio from "@gtkx/gi/gio";
2
- import type { MenuEntry } from "./types.js";
3
- export declare const applyMenuItems: (menu: Gio.Menu, entries: MenuEntry[] | null) => void;
4
- export declare const menuItemsEqual: (a: MenuEntry[] | null, b: MenuEntry[] | null) => boolean;
5
- //# sourceMappingURL=menu-items.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-items.d.ts","sourceRoot":"","sources":["../src/menu-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAyB5C,eAAO,MAAM,cAAc,SAAU,GAAG,CAAC,IAAI,WAAW,SAAS,EAAE,GAAG,IAAI,KAAG,IAG5E,CAAC;AAcF,eAAO,MAAM,cAAc,MAAO,SAAS,EAAE,GAAG,IAAI,KAAK,SAAS,EAAE,GAAG,IAAI,KAAG,OAI7E,CAAC"}
@@ -1,48 +0,0 @@
1
- import * as Gio from "@gtkx/gi/gio";
2
- const buildMenuModel = (entries) => {
3
- const menu = new Gio.Menu();
4
- appendEntries(menu, entries);
5
- return menu;
6
- };
7
- const appendEntries = (menu, entries) => {
8
- for (const entry of entries) {
9
- if (entry.section !== undefined) {
10
- menu.appendSection(entry.label ?? null, buildMenuModel(entry.section));
11
- continue;
12
- }
13
- if (entry.submenu !== undefined) {
14
- menu.appendSubmenu(entry.label ?? null, buildMenuModel(entry.submenu));
15
- continue;
16
- }
17
- const item = new Gio.MenuItem();
18
- if (entry.label !== undefined)
19
- item.setLabel(entry.label);
20
- if (entry.action !== undefined)
21
- item.setDetailedAction(entry.action);
22
- menu.appendItem(item);
23
- }
24
- };
25
- export const applyMenuItems = (menu, entries) => {
26
- menu.removeAll();
27
- if (entries)
28
- appendEntries(menu, entries);
29
- };
30
- const entryEqual = (a, b) => a.label === b.label &&
31
- a.action === b.action &&
32
- entryListEqual(a.submenu, b.submenu) &&
33
- entryListEqual(a.section, b.section);
34
- const entryListEqual = (a, b) => {
35
- if (a === b)
36
- return true;
37
- if (a === undefined || b === undefined)
38
- return false;
39
- return a.length === b.length && a.every((entry, index) => entryEqual(entry, b[index]));
40
- };
41
- export const menuItemsEqual = (a, b) => {
42
- if (a === b)
43
- return true;
44
- if (a === null || b === null)
45
- return false;
46
- return entryListEqual(a, b);
47
- };
48
- //# sourceMappingURL=menu-items.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu-items.js","sourceRoot":"","sources":["../src/menu-items.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AAGpC,MAAM,cAAc,GAAG,CAAC,OAAoB,EAAY,EAAE;IACtD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IAC5B,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,IAAc,EAAE,OAAoB,EAAQ,EAAE;IACjE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,SAAS;QACb,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,EAAE,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;YACvE,SAAS;QACb,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;YAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;AACL,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,IAAc,EAAE,OAA2B,EAAQ,EAAE;IAChF,IAAI,CAAC,SAAS,EAAE,CAAC;IACjB,IAAI,OAAO;QAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,UAAU,GAAG,CAAC,CAAY,EAAE,CAAY,EAAW,EAAE,CACvD,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;IACnB,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;IACrB,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC;IACpC,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;AAEzC,MAAM,cAAc,GAAG,CAAC,CAA0B,EAAE,CAA0B,EAAW,EAAE;IACvF,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACrD,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAc,CAAC,CAAC,CAAC;AACxG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAqB,EAAE,CAAqB,EAAW,EAAE;IACpF,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC3C,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAChC,CAAC,CAAC","sourcesContent":["import * as Gio from \"@gtkx/gi/gio\";\nimport type { MenuEntry } from \"./types.js\";\n\nconst buildMenuModel = (entries: MenuEntry[]): Gio.Menu => {\n const menu = new Gio.Menu();\n appendEntries(menu, entries);\n return menu;\n};\n\nconst appendEntries = (menu: Gio.Menu, entries: MenuEntry[]): void => {\n for (const entry of entries) {\n if (entry.section !== undefined) {\n menu.appendSection(entry.label ?? null, buildMenuModel(entry.section));\n continue;\n }\n if (entry.submenu !== undefined) {\n menu.appendSubmenu(entry.label ?? null, buildMenuModel(entry.submenu));\n continue;\n }\n const item = new Gio.MenuItem();\n if (entry.label !== undefined) item.setLabel(entry.label);\n if (entry.action !== undefined) item.setDetailedAction(entry.action);\n menu.appendItem(item);\n }\n};\n\nexport const applyMenuItems = (menu: Gio.Menu, entries: MenuEntry[] | null): void => {\n menu.removeAll();\n if (entries) appendEntries(menu, entries);\n};\n\nconst entryEqual = (a: MenuEntry, b: MenuEntry): boolean =>\n a.label === b.label &&\n a.action === b.action &&\n entryListEqual(a.submenu, b.submenu) &&\n entryListEqual(a.section, b.section);\n\nconst entryListEqual = (a: MenuEntry[] | undefined, b: MenuEntry[] | undefined): boolean => {\n if (a === b) return true;\n if (a === undefined || b === undefined) return false;\n return a.length === b.length && a.every((entry, index) => entryEqual(entry, b[index] as MenuEntry));\n};\n\nexport const menuItemsEqual = (a: MenuEntry[] | null, b: MenuEntry[] | null): boolean => {\n if (a === b) return true;\n if (a === null || b === null) return false;\n return entryListEqual(a, b);\n};\n"]}
package/dist/menu.d.ts DELETED
@@ -1,14 +0,0 @@
1
- import type * as Gio from "@gtkx/gi/gio";
2
- import { type GMenuProps } from "@gtkx/jsx/gio";
3
- import { type ReactNode, type Ref } from "react";
4
- import type { MenuEntry } from "./types.js";
5
- export type MenuItemsProps = {
6
- items?: MenuEntry[] | null | undefined;
7
- };
8
- /** Props for {@link Menu}, combining Gio.Menu props with a declarative items array. */
9
- export type MenuProps = Omit<GMenuProps, keyof MenuItemsProps> & MenuItemsProps & {
10
- ref?: Ref<Gio.Menu | null>;
11
- };
12
- /** Builds a Gio.Menu model from a declarative array of {@link MenuEntry} items. */
13
- export declare const Menu: (props: MenuProps) => ReactNode;
14
- //# sourceMappingURL=menu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../src/menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAEvD,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,GAAG,EAA2B,MAAM,OAAO,CAAC;AAE1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,MAAM,cAAc,GAAG;IACzB,KAAK,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1C,CAAC;AAEF,uFAAuF;AACvF,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,cAAc,CAAC,GAAG,cAAc,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAEjH,mFAAmF;AACnF,eAAO,MAAM,IAAI,UAAW,SAAS,KAAG,SAgBvC,CAAC"}
package/dist/menu.js DELETED
@@ -1,24 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import { GMenu } from "@gtkx/jsx/gio";
3
- import { useMergeRefs } from "@gtkx/react/internal";
4
- import { useLayoutEffect, useRef } from "react";
5
- import { applyMenuItems, menuItemsEqual } from "./menu-items.js";
6
- /** Builds a Gio.Menu model from a declarative array of {@link MenuEntry} items. */
7
- export const Menu = (props) => {
8
- const { items, ref, ...rest } = props;
9
- const menuRef = useRef(null);
10
- const mergedRef = useMergeRefs(ref, menuRef);
11
- const appliedRef = useRef(null);
12
- useLayoutEffect(() => {
13
- const menu = menuRef.current;
14
- if (!menu)
15
- return;
16
- const entries = items ?? null;
17
- if (menuItemsEqual(appliedRef.current, entries))
18
- return;
19
- appliedRef.current = entries;
20
- applyMenuItems(menu, entries);
21
- });
22
- return _jsx(GMenu, { ...rest, ref: mergedRef });
23
- };
24
- //# sourceMappingURL=menu.js.map
package/dist/menu.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.js","sourceRoot":"","sources":["../src/menu.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,KAAK,EAAmB,MAAM,eAAe,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAA4B,eAAe,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAUjE,mFAAmF;AACnF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,KAAgB,EAAa,EAAE;IAChD,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,KAAK,CAAC;IACtC,MAAM,OAAO,GAAG,MAAM,CAAkB,IAAI,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,CAAqB,IAAI,CAAC,CAAC;IAEpD,eAAe,CAAC,GAAG,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,MAAM,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC;QAC9B,IAAI,cAAc,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;YAAE,OAAO;QACxD,UAAU,CAAC,OAAO,GAAG,OAAO,CAAC;QAC7B,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClC,CAAC,CAAC,CAAC;IAEH,OAAO,KAAC,KAAK,OAAK,IAAI,EAAE,GAAG,EAAE,SAAS,GAAI,CAAC;AAC/C,CAAC,CAAC","sourcesContent":["import type * as Gio from \"@gtkx/gi/gio\";\nimport { GMenu, type GMenuProps } from \"@gtkx/jsx/gio\";\nimport { useMergeRefs } from \"@gtkx/react/internal\";\nimport { type ReactNode, type Ref, useLayoutEffect, useRef } from \"react\";\nimport { applyMenuItems, menuItemsEqual } from \"./menu-items.js\";\nimport type { MenuEntry } from \"./types.js\";\n\nexport type MenuItemsProps = {\n items?: MenuEntry[] | null | undefined;\n};\n\n/** Props for {@link Menu}, combining Gio.Menu props with a declarative items array. */\nexport type MenuProps = Omit<GMenuProps, keyof MenuItemsProps> & MenuItemsProps & { ref?: Ref<Gio.Menu | null> };\n\n/** Builds a Gio.Menu model from a declarative array of {@link MenuEntry} items. */\nexport const Menu = (props: MenuProps): ReactNode => {\n const { items, ref, ...rest } = props;\n const menuRef = useRef<Gio.Menu | null>(null);\n const mergedRef = useMergeRefs(ref, menuRef);\n const appliedRef = useRef<MenuEntry[] | null>(null);\n\n useLayoutEffect(() => {\n const menu = menuRef.current;\n if (!menu) return;\n const entries = items ?? null;\n if (menuItemsEqual(appliedRef.current, entries)) return;\n appliedRef.current = entries;\n applyMenuItems(menu, entries);\n });\n\n return <GMenu {...rest} ref={mergedRef} />;\n};\n"]}
package/dist/overlay.d.ts DELETED
@@ -1,24 +0,0 @@
1
- import type * as Gtk from "@gtkx/gi/gtk";
2
- import { type GtkOverlayProps } from "@gtkx/jsx/gtk";
3
- import { type ElementType, type ReactNode, type Ref } from "react";
4
- import type { ChildProps } from "./types.js";
5
- /** Props for {@link Overlay}. */
6
- export type OverlayProps = GtkOverlayProps & {
7
- ref?: Ref<Gtk.Overlay | null>;
8
- };
9
- export type OverlayPlacementProps = {
10
- /** Whether this overlay contributes to the Overlay's measured size. */
11
- measure?: boolean | null | undefined;
12
- /** Whether the overlay is clipped to the main child's allocation. */
13
- clipOverlay?: boolean | null | undefined;
14
- };
15
- /** Adds a single widget as an overlay on top of an {@link Overlay}'s main child. */
16
- export type OverlayChildProps<C extends ElementType> = ChildProps<C, OverlayPlacementProps>;
17
- /**
18
- * Renders a Gtk.Overlay: a main child with one or more widgets stacked on top,
19
- * declared via {@link Overlay.Child}. Non-Child children form the main content.
20
- */
21
- export declare const Overlay: ((props: OverlayProps) => ReactNode) & {
22
- Child: <C extends ElementType>(props: OverlayChildProps<C>) => ReactNode;
23
- };
24
- //# sourceMappingURL=overlay.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.d.ts","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,EAAc,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAEjE,OAAO,EAAY,KAAK,WAAW,EAAkB,KAAK,SAAS,EAAE,KAAK,GAAG,EAAU,MAAM,OAAO,CAAC;AAErG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAM7C,iCAAiC;AACjC,MAAM,MAAM,YAAY,GAAG,eAAe,GAAG;IAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;CAAE,CAAC;AAE/E,MAAM,MAAM,qBAAqB,GAAG;IAChC,uEAAuE;IACvE,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;IACrC,qEAAqE;IACrE,WAAW,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;CAC5C,CAAC;AAEF,oFAAoF;AACpF,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,WAAW,IAAI,UAAU,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;AA0C5F;;;GAGG;AACH,eAAO,MAAM,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,YAAY,KAAK,SAAS,CAAC,GAAG;IACzD,KAAK,EAAE,CAAC,CAAC,SAAS,WAAW,EAAE,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC;CAkB5E,CAAC"}
package/dist/overlay.js DELETED
@@ -1,49 +0,0 @@
1
- import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { GtkOverlay } from "@gtkx/jsx/gtk";
3
- import { useMergeRefs } from "@gtkx/react/internal";
4
- import { Children, isValidElement, useRef } from "react";
5
- import { createParentContext, usePlacedChild } from "./hooks/use-placed-child.js";
6
- const { Context: OverlayContext, useParentRef: useOverlayRef } = createParentContext("<Overlay.Child> must be a child of <Overlay>");
7
- const placementOf = (props) => ({
8
- measure: props.measure ?? false,
9
- clipOverlay: props.clipOverlay ?? false,
10
- });
11
- const samePlacement = (a, b) => a.measure === b.measure && a.clipOverlay === b.clipOverlay;
12
- const OverlayChild = ({ component, measure, clipOverlay, ref, ...rest }) => {
13
- const overlayRef = useOverlayRef();
14
- const Component = component;
15
- return usePlacedChild({
16
- render: (placeRef) => _jsx(Component, { ...rest, ref: placeRef }),
17
- ref,
18
- placement: placementOf({ measure, clipOverlay }),
19
- samePlacement,
20
- place: (widget, placement) => {
21
- const overlay = overlayRef.current;
22
- if (!overlay)
23
- return;
24
- if (widget.getParent() !== overlay)
25
- overlay.addOverlay(widget);
26
- overlay.setMeasureOverlay(widget, placement.measure);
27
- overlay.setClipOverlay(widget, placement.clipOverlay);
28
- },
29
- release: (widget) => {
30
- const overlay = overlayRef.current;
31
- if (overlay && widget.getParent() === overlay)
32
- overlay.removeOverlay(widget);
33
- },
34
- });
35
- };
36
- const isOverlayChild = (node) => isValidElement(node) && node.type === OverlayChild;
37
- /**
38
- * Renders a Gtk.Overlay: a main child with one or more widgets stacked on top,
39
- * declared via {@link Overlay.Child}. Non-Child children form the main content.
40
- */
41
- export const Overlay = Object.assign(({ children, ref, ...rest }) => {
42
- const overlayRef = useRef(null);
43
- const mergedRef = useMergeRefs(ref, overlayRef);
44
- const items = Children.toArray(children);
45
- const overlays = items.filter(isOverlayChild);
46
- const base = items.filter((node) => !isOverlayChild(node));
47
- return (_jsxs(_Fragment, { children: [_jsx(GtkOverlay, { ...rest, ref: mergedRef, children: base }), _jsx(OverlayContext.Provider, { value: overlayRef, children: overlays })] }));
48
- }, { Child: OverlayChild });
49
- //# sourceMappingURL=overlay.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overlay.js","sourceRoot":"","sources":["../src/overlay.tsx"],"names":[],"mappings":"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","sourcesContent":["import type * as Gtk from \"@gtkx/gi/gtk\";\nimport { GtkOverlay, type GtkOverlayProps } from \"@gtkx/jsx/gtk\";\nimport { useMergeRefs } from \"@gtkx/react/internal\";\nimport { Children, type ElementType, isValidElement, type ReactNode, type Ref, useRef } from \"react\";\nimport { createParentContext, usePlacedChild } from \"./hooks/use-placed-child.js\";\nimport type { ChildProps } from \"./types.js\";\n\nconst { Context: OverlayContext, useParentRef: useOverlayRef } = createParentContext<Gtk.Overlay>(\n \"<Overlay.Child> must be a child of <Overlay>\",\n);\n\n/** Props for {@link Overlay}. */\nexport type OverlayProps = GtkOverlayProps & { ref?: Ref<Gtk.Overlay | null> };\n\nexport type OverlayPlacementProps = {\n /** Whether this overlay contributes to the Overlay's measured size. */\n measure?: boolean | null | undefined;\n /** Whether the overlay is clipped to the main child's allocation. */\n clipOverlay?: boolean | null | undefined;\n};\n\n/** Adds a single widget as an overlay on top of an {@link Overlay}'s main child. */\nexport type OverlayChildProps<C extends ElementType> = ChildProps<C, OverlayPlacementProps>;\n\ntype OverlayPlacement = { measure: boolean; clipOverlay: boolean };\n\nconst placementOf = (props: OverlayPlacementProps): OverlayPlacement => ({\n measure: props.measure ?? false,\n clipOverlay: props.clipOverlay ?? false,\n});\n\nconst samePlacement = (a: OverlayPlacement, b: OverlayPlacement): boolean =>\n a.measure === b.measure && a.clipOverlay === b.clipOverlay;\n\nconst OverlayChild = <C extends ElementType>({\n component,\n measure,\n clipOverlay,\n ref,\n ...rest\n}: OverlayChildProps<C>): ReactNode => {\n const overlayRef = useOverlayRef();\n const Component: ElementType = component;\n return usePlacedChild<Gtk.Widget, OverlayPlacement>({\n render: (placeRef) => <Component {...rest} ref={placeRef} />,\n ref,\n placement: placementOf({ measure, clipOverlay }),\n samePlacement,\n place: (widget, placement) => {\n const overlay = overlayRef.current;\n if (!overlay) return;\n if (widget.getParent() !== overlay) overlay.addOverlay(widget);\n overlay.setMeasureOverlay(widget, placement.measure);\n overlay.setClipOverlay(widget, placement.clipOverlay);\n },\n release: (widget) => {\n const overlay = overlayRef.current;\n if (overlay && widget.getParent() === overlay) overlay.removeOverlay(widget);\n },\n });\n};\n\nconst isOverlayChild = (node: ReactNode): boolean => isValidElement(node) && node.type === OverlayChild;\n\n/**\n * Renders a Gtk.Overlay: a main child with one or more widgets stacked on top,\n * declared via {@link Overlay.Child}. Non-Child children form the main content.\n */\nexport const Overlay: ((props: OverlayProps) => ReactNode) & {\n Child: <C extends ElementType>(props: OverlayChildProps<C>) => ReactNode;\n} = Object.assign(\n ({ children, ref, ...rest }: OverlayProps): ReactNode => {\n const overlayRef = useRef<Gtk.Overlay | null>(null);\n const mergedRef = useMergeRefs<Gtk.Overlay>(ref, overlayRef);\n const items = Children.toArray(children);\n const overlays = items.filter(isOverlayChild);\n const base = items.filter((node) => !isOverlayChild(node));\n return (\n <>\n <GtkOverlay {...rest} ref={mergedRef}>\n {base}\n </GtkOverlay>\n <OverlayContext.Provider value={overlayRef}>{overlays}</OverlayContext.Provider>\n </>\n );\n },\n { Child: OverlayChild },\n);\n"]}
@@ -1,28 +0,0 @@
1
- import type * as GObject from "@gtkx/gi/gobject";
2
- import type * as Gtk from "@gtkx/gi/gtk";
3
- export type CellEntry = {
4
- position: number;
5
- treeRow: Gtk.TreeListRow | null;
6
- };
7
- export declare class CellContainerStore {
8
- private entries;
9
- private published;
10
- private setListeners;
11
- private positionListeners;
12
- private positionFlushers;
13
- private keys;
14
- private snapshot;
15
- subscribeSet: (onChange: () => void) => (() => void);
16
- getContainersSnapshot: () => GObject.Object[];
17
- subscribePosition: (container: GObject.Object, onChange: () => void) => (() => void);
18
- getPosition: (container: GObject.Object) => CellEntry;
19
- keyFor: (container: GObject.Object) => string;
20
- addContainer: (container: GObject.Object) => void;
21
- bind: (container: GObject.Object, position: number, treeRow: Gtk.TreeListRow | null) => void;
22
- unbind: (container: GObject.Object) => void;
23
- removeContainer: (container: GObject.Object) => void;
24
- private flushSet;
25
- private notifySet;
26
- private notifyPosition;
27
- }
28
- //# sourceMappingURL=cell-container-store.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cell-container-store.d.ts","sourceRoot":"","sources":["../../src/utils/cell-container-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AAEzC,MAAM,MAAM,SAAS,GAAG;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC;CACnC,CAAC;AAIF,qBAAa,kBAAkB;IAC3B,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,aAAc,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAKjD;IAEF,qBAAqB,QAAO,OAAO,CAAC,MAAM,EAAE,CAAkB;IAE9D,iBAAiB,cAAe,OAAO,CAAC,MAAM,YAAY,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAajF;IAEF,WAAW,cAAe,OAAO,CAAC,MAAM,KAAG,SAAS,CAOlD;IAEF,MAAM,cAAe,OAAO,CAAC,MAAM,KAAG,MAAM,CAM1C;IAEF,YAAY,cAAe,OAAO,CAAC,MAAM,KAAG,IAAI,CAI9C;IAEF,IAAI,cAAe,OAAO,CAAC,MAAM,YAAY,MAAM,WAAW,GAAG,CAAC,WAAW,GAAG,IAAI,KAAG,IAAI,CAGzF;IAEF,MAAM,cAAe,OAAO,CAAC,MAAM,KAAG,IAAI,CAIxC;IAEF,eAAe,cAAe,OAAO,CAAC,MAAM,KAAG,IAAI,CAKjD;IAEF,OAAO,CAAC,QAAQ,CAGd;IAEF,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,cAAc;CAczB"}
@@ -1,98 +0,0 @@
1
- let nextKey = 0;
2
- export class CellContainerStore {
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
- getContainersSnapshot = () => 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 = { position: -1, treeRow: 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 = `cell-${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, { position: -1, treeRow: null });
53
- this.notifySet();
54
- };
55
- bind = (container, position, treeRow) => {
56
- this.entries.set(container, { position, treeRow });
57
- this.notifyPosition(container);
58
- };
59
- unbind = (container) => {
60
- if (!this.entries.has(container))
61
- return;
62
- this.entries.set(container, { position: -1, treeRow: null });
63
- this.notifyPosition(container);
64
- };
65
- removeContainer = (container) => {
66
- if (!this.entries.delete(container))
67
- return;
68
- this.published.delete(container);
69
- this.positionFlushers.delete(container);
70
- this.notifySet();
71
- };
72
- flushSet = () => {
73
- this.snapshot = [...this.entries.keys()];
74
- for (const listener of [...this.setListeners])
75
- listener();
76
- };
77
- notifySet() {
78
- this.flushSet();
79
- }
80
- notifyPosition(container) {
81
- let flush = this.positionFlushers.get(container);
82
- if (flush === undefined) {
83
- flush = () => {
84
- const live = this.entries.get(container);
85
- if (live !== undefined)
86
- this.published.set(container, live);
87
- const listeners = this.positionListeners.get(container);
88
- if (listeners === undefined)
89
- return;
90
- for (const listener of [...listeners])
91
- listener();
92
- };
93
- this.positionFlushers.set(container, flush);
94
- }
95
- flush();
96
- }
97
- }
98
- //# sourceMappingURL=cell-container-store.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cell-container-store.js","sourceRoot":"","sources":["../../src/utils/cell-container-store.ts"],"names":[],"mappings":"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","sourcesContent":["import type * as GObject from \"@gtkx/gi/gobject\";\nimport type * as Gtk from \"@gtkx/gi/gtk\";\n\nexport type CellEntry = {\n position: number;\n treeRow: Gtk.TreeListRow | null;\n};\n\nlet nextKey = 0;\n\nexport class CellContainerStore {\n private entries = new Map<GObject.Object, CellEntry>();\n\n private published = new Map<GObject.Object, CellEntry>();\n\n private setListeners = new Set<() => void>();\n\n private positionListeners = new Map<GObject.Object, Set<() => void>>();\n\n private positionFlushers = new Map<GObject.Object, () => void>();\n\n private keys = new WeakMap<GObject.Object, string>();\n\n private snapshot: GObject.Object[] = [];\n\n subscribeSet = (onChange: () => void): (() => void) => {\n this.setListeners.add(onChange);\n return () => {\n this.setListeners.delete(onChange);\n };\n };\n\n getContainersSnapshot = (): GObject.Object[] => this.snapshot;\n\n subscribePosition = (container: GObject.Object, onChange: () => void): (() => void) => {\n let listeners = this.positionListeners.get(container);\n if (listeners === undefined) {\n listeners = new Set();\n this.positionListeners.set(container, listeners);\n }\n listeners.add(onChange);\n return () => {\n const current = this.positionListeners.get(container);\n if (current === undefined) return;\n current.delete(onChange);\n if (current.size === 0) this.positionListeners.delete(container);\n };\n };\n\n getPosition = (container: GObject.Object): CellEntry => {\n let entry = this.published.get(container);\n if (entry === undefined) {\n entry = { position: -1, treeRow: null };\n this.published.set(container, entry);\n }\n return entry;\n };\n\n keyFor = (container: GObject.Object): string => {\n const existing = this.keys.get(container);\n if (existing !== undefined) return existing;\n const key = `cell-${nextKey++}`;\n this.keys.set(container, key);\n return key;\n };\n\n addContainer = (container: GObject.Object): void => {\n if (this.entries.has(container)) return;\n this.entries.set(container, { position: -1, treeRow: null });\n this.notifySet();\n };\n\n bind = (container: GObject.Object, position: number, treeRow: Gtk.TreeListRow | null): void => {\n this.entries.set(container, { position, treeRow });\n this.notifyPosition(container);\n };\n\n unbind = (container: GObject.Object): void => {\n if (!this.entries.has(container)) return;\n this.entries.set(container, { position: -1, treeRow: null });\n this.notifyPosition(container);\n };\n\n removeContainer = (container: GObject.Object): void => {\n if (!this.entries.delete(container)) return;\n this.published.delete(container);\n this.positionFlushers.delete(container);\n this.notifySet();\n };\n\n private flushSet = (): void => {\n this.snapshot = [...this.entries.keys()];\n for (const listener of [...this.setListeners]) listener();\n };\n\n private notifySet(): void {\n this.flushSet();\n }\n\n private notifyPosition(container: GObject.Object): void {\n let flush = this.positionFlushers.get(container);\n if (flush === undefined) {\n flush = (): void => {\n const live = this.entries.get(container);\n if (live !== undefined) this.published.set(container, live);\n const listeners = this.positionListeners.get(container);\n if (listeners === undefined) return;\n for (const listener of [...listeners]) listener();\n };\n this.positionFlushers.set(container, flush);\n }\n flush();\n }\n}\n"]}
@@ -1,10 +0,0 @@
1
- import type * as GObject from "@gtkx/gi/gobject";
2
- import * as Gtk from "@gtkx/gi/gtk";
3
- import type { ItemNode, SectionNode } from "../types.js";
4
- import type { RowValue } from "./item-resolver.js";
5
- export declare const retagRows: <T>(items: ItemNode<T>[], rowValues: WeakMap<GObject.Object, RowValue<T>>, 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>(items: ItemNode<T>[], rowValues: WeakMap<GObject.Object, RowValue<T>>, placeholdersById: Map<string, GObject.Object>) => Gtk.TreeListModel;
9
- export declare const createSectionModel: <S, T>(sections: SectionNode<S, T>[]) => Gtk.FlattenListModel;
10
- //# sourceMappingURL=item-models.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-models.d.ts","sourceRoot":"","sources":["../../src/utils/item-models.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,GAAG,MAAM,cAAc,CAAC;AACpC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAKnD,eAAO,MAAM,SAAS,GAAI,CAAC,SAChB,QAAQ,CAAC,CAAC,CAAC,EAAE,aACT,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAC7B,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAC9C,IAeF,CAAC;AAEF,eAAO,MAAM,eAAe,UAAW,MAAM,KAAG,GAAG,CAAC,UAAqD,CAAC;AAE1G,eAAO,MAAM,eAAe,UAAW,GAAG,CAAC,UAAU,SAAS,MAAM,KAAG,IAStE,CAAC;AA+BF,eAAO,MAAM,eAAe,GAAI,CAAC,SACtB,QAAQ,CAAC,CAAC,CAAC,EAAE,aACT,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,oBAC7B,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAC9C,GAAG,CAAC,aA4BN,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,YAAY,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAG,GAAG,CAAC,gBAM5E,CAAC"}
@@ -1,82 +0,0 @@
1
- import * as Gio from "@gtkx/gi/gio";
2
- import * as Gtk from "@gtkx/gi/gtk";
3
- import { countDescendants, 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
- metadata: treeItemMetadata(item),
14
- });
15
- }
16
- if (item.children !== undefined && item.children.length > 0)
17
- walk(item.children);
18
- }
19
- };
20
- walk(items);
21
- };
22
- export const createFlatModel = (count) => Gtk.StringList.new(emptyStrings(count));
23
- export const resizeFlatModel = (model, count) => {
24
- const target = Math.max(0, count);
25
- const current = model.getNItems();
26
- if (current === target)
27
- return;
28
- if (target > current) {
29
- model.splice(current, 0, emptyStrings(target - current));
30
- return;
31
- }
32
- model.splice(target, current - target, null);
33
- };
34
- const createTaggedRow = (row, rowValues, placeholdersById) => {
35
- const placeholder = Gtk.StringObject.new("");
36
- rowValues.set(placeholder, row);
37
- if (placeholdersById !== undefined)
38
- placeholdersById.set(row.id, placeholder);
39
- return placeholder;
40
- };
41
- const childModelOf = (children, rowValues, placeholdersById) => {
42
- const store = Gio.ListStore.new(Gtk.StringObject.prototype.__type__);
43
- for (const child of children) {
44
- store.append(createTaggedRow({ id: child.id, value: child.value, metadata: treeItemMetadata(child) }, rowValues, placeholdersById));
45
- }
46
- return store;
47
- };
48
- export const createTreeModel = (items, rowValues, placeholdersById) => {
49
- const childrenByRow = new WeakMap();
50
- const root = Gio.ListStore.new(Gtk.StringObject.prototype.__type__);
51
- for (const item of items) {
52
- const placeholder = createTaggedRow({ id: item.id, value: item.value, metadata: treeItemMetadata(item) }, rowValues, placeholdersById);
53
- if (item.children !== undefined && item.children.length > 0) {
54
- childrenByRow.set(placeholder, item.children);
55
- }
56
- root.append(placeholder);
57
- }
58
- const createFunc = (rowItem) => {
59
- const children = childrenByRow.get(rowItem);
60
- if (children === undefined)
61
- return null;
62
- const store = childModelOf(children, rowValues, placeholdersById);
63
- for (let index = 0; index < children.length; index++) {
64
- const child = children[index];
65
- if (child !== undefined && child.children !== undefined && child.children.length > 0) {
66
- const placeholder = store.getItem(index);
67
- if (placeholder !== null)
68
- childrenByRow.set(placeholder, child.children);
69
- }
70
- }
71
- return store;
72
- };
73
- return Gtk.TreeListModel.new(root, false, false, createFunc);
74
- };
75
- export const createSectionModel = (sections) => {
76
- const store = Gio.ListStore.new(Gtk.StringList.prototype.__type__);
77
- for (const section of sections) {
78
- store.append(Gtk.StringList.new(emptyStrings(countDescendants(section.data))));
79
- }
80
- return Gtk.FlattenListModel.new(store);
81
- };
82
- //# sourceMappingURL=item-models.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"item-models.js","sourceRoot":"","sources":["../../src/utils/item-models.ts"],"names":[],"mappings":"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","sourcesContent":["import * as Gio from \"@gtkx/gi/gio\";\nimport type * as GObject from \"@gtkx/gi/gobject\";\nimport * as Gtk from \"@gtkx/gi/gtk\";\nimport type { ItemNode, SectionNode } from \"../types.js\";\nimport type { RowValue } from \"./item-resolver.js\";\nimport { countDescendants, treeItemMetadata } from \"./list-item-flatten.js\";\n\nconst emptyStrings = (count: number): string[] => new Array<string>(Math.max(0, count)).fill(\"\");\n\nexport const retagRows = <T>(\n items: ItemNode<T>[],\n rowValues: WeakMap<GObject.Object, RowValue<T>>,\n placeholdersById: Map<string, GObject.Object>,\n): void => {\n const walk = (list: ItemNode<T>[]): void => {\n for (const item of list) {\n const placeholder = placeholdersById.get(item.id);\n if (placeholder !== undefined) {\n rowValues.set(placeholder, {\n id: item.id,\n value: item.value,\n metadata: treeItemMetadata(item),\n });\n }\n if (item.children !== undefined && item.children.length > 0) walk(item.children);\n }\n };\n walk(items);\n};\n\nexport const createFlatModel = (count: number): Gtk.StringList => Gtk.StringList.new(emptyStrings(count));\n\nexport const resizeFlatModel = (model: Gtk.StringList, count: number): void => {\n const target = Math.max(0, count);\n const current = model.getNItems();\n if (current === target) return;\n if (target > current) {\n model.splice(current, 0, emptyStrings(target - current));\n return;\n }\n model.splice(target, current - target, null);\n};\n\nconst createTaggedRow = <T>(\n row: RowValue<T>,\n rowValues: WeakMap<GObject.Object, RowValue<T>>,\n placeholdersById?: Map<string, GObject.Object>,\n): GObject.Object => {\n const placeholder = Gtk.StringObject.new(\"\");\n rowValues.set(placeholder, row);\n if (placeholdersById !== undefined) placeholdersById.set(row.id, placeholder);\n return placeholder;\n};\n\nconst childModelOf = <T>(\n children: ItemNode<T>[],\n rowValues: WeakMap<GObject.Object, RowValue<T>>,\n placeholdersById: Map<string, GObject.Object>,\n): Gio.ListStore => {\n const store = Gio.ListStore.new(Gtk.StringObject.prototype.__type__);\n for (const child of children) {\n store.append(\n createTaggedRow(\n { id: child.id, value: child.value, metadata: treeItemMetadata(child) },\n rowValues,\n placeholdersById,\n ),\n );\n }\n return store;\n};\n\nexport const createTreeModel = <T>(\n items: ItemNode<T>[],\n rowValues: WeakMap<GObject.Object, RowValue<T>>,\n placeholdersById: Map<string, GObject.Object>,\n): Gtk.TreeListModel => {\n const childrenByRow = new WeakMap<GObject.Object, ItemNode<T>[]>();\n const root = Gio.ListStore.new(Gtk.StringObject.prototype.__type__);\n for (const item of items) {\n const placeholder = createTaggedRow(\n { id: item.id, value: item.value, metadata: treeItemMetadata(item) },\n rowValues,\n placeholdersById,\n );\n if (item.children !== undefined && item.children.length > 0) {\n childrenByRow.set(placeholder, item.children);\n }\n root.append(placeholder);\n }\n const createFunc = (rowItem: GObject.Object): Gio.ListModel | null => {\n const children = childrenByRow.get(rowItem);\n if (children === undefined) return null;\n const store = childModelOf(children, rowValues, placeholdersById);\n for (let index = 0; index < children.length; index++) {\n const child = children[index];\n if (child !== undefined && child.children !== undefined && child.children.length > 0) {\n const placeholder = store.getItem(index);\n if (placeholder !== null) childrenByRow.set(placeholder, child.children);\n }\n }\n return store;\n };\n return Gtk.TreeListModel.new(root, false, false, createFunc);\n};\n\nexport const createSectionModel = <S, T>(sections: SectionNode<S, T>[]): Gtk.FlattenListModel => {\n const store = Gio.ListStore.new(Gtk.StringList.prototype.__type__);\n for (const section of sections) {\n store.append(Gtk.StringList.new(emptyStrings(countDescendants(section.data))));\n }\n return Gtk.FlattenListModel.new(store);\n};\n"]}
@@ -1,25 +0,0 @@
1
- import type * as GObject from "@gtkx/gi/gobject";
2
- import type * as Gtk from "@gtkx/gi/gtk";
3
- import type { ItemNode, SectionNode } from "../types.js";
4
- import { type TreeItemMetadata } from "./list-item-flatten.js";
5
- export type Resolved<T = unknown, S = unknown> = {
6
- value: T | S | undefined;
7
- present: boolean;
8
- isHeader: boolean;
9
- metadata: TreeItemMetadata;
10
- };
11
- export type ItemResolver<T = unknown, S = unknown> = {
12
- resolve(position: number, treeRow: Gtk.TreeListRow | null): Resolved<T, S>;
13
- positionOfId(id: string): number;
14
- idOf(position: number): string | undefined;
15
- };
16
- export type RowValue<T = unknown> = {
17
- id: string;
18
- value: T;
19
- metadata: TreeItemMetadata;
20
- };
21
- export declare const rowIdOf: <T>(rowValues: WeakMap<GObject.Object, RowValue<T>>, row: Gtk.TreeListRow) => string | undefined;
22
- export declare const createItemResolver: <T, S>(items: ItemNode<T>[] | undefined, flattenTreeChildren: boolean, rowValues: WeakMap<GObject.Object, RowValue<T>>) => ItemResolver<T, S>;
23
- export declare const createSectionHeaderResolver: <T, S>(sections: SectionNode<S, T>[] | undefined) => ItemResolver<T, S>;
24
- export declare const createTreeResolver: <T, S>(items: ItemNode<T>[] | undefined, rowValues: WeakMap<GObject.Object, RowValue<T>>, model: Gtk.TreeListModel) => ItemResolver<T, S>;
25
- //# 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,OAAO,MAAM,kBAAkB,CAAC;AACjD,OAAO,KAAK,KAAK,GAAG,MAAM,cAAc,CAAC;AACzC,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAsC,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAcnG,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI;IAC7C,KAAK,EAAE,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACzB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,IAAI;IACjD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,IAAI,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,CAAC,GAAG,OAAO,IAAI;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,gBAAgB,CAAC;CAC9B,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,CAAC,aACV,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,OAC1C,GAAG,CAAC,WAAW,KACrB,MAAM,GAAG,SAGX,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,SAC5B,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,uBACX,OAAO,aACjB,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,KAChD,YAAY,CAAC,CAAC,EAAE,CAAC,CA0CnB,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,CAAC,EAAE,CAAC,YAAY,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,SAAS,KAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAsB9G,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,CAAC,EAAE,CAAC,SAC5B,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,aACrB,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SACxC,GAAG,CAAC,aAAa,KACzB,YAAY,CAAC,CAAC,EAAE,CAAC,CAiBnB,CAAC"}