@dxos/react-ui-table 0.6.14-staging.e15392e → 0.7.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 (242) hide show
  1. package/dist/lib/browser/_deprecated/index.mjs +1483 -0
  2. package/dist/lib/browser/_deprecated/index.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-A5W4XWPD.mjs +18 -0
  4. package/dist/lib/browser/chunk-A5W4XWPD.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +1275 -1356
  6. package/dist/lib/browser/index.mjs.map +4 -4
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/types/index.mjs +7 -0
  9. package/dist/lib/browser/types/index.mjs.map +7 -0
  10. package/dist/lib/node/_deprecated/index.cjs +1511 -0
  11. package/dist/lib/node/_deprecated/index.cjs.map +7 -0
  12. package/dist/lib/node/chunk-32IGMRME.cjs +40 -0
  13. package/dist/lib/node/chunk-32IGMRME.cjs.map +7 -0
  14. package/dist/lib/node/index.cjs +1381 -0
  15. package/dist/lib/node/index.cjs.map +7 -0
  16. package/dist/lib/node/meta.json +1 -0
  17. package/dist/lib/node/types/index.cjs +29 -0
  18. package/dist/lib/node/types/index.cjs.map +7 -0
  19. package/dist/lib/node-esm/_deprecated/index.mjs +1485 -0
  20. package/dist/lib/node-esm/_deprecated/index.mjs.map +7 -0
  21. package/dist/lib/node-esm/chunk-DWQ4KGLD.mjs +20 -0
  22. package/dist/lib/node-esm/chunk-DWQ4KGLD.mjs.map +7 -0
  23. package/dist/lib/node-esm/index.mjs +1400 -0
  24. package/dist/lib/node-esm/index.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -0
  26. package/dist/lib/node-esm/types/index.mjs +8 -0
  27. package/dist/lib/node-esm/types/index.mjs.map +7 -0
  28. package/dist/types/src/_deprecated/components/Cell/Cell.d.ts.map +1 -0
  29. package/dist/types/src/_deprecated/components/Cell/CellCombobox.d.ts.map +1 -0
  30. package/dist/types/src/_deprecated/components/Cell/index.d.ts.map +1 -0
  31. package/dist/types/src/_deprecated/components/ColumnMenu/ColumnMenu.d.ts.map +1 -0
  32. package/dist/types/src/_deprecated/components/ColumnMenu/ColumnMenu.stories.d.ts.map +1 -0
  33. package/dist/types/src/_deprecated/components/ColumnMenu/ColumnSettings.d.ts.map +1 -0
  34. package/dist/types/src/{components → _deprecated/components}/ColumnMenu/ColumnSettings.stories.d.ts +4 -4
  35. package/dist/types/src/_deprecated/components/ColumnMenu/ColumnSettings.stories.d.ts.map +1 -0
  36. package/dist/types/src/_deprecated/components/ColumnMenu/index.d.ts.map +1 -0
  37. package/dist/types/src/_deprecated/components/Table/Table.d.ts +20 -0
  38. package/dist/types/src/_deprecated/components/Table/Table.d.ts.map +1 -0
  39. package/dist/types/src/_deprecated/components/Table/Table.stories.d.ts +116 -0
  40. package/dist/types/src/_deprecated/components/Table/Table.stories.d.ts.map +1 -0
  41. package/dist/types/src/_deprecated/components/Table/TableBody.d.ts.map +1 -0
  42. package/dist/types/src/_deprecated/components/Table/TableContext.d.ts.map +1 -0
  43. package/dist/types/src/_deprecated/components/Table/TableHead.d.ts.map +1 -0
  44. package/dist/types/src/_deprecated/components/Table/TableRootContext.d.ts.map +1 -0
  45. package/dist/types/src/_deprecated/components/Table/index.d.ts +5 -0
  46. package/dist/types/src/_deprecated/components/Table/index.d.ts.map +1 -0
  47. package/dist/types/src/_deprecated/components/Table/props.d.ts.map +1 -0
  48. package/dist/types/src/_deprecated/components/index.d.ts +4 -0
  49. package/dist/types/src/_deprecated/components/index.d.ts.map +1 -0
  50. package/dist/types/src/_deprecated/helpers.d.ts.map +1 -0
  51. package/dist/types/src/_deprecated/hooks/index.d.ts +5 -0
  52. package/dist/types/src/_deprecated/hooks/index.d.ts.map +1 -0
  53. package/dist/types/src/_deprecated/hooks/useColumnSizing.d.ts.map +1 -0
  54. package/dist/types/src/{hooks → _deprecated/hooks}/useColumnSorting.d.ts +1 -1
  55. package/dist/types/src/_deprecated/hooks/useColumnSorting.d.ts.map +1 -0
  56. package/dist/types/src/_deprecated/hooks/usePinLastRow.d.ts.map +1 -0
  57. package/dist/types/src/_deprecated/hooks/useRowSelection.d.ts.map +1 -0
  58. package/dist/types/src/_deprecated/index.d.ts +8 -0
  59. package/dist/types/src/_deprecated/index.d.ts.map +1 -0
  60. package/dist/types/src/_deprecated/schema/Schema.stories.d.ts.map +1 -0
  61. package/dist/types/src/{schema → _deprecated/schema}/column-utils.d.ts +3 -0
  62. package/dist/types/src/_deprecated/schema/column-utils.d.ts.map +1 -0
  63. package/dist/types/src/_deprecated/schema/index.d.ts.map +1 -0
  64. package/dist/types/src/{schema → _deprecated/schema}/types.d.ts +3 -2
  65. package/dist/types/src/_deprecated/schema/types.d.ts.map +1 -0
  66. package/dist/types/src/_deprecated/theme.d.ts.map +1 -0
  67. package/dist/types/src/_deprecated/translations.d.ts +21 -0
  68. package/dist/types/src/_deprecated/translations.d.ts.map +1 -0
  69. package/dist/types/src/_deprecated/types.d.ts.map +1 -0
  70. package/dist/types/src/components/Table/ColumnActionsMenu.d.ts +8 -0
  71. package/dist/types/src/components/Table/ColumnActionsMenu.d.ts.map +1 -0
  72. package/dist/types/src/components/Table/ColumnSettings.d.ts +8 -0
  73. package/dist/types/src/components/Table/ColumnSettings.d.ts.map +1 -0
  74. package/dist/types/src/components/Table/RowActionsMenu.d.ts +8 -0
  75. package/dist/types/src/components/Table/RowActionsMenu.d.ts.map +1 -0
  76. package/dist/types/src/components/Table/Table.d.ts +11 -14
  77. package/dist/types/src/components/Table/Table.d.ts.map +1 -1
  78. package/dist/types/src/components/Table/Table.stories.d.ts +10 -113
  79. package/dist/types/src/components/Table/Table.stories.d.ts.map +1 -1
  80. package/dist/types/src/components/Table/index.d.ts +0 -3
  81. package/dist/types/src/components/Table/index.d.ts.map +1 -1
  82. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts +17 -0
  83. package/dist/types/src/components/TableCellEditor/TableCellEditor.d.ts.map +1 -0
  84. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts +11 -0
  85. package/dist/types/src/components/TableCellEditor/TableCellEditor.stories.d.ts.map +1 -0
  86. package/dist/types/src/components/TableCellEditor/extension.d.ts +12 -0
  87. package/dist/types/src/components/TableCellEditor/extension.d.ts.map +1 -0
  88. package/dist/types/src/components/TableCellEditor/index.d.ts +2 -0
  89. package/dist/types/src/components/TableCellEditor/index.d.ts.map +1 -0
  90. package/dist/types/src/components/Toolbar/Toolbar.d.ts +21 -0
  91. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  92. package/dist/types/src/components/Toolbar/common.d.ts +20 -0
  93. package/dist/types/src/components/Toolbar/common.d.ts.map +1 -0
  94. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  95. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  96. package/dist/types/src/components/index.d.ts +1 -2
  97. package/dist/types/src/components/index.d.ts.map +1 -1
  98. package/dist/types/src/components/testing.d.ts +97 -0
  99. package/dist/types/src/components/testing.d.ts.map +1 -0
  100. package/dist/types/src/hooks/index.d.ts +1 -4
  101. package/dist/types/src/hooks/index.d.ts.map +1 -1
  102. package/dist/types/src/hooks/useTableModel.d.ts +15 -0
  103. package/dist/types/src/hooks/useTableModel.d.ts.map +1 -0
  104. package/dist/types/src/index.d.ts +3 -4
  105. package/dist/types/src/index.d.ts.map +1 -1
  106. package/dist/types/src/model/index.d.ts +3 -0
  107. package/dist/types/src/model/index.d.ts.map +1 -0
  108. package/dist/types/src/model/modal-controller.d.ts +29 -0
  109. package/dist/types/src/model/modal-controller.d.ts.map +1 -0
  110. package/dist/types/src/model/selection-model.d.ts +22 -0
  111. package/dist/types/src/model/selection-model.d.ts.map +1 -0
  112. package/dist/types/src/model/table-model.d.ts +93 -0
  113. package/dist/types/src/model/table-model.d.ts.map +1 -0
  114. package/dist/types/src/model/table-model.test.d.ts +2 -0
  115. package/dist/types/src/model/table-model.test.d.ts.map +1 -0
  116. package/dist/types/src/translations.d.ts +23 -16
  117. package/dist/types/src/translations.d.ts.map +1 -1
  118. package/dist/types/src/types/index.d.ts +2 -0
  119. package/dist/types/src/types/index.d.ts.map +1 -0
  120. package/dist/types/src/types/table.d.ts +106 -0
  121. package/dist/types/src/types/table.d.ts.map +1 -0
  122. package/dist/types/src/util/grid.d.ts +14 -0
  123. package/dist/types/src/util/grid.d.ts.map +1 -0
  124. package/dist/types/src/util/index.d.ts +5 -0
  125. package/dist/types/src/util/index.d.ts.map +1 -0
  126. package/dist/types/src/util/signals.d.ts +6 -0
  127. package/dist/types/src/util/signals.d.ts.map +1 -0
  128. package/dist/types/src/util/table-buttons.d.ts +24 -0
  129. package/dist/types/src/util/table-buttons.d.ts.map +1 -0
  130. package/dist/types/src/util/table-controls.d.ts +21 -0
  131. package/dist/types/src/util/table-controls.d.ts.map +1 -0
  132. package/dist/types/src/util/table.d.ts +8 -0
  133. package/dist/types/src/util/table.d.ts.map +1 -0
  134. package/package.json +56 -22
  135. package/src/{components → _deprecated/components}/ColumnMenu/ColumnMenu.stories.tsx +4 -4
  136. package/src/{components → _deprecated/components}/ColumnMenu/ColumnSettings.stories.tsx +9 -9
  137. package/src/{components → _deprecated/components}/ColumnMenu/ColumnSettings.tsx +3 -3
  138. package/src/_deprecated/components/Table/Table.stories.tsx +508 -0
  139. package/src/_deprecated/components/Table/Table.tsx +301 -0
  140. package/src/{components → _deprecated/components}/Table/TableHead.tsx +3 -1
  141. package/src/_deprecated/components/Table/index.ts +8 -0
  142. package/src/_deprecated/components/index.ts +7 -0
  143. package/src/{helpers.tsx → _deprecated/helpers.tsx} +4 -3
  144. package/src/_deprecated/hooks/index.ts +8 -0
  145. package/src/_deprecated/index.ts +12 -0
  146. package/src/_deprecated/schema/column-utils.ts +54 -0
  147. package/src/{schema → _deprecated/schema}/types.ts +3 -2
  148. package/src/_deprecated/translations.ts +26 -0
  149. package/src/components/Table/ColumnActionsMenu.tsx +60 -0
  150. package/src/components/Table/ColumnSettings.tsx +76 -0
  151. package/src/components/Table/RowActionsMenu.tsx +36 -0
  152. package/src/components/Table/Table.stories.tsx +197 -467
  153. package/src/components/Table/Table.tsx +172 -256
  154. package/src/components/Table/index.ts +1 -4
  155. package/src/components/TableCellEditor/TableCellEditor.stories.tsx +114 -0
  156. package/src/components/TableCellEditor/TableCellEditor.tsx +155 -0
  157. package/src/components/TableCellEditor/extension.ts +62 -0
  158. package/src/components/TableCellEditor/index.ts +5 -0
  159. package/src/components/Toolbar/Toolbar.tsx +86 -0
  160. package/src/components/Toolbar/common.tsx +72 -0
  161. package/src/components/Toolbar/index.ts +5 -0
  162. package/src/components/index.ts +2 -3
  163. package/src/components/testing.ts +114 -0
  164. package/src/hooks/index.ts +1 -4
  165. package/src/hooks/useTableModel.ts +52 -0
  166. package/src/index.ts +5 -6
  167. package/src/model/index.ts +6 -0
  168. package/src/model/modal-controller.ts +83 -0
  169. package/src/model/selection-model.ts +99 -0
  170. package/src/model/table-model.test.ts +182 -0
  171. package/src/model/table-model.ts +565 -0
  172. package/src/translations.ts +20 -13
  173. package/src/types/index.ts +5 -0
  174. package/src/types/table.ts +13 -0
  175. package/src/util/grid.ts +23 -0
  176. package/src/util/index.ts +8 -0
  177. package/src/util/signals.ts +9 -0
  178. package/src/util/table-buttons.ts +48 -0
  179. package/src/util/table-controls.ts +27 -0
  180. package/src/util/table.ts +77 -0
  181. package/dist/types/src/components/Cell/Cell.d.ts.map +0 -1
  182. package/dist/types/src/components/Cell/CellCombobox.d.ts.map +0 -1
  183. package/dist/types/src/components/Cell/index.d.ts.map +0 -1
  184. package/dist/types/src/components/ColumnMenu/ColumnMenu.d.ts.map +0 -1
  185. package/dist/types/src/components/ColumnMenu/ColumnMenu.stories.d.ts.map +0 -1
  186. package/dist/types/src/components/ColumnMenu/ColumnSettings.d.ts.map +0 -1
  187. package/dist/types/src/components/ColumnMenu/ColumnSettings.stories.d.ts.map +0 -1
  188. package/dist/types/src/components/ColumnMenu/index.d.ts.map +0 -1
  189. package/dist/types/src/components/Table/TableBody.d.ts.map +0 -1
  190. package/dist/types/src/components/Table/TableContext.d.ts.map +0 -1
  191. package/dist/types/src/components/Table/TableHead.d.ts.map +0 -1
  192. package/dist/types/src/components/Table/TableRootContext.d.ts.map +0 -1
  193. package/dist/types/src/components/Table/props.d.ts.map +0 -1
  194. package/dist/types/src/helpers.d.ts.map +0 -1
  195. package/dist/types/src/hooks/useColumnSizing.d.ts.map +0 -1
  196. package/dist/types/src/hooks/useColumnSorting.d.ts.map +0 -1
  197. package/dist/types/src/hooks/usePinLastRow.d.ts.map +0 -1
  198. package/dist/types/src/hooks/useRowSelection.d.ts.map +0 -1
  199. package/dist/types/src/schema/Schema.stories.d.ts.map +0 -1
  200. package/dist/types/src/schema/column-utils.d.ts.map +0 -1
  201. package/dist/types/src/schema/index.d.ts.map +0 -1
  202. package/dist/types/src/schema/types.d.ts.map +0 -1
  203. package/dist/types/src/theme.d.ts.map +0 -1
  204. package/dist/types/src/types.d.ts.map +0 -1
  205. package/src/schema/column-utils.ts +0 -48
  206. /package/dist/types/src/{components → _deprecated/components}/Cell/Cell.d.ts +0 -0
  207. /package/dist/types/src/{components → _deprecated/components}/Cell/CellCombobox.d.ts +0 -0
  208. /package/dist/types/src/{components → _deprecated/components}/Cell/index.d.ts +0 -0
  209. /package/dist/types/src/{components → _deprecated/components}/ColumnMenu/ColumnMenu.d.ts +0 -0
  210. /package/dist/types/src/{components → _deprecated/components}/ColumnMenu/ColumnMenu.stories.d.ts +0 -0
  211. /package/dist/types/src/{components → _deprecated/components}/ColumnMenu/ColumnSettings.d.ts +0 -0
  212. /package/dist/types/src/{components → _deprecated/components}/ColumnMenu/index.d.ts +0 -0
  213. /package/dist/types/src/{components → _deprecated/components}/Table/TableBody.d.ts +0 -0
  214. /package/dist/types/src/{components → _deprecated/components}/Table/TableContext.d.ts +0 -0
  215. /package/dist/types/src/{components → _deprecated/components}/Table/TableHead.d.ts +0 -0
  216. /package/dist/types/src/{components → _deprecated/components}/Table/TableRootContext.d.ts +0 -0
  217. /package/dist/types/src/{components → _deprecated/components}/Table/props.d.ts +0 -0
  218. /package/dist/types/src/{helpers.d.ts → _deprecated/helpers.d.ts} +0 -0
  219. /package/dist/types/src/{hooks → _deprecated/hooks}/useColumnSizing.d.ts +0 -0
  220. /package/dist/types/src/{hooks → _deprecated/hooks}/usePinLastRow.d.ts +0 -0
  221. /package/dist/types/src/{hooks → _deprecated/hooks}/useRowSelection.d.ts +0 -0
  222. /package/dist/types/src/{schema → _deprecated/schema}/Schema.stories.d.ts +0 -0
  223. /package/dist/types/src/{schema → _deprecated/schema}/index.d.ts +0 -0
  224. /package/dist/types/src/{theme.d.ts → _deprecated/theme.d.ts} +0 -0
  225. /package/dist/types/src/{types.d.ts → _deprecated/types.d.ts} +0 -0
  226. /package/src/{components → _deprecated/components}/Cell/Cell.tsx +0 -0
  227. /package/src/{components → _deprecated/components}/Cell/CellCombobox.tsx +0 -0
  228. /package/src/{components → _deprecated/components}/Cell/index.ts +0 -0
  229. /package/src/{components → _deprecated/components}/ColumnMenu/ColumnMenu.tsx +0 -0
  230. /package/src/{components → _deprecated/components}/ColumnMenu/index.ts +0 -0
  231. /package/src/{components → _deprecated/components}/Table/TableBody.tsx +0 -0
  232. /package/src/{components → _deprecated/components}/Table/TableContext.tsx +0 -0
  233. /package/src/{components → _deprecated/components}/Table/TableRootContext.ts +0 -0
  234. /package/src/{components → _deprecated/components}/Table/props.ts +0 -0
  235. /package/src/{hooks → _deprecated/hooks}/useColumnSizing.ts +0 -0
  236. /package/src/{hooks → _deprecated/hooks}/useColumnSorting.ts +0 -0
  237. /package/src/{hooks → _deprecated/hooks}/usePinLastRow.ts +0 -0
  238. /package/src/{hooks → _deprecated/hooks}/useRowSelection.ts +0 -0
  239. /package/src/{schema → _deprecated/schema}/Schema.stories.tsx +0 -0
  240. /package/src/{schema → _deprecated/schema}/index.ts +0 -0
  241. /package/src/{theme.ts → _deprecated/theme.ts} +0 -0
  242. /package/src/{types.ts → _deprecated/types.ts} +0 -0
@@ -0,0 +1,1381 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var node_exports = {};
30
+ __export(node_exports, {
31
+ Table: () => Table,
32
+ TableType: () => import_chunk_32IGMRME.TableType,
33
+ Toolbar: () => Toolbar,
34
+ fromGridCell: () => fromGridCell,
35
+ initializeTable: () => initializeTable,
36
+ tableButtons: () => tableButtons,
37
+ toGridCell: () => toGridCell,
38
+ touch: () => touch,
39
+ translations: () => translations_default,
40
+ useTableModel: () => useTableModel,
41
+ useToolbarContext: () => useToolbarContext
42
+ });
43
+ module.exports = __toCommonJS(node_exports);
44
+ var import_chunk_32IGMRME = require("./chunk-32IGMRME.cjs");
45
+ var import_react = __toESM(require("react"));
46
+ var import_echo_schema = require("@dxos/echo-schema");
47
+ var import_invariant = require("@dxos/invariant");
48
+ var import_echo = require("@dxos/react-client/echo");
49
+ var import_react_ui_attention = require("@dxos/react-ui-attention");
50
+ var import_react_ui_grid = require("@dxos/react-ui-grid");
51
+ var import_react_ui_theme = require("@dxos/react-ui-theme");
52
+ var import_util = require("@dxos/util");
53
+ var import_react2 = __toESM(require("react"));
54
+ var import_react_ui = require("@dxos/react-ui");
55
+ var import_react3 = __toESM(require("react"));
56
+ var import_echo2 = require("@dxos/react-client/echo");
57
+ var import_react_ui2 = require("@dxos/react-ui");
58
+ var import_react_ui_data = require("@dxos/react-ui-data");
59
+ var import_react4 = __toESM(require("react"));
60
+ var import_react_ui3 = require("@dxos/react-ui");
61
+ var import_react5 = __toESM(require("react"));
62
+ var import_echo_schema2 = require("@dxos/echo-schema");
63
+ var import_invariant2 = require("@dxos/invariant");
64
+ var import_react_ui_grid2 = require("@dxos/react-ui-grid");
65
+ var import_autocomplete = require("@codemirror/autocomplete");
66
+ var import_view = require("@codemirror/view");
67
+ var import_echo_schema3 = require("@dxos/echo-schema");
68
+ var import_log = require("@dxos/log");
69
+ var import_react_client = require("@dxos/react-client");
70
+ var import_echo3 = require("@dxos/react-client/echo");
71
+ var import_schema = require("@dxos/schema");
72
+ var import_react6 = require("@phosphor-icons/react");
73
+ var import_react_context = require("@radix-ui/react-context");
74
+ var import_react7 = __toESM(require("react"));
75
+ var import_react_ui4 = require("@dxos/react-ui");
76
+ var import_react8 = __toESM(require("react"));
77
+ var import_react_ui5 = require("@dxos/react-ui");
78
+ var import_react_ui_theme2 = require("@dxos/react-ui-theme");
79
+ var import_react9 = require("react");
80
+ var import_signals_core = require("@preact/signals-core");
81
+ var import_lodash = __toESM(require("lodash.orderby"));
82
+ var import_context = require("@dxos/context");
83
+ var import_echo_schema4 = require("@dxos/echo-schema");
84
+ var import_invariant3 = require("@dxos/invariant");
85
+ var import_react_client2 = require("@dxos/react-client");
86
+ var import_react_ui_data2 = require("@dxos/react-ui-data");
87
+ var import_react_ui_theme3 = require("@dxos/react-ui-theme");
88
+ var import_schema2 = require("@dxos/schema");
89
+ var import_signals_core2 = require("@preact/signals-core");
90
+ var import_signals_core3 = require("@preact/signals-core");
91
+ var import_context2 = require("@dxos/context");
92
+ var translationKey = "table";
93
+ var translations_default = [
94
+ {
95
+ "en-US": {
96
+ [translationKey]: {
97
+ "object placeholder": "New table",
98
+ "create object label": "Create table",
99
+ "table name placeholder": "Table name",
100
+ "settings title": "Table settings",
101
+ "table schema label": "Schema",
102
+ "new schema": "New schema",
103
+ "continue label": "Continue",
104
+ "create stack section label": "Create table",
105
+ "add row": "Add row",
106
+ "create comment": "Create thread",
107
+ "column action sort descending": "Sort Descending",
108
+ "column action sort ascending": "Sort Ascending",
109
+ "column action clear sorting": "Clear Sorting",
110
+ "column action settings": "Column Settings",
111
+ "column action delete": "Delete Column",
112
+ "delete row label": "Delete row",
113
+ "bulk delete row label": "Delete selected rows",
114
+ "column deleted label": "Column deleted",
115
+ "new column button label": "Create column"
116
+ }
117
+ }
118
+ }
119
+ ];
120
+ var ColumnActionsMenu = ({ model }) => {
121
+ const { t } = (0, import_react_ui.useTranslation)(translationKey);
122
+ const state = model?.modalController.state.value;
123
+ if (!model || state?.type !== "column") {
124
+ return null;
125
+ }
126
+ const currentSort = model.sorting;
127
+ const isCurrentColumnSorted = currentSort?.fieldId === state.fieldId;
128
+ return /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Root, {
129
+ modal: false,
130
+ open: state?.type === "column",
131
+ onOpenChange: model.modalController.close
132
+ }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.VirtualTrigger, {
133
+ virtualRef: model.modalController.trigger
134
+ }), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Portal, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Content, null, /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Viewport, null, (!isCurrentColumnSorted || currentSort?.direction === "asc") && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Item, {
135
+ onClick: () => model.setSort(state.fieldId, "desc")
136
+ }, t("column action sort descending")), (!isCurrentColumnSorted || currentSort?.direction === "desc") && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Item, {
137
+ onClick: () => model.setSort(state.fieldId, "asc")
138
+ }, t("column action sort ascending")), isCurrentColumnSorted && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Item, {
139
+ onClick: () => model.clearSort()
140
+ }, t("column action clear sorting")), model.getColumnCount() > 1 && /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Item, {
141
+ onClick: () => model.deleteColumn(state.fieldId)
142
+ }, t("column action delete")), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Item, {
143
+ onClick: () => model.modalController.openColumnSettings()
144
+ }, t("column action settings"))), /* @__PURE__ */ import_react2.default.createElement(import_react_ui.DropdownMenu.Arrow, null))));
145
+ };
146
+ var ColumnSettings = ({ model }) => {
147
+ const [newField, setNewField] = (0, import_react3.useState)();
148
+ const state = model?.modalController.state.value;
149
+ const space = (0, import_echo2.getSpace)(model?.table);
150
+ (0, import_react3.useEffect)(() => {
151
+ if (state?.type === "columnSettings" && state.mode.type === "create" && model?.projection) {
152
+ setNewField(model.projection.createFieldProjection());
153
+ } else {
154
+ setNewField(void 0);
155
+ }
156
+ }, [
157
+ model?.projection,
158
+ state
159
+ ]);
160
+ const existingField = (0, import_react3.useMemo)(() => {
161
+ if (state?.type === "columnSettings") {
162
+ const { mode } = state;
163
+ if (mode.type === "edit") {
164
+ return model?.table?.view?.fields.find((f) => f.id === mode.fieldId);
165
+ }
166
+ }
167
+ return void 0;
168
+ }, [
169
+ model?.table?.view?.fields,
170
+ state
171
+ ]);
172
+ const field = existingField ?? newField;
173
+ const handleClose = (0, import_react3.useCallback)(() => {
174
+ model?.modalController.close();
175
+ }, [
176
+ model?.modalController
177
+ ]);
178
+ const handleCancel = (0, import_react3.useCallback)(() => {
179
+ if (state?.type === "columnSettings" && state.mode.type === "create" && newField) {
180
+ model?.projection?.deleteFieldProjection(newField.id);
181
+ }
182
+ }, [
183
+ model?.projection,
184
+ state,
185
+ newField
186
+ ]);
187
+ if (!model?.table?.view || !model.projection || !field) {
188
+ return null;
189
+ }
190
+ return /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.Root, {
191
+ modal: false,
192
+ open: state?.type === "columnSettings"
193
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.VirtualTrigger, {
194
+ virtualRef: model.modalController.trigger
195
+ }), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.Portal, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.Content, {
196
+ classNames: "md:is-64"
197
+ }, /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.Viewport, null, /* @__PURE__ */ import_react3.default.createElement(import_react_ui_data.FieldEditor, {
198
+ view: model.table.view,
199
+ projection: model.projection,
200
+ field,
201
+ registry: space?.db.schemaRegistry,
202
+ onClose: handleClose,
203
+ onCancel: handleCancel
204
+ })), /* @__PURE__ */ import_react3.default.createElement(import_react_ui2.DropdownMenu.Arrow, null))));
205
+ };
206
+ var RowActionsMenu = ({ model }) => {
207
+ const { t } = (0, import_react_ui3.useTranslation)(translationKey);
208
+ const state = model.modalController.state.value;
209
+ const hasSelection = model.selection.hasSelection.value;
210
+ if (state?.type !== "row") {
211
+ return null;
212
+ }
213
+ return /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.Root, {
214
+ modal: false,
215
+ open: true,
216
+ onOpenChange: model.modalController.close
217
+ }, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.VirtualTrigger, {
218
+ virtualRef: model.modalController.trigger
219
+ }), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.Content, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.Viewport, null, /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.Item, {
220
+ onClick: () => model.deleteRow(state.rowIndex)
221
+ }, t(hasSelection ? "bulk delete row label" : "delete row label"))), /* @__PURE__ */ import_react4.default.createElement(import_react_ui3.DropdownMenu.Arrow, null)));
222
+ };
223
+ var completion = ({ onQuery, onMatch }) => {
224
+ return [
225
+ import_view.EditorView.theme({
226
+ ".cm-completionDialog": {
227
+ width: "var(--dx-gridCellWidth)"
228
+ }
229
+ }),
230
+ (0, import_autocomplete.autocompletion)({
231
+ icons: false,
232
+ activateOnTyping: true,
233
+ override: [
234
+ async (context) => {
235
+ const text = context.state.doc.toString();
236
+ return {
237
+ from: 0,
238
+ options: await onQuery(text)
239
+ };
240
+ }
241
+ ],
242
+ // TODO(burdon): Consts from grid (to line-up with grid).
243
+ tooltipClass: () => "cm-completionDialog !mt-[8px] !-ml-[4px] [&>ul]:!max-h-[264px]",
244
+ optionClass: () => "flex h-[33px] items-center"
245
+ }),
246
+ // Check for accepted completion metadata in the transaction.
247
+ import_view.EditorView.updateListener.of((update) => {
248
+ update.transactions.forEach((tr) => {
249
+ const completion2 = tr.annotation(import_autocomplete.pickedCompletion);
250
+ if (completion2) {
251
+ onMatch(completion2.data);
252
+ }
253
+ });
254
+ })
255
+ ];
256
+ };
257
+ var fromGridCell = ({ col, row }) => {
258
+ return `${col},${row}`;
259
+ };
260
+ var toGridCell = (cell) => {
261
+ const [col, row] = cell.split(",").map(Number);
262
+ return {
263
+ row,
264
+ col
265
+ };
266
+ };
267
+ var touch = (value) => value;
268
+ var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/util/table.ts";
269
+ var initializeTable = ({ space, table }) => {
270
+ import_log.log.info("initializeTable", {
271
+ table
272
+ }, {
273
+ F: __dxlog_file,
274
+ L: 26,
275
+ S: void 0,
276
+ C: (f, a) => f(...a)
277
+ });
278
+ const ContactSchema = (0, import_echo_schema3.TypedObject)({
279
+ typename: `example.com/type/${import_react_client.PublicKey.random().truncate()}`,
280
+ version: "0.1.0"
281
+ })({
282
+ name: import_echo_schema3.S.optional(import_echo_schema3.S.String).annotations({
283
+ [import_echo_schema3.AST.TitleAnnotationId]: "Name"
284
+ }),
285
+ email: import_echo_schema3.S.optional(import_echo_schema3.Format.Email),
286
+ salary: import_echo_schema3.S.optional(import_echo_schema3.Format.Currency()).annotations({
287
+ [import_echo_schema3.AST.TitleAnnotationId]: "Salary"
288
+ })
289
+ });
290
+ const contactSchema = space.db.schemaRegistry.addSchema(ContactSchema);
291
+ table.view = (0, import_schema.createView)({
292
+ name: "Test",
293
+ typename: contactSchema.typename,
294
+ jsonSchema: contactSchema.jsonSchema,
295
+ fields: [
296
+ "name",
297
+ "email",
298
+ "salary"
299
+ ]
300
+ });
301
+ const projection = new import_schema.ViewProjection(contactSchema, table.view);
302
+ projection.setFieldProjection({
303
+ field: {
304
+ id: table.view.fields[2].id,
305
+ path: "salary",
306
+ size: 150
307
+ }
308
+ });
309
+ projection.setFieldProjection({
310
+ field: {
311
+ id: (0, import_schema.createFieldId)(),
312
+ path: "manager",
313
+ referencePath: "name"
314
+ },
315
+ props: {
316
+ property: "manager",
317
+ type: import_echo_schema3.TypeEnum.Ref,
318
+ format: import_echo_schema3.FormatEnum.Ref,
319
+ referenceSchema: contactSchema.typename,
320
+ title: "Manager"
321
+ }
322
+ });
323
+ space.db.add((0, import_echo3.create)(contactSchema, {}));
324
+ return contactSchema;
325
+ };
326
+ var TABLE_ATTRS = {
327
+ columnSettings: "data-table-column-settings-button",
328
+ rowMenu: "data-table-row-menu-button",
329
+ newColumn: "data-table-new-column-button"
330
+ };
331
+ var ICONS = {
332
+ columnSettings: "ph--caret-down--regular",
333
+ rowMenu: "ph--dots-three--regular",
334
+ newColumn: "ph--plus--regular"
335
+ };
336
+ var createButtonHtml = ({ button, value = "", disabled = false }) => {
337
+ const buttonClasses = "ch-button is-6 pli-0.5 min-bs-0 absolute inset-block-1 inline-end-2";
338
+ return `<button class="${buttonClasses}" ${TABLE_ATTRS[button]}="${value}" ${disabled ? "disabled" : ""}><svg><use href="/icons.svg#${ICONS[button]}"/></svg></button>`;
339
+ };
340
+ var tableButtons = {
341
+ columnSettings: {
342
+ attr: TABLE_ATTRS.columnSettings,
343
+ icon: ICONS.columnSettings,
344
+ render: ({ fieldId }) => createButtonHtml({
345
+ button: "columnSettings",
346
+ value: fieldId
347
+ })
348
+ },
349
+ rowMenu: {
350
+ attr: TABLE_ATTRS.rowMenu,
351
+ icon: ICONS.rowMenu,
352
+ render: ({ rowIndex }) => createButtonHtml({
353
+ button: "rowMenu",
354
+ value: rowIndex.toString()
355
+ })
356
+ },
357
+ addColumn: {
358
+ attr: TABLE_ATTRS.newColumn,
359
+ icon: ICONS.newColumn,
360
+ render: ({ disabled } = {}) => createButtonHtml({
361
+ button: "newColumn",
362
+ disabled
363
+ })
364
+ }
365
+ };
366
+ var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/components/TableCellEditor/TableCellEditor.tsx";
367
+ var TableCellEditor = ({ model, onEnter, onFocus, onQuery, __gridScope }) => {
368
+ const { editing } = (0, import_react_ui_grid2.useGridContext)("TableCellEditor", __gridScope);
369
+ const fieldProjection = (0, import_react5.useMemo)(() => {
370
+ if (!model || !editing) {
371
+ return;
372
+ }
373
+ const { col } = toGridCell(editing.index);
374
+ const field = model.projection.view.fields[col];
375
+ const fieldProjection2 = model.projection.getFieldProjection(field.id);
376
+ (0, import_invariant2.invariant)(fieldProjection2, void 0, {
377
+ F: __dxlog_file2,
378
+ L: 49,
379
+ S: void 0,
380
+ A: [
381
+ "fieldProjection",
382
+ ""
383
+ ]
384
+ });
385
+ return fieldProjection2;
386
+ }, [
387
+ model,
388
+ editing
389
+ ]);
390
+ const handleClose = (0, import_react5.useCallback)((value, event) => {
391
+ if (!model || !editing || !fieldProjection) {
392
+ return;
393
+ }
394
+ const cell = toGridCell(editing.index);
395
+ onEnter?.(cell);
396
+ if (event && onFocus) {
397
+ onFocus(determineNavigationAxis(event), determineNavigationDelta(event));
398
+ }
399
+ }, [
400
+ model,
401
+ editing,
402
+ onFocus,
403
+ onEnter,
404
+ fieldProjection,
405
+ determineNavigationAxis,
406
+ determineNavigationDelta
407
+ ]);
408
+ const handleBlur = (0, import_react5.useCallback)((value) => {
409
+ if (!model || !editing) {
410
+ return;
411
+ }
412
+ const cell = toGridCell(editing.index);
413
+ if (value !== void 0) {
414
+ model.setCellData(cell, value);
415
+ }
416
+ }, [
417
+ model,
418
+ editing
419
+ ]);
420
+ const extension = (0, import_react5.useMemo)(() => {
421
+ if (!fieldProjection) {
422
+ return [];
423
+ }
424
+ const extension2 = [
425
+ (0, import_react_ui_grid2.editorKeys)({
426
+ onClose: handleClose,
427
+ ...editing?.initialContent && {
428
+ onNav: handleClose
429
+ }
430
+ })
431
+ ];
432
+ if (onQuery) {
433
+ switch (fieldProjection.props.format) {
434
+ case import_echo_schema2.FormatEnum.Ref: {
435
+ extension2.push([
436
+ completion({
437
+ onQuery: (text) => onQuery(fieldProjection, text),
438
+ onMatch: (data) => {
439
+ if (model && editing) {
440
+ const cell = toGridCell(editing.index);
441
+ model.setCellData(cell, data);
442
+ onEnter?.(cell);
443
+ onFocus?.();
444
+ }
445
+ }
446
+ })
447
+ ]);
448
+ break;
449
+ }
450
+ }
451
+ }
452
+ return extension2;
453
+ }, [
454
+ model,
455
+ editing,
456
+ fieldProjection,
457
+ handleClose
458
+ ]);
459
+ const getCellContent = (0, import_react5.useCallback)(() => {
460
+ if (model && editing) {
461
+ const value = model.getCellData(toGridCell(editing.index));
462
+ return value !== void 0 ? String(value) : "";
463
+ }
464
+ }, [
465
+ model,
466
+ editing
467
+ ]);
468
+ return /* @__PURE__ */ import_react5.default.createElement(import_react_ui_grid2.GridCellEditor, {
469
+ extension,
470
+ getCellContent,
471
+ onBlur: handleBlur
472
+ });
473
+ };
474
+ var determineNavigationAxis = ({ key }) => {
475
+ switch (key) {
476
+ case "ArrowUp":
477
+ case "ArrowDown":
478
+ case "Enter": {
479
+ return "row";
480
+ }
481
+ case "ArrowLeft":
482
+ case "ArrowRight":
483
+ case "Tab":
484
+ return "col";
485
+ }
486
+ };
487
+ var determineNavigationDelta = ({ key, shift }) => {
488
+ switch (key) {
489
+ case "ArrowUp":
490
+ case "ArrowLeft":
491
+ return -1;
492
+ case "ArrowDown":
493
+ case "ArrowRight":
494
+ return 1;
495
+ }
496
+ return shift ? -1 : 1;
497
+ };
498
+ var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/components/Table/Table.tsx";
499
+ var inlineEndLine = "[&>.dx-grid]:relative [&>.dx-grid]:after:absolute [&>.dx-grid]:after:inset-block-0 [&>.dx-grid]:after:-inline-end-px [&>.dx-grid]:after:is-px [&>.dx-grid]:after:bg-separator";
500
+ var blockEndLine = "[&>.dx-grid]:before:absolute [&>.dx-grid]:before:inset-inline-0 [&>.dx-grid]:before:-block-end-px [&>.dx-grid]:before:bs-px [&>.dx-grid]:before:bg-separator";
501
+ var frozen = {
502
+ frozenRowsStart: 1,
503
+ frozenColsStart: 1,
504
+ frozenColsEnd: 1
505
+ };
506
+ var TableRoot = ({ children }) => {
507
+ return /* @__PURE__ */ import_react.default.createElement("div", {
508
+ role: "none",
509
+ className: "relative flex flex-col"
510
+ }, children);
511
+ };
512
+ var TableMain = /* @__PURE__ */ (0, import_react.forwardRef)(({ model }, forwardedRef) => {
513
+ const [dxGrid, setDxGrid] = (0, import_react.useState)(null);
514
+ const { hasAttention } = (0, import_react_ui_attention.useAttention)(model?.table ? (0, import_echo.fullyQualifiedId)(model.table) : "table");
515
+ (0, import_react.useImperativeHandle)(forwardedRef, () => {
516
+ if (!model || !dxGrid) {
517
+ return {};
518
+ }
519
+ dxGrid.getCells = model.getCells.bind(model);
520
+ return {
521
+ update: (cell) => {
522
+ if (cell) {
523
+ dxGrid.updateIfWithinBounds(cell);
524
+ } else {
525
+ dxGrid.updateCells(true);
526
+ }
527
+ }
528
+ };
529
+ }, [
530
+ model,
531
+ dxGrid
532
+ ]);
533
+ const handleFocus = (increment, delta) => {
534
+ dxGrid?.refocus(increment, delta);
535
+ };
536
+ const handleEnter = (0, import_react.useCallback)((cell) => {
537
+ if (model && cell.row === model.getRowCount() - 1) {
538
+ model.insertRow(cell.row);
539
+ }
540
+ }, [
541
+ model
542
+ ]);
543
+ const handleKeyDown = (0, import_react.useCallback)((event) => {
544
+ const cell = (0, import_react_ui_grid.closestCell)(event.target);
545
+ if (!model || !cell) {
546
+ return;
547
+ }
548
+ switch (event.key) {
549
+ case "Backspace":
550
+ case "Delete": {
551
+ model.setCellData(cell, void 0);
552
+ break;
553
+ }
554
+ }
555
+ }, [
556
+ model
557
+ ]);
558
+ const handleAxisResize = (0, import_react.useCallback)((event) => {
559
+ if (event.axis === "col") {
560
+ const columnIndex = parseInt(event.index, 10);
561
+ model?.setColumnWidth(columnIndex, event.size);
562
+ }
563
+ }, [
564
+ model
565
+ ]);
566
+ const handleWheel = (0, import_react.useCallback)((event) => {
567
+ if (!hasAttention) {
568
+ event.stopPropagation();
569
+ }
570
+ }, [
571
+ hasAttention
572
+ ]);
573
+ const handleQuery = (0, import_react.useCallback)(async ({ field, props }, _text) => {
574
+ if (model && props.referenceSchema && field.referencePath) {
575
+ const space = (0, import_echo.getSpace)(model.table);
576
+ (0, import_invariant.invariant)(space, void 0, {
577
+ F: __dxlog_file3,
578
+ L: 149,
579
+ S: void 0,
580
+ A: [
581
+ "space",
582
+ ""
583
+ ]
584
+ });
585
+ const schema = space.db.schemaRegistry.getSchema(props.referenceSchema);
586
+ if (schema) {
587
+ const { objects } = await space.db.query(import_echo.Filter.schema(schema)).run();
588
+ return objects.map((obj) => {
589
+ const value = (0, import_echo_schema.getValue)(obj, field.referencePath);
590
+ if (!value || typeof value !== "string") {
591
+ return void 0;
592
+ }
593
+ return {
594
+ label: value,
595
+ data: obj
596
+ };
597
+ }).filter(import_util.isNotFalsy);
598
+ }
599
+ }
600
+ return [];
601
+ }, [
602
+ model
603
+ ]);
604
+ if (!model) {
605
+ return /* @__PURE__ */ import_react.default.createElement("span", {
606
+ role: "none",
607
+ className: "attention-surface"
608
+ });
609
+ }
610
+ return /* @__PURE__ */ import_react.default.createElement(import_react.default.Fragment, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui_grid.Grid.Root, {
611
+ id: model.table.id ?? "table-grid"
612
+ }, /* @__PURE__ */ import_react.default.createElement(TableCellEditor, {
613
+ model,
614
+ onEnter: handleEnter,
615
+ onFocus: handleFocus,
616
+ onQuery: handleQuery
617
+ }), /* @__PURE__ */ import_react.default.createElement(import_react_ui_grid.Grid.Content, {
618
+ onWheelCapture: handleWheel,
619
+ className: (0, import_react_ui_theme.mx)("[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:grow [&_.dx-grid]:max-is-max [&_.dx-grid]:bs-0 [&_.dx-grid]:max-bs-max", inlineEndLine, blockEndLine),
620
+ frozen,
621
+ columns: model.columnMeta.value,
622
+ limitRows: model.getRowCount() ?? 0,
623
+ limitColumns: model.table.view?.fields?.length ?? 0,
624
+ onAxisResize: handleAxisResize,
625
+ onClick: model?.handleGridClick,
626
+ onKeyDown: handleKeyDown,
627
+ overscroll: "trap",
628
+ ref: setDxGrid
629
+ })), /* @__PURE__ */ import_react.default.createElement(RowActionsMenu, {
630
+ model
631
+ }), /* @__PURE__ */ import_react.default.createElement(ColumnActionsMenu, {
632
+ model
633
+ }), /* @__PURE__ */ import_react.default.createElement(ColumnSettings, {
634
+ model
635
+ }));
636
+ });
637
+ var Table = {
638
+ Root: TableRoot,
639
+ Main: TableMain
640
+ };
641
+ var iconStyles = (0, import_react_ui_theme2.getSize)(5);
642
+ var buttonStyles = "min-bs-0 p-2";
643
+ var tooltipProps = {
644
+ side: "top",
645
+ classNames: "z-10"
646
+ };
647
+ var ToolbarSeparator = () => /* @__PURE__ */ import_react8.default.createElement("div", {
648
+ role: "separator",
649
+ className: "grow"
650
+ });
651
+ var ToolbarButton = ({ Icon, children, ...props }) => {
652
+ return /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Tooltip.Root, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Tooltip.Trigger, {
653
+ asChild: true
654
+ }, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Toolbar.Button, {
655
+ variant: "ghost",
656
+ ...props,
657
+ classNames: buttonStyles
658
+ }, /* @__PURE__ */ import_react8.default.createElement(Icon, {
659
+ className: iconStyles
660
+ }), /* @__PURE__ */ import_react8.default.createElement("span", {
661
+ className: "sr-only"
662
+ }, children))), /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Tooltip.Portal, null, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Tooltip.Content, tooltipProps, children, /* @__PURE__ */ import_react8.default.createElement(import_react_ui5.Tooltip.Arrow, null))));
663
+ };
664
+ var [ToolbarContextProvider, useToolbarContext] = (0, import_react_context.createContext)("Toolbar");
665
+ var ToolbarRoot = ({ classNames, children, onAction }) => {
666
+ return /* @__PURE__ */ import_react7.default.createElement(ToolbarContextProvider, {
667
+ onAction
668
+ }, /* @__PURE__ */ import_react7.default.createElement(import_react_ui4.Toolbar.Root, {
669
+ classNames: [
670
+ "is-full shrink-0 overflow-x-auto overflow-y-hidden p-1",
671
+ classNames
672
+ ]
673
+ }, children));
674
+ };
675
+ var Editing = () => {
676
+ const { onAction } = useToolbarContext("Editing");
677
+ const { t } = (0, import_react_ui4.useTranslation)(translationKey);
678
+ return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, /* @__PURE__ */ import_react7.default.createElement(ToolbarButton, {
679
+ value: "add-row",
680
+ Icon: import_react6.RowsPlusBottom,
681
+ "data-testid": "table.toolbar.add-row",
682
+ onClick: () => onAction?.({
683
+ type: "add-row"
684
+ })
685
+ }, t("add row")));
686
+ };
687
+ var Actions = () => {
688
+ const { onAction } = useToolbarContext("Actions");
689
+ const { t } = (0, import_react_ui4.useTranslation)(translationKey);
690
+ return /* @__PURE__ */ import_react7.default.createElement(import_react7.default.Fragment, null, /* @__PURE__ */ import_react7.default.createElement(ToolbarButton, {
691
+ value: "comment",
692
+ Icon: import_react6.ChatText,
693
+ "data-testid": "table.toolbar.comment",
694
+ onClick: () => onAction?.({
695
+ type: "comment"
696
+ })
697
+ }, t("create comment")));
698
+ };
699
+ var Toolbar = {
700
+ Root: ToolbarRoot,
701
+ Editing,
702
+ Actions,
703
+ Separator: ToolbarSeparator
704
+ };
705
+ var ModalController = class {
706
+ constructor() {
707
+ this._state = (0, import_signals_core2.signal)({
708
+ type: "closed"
709
+ });
710
+ this._triggerRef = {
711
+ current: null
712
+ };
713
+ this.handleClick = (event) => {
714
+ const target = event.target;
715
+ const rowButton = target.closest(`button[${tableButtons.rowMenu.attr}]`);
716
+ if (rowButton) {
717
+ this._triggerRef.current = rowButton;
718
+ this._state.value = {
719
+ type: "row",
720
+ rowIndex: Number(rowButton.getAttribute(tableButtons.rowMenu.attr))
721
+ };
722
+ return true;
723
+ }
724
+ const columnButton = target.closest(`button[${tableButtons.columnSettings.attr}]`);
725
+ if (columnButton) {
726
+ const fieldId = columnButton.getAttribute(tableButtons.columnSettings.attr);
727
+ this._triggerRef.current = columnButton;
728
+ this._state.value = {
729
+ type: "column",
730
+ fieldId
731
+ };
732
+ return true;
733
+ }
734
+ const addColumnButton = target.closest(`button[${tableButtons.addColumn.attr}]`);
735
+ if (addColumnButton) {
736
+ this._triggerRef.current = addColumnButton;
737
+ this._state.value = {
738
+ type: "columnSettings",
739
+ mode: {
740
+ type: "create"
741
+ }
742
+ };
743
+ return true;
744
+ }
745
+ return false;
746
+ };
747
+ this.openColumnSettings = () => {
748
+ if (this._state.value.type === "column") {
749
+ const fieldId = this._state.value.fieldId;
750
+ requestAnimationFrame(() => {
751
+ this._state.value = {
752
+ type: "columnSettings",
753
+ mode: {
754
+ type: "edit",
755
+ fieldId
756
+ }
757
+ };
758
+ });
759
+ }
760
+ };
761
+ this.close = () => {
762
+ this._state.value = {
763
+ type: "closed"
764
+ };
765
+ };
766
+ }
767
+ get state() {
768
+ return this._state;
769
+ }
770
+ get trigger() {
771
+ return this._triggerRef;
772
+ }
773
+ };
774
+ var SelectionModel = class extends import_context2.Resource {
775
+ constructor(_rows, _onSelectionChanged) {
776
+ super();
777
+ this._rows = _rows;
778
+ this._onSelectionChanged = _onSelectionChanged;
779
+ this._selection = (0, import_signals_core3.signal)(/* @__PURE__ */ new Set());
780
+ this._validSelectedIds = (0, import_signals_core3.computed)(() => {
781
+ const rows = this._rows.value;
782
+ if (!rows) {
783
+ return /* @__PURE__ */ new Set();
784
+ }
785
+ const validIds = new Set(rows.map((row) => row.id));
786
+ return new Set([
787
+ ...this._selection.value
788
+ ].filter((id) => validIds.has(id)));
789
+ });
790
+ this._hasSelection = (0, import_signals_core3.computed)(() => this._validSelectedIds.value.size > 0);
791
+ this._allSelected = (0, import_signals_core3.computed)(() => {
792
+ const rows = this._rows.value;
793
+ if (rows.length === 0) {
794
+ return false;
795
+ }
796
+ return rows.length !== 0 || rows.every((row) => this._selection.value.has(row.id));
797
+ });
798
+ this.getSelectedRows = () => {
799
+ const selectedIds = this._validSelectedIds.value;
800
+ return this._rows.value.filter((row) => selectedIds.has(row.id));
801
+ };
802
+ this.isRowIndexSelected = (rowIndex) => {
803
+ const row = this._rows.value[rowIndex];
804
+ return this._selection.value.has(row.id);
805
+ };
806
+ this.isObjectSelected = (object) => {
807
+ return this._selection.value.has(object.id);
808
+ };
809
+ this.toggleSelectionForRowIndex = (rowIndex) => {
810
+ const row = this._rows.value[rowIndex];
811
+ const newSelection = new Set(this._selection.value);
812
+ if (newSelection.has(row.id)) {
813
+ newSelection.delete(row.id);
814
+ } else {
815
+ newSelection.add(row.id);
816
+ }
817
+ this._selection.value = newSelection;
818
+ };
819
+ this.setSelection = (mode) => {
820
+ this._selection.value = mode === "all" ? new Set(this._rows.value.map((row) => row.id)) : /* @__PURE__ */ new Set();
821
+ };
822
+ }
823
+ async _open() {
824
+ const selectionWatcher = (0, import_signals_core3.effect)(() => {
825
+ touch(this._selection.value);
826
+ this._onSelectionChanged?.();
827
+ });
828
+ this._ctx.onDispose(selectionWatcher);
829
+ }
830
+ //
831
+ // Getters
832
+ //
833
+ get selection() {
834
+ return this._selection;
835
+ }
836
+ get hasSelection() {
837
+ return this._hasSelection;
838
+ }
839
+ get allRowsSeleted() {
840
+ return this._allSelected;
841
+ }
842
+ };
843
+ var checkboxAttributes = {
844
+ checkbox: "data-table-checkbox",
845
+ header: "data-table-header"
846
+ };
847
+ var renderCheckbox = ({ rowIndex, header = false, checked = false, disabled = false }) => {
848
+ const baseClasses = "absolute inset-block-[6px] inline-end-[6px]";
849
+ const { attributes } = tableControls.checkbox;
850
+ return `<input type="checkbox" class="${baseClasses}" ${attributes.checkbox}="${rowIndex}" ${header ? attributes.header : ""} ${checked ? "checked" : ""} ${disabled ? "disabled" : ""}/>`;
851
+ };
852
+ var tableControls = {
853
+ checkbox: {
854
+ attributes: checkboxAttributes,
855
+ render: renderCheckbox
856
+ }
857
+ };
858
+ var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-table/src/model/table-model.ts";
859
+ var TableModel = class extends import_context.Resource {
860
+ constructor({ table, projection, sorting = [], pinnedRows = {
861
+ top: [],
862
+ bottom: []
863
+ }, onCellUpdate, onDeleteColumn, onDeleteRows, onInsertRow, onRowOrderChanged }) {
864
+ super();
865
+ this.id = `table-model-${import_react_client2.PublicKey.random().truncate()}`;
866
+ this._visibleRange = (0, import_signals_core.signal)({
867
+ start: {
868
+ row: 0,
869
+ col: 0
870
+ },
871
+ end: {
872
+ row: 0,
873
+ col: 0
874
+ }
875
+ });
876
+ this._displayToDataIndex = /* @__PURE__ */ new Map();
877
+ this._sorting = (0, import_signals_core.signal)(void 0);
878
+ this._rows = (0, import_signals_core.signal)([]);
879
+ this._modalController = new ModalController();
880
+ this.getCells = (range, plane) => {
881
+ switch (plane) {
882
+ case "grid": {
883
+ this._visibleRange.value = range;
884
+ return this.getMainGridCells(range);
885
+ }
886
+ case "frozenRowsStart": {
887
+ return this.getHeaderCells(range);
888
+ }
889
+ case "frozenColsStart": {
890
+ return this.getSelectionColumnCells(range);
891
+ }
892
+ case "frozenColsEnd": {
893
+ return this.getActionColumnCells(range);
894
+ }
895
+ case "fixedStartStart": {
896
+ return this.getSelectAllCell();
897
+ }
898
+ case "fixedStartEnd": {
899
+ return this.getNewColumnCell();
900
+ }
901
+ default: {
902
+ return {};
903
+ }
904
+ }
905
+ };
906
+ this.getMainGridCells = (range) => {
907
+ const values = {};
908
+ const fields = this._table.view?.fields ?? [];
909
+ const addCell = (obj, field, colIndex, displayIndex) => {
910
+ const { props } = this._projection.getFieldProjection(field.id);
911
+ const value = {
912
+ get value() {
913
+ const value2 = (0, import_echo_schema4.getValue)(obj, field.path);
914
+ if (value2 == null) {
915
+ return "";
916
+ }
917
+ switch (props.format) {
918
+ case import_echo_schema4.FormatEnum.Ref: {
919
+ if (!field.referencePath) {
920
+ return "";
921
+ }
922
+ return (0, import_echo_schema4.getValue)(value2, field.referencePath);
923
+ }
924
+ default: {
925
+ return (0, import_react_ui_data2.formatForDisplay)({
926
+ type: props.type,
927
+ format: props.format,
928
+ value: value2
929
+ });
930
+ }
931
+ }
932
+ }
933
+ };
934
+ const classes = [];
935
+ const formatClasses = (0, import_react_ui_data2.cellClassesForFieldType)({
936
+ type: props.type,
937
+ format: props.format
938
+ });
939
+ if (formatClasses) {
940
+ classes.push(formatClasses);
941
+ }
942
+ const rowSelectionClasses = (0, import_react_ui_data2.cellClassesForRowSelection)(this._selection.isObjectSelected(obj));
943
+ if (rowSelectionClasses) {
944
+ classes.push(rowSelectionClasses);
945
+ }
946
+ if (classes.length > 0) {
947
+ value.className = (0, import_react_ui_theme3.mx)(classes.flat());
948
+ }
949
+ const idx = fromGridCell({
950
+ col: colIndex,
951
+ row: displayIndex
952
+ });
953
+ values[idx] = value;
954
+ };
955
+ for (let row = range.start.row; row <= range.end.row && row < this._sortedRows.value.length; row++) {
956
+ for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {
957
+ const field = fields[col];
958
+ if (!field) {
959
+ continue;
960
+ }
961
+ addCell(this._sortedRows.value[row], field, col, row);
962
+ }
963
+ }
964
+ return values;
965
+ };
966
+ this.getHeaderCells = (range) => {
967
+ const values = {};
968
+ const fields = this.table.view?.fields ?? [];
969
+ for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {
970
+ const { field, props } = this._projection.getFieldProjection(fields[col].id);
971
+ values[fromGridCell({
972
+ col,
973
+ row: 0
974
+ })] = {
975
+ value: props.title ?? field.path,
976
+ readonly: true,
977
+ resizeHandle: "col",
978
+ accessoryHtml: tableButtons.columnSettings.render({
979
+ fieldId: field.id
980
+ })
981
+ };
982
+ }
983
+ return values;
984
+ };
985
+ this.getSelectionColumnCells = (range) => {
986
+ const values = {};
987
+ for (let row = range.start.row; row <= range.end.row && row < this._rows.value.length; row++) {
988
+ const isSelected = this._selection.isRowIndexSelected(row);
989
+ const classes = (0, import_react_ui_data2.cellClassesForRowSelection)(isSelected);
990
+ values[fromGridCell({
991
+ col: 0,
992
+ row
993
+ })] = {
994
+ value: "",
995
+ readonly: true,
996
+ className: classes ? (0, import_react_ui_theme3.mx)(classes) : void 0,
997
+ accessoryHtml: tableControls.checkbox.render({
998
+ rowIndex: row,
999
+ checked: isSelected
1000
+ })
1001
+ };
1002
+ }
1003
+ return values;
1004
+ };
1005
+ this.getActionColumnCells = (range) => {
1006
+ const values = {};
1007
+ for (let row = range.start.row; row <= range.end.row && row < this._rows.value.length; row++) {
1008
+ const isSelected = this._selection.isRowIndexSelected(row);
1009
+ const classes = (0, import_react_ui_data2.cellClassesForRowSelection)(isSelected);
1010
+ values[fromGridCell({
1011
+ col: 0,
1012
+ row
1013
+ })] = {
1014
+ value: "",
1015
+ readonly: true,
1016
+ className: classes ? (0, import_react_ui_theme3.mx)(classes) : void 0,
1017
+ accessoryHtml: tableButtons.rowMenu.render({
1018
+ rowIndex: row
1019
+ })
1020
+ };
1021
+ }
1022
+ return values;
1023
+ };
1024
+ this.getSelectAllCell = () => {
1025
+ return {
1026
+ [fromGridCell({
1027
+ col: 0,
1028
+ row: 0
1029
+ })]: {
1030
+ value: "",
1031
+ accessoryHtml: tableControls.checkbox.render({
1032
+ rowIndex: 0,
1033
+ header: true,
1034
+ checked: this._selection.allRowsSeleted.value
1035
+ }),
1036
+ readonly: true
1037
+ }
1038
+ };
1039
+ };
1040
+ this.getNewColumnCell = () => {
1041
+ return {
1042
+ [fromGridCell({
1043
+ col: 0,
1044
+ row: 0
1045
+ })]: {
1046
+ value: "",
1047
+ accessoryHtml: tableButtons.addColumn.render({
1048
+ disabled: (this._table.view?.fields?.length ?? 0) >= import_schema2.VIEW_FIELD_LIMIT
1049
+ }),
1050
+ readonly: true
1051
+ }
1052
+ };
1053
+ };
1054
+ this.setRows = (obj) => {
1055
+ this._rows.value = obj;
1056
+ };
1057
+ this.getRowCount = () => this._rows.value.length;
1058
+ this.getColumnCount = () => this.table.view?.fields.length ?? 0;
1059
+ this.insertRow = (rowIndex) => {
1060
+ const row = rowIndex !== void 0 ? this._displayToDataIndex.get(rowIndex) ?? rowIndex : this._rows.value.length;
1061
+ this._onInsertRow?.(row);
1062
+ };
1063
+ this.deleteRow = (rowIndex) => {
1064
+ const row = this._displayToDataIndex.get(rowIndex) ?? rowIndex;
1065
+ const obj = this._rows.value[row];
1066
+ const objectsToDelete = [];
1067
+ if (this._selection.hasSelection.value) {
1068
+ const selectedRows = this._selection.getSelectedRows();
1069
+ objectsToDelete.push(...selectedRows);
1070
+ } else {
1071
+ objectsToDelete.push(obj);
1072
+ }
1073
+ this._onDeleteRows?.(row, objectsToDelete);
1074
+ };
1075
+ this.getCellData = ({ col, row }) => {
1076
+ const fields = this.table.view?.fields ?? [];
1077
+ if (col < 0 || col >= fields.length) {
1078
+ return void 0;
1079
+ }
1080
+ const field = fields[col];
1081
+ const dataIndex = this._displayToDataIndex.get(row) ?? row;
1082
+ const value = (0, import_echo_schema4.getValue)(this._rows.value[dataIndex], field.path);
1083
+ if (value == null) {
1084
+ return "";
1085
+ }
1086
+ const { props } = this._projection.getFieldProjection(field.id);
1087
+ switch (props.format) {
1088
+ case import_echo_schema4.FormatEnum.Ref: {
1089
+ if (!field.referencePath) {
1090
+ return "";
1091
+ }
1092
+ return (0, import_echo_schema4.getValue)(value, field.referencePath);
1093
+ }
1094
+ default: {
1095
+ return (0, import_react_ui_data2.formatForEditing)({
1096
+ type: props.type,
1097
+ format: props.format,
1098
+ value
1099
+ });
1100
+ }
1101
+ }
1102
+ };
1103
+ this.setCellData = ({ col, row }, value) => {
1104
+ const rowIdx = this._displayToDataIndex.get(row) ?? row;
1105
+ const fields = this.table.view?.fields ?? [];
1106
+ if (col < 0 || col >= fields.length) {
1107
+ return;
1108
+ }
1109
+ const field = fields[col];
1110
+ const { props } = this._projection.getFieldProjection(field.id);
1111
+ switch (props.format) {
1112
+ case import_echo_schema4.FormatEnum.Ref: {
1113
+ (0, import_echo_schema4.setValue)(this._rows.value[rowIdx], field.path, value);
1114
+ break;
1115
+ }
1116
+ default: {
1117
+ (0, import_echo_schema4.setValue)(this._rows.value[rowIdx], field.path, (0, import_react_ui_data2.parseValue)({
1118
+ type: props.type,
1119
+ format: props.format,
1120
+ value
1121
+ }));
1122
+ break;
1123
+ }
1124
+ }
1125
+ };
1126
+ this.handleGridClick = (event) => {
1127
+ if (!this._modalController.handleClick(event)) {
1128
+ const target = event.target;
1129
+ const selectionCheckbox = target.closest(`input[${tableControls.checkbox.attributes.checkbox}]`);
1130
+ if (selectionCheckbox) {
1131
+ const isHeader = selectionCheckbox.hasAttribute(tableControls.checkbox.attributes.header);
1132
+ if (isHeader) {
1133
+ if (this._selection.allRowsSeleted.value) {
1134
+ this._selection.setSelection("none");
1135
+ } else {
1136
+ this._selection.setSelection("all");
1137
+ }
1138
+ } else {
1139
+ const rowIndex = Number(selectionCheckbox.getAttribute(tableControls.checkbox.attributes.checkbox));
1140
+ this._selection.toggleSelectionForRowIndex(rowIndex);
1141
+ }
1142
+ }
1143
+ }
1144
+ };
1145
+ this._table = table;
1146
+ this._projection = projection;
1147
+ this._sorting.value = sorting.at(0);
1148
+ this._pinnedRows = pinnedRows;
1149
+ this._onInsertRow = onInsertRow;
1150
+ this._onDeleteRows = onDeleteRows;
1151
+ this._onDeleteColumn = onDeleteColumn;
1152
+ this._onCellUpdate = onCellUpdate;
1153
+ this._onRowOrderChanged = onRowOrderChanged;
1154
+ }
1155
+ get table() {
1156
+ return this._table;
1157
+ }
1158
+ get projection() {
1159
+ return this._projection;
1160
+ }
1161
+ get pinnedRows() {
1162
+ return this._pinnedRows;
1163
+ }
1164
+ get columnMeta() {
1165
+ (0, import_invariant3.invariant)(this._columnMeta, void 0, {
1166
+ F: __dxlog_file4,
1167
+ L: 124,
1168
+ S: this,
1169
+ A: [
1170
+ "this._columnMeta",
1171
+ ""
1172
+ ]
1173
+ });
1174
+ return this._columnMeta;
1175
+ }
1176
+ get sorting() {
1177
+ return this._sorting.value;
1178
+ }
1179
+ get modalController() {
1180
+ return this._modalController;
1181
+ }
1182
+ get selection() {
1183
+ return this._selection;
1184
+ }
1185
+ //
1186
+ // Initialisation
1187
+ //
1188
+ async _open() {
1189
+ this.initializeColumnMeta();
1190
+ this.initializeSorting();
1191
+ this.initializeEffects();
1192
+ this._selection = new SelectionModel(this._sortedRows, () => this._onRowOrderChanged?.());
1193
+ await this._selection.open(this._ctx);
1194
+ }
1195
+ initializeColumnMeta() {
1196
+ this._columnMeta = (0, import_signals_core.computed)(() => {
1197
+ const fields = this._table.view?.fields ?? [];
1198
+ const meta = Object.fromEntries(fields.map((field, index) => [
1199
+ index,
1200
+ {
1201
+ size: field?.size ?? 256,
1202
+ resizeable: true
1203
+ }
1204
+ ]));
1205
+ return {
1206
+ grid: meta,
1207
+ frozenColsStart: {
1208
+ 0: {
1209
+ size: 30,
1210
+ resizeable: false
1211
+ }
1212
+ },
1213
+ frozenColsEnd: {
1214
+ 0: {
1215
+ size: 40,
1216
+ resizeable: false
1217
+ }
1218
+ }
1219
+ };
1220
+ });
1221
+ }
1222
+ initializeSorting() {
1223
+ this._sortedRows = (0, import_signals_core.computed)(() => {
1224
+ this._displayToDataIndex.clear();
1225
+ const sort = this._sorting.value;
1226
+ if (!sort) {
1227
+ return this._rows.value;
1228
+ }
1229
+ const field = this._table.view?.fields.find((field2) => field2.id === sort.fieldId);
1230
+ if (!field) {
1231
+ return this._rows.value;
1232
+ }
1233
+ const dataWithIndices = this._rows.value.map((item, index) => {
1234
+ const value = (0, import_echo_schema4.getValue)(item, field.path);
1235
+ return {
1236
+ item,
1237
+ index,
1238
+ value,
1239
+ isEmpty: value == null || value === ""
1240
+ };
1241
+ });
1242
+ const sorted = (0, import_lodash.default)(dataWithIndices, [
1243
+ "isEmpty",
1244
+ "value"
1245
+ ], [
1246
+ "asc",
1247
+ sort.direction
1248
+ ]);
1249
+ for (let displayIndex = 0; displayIndex < sorted.length; displayIndex++) {
1250
+ const { index: dataIndex } = sorted[displayIndex];
1251
+ if (displayIndex !== dataIndex) {
1252
+ this._displayToDataIndex.set(displayIndex, dataIndex);
1253
+ }
1254
+ }
1255
+ return sorted.map(({ item }) => item);
1256
+ });
1257
+ }
1258
+ initializeEffects() {
1259
+ const rowOrderWatcher = (0, import_signals_core.effect)(() => {
1260
+ touch(this._sortedRows.value);
1261
+ this._onRowOrderChanged?.();
1262
+ });
1263
+ this._ctx.onDispose(rowOrderWatcher);
1264
+ const rowEffectManager = (0, import_signals_core.effect)(() => {
1265
+ const { start, end } = touch(this._visibleRange.value);
1266
+ const rowEffects = [];
1267
+ for (let row = start.row; row <= end.row; row++) {
1268
+ rowEffects.push((0, import_signals_core.effect)(() => {
1269
+ const obj = this._sortedRows.value[row];
1270
+ this?._table?.view?.fields.forEach((field) => touch((0, import_echo_schema4.getValue)(obj, field.path)));
1271
+ this._onCellUpdate?.({
1272
+ row,
1273
+ col: start.col
1274
+ });
1275
+ }));
1276
+ }
1277
+ return () => rowEffects.forEach((cleanup) => cleanup());
1278
+ });
1279
+ this._ctx.onDispose(rowEffectManager);
1280
+ }
1281
+ //
1282
+ // Column Operations
1283
+ //
1284
+ deleteColumn(fieldId) {
1285
+ if (!this.table.view) {
1286
+ return;
1287
+ }
1288
+ const field = this.table.view.fields.find((field2) => field2.id === fieldId);
1289
+ if (field && this._onDeleteColumn) {
1290
+ if (this._sorting.value?.fieldId === fieldId) {
1291
+ this.clearSort();
1292
+ }
1293
+ this._onDeleteColumn(field.id);
1294
+ }
1295
+ }
1296
+ //
1297
+ // Resize
1298
+ //
1299
+ setColumnWidth(columnIndex, width) {
1300
+ const fields = this.table.view?.fields ?? [];
1301
+ if (columnIndex < fields.length) {
1302
+ const newWidth = Math.max(0, width);
1303
+ const field = fields[columnIndex];
1304
+ if (field) {
1305
+ field.size = newWidth;
1306
+ }
1307
+ }
1308
+ }
1309
+ //
1310
+ // Sorting
1311
+ //
1312
+ setSort(fieldId, direction) {
1313
+ this._sorting.value = {
1314
+ fieldId,
1315
+ direction
1316
+ };
1317
+ }
1318
+ clearSort() {
1319
+ this._sorting.value = void 0;
1320
+ }
1321
+ //
1322
+ // Pinning
1323
+ //
1324
+ // TODO(burdon): Change to setPinned(on/off).
1325
+ pinRow(rowIndex, side) {
1326
+ this._pinnedRows[side].push(rowIndex);
1327
+ }
1328
+ unpinRow(rowIndex) {
1329
+ this._pinnedRows.top = this._pinnedRows.top.filter((index) => index !== rowIndex);
1330
+ this._pinnedRows.bottom = this._pinnedRows.bottom.filter((index) => index !== rowIndex);
1331
+ }
1332
+ };
1333
+ var useTableModel = ({ objects, table, projection, ...props }) => {
1334
+ const [model, setModel] = (0, import_react9.useState)();
1335
+ (0, import_react9.useEffect)(() => {
1336
+ if (!table || !projection) {
1337
+ return;
1338
+ }
1339
+ let model2;
1340
+ const t = setTimeout(async () => {
1341
+ model2 = new TableModel({
1342
+ table,
1343
+ projection,
1344
+ ...props
1345
+ });
1346
+ await model2.open();
1347
+ setModel(model2);
1348
+ });
1349
+ return () => {
1350
+ clearTimeout(t);
1351
+ void model2?.close();
1352
+ };
1353
+ }, [
1354
+ table,
1355
+ projection
1356
+ ]);
1357
+ (0, import_react9.useEffect)(() => {
1358
+ if (objects) {
1359
+ model?.setRows(objects);
1360
+ }
1361
+ }, [
1362
+ model,
1363
+ objects
1364
+ ]);
1365
+ return model;
1366
+ };
1367
+ // Annotate the CommonJS export names for ESM import in node:
1368
+ 0 && (module.exports = {
1369
+ Table,
1370
+ TableType,
1371
+ Toolbar,
1372
+ fromGridCell,
1373
+ initializeTable,
1374
+ tableButtons,
1375
+ toGridCell,
1376
+ touch,
1377
+ translations,
1378
+ useTableModel,
1379
+ useToolbarContext
1380
+ });
1381
+ //# sourceMappingURL=index.cjs.map