@smwb/ui-react 2.8.0 → 2.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (239) hide show
  1. package/AI_LESS_OVERRIDES.md +84 -21
  2. package/AI_THEMING.md +72 -28
  3. package/README.md +654 -0
  4. package/dist/assets/styles/less/components/appBar/appBar.entry.css +1 -1
  5. package/dist/assets/styles/less/components/button/button.entry.css +1 -1
  6. package/dist/assets/styles/less/components/checkbox/checkbox.entry.css +1 -1
  7. package/dist/assets/styles/less/components/chip/chip.entry.css +1 -1
  8. package/dist/assets/styles/less/components/commandPalette/commandPalette.entry.css +1 -0
  9. package/dist/assets/styles/less/components/composer/composer.entry.css +1 -0
  10. package/dist/assets/styles/less/components/dagView/dagView.entry.css +1 -0
  11. package/dist/assets/styles/less/components/diffStat/diffStat.entry.css +1 -0
  12. package/dist/assets/styles/less/components/kbd/kbd.entry.css +1 -0
  13. package/dist/assets/styles/less/components/list/list.entry.css +1 -1
  14. package/dist/assets/styles/less/components/qrCode/qrCode.entry.css +1 -0
  15. package/dist/assets/styles/less/components/radioButton/radioButton.entry.css +1 -1
  16. package/dist/assets/styles/less/components/selectField/selectField.entry.css +1 -1
  17. package/dist/assets/styles/less/components/sidebar/sidebar.entry.css +1 -1
  18. package/dist/assets/styles/less/components/statusDot/statusDot.entry.css +1 -0
  19. package/dist/assets/styles/less/components/swimlanes/swimlanes.entry.css +1 -0
  20. package/dist/assets/styles/less/components/tabGroups/tabGroups.entry.css +1 -0
  21. package/dist/assets/styles/less/components/tabs/tab/tab.entry.css +1 -1
  22. package/dist/assets/styles/less/components/tabs/tabPanel/tabPanel.entry.css +1 -0
  23. package/dist/assets/styles/less/components/tabs/tabs.entry.css +1 -1
  24. package/dist/assets/styles/less/components/textField/textField.entry.css +1 -1
  25. package/dist/assets/styles/less/components/toggle/toggle.entry.css +1 -1
  26. package/dist/assets/styles/less/components/treeView/treeView.entry.css +1 -1
  27. package/dist/assets/styles/less/tokens.entry.css +1 -1
  28. package/dist/components/dataDisplay/chat/chat.d.ts +43 -1
  29. package/dist/components/dataDisplay/chat/chat.js +179 -150
  30. package/dist/components/dataDisplay/chat/chat.js.map +1 -1
  31. package/dist/components/dataDisplay/chat/chatComposer.d.ts +17 -0
  32. package/dist/components/dataDisplay/chat/chatComposer.js +31 -29
  33. package/dist/components/dataDisplay/chat/chatComposer.js.map +1 -1
  34. package/dist/components/dataDisplay/chat/index.d.ts +1 -1
  35. package/dist/components/dataDisplay/chat/utils.d.ts +14 -0
  36. package/dist/components/dataDisplay/chat/utils.js.map +1 -1
  37. package/dist/components/dataDisplay/dagView/dagLayout.d.ts +74 -0
  38. package/dist/components/dataDisplay/dagView/dagLayout.js +289 -0
  39. package/dist/components/dataDisplay/dagView/dagLayout.js.map +1 -0
  40. package/dist/components/dataDisplay/dagView/dagView.d.ts +157 -0
  41. package/dist/components/dataDisplay/dagView/dagView.js +543 -0
  42. package/dist/components/dataDisplay/dagView/dagView.js.map +1 -0
  43. package/dist/components/dataDisplay/dagView/index.d.ts +4 -0
  44. package/dist/components/dataDisplay/dagView/panZoom.d.ts +75 -0
  45. package/dist/components/dataDisplay/dagView/panZoom.js +171 -0
  46. package/dist/components/dataDisplay/dagView/panZoom.js.map +1 -0
  47. package/dist/components/dataDisplay/diffStat/diffStat.d.ts +54 -0
  48. package/dist/components/dataDisplay/diffStat/diffStat.js +63 -0
  49. package/dist/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  50. package/dist/components/dataDisplay/diffStat/index.d.ts +2 -0
  51. package/dist/components/dataDisplay/kbd/index.d.ts +4 -0
  52. package/dist/components/dataDisplay/kbd/kbd.d.ts +40 -0
  53. package/dist/components/dataDisplay/kbd/kbd.js +27 -0
  54. package/dist/components/dataDisplay/kbd/kbd.js.map +1 -0
  55. package/dist/components/dataDisplay/kbd/kbdKeys.d.ts +18 -0
  56. package/dist/components/dataDisplay/kbd/kbdKeys.js +72 -0
  57. package/dist/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  58. package/dist/components/dataDisplay/list/listItem.d.ts +34 -0
  59. package/dist/components/dataDisplay/list/listItem.js +47 -24
  60. package/dist/components/dataDisplay/list/listItem.js.map +1 -1
  61. package/dist/components/dataDisplay/qrCode/index.d.ts +2 -0
  62. package/dist/components/dataDisplay/qrCode/qrCode.d.ts +28 -0
  63. package/dist/components/dataDisplay/qrCode/qrCode.js +78 -0
  64. package/dist/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  65. package/dist/components/dataDisplay/qrCode/qrCodePath.d.ts +7 -0
  66. package/dist/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  67. package/dist/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  68. package/dist/components/dataDisplay/statusDot/index.d.ts +2 -0
  69. package/dist/components/dataDisplay/statusDot/statusDot.d.ts +35 -0
  70. package/dist/components/dataDisplay/statusDot/statusDot.js +30 -0
  71. package/dist/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  72. package/dist/components/dataDisplay/swimlanes/index.d.ts +2 -0
  73. package/dist/components/dataDisplay/swimlanes/swimlanes.d.ts +53 -0
  74. package/dist/components/dataDisplay/swimlanes/swimlanes.js +357 -0
  75. package/dist/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  76. package/dist/components/dataDisplay/treeView/treeView.d.ts +17 -1
  77. package/dist/components/dataDisplay/treeView/treeView.js +113 -92
  78. package/dist/components/dataDisplay/treeView/treeView.js.map +1 -1
  79. package/dist/components/feedBack/modal/modal.js +84 -63
  80. package/dist/components/feedBack/modal/modal.js.map +1 -1
  81. package/dist/components/inputs/button/button.d.ts +13 -1
  82. package/dist/components/inputs/button/button.js +57 -51
  83. package/dist/components/inputs/button/button.js.map +1 -1
  84. package/dist/components/inputs/composer/composer.d.ts +149 -0
  85. package/dist/components/inputs/composer/composer.js +219 -0
  86. package/dist/components/inputs/composer/composer.js.map +1 -0
  87. package/dist/components/inputs/composer/composerFiles.d.ts +26 -0
  88. package/dist/components/inputs/composer/composerFiles.js +19 -0
  89. package/dist/components/inputs/composer/composerFiles.js.map +1 -0
  90. package/dist/components/inputs/composer/composerKeys.d.ts +29 -0
  91. package/dist/components/inputs/composer/composerKeys.js +7 -0
  92. package/dist/components/inputs/composer/composerKeys.js.map +1 -0
  93. package/dist/components/inputs/composer/index.d.ts +3 -0
  94. package/dist/components/layout/sheet/sheet.d.ts +12 -0
  95. package/dist/components/layout/sheet/sheet.js +152 -137
  96. package/dist/components/layout/sheet/sheet.js.map +1 -1
  97. package/dist/components/layout/tabGroups/index.d.ts +4 -0
  98. package/dist/components/layout/tabGroups/tabGroups.d.ts +94 -0
  99. package/dist/components/layout/tabGroups/tabGroups.js +783 -0
  100. package/dist/components/layout/tabGroups/tabGroups.js.map +1 -0
  101. package/dist/components/layout/tabGroups/tabGroupsFocus.d.ts +55 -0
  102. package/dist/components/layout/tabGroups/tabGroupsFocus.js +199 -0
  103. package/dist/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  104. package/dist/components/layout/tabGroups/tabGroupsLayout.d.ts +250 -0
  105. package/dist/components/layout/tabGroups/tabGroupsLayout.js +497 -0
  106. package/dist/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  107. package/dist/components/navigation/appBar/appBar.d.ts +22 -0
  108. package/dist/components/navigation/appBar/appBar.js +31 -26
  109. package/dist/components/navigation/appBar/appBar.js.map +1 -1
  110. package/dist/components/navigation/commandPalette/commandPalette.d.ts +111 -0
  111. package/dist/components/navigation/commandPalette/commandPalette.js +337 -0
  112. package/dist/components/navigation/commandPalette/commandPalette.js.map +1 -0
  113. package/dist/components/navigation/commandPalette/commandPaletteFilter.d.ts +11 -0
  114. package/dist/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  115. package/dist/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  116. package/dist/components/navigation/commandPalette/commandPaletteNavigation.d.ts +13 -0
  117. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  118. package/dist/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  119. package/dist/components/navigation/commandPalette/commandPaletteTypes.d.ts +39 -0
  120. package/dist/components/navigation/commandPalette/index.d.ts +4 -0
  121. package/dist/components/navigation/sidebar/sidebar.d.ts +10 -0
  122. package/dist/components/navigation/sidebar/sidebar.js +61 -59
  123. package/dist/components/navigation/sidebar/sidebar.js.map +1 -1
  124. package/dist/components/navigation/tabs/index.d.ts +3 -1
  125. package/dist/components/navigation/tabs/tab/tab.d.ts +88 -1
  126. package/dist/components/navigation/tabs/tab/tab.js +121 -42
  127. package/dist/components/navigation/tabs/tab/tab.js.map +1 -1
  128. package/dist/components/navigation/tabs/tabPanel/tabPanel.d.ts +19 -0
  129. package/dist/components/navigation/tabs/tabPanel/tabPanel.js +27 -0
  130. package/dist/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  131. package/dist/components/navigation/tabs/tabs.d.ts +75 -5
  132. package/dist/components/navigation/tabs/tabs.js +369 -145
  133. package/dist/components/navigation/tabs/tabs.js.map +1 -1
  134. package/dist/components/navigation/tabs/tabs.utils.d.ts +20 -0
  135. package/dist/components/navigation/tabs/tabs.utils.js +11 -0
  136. package/dist/components/navigation/tabs/tabs.utils.js.map +1 -0
  137. package/dist/components/navigation/tabs/tabsContext.d.ts +11 -0
  138. package/dist/components/navigation/tabs/tabsContext.js +6 -0
  139. package/dist/components/navigation/tabs/tabsContext.js.map +1 -0
  140. package/dist/headless/components/dataDisplay/chat/chat.js +179 -150
  141. package/dist/headless/components/dataDisplay/chat/chat.js.map +1 -1
  142. package/dist/headless/components/dataDisplay/chat/chatComposer.js +31 -29
  143. package/dist/headless/components/dataDisplay/chat/chatComposer.js.map +1 -1
  144. package/dist/headless/components/dataDisplay/chat/utils.js.map +1 -1
  145. package/dist/headless/components/dataDisplay/dagView/dagLayout.js +289 -0
  146. package/dist/headless/components/dataDisplay/dagView/dagLayout.js.map +1 -0
  147. package/dist/headless/components/dataDisplay/dagView/dagView.js +541 -0
  148. package/dist/headless/components/dataDisplay/dagView/dagView.js.map +1 -0
  149. package/dist/headless/components/dataDisplay/dagView/panZoom.js +171 -0
  150. package/dist/headless/components/dataDisplay/dagView/panZoom.js.map +1 -0
  151. package/dist/headless/components/dataDisplay/diffStat/diffStat.js +61 -0
  152. package/dist/headless/components/dataDisplay/diffStat/diffStat.js.map +1 -0
  153. package/dist/headless/components/dataDisplay/kbd/kbd.js +25 -0
  154. package/dist/headless/components/dataDisplay/kbd/kbd.js.map +1 -0
  155. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js +72 -0
  156. package/dist/headless/components/dataDisplay/kbd/kbdKeys.js.map +1 -0
  157. package/dist/headless/components/dataDisplay/list/listItem.js +47 -24
  158. package/dist/headless/components/dataDisplay/list/listItem.js.map +1 -1
  159. package/dist/headless/components/dataDisplay/qrCode/qrCode.js +76 -0
  160. package/dist/headless/components/dataDisplay/qrCode/qrCode.js.map +1 -0
  161. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js +20 -0
  162. package/dist/headless/components/dataDisplay/qrCode/qrCodePath.js.map +1 -0
  163. package/dist/headless/components/dataDisplay/statusDot/statusDot.js +28 -0
  164. package/dist/headless/components/dataDisplay/statusDot/statusDot.js.map +1 -0
  165. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js +355 -0
  166. package/dist/headless/components/dataDisplay/swimlanes/swimlanes.js.map +1 -0
  167. package/dist/headless/components/dataDisplay/treeView/treeView.js +113 -92
  168. package/dist/headless/components/dataDisplay/treeView/treeView.js.map +1 -1
  169. package/dist/headless/components/feedBack/modal/modal.js +85 -64
  170. package/dist/headless/components/feedBack/modal/modal.js.map +1 -1
  171. package/dist/headless/components/inputs/button/button.js +56 -50
  172. package/dist/headless/components/inputs/button/button.js.map +1 -1
  173. package/dist/headless/components/inputs/composer/composer.js +217 -0
  174. package/dist/headless/components/inputs/composer/composer.js.map +1 -0
  175. package/dist/headless/components/inputs/composer/composerFiles.js +19 -0
  176. package/dist/headless/components/inputs/composer/composerFiles.js.map +1 -0
  177. package/dist/headless/components/inputs/composer/composerKeys.js +7 -0
  178. package/dist/headless/components/inputs/composer/composerKeys.js.map +1 -0
  179. package/dist/headless/components/layout/sheet/sheet.js +160 -145
  180. package/dist/headless/components/layout/sheet/sheet.js.map +1 -1
  181. package/dist/headless/components/layout/tabGroups/tabGroups.js +781 -0
  182. package/dist/headless/components/layout/tabGroups/tabGroups.js.map +1 -0
  183. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js +199 -0
  184. package/dist/headless/components/layout/tabGroups/tabGroupsFocus.js.map +1 -0
  185. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js +497 -0
  186. package/dist/headless/components/layout/tabGroups/tabGroupsLayout.js.map +1 -0
  187. package/dist/headless/components/navigation/appBar/appBar.js +35 -30
  188. package/dist/headless/components/navigation/appBar/appBar.js.map +1 -1
  189. package/dist/headless/components/navigation/commandPalette/commandPalette.js +335 -0
  190. package/dist/headless/components/navigation/commandPalette/commandPalette.js.map +1 -0
  191. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js +16 -0
  192. package/dist/headless/components/navigation/commandPalette/commandPaletteFilter.js.map +1 -0
  193. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js +38 -0
  194. package/dist/headless/components/navigation/commandPalette/commandPaletteNavigation.js.map +1 -0
  195. package/dist/headless/components/navigation/sidebar/sidebar.js +56 -54
  196. package/dist/headless/components/navigation/sidebar/sidebar.js.map +1 -1
  197. package/dist/headless/components/navigation/tabs/tab/tab.js +121 -42
  198. package/dist/headless/components/navigation/tabs/tab/tab.js.map +1 -1
  199. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js +25 -0
  200. package/dist/headless/components/navigation/tabs/tabPanel/tabPanel.js.map +1 -0
  201. package/dist/headless/components/navigation/tabs/tabs.js +369 -145
  202. package/dist/headless/components/navigation/tabs/tabs.js.map +1 -1
  203. package/dist/headless/components/navigation/tabs/tabs.utils.js +11 -0
  204. package/dist/headless/components/navigation/tabs/tabs.utils.js.map +1 -0
  205. package/dist/headless/components/navigation/tabs/tabsContext.js +6 -0
  206. package/dist/headless/components/navigation/tabs/tabsContext.js.map +1 -0
  207. package/dist/headless/hooks/useFocusTrap.js +24 -21
  208. package/dist/headless/hooks/useFocusTrap.js.map +1 -1
  209. package/dist/headless/hooks/useKeyboardShortcut.js +19 -0
  210. package/dist/headless/hooks/useKeyboardShortcut.js.map +1 -0
  211. package/dist/headless/index.js +360 -316
  212. package/dist/headless/index.js.map +1 -1
  213. package/dist/headless/utils/keyboardShortcut.js +49 -0
  214. package/dist/headless/utils/keyboardShortcut.js.map +1 -0
  215. package/dist/headless/utils/linkAttrs.js +13 -0
  216. package/dist/headless/utils/linkAttrs.js.map +1 -0
  217. package/dist/headless/utils/restoreFocus.js +10 -0
  218. package/dist/headless/utils/restoreFocus.js.map +1 -0
  219. package/dist/hooks/useFocusTrap.d.ts +6 -1
  220. package/dist/hooks/useFocusTrap.js +24 -21
  221. package/dist/hooks/useFocusTrap.js.map +1 -1
  222. package/dist/hooks/useKeyboardShortcut.d.ts +30 -0
  223. package/dist/hooks/useKeyboardShortcut.js +19 -0
  224. package/dist/hooks/useKeyboardShortcut.js.map +1 -0
  225. package/dist/index.cjs +3 -2
  226. package/dist/index.cjs.map +1 -1
  227. package/dist/index.d.ts +24 -3
  228. package/dist/index.js +360 -316
  229. package/dist/index.js.map +1 -1
  230. package/dist/utils/keyboardShortcut.d.ts +12 -0
  231. package/dist/utils/keyboardShortcut.js +49 -0
  232. package/dist/utils/keyboardShortcut.js.map +1 -0
  233. package/dist/utils/linkAttrs.d.ts +13 -0
  234. package/dist/utils/linkAttrs.js +13 -0
  235. package/dist/utils/linkAttrs.js.map +1 -0
  236. package/dist/utils/restoreFocus.d.ts +8 -0
  237. package/dist/utils/restoreFocus.js +10 -0
  238. package/dist/utils/restoreFocus.js.map +1 -0
  239. package/package.json +5 -3
@@ -0,0 +1,250 @@
1
+ /**
2
+ * The pure layout model of `TabGroups`: the split tree, every operation on it and the grid
3
+ * geometry drawn from it. There is no framework and no DOM here, so jsdom tests feed layouts
4
+ * and numbers straight in, and the server and the client compute the same markup. The file is
5
+ * a byte-identical copy in ui-react and ui-solid.
6
+ *
7
+ * Every operation is pure: it never mutates its input and returns the input object itself when
8
+ * nothing changes. Unknown ids are no-ops, never errors.
9
+ */
10
+ /** The version of the layout JSON this model reads and writes. */
11
+ export declare const TAB_GROUPS_LAYOUT_VERSION = 1;
12
+ /** An edge of a group: a tab dropped or moved there gets a new group on that side. */
13
+ export type TabGroupsEdge = "top" | "right" | "bottom" | "left";
14
+ /** Where a drop over a group's body lands: into the group (`center`) or a new group at an edge. */
15
+ export type TabGroupsDropZone = "center" | TabGroupsEdge;
16
+ /** A group: one tab row and its panels. */
17
+ export interface TabGroupsGroup {
18
+ type: "group";
19
+ /** Unique among all nodes. Generated ids are "g1", "g2", …; an app may use any string. */
20
+ id: string;
21
+ /** Tab ids in row order. A tab id appears in exactly one group. Empty only for the root group (nothing open). */
22
+ tabs: string[];
23
+ /** The selected tab: one of `tabs`; null only when `tabs` is empty. */
24
+ active: string | null;
25
+ }
26
+ /** A split of an area into side-by-side or stacked children. */
27
+ export interface TabGroupsSplit {
28
+ type: "split";
29
+ /** Unique among all nodes. Generated ids are "s1", "s2", …. */
30
+ id: string;
31
+ /** "row": children side by side, left to right; "column": stacked, top to bottom. */
32
+ direction: "row" | "column";
33
+ /** At least two. Never a split of the same direction (it is flattened into this one). */
34
+ children: TabGroupsNode[];
35
+ /** Each child's share of this split in percent, same length as `children`, positive, summing to 100. */
36
+ sizes: number[];
37
+ }
38
+ /** A node of the split tree. */
39
+ export type TabGroupsNode = TabGroupsGroup | TabGroupsSplit;
40
+ /** The whole arrangement: what an app stores. Only ids and sizes, no labels or content. */
41
+ export interface TabGroupsLayout {
42
+ version: 1;
43
+ root: TabGroupsNode;
44
+ /** The group the user last worked in: new tabs go there by default. Always an existing group id. */
45
+ activeGroup: string;
46
+ }
47
+ /** What a layout change did: the second argument of `onLayoutChange`. */
48
+ export type TabGroupsChange = {
49
+ type: "select";
50
+ tab: string;
51
+ group: string;
52
+ }
53
+ /** Focus moved into another group. */
54
+ | {
55
+ type: "activate";
56
+ group: string;
57
+ }
58
+ /** Into an existing group, including a reorder within the same group. */
59
+ | {
60
+ type: "move";
61
+ tab: string;
62
+ from: string;
63
+ to: string;
64
+ index: number;
65
+ sourceClosed: boolean;
66
+ }
67
+ /** Into a new group at an edge; `to` is the new group. */
68
+ | {
69
+ type: "split";
70
+ tab: string;
71
+ from: string;
72
+ to: string;
73
+ edge: TabGroupsEdge;
74
+ sourceClosed: boolean;
75
+ } | {
76
+ type: "close";
77
+ tab: string;
78
+ group: string;
79
+ groupClosed: boolean;
80
+ } | {
81
+ type: "resize";
82
+ split: string;
83
+ sizes: number[];
84
+ };
85
+ /** Where `moveTab` puts a tab. */
86
+ export type TabGroupsMoveTarget =
87
+ /** Into an existing group; `index` = the tab's final index (default: the end). */
88
+ {
89
+ group: string;
90
+ index?: number;
91
+ edge?: undefined;
92
+ }
93
+ /** A new group at that edge of `group`. */
94
+ | {
95
+ group: string;
96
+ edge: TabGroupsEdge;
97
+ };
98
+ /** The CSS grid a layout is drawn on (see `computeTabGroupsGrid`). */
99
+ export interface TabGroupsGrid {
100
+ /** Content column widths, percent, left to right. */
101
+ columns: number[];
102
+ /** Content row heights, percent, top to bottom. */
103
+ rows: number[];
104
+ /** Every group's content columns and rows, end-exclusive, in reading order. */
105
+ groups: {
106
+ id: string;
107
+ column: [number, number];
108
+ row: [number, number];
109
+ }[];
110
+ /**
111
+ * Every separator, in reading order (after the subtree of child `index` of its split). `line` is the
112
+ * content boundary it sits on (1..n-1); `span` its extent across the other axis, end-exclusive.
113
+ */
114
+ separators: {
115
+ split: string;
116
+ index: number;
117
+ orientation: "vertical" | "horizontal";
118
+ line: number;
119
+ span: [number, number];
120
+ }[];
121
+ }
122
+ /** The texts of `TabGroups`. Numbers passed in are 1-based, as they are read out. */
123
+ export interface TabGroupsLabels {
124
+ /** The tab row's name: "Group 1 of 4"; "Tabs" when count is 1. */
125
+ group: (index: number, count: number) => string;
126
+ /** The group actions button: "Group actions". */
127
+ groupActions: string;
128
+ /** "Split right". */
129
+ splitRight: string;
130
+ /** "Split down". */
131
+ splitDown: string;
132
+ /** "Move to previous group". */
133
+ moveToPreviousGroup: string;
134
+ /** "Move to next group". */
135
+ moveToNextGroup: string;
136
+ /** "Move tab left". */
137
+ moveLeft: string;
138
+ /** "Move tab right". */
139
+ moveRight: string;
140
+ /** The separators: "Resize groups". */
141
+ resize: string;
142
+ /** "Terminal moved to group 2 of 3". */
143
+ movedToGroup: (tab: string, index: number, count: number) => string;
144
+ /** "Terminal moved to a new group on the right" (below, on the left, above). */
145
+ movedToNewGroup: (tab: string, edge: TabGroupsEdge) => string;
146
+ /** "Terminal moved to position 2 of 4". */
147
+ movedInGroup: (tab: string, position: number, count: number) => string;
148
+ }
149
+ /** The default (English) texts. */
150
+ export declare const TAB_GROUPS_LABELS: TabGroupsLabels;
151
+ /** A layout of one group "g1" holding `tabs`; `active` (when one of them) or the first is selected. */
152
+ export declare function createTabGroupsLayout(tabs?: readonly string[], options?: {
153
+ active?: string;
154
+ }): TabGroupsLayout;
155
+ /**
156
+ * Reads a layout from untrusted JSON (storage, a URL, a file). `null` for a non-object, a version
157
+ * other than 1 or no valid root; anything else is repaired: non-string and duplicate tab ids
158
+ * dropped (the first in reading order wins), empty non-root groups removed and splits collapsed
159
+ * or flattened, an invalid `active` replaced by the first tab, unusable sizes replaced by equal
160
+ * shares and all sizes rescaled to 100, missing or duplicate node ids regenerated, an invalid
161
+ * `activeGroup` replaced by the first group. With `options.tabs` the layout is synced to that
162
+ * list (`syncTabs`). A layout produced by this model round-trips through JSON unchanged.
163
+ */
164
+ export declare function parseTabGroupsLayout(raw: unknown, options?: {
165
+ tabs?: readonly string[];
166
+ }): TabGroupsLayout | null;
167
+ /** Makes the layout hold exactly `tabs`: unknown ids are closed, missing ones appended to `activeGroup`. */
168
+ export declare function syncTabs(layout: TabGroupsLayout, tabs: readonly string[]): TabGroupsLayout;
169
+ /** Every group in reading order (depth first): the order "Group n of N" counts in. */
170
+ export declare function getGroups(layout: TabGroupsLayout): TabGroupsGroup[];
171
+ /** The group holding `tabId`. */
172
+ export declare function findGroupOfTab(layout: TabGroupsLayout, tabId: string): TabGroupsGroup | undefined;
173
+ /**
174
+ * Adds a tab to `options.group` (default `activeGroup`) at `options.index` (default the end),
175
+ * selected unless `options.select` is false. An id already in the layout moves there instead.
176
+ */
177
+ export declare function addTab(layout: TabGroupsLayout, tabId: string, options?: {
178
+ group?: string;
179
+ index?: number;
180
+ select?: boolean;
181
+ }): TabGroupsLayout;
182
+ /**
183
+ * Closes a tab. When it was its group's last tab the group goes too: its share passes to the
184
+ * previous sibling (else the next), a split left with one child is replaced by that child and
185
+ * `activeGroup` moves to the group that took the space. The last tab of the last group leaves
186
+ * an empty root group.
187
+ */
188
+ export declare function removeTab(layout: TabGroupsLayout, tabId: string): TabGroupsLayout;
189
+ /** Selects a tab in its group and makes that group `activeGroup`. */
190
+ export declare function selectTab(layout: TabGroupsLayout, tabId: string): TabGroupsLayout;
191
+ /** Makes an existing group `activeGroup`. */
192
+ export declare function setActiveGroup(layout: TabGroupsLayout, groupId: string): TabGroupsLayout;
193
+ /**
194
+ * Moves a tab. Into another group: inserted at `target.index` (its final index; default the end),
195
+ * selected there, and that group becomes `activeGroup`. Within its own group: a reorder, the
196
+ * selection stays. To an edge: a new group there holding the tab (see `TabGroupsEdge`); the own
197
+ * edge of a group with one tab is a no-op. A source group left empty closes as in `removeTab`.
198
+ */
199
+ export declare function moveTab(layout: TabGroupsLayout, tabId: string, target: TabGroupsMoveTarget): TabGroupsLayout;
200
+ /**
201
+ * The keyboard move (Alt+Shift+Arrow): into the neighbouring group at that edge (appended,
202
+ * selected); with no neighbour and at least two tabs in the group, a new group at that edge;
203
+ * otherwise nothing.
204
+ */
205
+ export declare function moveTabInDirection(layout: TabGroupsLayout, tabId: string, edge: TabGroupsEdge): TabGroupsLayout;
206
+ /**
207
+ * Moves separator `index` of a split (between children `index` and `index + 1`) by `delta`
208
+ * percent of the split (±Infinity: to the limit). Only that pair changes and the sizes still sum
209
+ * to 100. Every group on both sides keeps at least `min` percent of the split (default 0) — a
210
+ * nested split as a whole is held to what its groups need — and never so little that the grid
211
+ * could not draw it (a few hundredths of a percent of the root).
212
+ */
213
+ export declare function resizeSplit(layout: TabGroupsLayout, splitId: string, index: number, delta: number, min?: number): TabGroupsLayout;
214
+ /**
215
+ * The group touching `edge` of the group `groupId` with the largest overlap along that edge
216
+ * (ties: the first in reading order); undefined at the area's outer edge.
217
+ */
218
+ export declare function neighbourGroup(layout: TabGroupsLayout, groupId: string, edge: TabGroupsEdge): string | undefined;
219
+ /**
220
+ * The group that takes the space of `groupId` when it closes: the previous sibling's last group
221
+ * in reading order, else the next sibling's first group; undefined for the root group.
222
+ */
223
+ export declare function adjacentGroup(layout: TabGroupsLayout, groupId: string): string | undefined;
224
+ /**
225
+ * The drop zone under a point of a group's body (`x`, `y` relative to it, clamped into it): within
226
+ * `edgeSize` (a fraction, default 0.25) of an edge, that edge; the nearest edge wins where bands
227
+ * overlap (ties: top, right, bottom, left); else `center`.
228
+ */
229
+ export declare function dropZoneAt(x: number, y: number, width: number, height: number, edgeSize?: number): TabGroupsDropZone;
230
+ /**
231
+ * The grid a layout is drawn on: every group's rectangle in percent of the root, cut into
232
+ * content columns and rows at the distinct boundaries (closer than 0.05 percent snap together).
233
+ * Pure numbers, so the server and the client draw the same tracks.
234
+ */
235
+ export declare function computeTabGroupsGrid(layout: TabGroupsLayout): TabGroupsGrid;
236
+ /** `grid-template-columns`: a `minmax(0, <w>fr)` per content column, separator tracks between. */
237
+ export declare function gridTemplateColumns(grid: TabGroupsGrid): string;
238
+ /** `grid-template-rows`: per content row an `auto` header track and a `minmax(0, <h>fr)` body track, separators between. */
239
+ export declare function gridTemplateRows(grid: TabGroupsGrid): string;
240
+ /** The `grid-area` of a group's header (its tab row). */
241
+ export declare function groupHeaderArea(group: TabGroupsGrid["groups"][number]): string;
242
+ /** The `grid-area` of a group's panels. */
243
+ export declare function groupBodyArea(group: TabGroupsGrid["groups"][number]): string;
244
+ /** The `grid-area` of a separator. */
245
+ export declare function separatorArea(separator: TabGroupsGrid["separators"][number]): string;
246
+ /**
247
+ * The announcement of a change, read from the layout after it: "Terminal moved to group 2 of 3",
248
+ * "… to a new group on the right", "… to position 2 of 4"; "" for select, activate, close and resize.
249
+ */
250
+ export declare function describeTabGroupsChange(change: TabGroupsChange, layout: TabGroupsLayout, title: (tabId: string) => string, labels?: TabGroupsLabels): string;