@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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/translations.ts", "../../../src/components/Cell/CellCombobox.tsx", "../../../src/components/ColumnMenu/ColumnMenu.tsx", "../../../src/components/ColumnMenu/ColumnSettings.tsx", "../../../src/hooks/useColumnSizing.ts", "../../../src/hooks/useColumnSorting.ts", "../../../src/components/Table/TableContext.tsx", "../../../src/hooks/usePinLastRow.ts", "../../../src/hooks/useRowSelection.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/TableBody.tsx", "../../../src/components/Table/TableRootContext.ts", "../../../src/theme.ts", "../../../src/components/Cell/Cell.tsx", "../../../src/components/Table/TableHead.tsx", "../../../src/helpers.tsx", "../../../src/schema/column-utils.ts"],
4
- "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'no selection label': ' ',\n 'number column type label': 'Number',\n 'boolean column type label': 'Boolean',\n 'date column type label': 'Date',\n 'string column type label': 'Text',\n 'ref column type label': 'Reference',\n 'digits label': 'Decimal places',\n 'save label': 'Save',\n 'delete label': 'Delete',\n 'column label label': 'Label',\n 'property key label': 'Property',\n 'column type label': 'Type',\n },\n },\n },\n];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { CaretDown } from '@phosphor-icons/react';\nimport { type RowData } from '@tanstack/react-table';\nimport React, { useCallback, useState } from 'react';\n\nimport { Popover, useTranslation } from '@dxos/react-ui';\nimport { PopoverCombobox } from '@dxos/react-ui-searchlist';\nimport { descriptionText, getSize, mx, staticPlaceholderText } from '@dxos/react-ui-theme';\n\nimport { type SearchListQueryModel } from '../../helpers';\nimport { translationKey } from '../../translations';\n\nexport type ComboboxCellItems<TData extends RowData> = Record<string, { label: string; data: TData }>;\n\nconst initialItems = <TData extends RowData>(model: SearchListQueryModel<TData>, value?: TData) =>\n value\n ? {\n [model.getId(value)]: { label: model.getText(value), data: value },\n }\n : {};\n\nexport const CellCombobox = <TData extends RowData>({\n model,\n value,\n onValueChange,\n}: {\n model: SearchListQueryModel<TData>;\n value: TData;\n onValueChange: (value: TData) => void;\n}) => {\n const { t } = useTranslation(translationKey);\n const [items, setItems] = useState<ComboboxCellItems<TData>>(initialItems(model, value));\n const [loading, setLoading] = useState(false);\n const [searchInputValue, setSearchInputValue] = useState('');\n const handleSearchInputValueChange = async (text?: string) => {\n setSearchInputValue(text ?? '');\n setLoading(true);\n const items = await model.query(text);\n setItems(\n items.reduce(\n (acc: ComboboxCellItems<TData>, item) => {\n acc[model.getId(item)] = {\n label: model.getText(item),\n data: item,\n };\n return acc;\n },\n initialItems(model, value),\n ),\n );\n setLoading(false);\n };\n\n const handleValueChange = useCallback(\n (id: string) => {\n onValueChange(items[id]?.data);\n },\n [items, onValueChange],\n );\n\n return (\n <PopoverCombobox.Root placeholder={t('no selection label')}>\n <PopoverCombobox.Trigger variant='ghost' classNames='is-full rounded-none ring-inset'>\n {value ? (\n <>\n <span\n className={mx(\n 'font-normal text-start text-baseText flex-1 min-is-0 truncate mie-2',\n !value && staticPlaceholderText,\n )}\n >\n {model.getText(value)}\n </span>\n <CaretDown weight='bold' className={getSize(3)} />\n </>\n ) : null}\n </PopoverCombobox.Trigger>\n <PopoverCombobox.Content shouldFilter={false} classNames='is-[--radix-popover-trigger-width]'>\n <PopoverCombobox.Input value={searchInputValue} onValueChange={handleSearchInputValueChange} />\n <PopoverCombobox.List>\n {searchInputValue.length < 1 ? (\n <p className={mx('text-center', descriptionText)}>Start typing to search</p>\n ) : loading ? (\n <p className={mx('text-center', descriptionText)}>Searching…</p>\n ) : (\n <>\n <PopoverCombobox.Empty classNames={['text-center', descriptionText]}>No results</PopoverCombobox.Empty>\n {Object.entries(items).map(([id, { label }]) => (\n <PopoverCombobox.Item key={id} value={id} onSelect={handleValueChange} classNames='truncate'>\n {label}\n </PopoverCombobox.Item>\n ))}\n </>\n )}\n </PopoverCombobox.List>\n <Popover.Arrow />\n </PopoverCombobox.Content>\n </PopoverCombobox.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { X, GearSix, CaretDown, ArrowDown, ArrowUp, ArrowRight, ArrowLeft } from '@phosphor-icons/react';\nimport { type SortDirection, type HeaderContext, type RowData } from '@tanstack/react-table';\nimport React, { useRef, useState, useCallback } from 'react';\n\nimport { Button, Popover, DropdownMenu } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { ColumnSettings } from './ColumnSettings';\nimport { useSortColumn } from '../../hooks';\nimport { type TableDef, type ColumnDef } from '../../schema';\n\nexport type ColumnMenuProps<TData extends RowData, TValue> = {\n context: HeaderContext<TData, TValue>;\n tablesToReference: TableDef[];\n tableDef: TableDef;\n column: ColumnDef;\n columnOrderable: boolean;\n columnPosition: 'start' | 'end' | undefined;\n onColumnReorder: (columnId: string, direction: 'left' | 'right') => void;\n onUpdate?: (id: string, column: ColumnDef) => void;\n onDelete?: (id: string) => void;\n};\n\n/**\n * @deprecated\n */\nexport const ColumnMenu = <TData extends RowData, TValue>({\n column,\n columnOrderable,\n columnPosition,\n onColumnReorder,\n ...props\n}: ColumnMenuProps<TData, TValue>) => {\n const title = column.label?.length ? column.label : column.id;\n const header = props.context.header;\n\n const { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort } = useSortColumn(header.column);\n\n const columnSettingsAnchorRef = useRef<any>(null);\n\n const [isColumnSettingsOpen, setIsColumnSettingsOpen] = useState(false);\n\n const shouldPreventFocusOnClose = useRef(false);\n\n const onOpenColumnSettings = useCallback(() => {\n shouldPreventFocusOnClose.current = true;\n setIsColumnSettingsOpen(true);\n }, [shouldPreventFocusOnClose, setIsColumnSettingsOpen]); // setIsColumnSettingsOpen is a dependency\n\n const onDropdownCloseAutoFocus = useCallback(\n (event: Event) => {\n if (shouldPreventFocusOnClose.current) {\n event.preventDefault();\n shouldPreventFocusOnClose.current = false;\n }\n },\n [shouldPreventFocusOnClose],\n );\n\n return (\n <div className='flex items-center justify-between'>\n <div className='flex items-center gap-1 truncate' title={title}>\n <SortIndicator direction={sortDirection} onClick={onToggleSort} />\n <div className='truncate'>{title}</div>\n </div>\n\n <DropdownMenu.Root modal={false}>\n <Popover.Root open={isColumnSettingsOpen} onOpenChange={setIsColumnSettingsOpen} modal={false}>\n <DropdownMenu.Trigger ref={columnSettingsAnchorRef} asChild>\n <Popover.Anchor asChild>\n <Button variant='ghost' data-testid='table.column-menu'>\n <CaretDown className={getSize(4)} />\n </Button>\n </Popover.Anchor>\n </DropdownMenu.Trigger>\n\n <DropdownMenu.Portal>\n <DropdownMenu.Content onCloseAutoFocus={onDropdownCloseAutoFocus} sideOffset={4} collisionPadding={8}>\n <DropdownMenu.Viewport>\n {canSort && (\n <>\n <DropdownMenu.Item onClick={() => onSelectSort('asc')}>\n <span className='grow'>Sort ascending</span>\n <span className='opacity-50'>\n <ArrowUp className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n <DropdownMenu.Item onClick={() => onSelectSort('desc')}>\n <span className='grow'>Sort descending</span>\n <span className='opacity-50'>\n <ArrowDown className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n {sortDirection && (\n <DropdownMenu.Item onClick={onClearSort}>\n <span className='grow'>Clear sort</span>\n <span className='opacity-50'>\n <X className={getSize(4)} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n {columnOrderable && (\n <>\n {columnPosition !== 'start' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'left')}>\n <span className='grow'>Move left</span>\n <span className='opacity-50'>\n <ArrowLeft className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n {columnPosition !== 'end' && (\n <DropdownMenu.Item onClick={() => onColumnReorder(header.column.id, 'right')}>\n <span className='grow'>Move right</span>\n <span className='opacity-50'>\n <ArrowRight className={mx(getSize(4))} />\n </span>\n </DropdownMenu.Item>\n )}\n </>\n )}\n\n <DropdownMenu.Item onClick={onOpenColumnSettings} data-testid='table.open-column-settings'>\n <span className='grow'>Column settings</span>\n <span className='opacity-50'>\n <GearSix className={mx(getSize(4), 'rotate-90')} />\n </span>\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n\n <Popover.Portal>\n <Popover.Content>\n <Popover.Viewport>\n <ColumnSettings {...props} column={column} onClose={() => setIsColumnSettingsOpen(false)} />\n </Popover.Viewport>\n <Popover.Arrow />\n </Popover.Content>\n </Popover.Portal>\n </Popover.Root>\n </DropdownMenu.Root>\n </div>\n );\n};\n\nexport const SortIndicator = ({\n direction,\n onClick,\n}: {\n direction: SortDirection | undefined;\n onClick: (e: any) => void;\n}) => {\n if (direction === undefined) {\n return null;\n }\n\n let icon;\n\n switch (direction) {\n case 'asc':\n icon = <ArrowUp className={getSize(3)} />;\n break;\n case 'desc':\n icon = <ArrowDown className={getSize(3)} />;\n break;\n }\n\n return (\n <div onClick={onClick} className='flex items-center cursor-pointer'>\n {icon}\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useRef, useState } from 'react';\n\nimport { Button, Input, Select, useTranslation } from '@dxos/react-ui';\nimport { FieldValueTypes, type FieldValueType } from '@dxos/schema';\nimport { safeParseInt } from '@dxos/util';\n\nimport { type TableDef, type ColumnDef } from '../../schema';\nimport { translationKey } from '../../translations';\n\nexport type ColumnSettingsProps = {\n column: ColumnDef;\n tableDef: TableDef;\n // TODO(burdon): Rename.\n tablesToReference: TableDef[];\n onUpdate?: (id: string, column: ColumnDef) => void;\n onDelete?: (id: string) => void;\n onClose?: () => void;\n};\n\n/**\n * @deprecated\n */\nexport const ColumnSettings = ({\n column,\n tableDef,\n tablesToReference,\n onUpdate,\n onDelete,\n onClose,\n}: ColumnSettingsProps) => {\n const { t } = useTranslation(translationKey);\n const propRef = useRef<HTMLInputElement>(null);\n const [formState, setFormState] = useState({\n prop: column.id,\n refTable: column.refTable,\n refProp: column.refProp,\n type: String(column.type),\n label: column.label,\n digits: String(column.digits ?? '0'),\n });\n\n const handleSave = () => {\n const { prop, refTable, refProp, type, label, digits } = formState;\n\n // Check valid.\n if (!prop.length || !prop.match(/^[a-zA-Z_].+/i)) {\n propRef.current?.focus();\n return;\n }\n\n // If already exists then check same type.\n const current = tableDef.columns.find((c) => c.id !== column.id && c.id === prop);\n if (current) {\n // TODO(burdon): Allow multiple columns with different refProps. Ensure correct table prop is updated.\n if (current.type !== 'ref' /* || current.ref !== refTable */) {\n // TODO(burdon): Show error.\n propRef.current?.focus();\n return;\n }\n }\n\n onUpdate?.(column.id, {\n id: prop, // TODO(burdon): Make unique.\n prop,\n label,\n type: type as FieldValueType,\n refTable,\n refProp,\n digits: safeParseInt(digits),\n });\n onClose?.();\n };\n\n const handleDelete = () => {\n onDelete?.(column.id);\n onClose?.();\n };\n\n // TODO(burdon): Standardize dialog/popup.\n return (\n <div className='flex flex-col w-full gap-4'>\n <div className='flex flex-col gap-2'>\n <Input.Root>\n <Input.Label>{t('column label label')}</Input.Label>\n <Input.TextInput\n placeholder='Column label'\n value={formState.label ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, label: event.target.value }))}\n autoFocus\n data-testid='table.column-settings.label'\n />\n </Input.Root>\n\n <Input.Root>\n <Input.Label>{t('property key label')}</Input.Label>\n <Input.TextInput\n ref={propRef}\n placeholder='Property key'\n value={formState.prop ?? ''}\n onChange={(event) =>\n setFormState((prevState) => ({ ...prevState, prop: event.target.value.replace(/[^\\w_]/g, '') }))\n }\n />\n </Input.Root>\n\n <Input.Root>\n <Input.Label>{t('column type label')}</Input.Label>\n <Select.Root\n value={formState.type}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, type: value }))}\n >\n <Select.TriggerButton classNames='is-full' placeholder='Type' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {FieldValueTypes.map((type) => (\n <Select.Option key={type} value={type}>\n {t(`${type} column type label`)}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {formState.type === 'number' && (\n <Input.Root>\n <Input.Label>{t('digits label')}</Input.Label>\n <Input.TextInput\n value={formState.digits ?? ''}\n onChange={(event) => setFormState((prevState) => ({ ...prevState, digits: event.target.value }))}\n />\n </Input.Root>\n )}\n\n {formState.type === 'ref' && (\n <>\n <Input.Root>\n <Input.Label>Table</Input.Label>\n <Select.Root\n value={formState.refTable}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refTable: value }))}\n >\n <Select.TriggerButton placeholder='Table' classNames='is-full' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\n .filter((t) => t.id !== tableDef.id)\n .map(({ id, name }) => (\n <Select.Option key={id} value={id}>\n {name ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n\n {formState.refTable && (\n <Input.Root>\n <Input.Label>Table property</Input.Label>\n <Select.Root\n value={formState.refProp}\n onValueChange={(value) => setFormState((prevState) => ({ ...prevState, refProp: value }))}\n >\n <Select.TriggerButton placeholder='Property' />\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {tablesToReference\n .find((tableDef) => tableDef.id === formState.refTable)\n ?.columns.map(({ id, label }) => (\n <Select.Option key={id} value={id}>\n {label ?? id}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n </Input.Root>\n )}\n </>\n )}\n </div>\n\n <div>\n {/* TODO(burdon): Change delete to cancel. Delete should be menu item. */}\n <div className='flex flex-row justify-end gap-1'>\n <Button onClick={handleDelete} data-testid='table.column-settings.delete'>\n {t('delete label')}\n </Button>\n <Button variant='primary' onClick={handleSave} data-testid='table.column-settings.save'>\n {t('save label')}\n </Button>\n </div>\n </div>\n </div>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ColumnSizingInfoState, type ColumnSizingState } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nimport { useOnTransition } from '@dxos/react-ui';\n\nimport { type TableColumnDef } from '../types';\n\nexport const useColumnResizing = ({\n columns,\n onColumnResize,\n}: {\n columns: TableColumnDef<any>[];\n onColumnResize: ((state: Record<string, number>) => void) | undefined;\n}) => {\n const [columnsInitialised, setColumnsInitialised] = useState(false);\n const [columnSizing, setColumnSizing] = useState<ColumnSizingState>({});\n\n useEffect(() => {\n if (columnsInitialised) {\n return;\n }\n\n setColumnSizing(\n columns\n .filter((column) => !!column.size && (column as any).prop !== undefined)\n .reduce<ColumnSizingState>((state, column) => {\n state[(column as any).prop] = column.size!;\n return state;\n }, {}),\n );\n\n setColumnsInitialised(true);\n }, [columns, setColumnSizing]);\n\n const [columnSizingInfo, setColumnSizingInfo] = useState<ColumnSizingInfoState>({} as ColumnSizingInfoState);\n\n // Notify on column resize.\n const notifyColumnResize = useCallback(() => onColumnResize?.(columnSizing), [onColumnResize, columnSizing]);\n useOnTransition(columnSizingInfo.isResizingColumn, (v) => typeof v === 'string', false, notifyColumnResize);\n\n return { columnSizing, columnSizingInfo, setColumnSizing, setColumnSizingInfo };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type SortDirection, type Column, type ColumnSort } from '@tanstack/react-table';\nimport { useState } from 'react';\n\nimport { useTableContext } from '../components/Table/TableContext';\n\nexport const useColumnSorting = () => {\n const [columnSorting, setColumnSorting] = useState<ColumnSort[]>([]);\n\n const sortColumn = (columnId: string, sortDirection: SortDirection) => {\n setColumnSorting([{ id: columnId, desc: sortDirection === 'desc' }]);\n };\n\n const clearColumnSorting = () => {\n setColumnSorting([]);\n };\n\n return { sorting: columnSorting, sortColumn, clearColumnSorting };\n};\n\nexport type ColumnSorting = ReturnType<typeof useColumnSorting>;\n\nexport const useSortColumn = (column: Column<any>) => {\n const { sorting, sortColumn, clearColumnSorting } = useTableContext();\n const [initialSortDirection, setInitialSortDirection] = useState<SortDirection | undefined>();\n\n const columnSort = sorting.find((s) => s.id === column.id);\n const sortDirection = columnSort ? (columnSort.desc ? ('desc' as const) : ('asc' as const)) : undefined;\n\n const canSort = column.getCanSort();\n\n const updateColumnSort = (direction: SortDirection) => {\n sortColumn(column.id, direction);\n };\n\n // Whichever sort is explicitly set first, will be the first sort direction\n // When toggling, we always go to the other direction, and then to unsorted.\n const onToggleSort = () => {\n if (sortDirection === undefined) {\n return;\n }\n\n if (sortDirection === initialSortDirection) {\n updateColumnSort(initialSortDirection === 'asc' ? 'desc' : 'asc');\n } else {\n clearColumnSorting();\n }\n };\n\n const onSelectSort = (direction: SortDirection) => {\n clearColumnSorting();\n setInitialSortDirection(direction);\n updateColumnSort(direction);\n };\n\n const onClearSort = () => {\n clearColumnSorting();\n };\n\n return { canSort, sortDirection, onSelectSort, onToggleSort, onClearSort };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type RowData } from '@tanstack/react-table';\nimport React, {\n useContext,\n createContext,\n type Context,\n type JSX,\n type PropsWithChildren,\n type ReactNode,\n} from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type TableContextValue } from './props';\n\nexport const TABLE_NAME = 'Table';\n\nconst TableContext = createContext<TableContextValue<RowData> | undefined>(undefined);\n\nexport type TypedTableProvider<TData extends RowData> = {\n (props: TableContextValue<TData> & { children: ReactNode }): JSX.Element;\n displayName: string;\n};\n\nexport const TableProvider = ({ children, ...value }: PropsWithChildren<TableContextValue<RowData>>) => {\n return <TableContext.Provider value={value}>{children}</TableContext.Provider>;\n};\n\nexport const useTableContext = <TData extends RowData>(): TableContextValue<TData> => {\n return useContext(TableContext as Context<TableContextValue<TData>>) ?? raise(new Error('Missing TableContext'));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Row, type Table } from '@tanstack/react-table';\nimport { useCallback, useEffect, useState } from 'react';\n\nexport const usePinLastRow = (pinLastRow: boolean | undefined, table: Table<any>, data: any[]) => {\n const [pinnedRowKey, setPinnedRowKey] = useState<string>();\n\n const pinRow = useCallback(\n (rowToPin: Row<any>) => {\n table.resetRowPinning();\n rowToPin.pin('bottom');\n setPinnedRowKey(rowToPin.id);\n },\n [table],\n );\n\n const clearRowPinning = useCallback(() => {\n table.resetRowPinning();\n setPinnedRowKey(undefined);\n }, [table]);\n\n // Define the logic for pinning the last row in a callback.\n const pinLastRowCallback = useCallback(() => {\n const rows = table.getRowModel().rows;\n\n if (rows.length === 0) {\n return clearRowPinning();\n }\n\n const lastRow = rows[rows.length - 1];\n if (lastRow.id === pinnedRowKey) {\n return;\n }\n\n pinRow(lastRow);\n }, [table, pinnedRowKey]);\n\n // Effect to handle pinning logic when data changes.\n useEffect(() => {\n if (pinLastRow) {\n pinLastRowCallback();\n }\n }, [data, pinLastRow, pinLastRowCallback]);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useControllableState } from '@radix-ui/react-use-controllable-state';\nimport { type OnChangeFn, type RowSelectionState } from '@tanstack/react-table';\nimport { useCallback } from 'react';\n\nimport { type TableProps } from '../components/Table';\n\nexport const useRowSelection = (\n props: Pick<\n TableProps<any>,\n 'rowsSelectable' | 'defaultRowSelection' | 'rowSelection' | 'onRowSelectionChange' | 'rowsSelectable'\n >,\n) => {\n const [rowSelection = {}, setRowSelection] = useControllableState({\n prop: props.rowSelection,\n onChange: props.onRowSelectionChange,\n defaultProp: props.defaultRowSelection,\n });\n\n // TODO(thure): Does @tanstack/react-table really need this intervention? It did seem necessary to enforce single-selection...\n const handleRowSelectionChange = useCallback<OnChangeFn<RowSelectionState>>(\n (updaterOrValue) => {\n const nextRowSelection = typeof updaterOrValue === 'function' ? updaterOrValue(rowSelection) : updaterOrValue;\n if (props.rowsSelectable === 'multi') {\n setRowSelection(nextRowSelection);\n } else if (props.rowsSelectable) {\n const nextRowSelectionKey = Object.keys(nextRowSelection).filter((id) => !rowSelection[id])[0];\n setRowSelection(nextRowSelectionKey ? { [nextRowSelectionKey]: true } : {});\n } else {\n setRowSelection({});\n }\n },\n [props.rowsSelectable, setRowSelection, rowSelection],\n );\n\n return { rowSelection, handleRowSelectionChange };\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Primitive } from '@radix-ui/react-primitive';\nimport { Slot } from '@radix-ui/react-slot';\nimport {\n type GroupingState,\n type Row,\n type RowData,\n getCoreRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n getSortedRowModel,\n useReactTable,\n} from '@tanstack/react-table';\nimport React, {\n type ComponentPropsWithoutRef,\n type ReactNode,\n Fragment,\n memo,\n useCallback,\n useEffect,\n useState,\n useContext,\n} from 'react';\n\nimport { type ThemedClassName, useDefaultValue } from '@dxos/react-ui';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { TableBody } from './TableBody';\nimport { type TypedTableProvider, TableProvider as UntypedTableProvider, useTableContext } from './TableContext';\nimport { TableHead } from './TableHead';\nimport { TableRootContext, useTableRootContext } from './TableRootContext';\nimport { type TableProps } from './props';\nimport { useColumnResizing, useColumnSorting, usePinLastRow, useRowSelection } from '../../hooks';\nimport { groupTh, tableRoot } from '../../theme';\n\ntype TableRootProps = { children: ReactNode };\n\nconst TableRoot = ({ children }: TableRootProps) => {\n const contextValue = useTableRootContext();\n return <TableRootContext.Provider value={contextValue}>{children}</TableRootContext.Provider>;\n};\n\ntype TableViewportProps = ThemedClassName<ComponentPropsWithoutRef<typeof Primitive.div>> & {\n asChild?: boolean;\n};\n\nconst TableViewport = ({ children, classNames, asChild, ...props }: TableViewportProps) => {\n const { scrollContextRef } = useContext(TableRootContext);\n\n const classes = mx(classNames, 'overflow-auto');\n return asChild ? (\n <Slot ref={scrollContextRef} className={classes} {...props}>\n {children}\n </Slot>\n ) : (\n <div role='none' className={classes} ref={scrollContextRef} {...props}>\n {children}\n </div>\n );\n};\n\nexport const TablePrimitive = <TData extends RowData>(props: TableProps<TData>) => {\n const {\n role,\n header = true,\n rowsSelectable,\n debug,\n pinLastRow,\n columnVisibility,\n onColumnResize,\n onDataSelectionChange,\n } = props;\n\n const columns = useDefaultValue(props.columns, () => []);\n const incomingData = useDefaultValue(props.data, () => []);\n\n const [data, setData] = useState([...incomingData]);\n\n // Reactivity workaround: https://github.com/dxos/dxos/issues/6376.\n const forceUpdate = useCallback(() => setData([...incomingData]), [incomingData]);\n useEffect(() => forceUpdate(), [JSON.stringify(incomingData), forceUpdate]);\n\n const TableProvider = UntypedTableProvider as TypedTableProvider<TData>;\n\n const { columnSizing, setColumnSizing, columnSizingInfo, setColumnSizingInfo } = useColumnResizing({\n columns,\n onColumnResize,\n });\n\n const { rowSelection, handleRowSelectionChange } = useRowSelection(props);\n\n const [grouping, handleGroupingChange] = useState<GroupingState>(props.grouping ?? []);\n useEffect(() => handleGroupingChange(props.grouping ?? []), [handleGroupingChange, props.grouping]);\n\n const columnSorting = useColumnSorting();\n\n const table = useReactTable({\n // Data\n meta: {},\n data,\n\n // Columns\n columns,\n defaultColumn: {\n size: 400, // Required in order remove default width.\n maxSize: 1024,\n },\n\n // State\n state: {\n columnVisibility,\n columnSizing,\n columnSizingInfo,\n sorting: columnSorting.sorting,\n rowSelection,\n grouping,\n },\n\n // Resize columns\n columnResizeMode: 'onChange',\n enableColumnResizing: true,\n onColumnSizingChange: setColumnSizing,\n onColumnSizingInfoChange: setColumnSizingInfo,\n\n // Rows\n getCoreRowModel: getCoreRowModel(),\n getSortedRowModel: getSortedRowModel(),\n getExpandedRowModel: getExpandedRowModel(),\n\n // Grouping\n getGroupedRowModel: grouping.length > 1 ? getGroupedRowModel() : undefined,\n onGroupingChange: handleGroupingChange,\n\n enableMultiRowSelection: rowsSelectable === 'multi' ? true : undefined,\n enableRowSelection: rowsSelectable === true ? true : undefined,\n\n onRowSelectionChange: handleRowSelectionChange,\n\n enableSorting: true,\n enableColumnPinning: true,\n\n // Debug\n debugTable: debug,\n });\n\n useEffect(() => {\n onDataSelectionChange?.(Object.keys(rowSelection).map((id) => table.getRowModel().rowsById[id].original));\n }, [onDataSelectionChange, rowSelection, table]);\n\n usePinLastRow(pinLastRow, table, data);\n\n // Create additional expansion column if all columns have fixed width.\n const expand = false; // columns.map((column) => column.size).filter(Boolean).length === columns?.length;\n\n return (\n <TableProvider\n {...{ ...props, ...columnSorting }}\n table={table}\n header={header}\n expand={expand}\n isGrid={role === 'grid' || role === 'treegrid'}\n >\n <TableImpl<TData> debug={false} {...props} />\n </TableProvider>\n );\n};\n\n// TODO(zan): Smush this into the Table component.\n/**\n * Pure implementation of table outside of context set-up.\n */\nconst TableImpl = <TData extends RowData>(props: TableProps<TData>) => {\n const { debug, classNames, role, grouping, fullWidth } = props;\n const { table } = useTableContext<TData>();\n\n if (debug) {\n return (\n <pre className='font-mono text-xs text-neutral-500 m-1 p-2 ring'>\n <code>{JSON.stringify(table.getState(), undefined, 2)}</code>\n </pre>\n );\n }\n\n const isResizingColumn = table.getState().columnSizingInfo.isResizingColumn;\n\n const TableComponent = isResizingColumn ? MemoizedVirtualizedTableContent : VirtualizedTableContent;\n\n return (\n <table\n role={role}\n className={tableRoot(props, classNames)}\n style={{\n // borderCollapse: 'separate',\n borderSpacing: 0,\n ...(!fullWidth && { width: table.getTotalSize() }),\n }}\n >\n <TableHead />\n\n {grouping?.length !== 0 ? <TableComponent /> : <GroupedTableContent />}\n </table>\n );\n};\n\nconst VirtualizedTableContent = () => {\n const { table } = useTableContext();\n const { virtualizer, dispatch } = useContext(TableRootContext);\n\n const centerRows = table.getCenterRows();\n let pinnedRows = [] as Row<unknown>[];\n\n useEffect(() => {\n dispatch({ type: 'updateTableCount', count: centerRows.length });\n }, [centerRows.length]);\n\n try {\n // TODO(zan): Work out how to sync the row pinning with rendering\n // This is a hack because the first call to this function after a row is deleted will throw an error\n // because the row index is no longer in the table\n // The pin last row hook updates the pinned row key after the row is deleted\n pinnedRows = table.getBottomRows();\n } catch (_) {} // Ignore error\n\n const { getTotalSize, getVirtualItems } = virtualizer;\n\n const virtualRows = getVirtualItems();\n const totalSize = getTotalSize();\n\n const paddingTop = virtualRows.length > 0 ? virtualRows?.[0]?.start || 0 : 0;\n const paddingBottom = virtualRows.length > 0 ? totalSize - (virtualRows?.[virtualRows.length - 1]?.end || 0) : 0;\n\n const rowsToRender = [...virtualRows.map((virtualRow) => centerRows[virtualRow.index]), ...pinnedRows].filter(\n (r) => !!r,\n );\n\n return (\n <Fragment>\n {paddingTop > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingTop}px` }} role='none' />\n </tr>\n </tbody>\n )}\n <TableBody rows={rowsToRender} />\n {paddingBottom > 0 && (\n <tbody role='none'>\n <tr role='none'>\n <td style={{ height: `${paddingBottom}px` }} role='none' />\n </tr>\n </tbody>\n )}\n </Fragment>\n );\n};\n\nexport const MemoizedVirtualizedTableContent = memo(VirtualizedTableContent);\n\nconst GroupedTableContent = () => {\n const {\n table: { getGroupedRowModel, getHeaderGroups, getState },\n debug,\n } = useTableContext();\n\n return (\n <>\n {getGroupedRowModel().rows.map((row, i) => {\n return (\n <Fragment key={i}>\n {/* TODO(burdon): Customize group header renderer. */}\n <thead>\n <tr>\n {debug && <th />}\n <th\n // TODO(burdon): Calculate row span.\n colSpan={getHeaderGroups()[0].headers.length}\n className={groupTh({})}\n >\n {getState().grouping[0]}[{String(row.getGroupingValue(getState().grouping[0]))}]\n </th>\n </tr>\n </thead>\n <TableBody rows={row.subRows} />\n </Fragment>\n );\n })}\n </>\n );\n};\n\n// TODO(burdon): Floating \"add row\" jumps by 1 pixel on scroll.\n// TODO(burdon): Blue focus highlight is clipped by 1px on the left.\n// TODO(burdon): Focused row and focus ring passes over the sticky header.\nexport const Table = {\n Root: TableRoot,\n Viewport: TableViewport,\n Main: TablePrimitive,\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useArrowNavigationGroup } from '@fluentui/react-tabster';\nimport { flexRender, type Row, type RowData } from '@tanstack/react-table';\nimport React, { useContext } from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { TableRootContext } from './TableRootContext';\nimport { tbodyTr } from '../../theme';\nimport { Cell } from '../Cell/Cell';\n\nconst TABLE_BODY_NAME = 'TableBody';\n\ntype TableBodyProps = {\n rows: Row<RowData>[];\n};\n\nconst TableBody = ({ rows }: TableBodyProps) => {\n const { table, keyAccessor, currentDatum, debug, expand, isGrid, onDatumClick } = useTableContext();\n\n const rowSelection = table.getState().rowSelection;\n const domAttributes = useArrowNavigationGroup({ axis: 'grid' });\n const canBeCurrent = !isGrid && !!onDatumClick;\n\n const { virtualizer } = useContext(TableRootContext);\n\n return (\n <tbody {...(isGrid && domAttributes)}>\n {rows.map((row) => {\n const isCurrent = currentDatum === row.original;\n const isSelected = rowSelection?.[row.id];\n\n const isPinned = row.getIsPinned();\n\n const classNames = tbodyTr({ canBeCurrent, isPinned: isPinned !== false });\n\n return (\n <tr\n key={keyAccessor ? keyAccessor(row.original) : row.id}\n className={classNames}\n data-index={row.index}\n data-testid={'table.data-row'}\n ref={virtualizer.measureElement}\n {...(isCurrent && { 'aria-current': 'location' })}\n {...(isSelected && { 'aria-selected': 'true' })}\n {...(canBeCurrent && {\n tabIndex: 0,\n onClick: () => {\n onDatumClick(row.original);\n },\n onKeyUp: ({ key }) => {\n if (key === 'Enter' || key === ' ') {\n onDatumClick(row.original);\n }\n },\n })}\n >\n {debug && <td>{row.id}</td>}\n\n {row.getVisibleCells().map((cell) => {\n return (\n <Cell key={cell.id} cell={cell}>\n {flexRender(cell.column.columnDef.cell, { ...cell.getContext() })}\n </Cell>\n );\n })}\n\n {expand && <td />}\n </tr>\n );\n })}\n </tbody>\n );\n};\n\nTableBody.displayName = TABLE_BODY_NAME;\n\nexport { TableBody };\n\nexport type { TableBodyProps };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { createContext, useRef, useState } from 'react';\n\ntype TableRootContextActions = { type: 'updateTableCount'; count: number };\n\nexport const useTableRootContext = () => {\n const scrollContextRef = useRef<HTMLDivElement>(null);\n const [tableCount, setTableCount] = useState(0);\n\n const virtualizer = useVirtualizer({\n getScrollElement: () => scrollContextRef?.current ?? null,\n count: tableCount,\n overscan: 8,\n estimateSize: () => 40,\n });\n\n const dispatch = (action: TableRootContextActions) => {\n switch (action.type) {\n case 'updateTableCount':\n setTableCount(action.count);\n break;\n\n default:\n break;\n }\n };\n\n return { scrollContextRef, virtualizer, dispatch };\n};\n\nexport type TableRootContextValue = ReturnType<typeof useTableRootContext>;\n\n// Create the context without a default value.\n// The expectation is that the provider will always supply a value, so no need to define a default here.\nexport const TableRootContext = createContext<TableRootContextValue>({} as TableRootContextValue);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { focusRing, ghostSelected, ghostSelectedCurrent, mx } from '@dxos/react-ui-theme';\nimport { type ComponentFunction } from '@dxos/react-ui-types';\n\nimport { type TableContextValue, type TableFlags } from './components';\n\nexport const currentRow = '!bg-neutral-75 !dark:bg-neutral-850';\nexport const selectedRow = '!bg-primary-100 dark:!bg-primary-700';\nexport const flushPadding = 'pli-0 plb-0';\nexport const textPadding = 'pli-2 plb-0';\nexport const headPadding = 'pli-2 plb-0';\n\nexport const gridCellFocusRing =\n 'relative focus-within:outline focus-within:outline-1 outline-primary-500 outline-offset-[-1px]';\nconst borderColors = 'border-neutral-200 dark:border-neutral-700';\nconst stickyRowColors = 'bg-neutral-50 dark:bg-neutral-800';\n\nexport type TableStyleProps = Partial<TableContextValue<any>>;\n\nexport const tableRoot: ComponentFunction<TableStyleProps> = ({ fullWidth }, ...etc) =>\n mx('table-fixed', 'text-neutral-800 dark:text-neutral-200', fullWidth && 'is-full', ...etc);\n\nexport const groupTh: ComponentFunction<TableStyleProps> = (_props, ...etc) =>\n mx('text-start font-medium', flushPadding, ...etc);\n\nexport type TheadStyleProps = Partial<TableFlags>;\n\nexport const theadRoot: ComponentFunction<TheadStyleProps> = ({ header, stickyHeader }, ...etc) =>\n mx(header ? stickyHeader && 'sticky block-start-[--sticky-top] z-[1]' : 'collapse', stickyRowColors, ...etc);\n\nexport const theadTr: ComponentFunction<TheadStyleProps> = (_props, ...etc) => mx('group', ...etc);\n\nexport const theadTh: ComponentFunction<TheadStyleProps> = ({ border }, ...etc) =>\n mx(\n 'relative',\n 'text-start text-xs select-none truncate',\n headPadding,\n border && borderColors,\n border && 'border-t border-b border-l last:border-r',\n ...etc,\n );\n\nexport const theadResizeRoot: ComponentFunction<{ isResizing: boolean }> = ({ isResizing }) => {\n return mx(\n 'absolute h-full w-[4px] top-0 right-0',\n 'cursor-col-resize',\n 'user-select-none',\n 'touch-action-none',\n 'pointer-coarse:bg-neutral-100 dark:pointer-coarse:bg-neutral-800',\n !isResizing && 'group-hover:bg-neutral-100 dark:group-hover:bg-neutral-800',\n isResizing && 'bg-primary-500',\n );\n};\n\nexport type TbodyStyleProps = Partial<TableContextValue<any>>;\nexport const tbodyRoot: ComponentFunction<TbodyStyleProps> = (_props, ...etc) => mx(...etc);\n\nexport type TbodyTrStyleProps = Partial<{ canBeCurrent?: boolean; isPinned?: boolean }>;\nexport const tbodyTr: ComponentFunction<TbodyTrStyleProps> = ({ canBeCurrent, isPinned }, ...etc) =>\n mx(\n 'group',\n canBeCurrent ? ghostSelectedCurrent : ghostSelected,\n canBeCurrent && focusRing,\n canBeCurrent && 'cursor-pointer',\n isPinned && 'sticky z-1 block-end-0',\n isPinned && stickyRowColors,\n ...etc,\n );\n\nexport const tdRoot: ComponentFunction<TbodyStyleProps & { pinned?: boolean }> = ({ border, isGrid, pinned }, ...etc) =>\n mx(\n 'relative',\n 'focus-within:!bg-neutral-50 dark:focus-within:!bg-neutral-900',\n flushPadding,\n border && 'border-b border-l last:border-r border-neutral-200 dark:border-neutral-700',\n pinned && 'border-t',\n isGrid && gridCellFocusRing,\n ...etc,\n );\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusableGroup } from '@fluentui/react-tabster';\nimport { type Cell as CellType, type RowData } from '@tanstack/react-table';\nimport React, { useCallback, type PropsWithChildren, type KeyboardEvent } from 'react';\n\nimport { tdRoot } from '../../theme';\nimport { useTableContext } from '../Table/TableContext';\n\ntype CellProps<TData extends RowData, TValue> = PropsWithChildren<{\n cell: CellType<TData, TValue>;\n}>;\n\nconst CELL_NAME = 'Cell';\n\nconst FocusableCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext();\n const domAttributes = useFocusableGroup({ tabBehavior: 'limited' });\n\n const pinned = tableContext.table.getState().rowPinning?.bottom?.includes(cell.row.id);\n const className = tdRoot({ ...tableContext, pinned }, cell.column.columnDef.meta?.cell?.classNames);\n\n const handleKeyDown = useCallback(({ key, currentTarget }: KeyboardEvent<HTMLTableCellElement>) => {\n if (key !== 'Enter') {\n return;\n }\n\n const currentRow = currentTarget.closest('tr');\n if (!currentRow) {\n return;\n }\n\n const cellIndex = Array.from(currentRow.cells || []).indexOf(currentTarget);\n\n const nextSibling = currentRow.nextElementSibling;\n if (!(nextSibling instanceof HTMLTableRowElement)) {\n let depth = 0;\n // Poll for the new 'add row' row to be added to the DOM.\n const pollForNewRow = () => {\n const newNextSibling = currentRow.nextElementSibling;\n if (newNextSibling instanceof HTMLTableRowElement) {\n const nextCell = newNextSibling.cells[cellIndex];\n // Find the input within next cell and focus it.\n const input = nextCell.querySelector('input');\n if (input) {\n input.focus();\n }\n\n // TODO(Zan): Use the same utility that sheets uses.\n // Scroll current row into view after it's been hidden behind the sticky add-row row.\n currentRow.scrollIntoView({ behavior: 'smooth', block: 'center' });\n } else if (depth++ < 100) {\n requestAnimationFrame(pollForNewRow);\n }\n };\n requestAnimationFrame(pollForNewRow);\n }\n }, []);\n\n return (\n <td data-testid='table.cell' tabIndex={0} {...domAttributes} className={className} onKeyDown={handleKeyDown}>\n {children}\n </td>\n );\n};\n\nconst StaticCell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const tableContext = useTableContext();\n return (\n <td data-testid='table.cell' className={tdRoot(tableContext, cell.column.columnDef.meta?.cell?.classNames)}>\n {children}\n </td>\n );\n};\n\nconst Cell = <TData extends RowData, TValue>({ cell, children }: CellProps<TData, TValue>) => {\n const { isGrid } = useTableContext();\n const Root = isGrid ? FocusableCell : StaticCell;\n return <Root cell={cell}>{children}</Root>;\n};\n\nCell.displayName = CELL_NAME;\n\nexport { Cell };\n\nexport type { CellProps };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { flexRender } from '@tanstack/react-table';\nimport React from 'react';\n\nimport { useTableContext } from './TableContext';\nimport { theadResizeRoot, theadRoot, theadTh, theadTr } from '../../theme';\n\nconst TABLE_HEAD_NAME = 'TableHeader';\n\ntype TableHeadProps = {};\n\nconst TableHead = (_props: TableHeadProps) => {\n const tableContext = useTableContext();\n const headerGroups = tableContext.table.getHeaderGroups();\n\n return (\n <thead className={theadRoot(tableContext)}>\n {headerGroups.map((headerGroup) => {\n return (\n // Group element to hover resize handles.\n <tr key={headerGroup.id} className={theadTr(tableContext)}>\n {/* TODO(burdon): Calc. width. */}\n {tableContext.debug && (\n <th className='font-mono' style={{ width: 32 }}>\n #\n </th>\n )}\n\n {headerGroup.headers.map((header) => {\n const isResizing = header.column.getIsResizing();\n const onResize = header.getResizeHandler();\n const resizable = header.column.columnDef.meta?.resizable;\n\n return (\n <th\n key={header.id}\n style={{ width: header.getSize() }}\n className={theadTh(tableContext, header.column.columnDef.meta?.header?.classNames)}\n data-testid='table.header-cell'\n >\n {!header || header.isPlaceholder\n ? null\n : flexRender(header.column.columnDef.header, header.getContext())}\n\n {/*\n * Resize handle.\n * https://codesandbox.io/p/sandbox/github/tanstack/table/tree/main/examples/react/column-sizing\n */}\n {resizable && (\n <div\n className={theadResizeRoot({ isResizing })}\n onDoubleClick={header.column.resetSize} // TODO(zan): How should non-pointer users reset column sizing?\n onMouseDown={onResize}\n onTouchStart={onResize}\n />\n )}\n </th>\n );\n })}\n\n {tableContext.expand && <th />}\n </tr>\n );\n })}\n </thead>\n );\n};\n\nTableHead.displayName = TABLE_HEAD_NAME;\n\nexport { TableHead };\n\nexport type { TableHeadProps };\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { useFocusFinders } from '@fluentui/react-tabster';\nimport { Check, ClipboardText, type Icon, X } from '@phosphor-icons/react';\nimport {\n createColumnHelper,\n type ColumnDef,\n type ColumnMeta,\n type RowData,\n type ColumnHelper,\n type CellContext,\n} from '@tanstack/react-table';\nimport { format } from 'date-fns/format';\nimport { formatDistanceToNow } from 'date-fns/formatDistanceToNow';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { type PublicKey } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { type ClassNameValue, Input, Tooltip } from '@dxos/react-ui';\nimport { getSize, mx } from '@dxos/react-ui-theme';\n\nimport { CellCombobox, useTableContext } from './components';\nimport { textPadding } from './theme';\n\nexport type ValueUpdater<TData extends RowData, TValue> = (row: TData, id: string, value: TValue) => void;\n\nexport const createColumnBuilder = <TData extends RowData>() => ({\n helper: createColumnHelper<TData>(),\n builder: new ColumnBuilder<TData>(),\n});\n\n// TODO(thure): This interface is redundant, e.g. `classNames` == `meta.cell.classNames`\n/**\n * NOTE: Can use `meta` for custom properties.\n */\nexport type BaseColumnOptions<TData, TValue> = Partial<ColumnDef<TData, TValue>> & {\n meta?: ColumnMeta<TData, TValue>;\n label?: string;\n classNames?: ClassNameValue;\n onUpdate?: ValueUpdater<TData, TValue | undefined>;\n};\n\n// TODO(burdon): Better abstraction?\nexport type SearchListQueryModel<TData extends RowData> = {\n getId(object: TData): string;\n getText(object: TData): string;\n query(text?: string): Promise<TData[]>;\n};\n\nexport type ComboboxColumnOptions<TData extends RowData> = BaseColumnOptions<TData, any> & {\n model: SearchListQueryModel<TData>;\n};\n\nexport type StringColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\nexport type SelectRowColumnOptions<TData extends RowData> = BaseColumnOptions<TData, string> & {};\n\nexport type NumberColumnOptions<TData extends RowData> = BaseColumnOptions<TData, number> & {\n digits?: number;\n};\n\nexport type KeyColumnOptions<TData extends RowData> = BaseColumnOptions<TData, PublicKey> & {\n tooltip?: boolean;\n};\n\nexport type DateColumnOptions<TData extends RowData> = BaseColumnOptions<TData, Date> & {\n format?: string;\n relative?: boolean;\n};\n\nexport type SwitchColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {};\n\nexport type IconColumnOptions<TData extends RowData> = BaseColumnOptions<TData, boolean> & {\n on?: {\n Icon?: Icon;\n className?: string;\n };\n off?: {\n Icon?: Icon;\n className?: string;\n };\n};\n\nconst ComboboxBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, TData>) => {\n const { model, onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, TData>;\n return model ? (\n <CellCombobox<TData>\n model={model}\n value={cellContext.getValue()}\n onValueChange={(value) => onUpdate?.(cellContext.row.original, cellContext.column.id, value)}\n />\n ) : null;\n};\n\nconst StringBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, string>) => {\n const ref = useRef<HTMLInputElement>(null);\n const { findPrevFocusable } = useFocusFinders();\n\n const { onUpdate, cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n\n // https://tanstack.com/table/v8/docs/examples/react/editable-data\n const initialValue = cellContext.getValue();\n\n const getInitialValue = useCallback(() => {\n // TODO(burdon): Temporary shim for automerge.\n return (initialValue as any)?.content ?? initialValue;\n }, [initialValue]);\n\n const [value, setValue] = useState(getInitialValue);\n\n // Update value if initialValue changes externally (cell reactivity).\n useEffect(() => setValue(getInitialValue()), [getInitialValue]);\n\n const handleSave = () => {\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n\n if (value !== initialValue) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, value);\n }\n };\n\n const handleCancel = () => setValue(initialValue);\n\n let placeholder = false;\n const columns = cellContext.table.getVisibleFlatColumns();\n\n // Calling getRowModel is expensive, so only do it when we're a cell in the first position\n if (columns[0].id === cellContext.column.id) {\n const rowCount = cellContext.table.getRowModel().rows.length;\n placeholder = cellContext.row.index === rowCount - 1 && columns[0].id === cellContext.column.id;\n }\n\n // TODO(burdon): Don't render inputs unless mouse over (Show ellipsis when div)?\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n placeholder={placeholder ? 'Add row...' : undefined}\n classNames={['is-full', textPadding, cell?.classNames]}\n value={value ?? ''}\n onBlur={handleSave}\n onChange={(event) => setValue(event.target.value)}\n onKeyDown={(event) => (event.key === 'Enter' && handleSave()) || (event.key === 'Escape' && handleCancel())}\n autoComplete='off'\n />\n </Input.Root>\n );\n};\n\nconst parseNumber = (text?: string) => (text?.trim().length ? Number(text) : NaN);\n\nconst displayNumber = (value?: number, digits?: number) =>\n value || value === 0\n ? value.toLocaleString(undefined, {\n minimumFractionDigits: digits ?? 0,\n maximumFractionDigits: digits ?? 2,\n })\n : '';\n\nconst NumberBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, number>) => {\n const { onUpdate, digits } = cellContext.column.columnDef.meta as ColumnMeta<TData, string>;\n const value = cellContext.getValue();\n const [text, setText] = useState<string>(displayNumber(value, digits));\n const { findPrevFocusable } = useFocusFinders();\n const ref = useRef<HTMLInputElement | null>(null);\n\n // Update display value if `digits` changes and input is not in focus.\n useEffect(() => {\n (!document.activeElement || document.activeElement !== ref.current) && setText(displayNumber(value, digits));\n }, [digits, value]);\n\n const handleEdit = () => setText(value !== undefined ? String(value) : '');\n\n // TODO(burdon): Property is encoded as float (e.g., 6.1 => 6.099)\n const handleSave = () => {\n const nextValue = parseNumber(text);\n\n if (!isNaN(nextValue)) {\n onUpdate?.(cellContext.row.original, cellContext.column.id, nextValue);\n setText(displayNumber(nextValue, digits));\n } else {\n // Reset the text to display the original value without updating the model.\n setText(displayNumber(value, digits));\n }\n\n // Shift focus only if input is focused on save (e.g. on `Enter`).\n ref.current && document.activeElement === ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n const _handleCancel = () => {\n setText(displayNumber(value, digits));\n ref.current && findPrevFocusable(ref.current)?.focus();\n };\n\n return (\n <Input.Root>\n <Input.TextInput\n ref={ref}\n variant='subdued'\n value={text}\n classNames={['is-full text-end font-mono', textPadding]}\n onBlur={handleSave}\n onFocus={handleEdit}\n onChange={({ target: { value } }) => setText(value)}\n onKeyDown={(event) => {\n // TODO(thure): `Escape` is reserved for blurring the input and moving focus to the cell\n return /* (event.key === 'Escape' && handleCancel()) || */ event.key === 'Enter' && handleSave();\n }}\n autoComplete='off'\n />\n </Input.Root>\n );\n};\n\nconst RowSelectorBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, unknown>) => {\n const { cell } = cellContext.column.columnDef.meta as ColumnMeta<TData, unknown>;\n const { row } = cellContext;\n\n const checked = row.getCanSelect()\n ? row.getIsSelected()\n : row.getCanSelectSubRows() && (row.getIsSomeSelected() ? 'indeterminate' : row.getIsAllSubRowsSelected());\n\n return (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={[cell?.classNames]}\n checked={checked}\n onCheckedChange={(event) => {\n if (row.getCanSelect()) {\n row.getToggleSelectedHandler()(event);\n }\n }}\n disabled={!(row.getCanSelect() || row.getCanSelectSubRows())}\n />\n </Input.Root>\n </div>\n );\n};\n\nconst SwitchBuilderCell = <TData extends RowData>(cellContext: CellContext<TData, boolean>) => {\n const { onUpdate } = cellContext.column.columnDef.meta as ColumnMeta<TData, boolean>;\n const value = cellContext.getValue();\n return (\n <Input.Root>\n <Input.Switch\n classNames='block mli-auto'\n onClick={(event) => event.stopPropagation()}\n disabled={!onUpdate}\n checked={!!value}\n onCheckedChange={(value) => {\n onUpdate?.(cellContext.row.original, cellContext.column.id, !!value);\n }}\n />\n </Input.Root>\n );\n};\n\n/**\n * Util to create column definitions.\n */\nexport class ColumnBuilder<TData extends RowData> {\n /**\n * Combobox value\n */\n combobox({\n label,\n classNames,\n model,\n onUpdate,\n ...props\n }: ComboboxColumnOptions<TData>): Partial<ColumnDef<TData, any>> {\n return {\n minSize: 100,\n header: (column) => {\n return label ?? column.header.id;\n },\n cell:\n model && onUpdate\n ? ComboboxBuilderCell\n : (cellContext) => {\n const cellValue = cellContext.getValue();\n return <div className={mx('truncate', classNames)}>{cellValue ? model?.getText(cellValue) : ''}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n model,\n onUpdate,\n cell: { classNames, ...props.meta?.cell },\n },\n };\n }\n\n /**\n * String formats.\n */\n string({ label, classNames, onUpdate, ...props }: StringColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, string>\n > {\n return {\n minSize: 100,\n // TODO(burdon): Default.\n header: (column) => {\n return label ?? column.header.id;\n },\n cell: onUpdate\n ? StringBuilderCell\n : (cell) => {\n let value = cell.getValue();\n // TODO(burdon): Hack to support automerge.\n if (typeof value === 'object' && (value as any)?.__typename === 'dxos.Text.v0') {\n value = (value as any).content;\n }\n\n return <div className={mx('truncate', textPadding, classNames)}>{value}</div>;\n },\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Number formats.\n */\n number({ label, minSize, classNames, digits, onUpdate, ...props }: NumberColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, number>\n > {\n return {\n size: 100,\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: NumberBuilderCell,\n ...props,\n meta: {\n ...props.meta,\n onUpdate,\n digits,\n header: { ...props.meta?.header },\n cell: { ...props.meta?.cell, classNames },\n },\n };\n }\n\n /**\n * Date formats.\n */\n // TODO(burdon): Date picker (pluggable renderers?)\n date({ label, format: formatSpec, relative, classNames, ...props }: DateColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, Date>\n > {\n return {\n size: 220, // TODO(burdon): Depends on format.\n minSize: 100,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n\n try {\n const str = value\n ? formatSpec\n ? format(value, formatSpec)\n : relative\n ? formatDistanceToNow(value, { addSuffix: true })\n : value.toISOString()\n : undefined;\n\n return <div className={mx(textPadding, classNames)}>{str}</div>;\n } catch (err) {\n log.info('formatError', { value });\n return null;\n }\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames } },\n };\n }\n\n /**\n * PublicKey with tooltip.\n */\n key({ label, tooltip, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 94,\n minSize: 94,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n if (!value) {\n return;\n }\n\n // TODO(burdon): Factor out styles.\n const element = value.truncate();\n if (!tooltip) {\n return element;\n }\n\n return (\n <Tooltip.Provider>\n <Tooltip.Root>\n <Tooltip.Trigger>{element}</Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content side='right'>\n <Tooltip.Arrow />\n <ClipboardText\n onClick={(ev) => {\n ev.stopPropagation(); // Prevent select row.\n void navigator.clipboard.writeText(value.toHex());\n }}\n />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n </Tooltip.Provider>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n\n /**\n * Row selector\n */\n selectRow({ classNames, onUpdate, id = 'selectRow' }: SelectRowColumnOptions<TData> = {}): Parameters<\n ColumnHelper<TData>['display']\n >[0] {\n return {\n id,\n size: 32,\n enableResizing: false,\n meta: { onUpdate, cell: { classNames } },\n header: ({ table }) => {\n const { rowsSelectable } = useTableContext();\n const checked = table.getIsSomeRowsSelected() ? 'indeterminate' : table.getIsAllRowsSelected();\n\n return rowsSelectable === 'multi' ? (\n <div className='flex justify-center w-full h-full' role='presentation'>\n <Input.Root>\n <Input.Checkbox\n size={4}\n classNames={['mli-auto', classNames]}\n checked={checked}\n onCheckedChange={() => table.toggleAllRowsSelected()}\n />\n </Input.Root>\n </div>\n ) : null;\n },\n cell: RowSelectorBuilderCell,\n };\n }\n\n /**\n * Switch\n */\n switch({ label, classNames, onUpdate, ...props }: SwitchColumnOptions<TData> = {}): Partial<\n ColumnDef<TData, boolean>\n > {\n return {\n size: 50,\n minSize: 50,\n header: (column) => label ?? column.header.id,\n // TODO(zan): Implement sort algorithm.\n enableSorting: true,\n cell: SwitchBuilderCell,\n ...props,\n meta: { ...props.meta, onUpdate, cell: { ...props.meta?.cell, classNames: [textPadding, classNames] } },\n };\n }\n\n /**\n * Icon based on boolean value.\n */\n icon({ label, size, on, off, ...props }: IconColumnOptions<TData> = {}): Partial<ColumnDef<TData, boolean>> {\n const IconOn = on?.Icon ?? Check;\n const IconOff = off?.Icon ?? X;\n return {\n size: size ?? 32,\n // TODO(zan): Implement sort algorithm.\n enableSorting: false,\n header: (column) => <div className={'justify-center'}>{label ?? column.header.id}</div>,\n cell: (cell) => {\n const value = cell.getValue();\n if (value) {\n return <IconOn className={mx('block mli-auto', getSize(6), on?.className ?? 'text-green-700')} />;\n } else if (value === false) {\n return <IconOff className={mx('block mli-auto', getSize(6), off?.className ?? 'text-red-700')} />;\n } else {\n return null;\n }\n },\n ...props,\n };\n }\n\n /**\n * This display column type is for nested/unhandled data to appear as JSON.\n */\n json({ label, classNames, ...props }: KeyColumnOptions<TData> = {}): Partial<ColumnDef<TData, PublicKey>> {\n return {\n size: 120,\n minSize: 120,\n header: (cell) => label ?? cell.header.id,\n cell: (cell) => {\n const value = cell.getValue();\n return (\n <div className='overflow-scroll'>\n <code className='text-xs'>{JSON.stringify(value)}</code>\n </div>\n );\n },\n ...props,\n meta: { ...props.meta, cell: { ...props.meta?.cell, classNames: ['font-mono', textPadding, classNames] } },\n };\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ColumnDef } from '@tanstack/react-table';\n\nimport { type S } from '@dxos/echo-schema';\nimport { FieldValueType, mapSchemaToFields } from '@dxos/schema';\n\nimport { createColumnBuilder } from '../helpers';\n\nexport const schemaToColumnDefs = <T>(schema: S.Schema<T, any>): ColumnDef<T, any>[] => {\n const { helper, builder } = createColumnBuilder<T>();\n\n const classified = mapSchemaToFields(schema);\n return classified.map(([name, type]) => {\n const propertyKey = name.toString();\n\n let column: Partial<ColumnDef<any, any>> | undefined;\n switch (type) {\n case FieldValueType.String: {\n column = builder.string({ label: propertyKey, classNames: [name === 'id' && 'font-mono'] });\n break;\n }\n case FieldValueType.Number: {\n column = builder.number({ label: propertyKey });\n break;\n }\n case FieldValueType.Boolean: {\n column = builder.switch({ label: propertyKey });\n break;\n }\n case FieldValueType.Date: {\n column = builder.date({ label: propertyKey });\n break;\n }\n case FieldValueType.JSON: {\n column = builder.json({ label: propertyKey, id: propertyKey });\n break;\n }\n default: {\n throw new Error(`Unhandled column type: ${type}`);\n }\n }\n\n return helper.accessor(propertyKey as any, column);\n });\n};\n"],
5
- "mappings": "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",
6
- "names": ["translationKey", "CaretDown", "React", "useCallback", "useState", "Popover", "useTranslation", "PopoverCombobox", "descriptionText", "getSize", "mx", "staticPlaceholderText", "initialItems", "model", "value", "getId", "label", "getText", "data", "CellCombobox", "onValueChange", "t", "useTranslation", "translationKey", "items", "setItems", "useState", "loading", "setLoading", "searchInputValue", "setSearchInputValue", "handleSearchInputValueChange", "text", "query", "reduce", "acc", "item", "handleValueChange", "useCallback", "id", "PopoverCombobox", "Root", "placeholder", "Trigger", "variant", "classNames", "span", "className", "mx", "staticPlaceholderText", "CaretDown", "weight", "getSize", "Content", "shouldFilter", "Input", "List", "length", "p", "descriptionText", "Empty", "Object", "entries", "map", "Item", "key", "onSelect", "Popover", "Arrow", "X", "GearSix", "CaretDown", "ArrowDown", "ArrowUp", "ArrowRight", "ArrowLeft", "React", "useRef", "useState", "useCallback", "Button", "Popover", "DropdownMenu", "getSize", "mx", "React", "useRef", "useState", "Button", "Input", "Select", "useTranslation", "FieldValueTypes", "safeParseInt", "ColumnSettings", "column", "tableDef", "tablesToReference", "onUpdate", "onDelete", "onClose", "t", "useTranslation", "translationKey", "propRef", "useRef", "formState", "setFormState", "useState", "prop", "id", "refTable", "refProp", "type", "String", "label", "digits", "handleSave", "length", "match", "current", "focus", "columns", "find", "c", "safeParseInt", "handleDelete", "React", "div", "className", "Input", "Root", "Label", "TextInput", "placeholder", "value", "onChange", "event", "prevState", "target", "autoFocus", "data-testid", "ref", "replace", "Select", "onValueChange", "TriggerButton", "classNames", "Portal", "Content", "Viewport", "FieldValueTypes", "map", "Option", "key", "filter", "name", "Button", "onClick", "variant", "useCallback", "useEffect", "useState", "useOnTransition", "useColumnResizing", "columns", "onColumnResize", "columnsInitialised", "setColumnsInitialised", "useState", "columnSizing", "setColumnSizing", "useEffect", "filter", "column", "size", "prop", "undefined", "reduce", "state", "columnSizingInfo", "setColumnSizingInfo", "notifyColumnResize", "useCallback", "useOnTransition", "isResizingColumn", "v", "useState", "React", "useContext", "createContext", "raise", "TABLE_NAME", "TableContext", "createContext", "undefined", "TableProvider", "children", "value", "React", "Provider", "useTableContext", "useContext", "raise", "Error", "useColumnSorting", "columnSorting", "setColumnSorting", "useState", "sortColumn", "columnId", "sortDirection", "id", "desc", "clearColumnSorting", "sorting", "useSortColumn", "column", "useTableContext", "initialSortDirection", "setInitialSortDirection", "columnSort", "find", "s", "undefined", "canSort", "getCanSort", "updateColumnSort", "direction", "onToggleSort", "onSelectSort", "onClearSort", "useCallback", "useEffect", "useState", "usePinLastRow", "pinLastRow", "table", "data", "pinnedRowKey", "setPinnedRowKey", "useState", "pinRow", "useCallback", "rowToPin", "resetRowPinning", "pin", "id", "clearRowPinning", "undefined", "pinLastRowCallback", "rows", "getRowModel", "length", "lastRow", "useEffect", "useControllableState", "useCallback", "useRowSelection", "props", "rowSelection", "setRowSelection", "useControllableState", "prop", "onChange", "onRowSelectionChange", "defaultProp", "defaultRowSelection", "handleRowSelectionChange", "useCallback", "updaterOrValue", "nextRowSelection", "rowsSelectable", "nextRowSelectionKey", "Object", "keys", "filter", "id", "ColumnMenu", "column", "columnOrderable", "columnPosition", "onColumnReorder", "props", "title", "label", "length", "id", "header", "context", "canSort", "sortDirection", "onSelectSort", "onToggleSort", "onClearSort", "useSortColumn", "columnSettingsAnchorRef", "useRef", "isColumnSettingsOpen", "setIsColumnSettingsOpen", "useState", "shouldPreventFocusOnClose", "onOpenColumnSettings", "useCallback", "current", "onDropdownCloseAutoFocus", "event", "preventDefault", "React", "div", "className", "SortIndicator", "direction", "onClick", "DropdownMenu", "Root", "modal", "Popover", "open", "onOpenChange", "Trigger", "ref", "asChild", "Anchor", "Button", "variant", "data-testid", "CaretDown", "getSize", "Portal", "Content", "onCloseAutoFocus", "sideOffset", "collisionPadding", "Viewport", "Item", "span", "ArrowUp", "ArrowDown", "X", "ArrowLeft", "mx", "ArrowRight", "GearSix", "Arrow", "ColumnSettings", "onClose", "undefined", "icon", "Slot", "getCoreRowModel", "getExpandedRowModel", "getGroupedRowModel", "getSortedRowModel", "useReactTable", "React", "Fragment", "memo", "useCallback", "useEffect", "useState", "useContext", "useDefaultValue", "mx", "useArrowNavigationGroup", "flexRender", "React", "useContext", "useVirtualizer", "createContext", "useRef", "useState", "useTableRootContext", "scrollContextRef", "useRef", "tableCount", "setTableCount", "useState", "virtualizer", "useVirtualizer", "getScrollElement", "current", "count", "overscan", "estimateSize", "dispatch", "action", "type", "TableRootContext", "createContext", "focusRing", "ghostSelected", "ghostSelectedCurrent", "mx", "currentRow", "selectedRow", "flushPadding", "textPadding", "headPadding", "gridCellFocusRing", "borderColors", "stickyRowColors", "tableRoot", "fullWidth", "etc", "mx", "groupTh", "_props", "theadRoot", "header", "stickyHeader", "theadTr", "theadTh", "border", "theadResizeRoot", "isResizing", "tbodyRoot", "tbodyTr", "canBeCurrent", "isPinned", "ghostSelectedCurrent", "ghostSelected", "focusRing", "tdRoot", "isGrid", "pinned", "useFocusableGroup", "React", "useCallback", "CELL_NAME", "FocusableCell", "cell", "children", "tableContext", "useTableContext", "domAttributes", "useFocusableGroup", "tabBehavior", "pinned", "table", "getState", "rowPinning", "bottom", "includes", "row", "id", "className", "tdRoot", "column", "columnDef", "meta", "classNames", "handleKeyDown", "useCallback", "key", "currentTarget", "currentRow", "closest", "cellIndex", "Array", "from", "cells", "indexOf", "nextSibling", "nextElementSibling", "HTMLTableRowElement", "depth", "pollForNewRow", "newNextSibling", "nextCell", "input", "querySelector", "focus", "scrollIntoView", "behavior", "block", "requestAnimationFrame", "React", "td", "data-testid", "tabIndex", "onKeyDown", "StaticCell", "Cell", "isGrid", "Root", "displayName", "TABLE_BODY_NAME", "TableBody", "rows", "table", "keyAccessor", "currentDatum", "debug", "expand", "isGrid", "onDatumClick", "useTableContext", "rowSelection", "getState", "domAttributes", "useArrowNavigationGroup", "axis", "canBeCurrent", "virtualizer", "useContext", "TableRootContext", "React", "tbody", "map", "row", "isCurrent", "original", "isSelected", "id", "isPinned", "getIsPinned", "classNames", "tbodyTr", "tr", "key", "className", "data-index", "index", "data-testid", "ref", "measureElement", "tabIndex", "onClick", "onKeyUp", "td", "getVisibleCells", "cell", "Cell", "flexRender", "column", "columnDef", "getContext", "displayName", "flexRender", "React", "TABLE_HEAD_NAME", "TableHead", "_props", "tableContext", "useTableContext", "headerGroups", "table", "getHeaderGroups", "React", "thead", "className", "theadRoot", "map", "headerGroup", "tr", "key", "id", "theadTr", "debug", "th", "style", "width", "headers", "header", "isResizing", "column", "getIsResizing", "onResize", "getResizeHandler", "resizable", "columnDef", "meta", "getSize", "theadTh", "classNames", "data-testid", "isPlaceholder", "flexRender", "getContext", "div", "theadResizeRoot", "onDoubleClick", "resetSize", "onMouseDown", "onTouchStart", "expand", "displayName", "TableRoot", "children", "contextValue", "useTableRootContext", "React", "TableRootContext", "Provider", "value", "TableViewport", "classNames", "asChild", "props", "scrollContextRef", "useContext", "classes", "mx", "Slot", "ref", "className", "div", "role", "TablePrimitive", "header", "rowsSelectable", "debug", "pinLastRow", "columnVisibility", "onColumnResize", "onDataSelectionChange", "columns", "useDefaultValue", "incomingData", "data", "setData", "useState", "forceUpdate", "useCallback", "useEffect", "JSON", "stringify", "TableProvider", "UntypedTableProvider", "columnSizing", "setColumnSizing", "columnSizingInfo", "setColumnSizingInfo", "useColumnResizing", "rowSelection", "handleRowSelectionChange", "useRowSelection", "grouping", "handleGroupingChange", "columnSorting", "useColumnSorting", "table", "useReactTable", "meta", "defaultColumn", "size", "maxSize", "state", "sorting", "columnResizeMode", "enableColumnResizing", "onColumnSizingChange", "onColumnSizingInfoChange", "getCoreRowModel", "getSortedRowModel", "getExpandedRowModel", "getGroupedRowModel", "length", "undefined", "onGroupingChange", "enableMultiRowSelection", "enableRowSelection", "onRowSelectionChange", "enableSorting", "enableColumnPinning", "debugTable", "Object", "keys", "map", "id", "getRowModel", "rowsById", "original", "usePinLastRow", "expand", "isGrid", "TableImpl", "fullWidth", "useTableContext", "pre", "code", "getState", "isResizingColumn", "TableComponent", "MemoizedVirtualizedTableContent", "VirtualizedTableContent", "tableRoot", "style", "borderSpacing", "width", "getTotalSize", "TableHead", "GroupedTableContent", "virtualizer", "dispatch", "centerRows", "getCenterRows", "pinnedRows", "type", "count", "getBottomRows", "_", "getVirtualItems", "virtualRows", "totalSize", "paddingTop", "start", "paddingBottom", "end", "rowsToRender", "virtualRow", "index", "filter", "r", "Fragment", "tbody", "tr", "td", "height", "TableBody", "rows", "memo", "getHeaderGroups", "row", "i", "key", "thead", "th", "colSpan", "headers", "groupTh", "String", "getGroupingValue", "subRows", "Table", "Root", "Viewport", "Main", "useFocusFinders", "Check", "ClipboardText", "X", "createColumnHelper", "format", "formatDistanceToNow", "React", "useCallback", "useEffect", "useRef", "useState", "log", "Input", "Tooltip", "getSize", "mx", "createColumnBuilder", "helper", "createColumnHelper", "builder", "ColumnBuilder", "ComboboxBuilderCell", "cellContext", "model", "onUpdate", "column", "columnDef", "meta", "React", "CellCombobox", "value", "getValue", "onValueChange", "row", "original", "id", "StringBuilderCell", "ref", "useRef", "findPrevFocusable", "useFocusFinders", "cell", "initialValue", "getInitialValue", "useCallback", "content", "setValue", "useState", "useEffect", "handleSave", "current", "document", "activeElement", "focus", "handleCancel", "placeholder", "columns", "table", "getVisibleFlatColumns", "rowCount", "getRowModel", "rows", "length", "index", "Input", "Root", "TextInput", "variant", "undefined", "classNames", "textPadding", "onBlur", "onChange", "event", "target", "onKeyDown", "key", "autoComplete", "parseNumber", "text", "trim", "Number", "NaN", "displayNumber", "digits", "toLocaleString", "minimumFractionDigits", "maximumFractionDigits", "NumberBuilderCell", "setText", "handleEdit", "String", "nextValue", "isNaN", "_handleCancel", "onFocus", "RowSelectorBuilderCell", "checked", "getCanSelect", "getIsSelected", "getCanSelectSubRows", "getIsSomeSelected", "getIsAllSubRowsSelected", "div", "className", "role", "Checkbox", "size", "onCheckedChange", "getToggleSelectedHandler", "disabled", "SwitchBuilderCell", "Switch", "onClick", "stopPropagation", "combobox", "label", "props", "minSize", "header", "cellValue", "mx", "getText", "string", "__typename", "number", "date", "format", "formatSpec", "relative", "str", "formatDistanceToNow", "addSuffix", "toISOString", "err", "log", "info", "tooltip", "element", "truncate", "Tooltip", "Provider", "Trigger", "Portal", "Content", "side", "Arrow", "ClipboardText", "ev", "navigator", "clipboard", "writeText", "toHex", "selectRow", "enableResizing", "rowsSelectable", "useTableContext", "getIsSomeRowsSelected", "getIsAllRowsSelected", "toggleAllRowsSelected", "switch", "enableSorting", "icon", "on", "off", "IconOn", "Icon", "Check", "IconOff", "X", "getSize", "json", "code", "JSON", "stringify", "FieldValueType", "mapSchemaToFields", "schemaToColumnDefs", "schema", "helper", "builder", "createColumnBuilder", "classified", "mapSchemaToFields", "map", "name", "type", "propertyKey", "toString", "column", "FieldValueType", "String", "string", "label", "classNames", "Number", "number", "Boolean", "switch", "Date", "date", "JSON", "json", "id", "Error", "accessor"]
3
+ "sources": ["../../../src/translations.ts", "../../../src/components/Table/Table.tsx", "../../../src/components/Table/ColumnActionsMenu.tsx", "../../../src/components/Table/ColumnSettings.tsx", "../../../src/components/Table/RowActionsMenu.tsx", "../../../src/components/TableCellEditor/TableCellEditor.tsx", "../../../src/components/TableCellEditor/extension.ts", "../../../src/util/grid.ts", "../../../src/util/signals.ts", "../../../src/util/table.ts", "../../../src/util/table-buttons.ts", "../../../src/components/Toolbar/Toolbar.tsx", "../../../src/components/Toolbar/common.tsx", "../../../src/hooks/useTableModel.ts", "../../../src/model/table-model.ts", "../../../src/model/modal-controller.ts", "../../../src/model/selection-model.ts", "../../../src/util/table-controls.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2023 DXOS.org\n//\n\nexport const translationKey = 'table';\n\nexport default [\n {\n 'en-US': {\n [translationKey]: {\n 'object placeholder': 'New table',\n 'create object label': 'Create table',\n 'table name placeholder': 'Table name',\n 'settings title': 'Table settings',\n 'table schema label': 'Schema',\n 'new schema': 'New schema',\n 'continue label': 'Continue',\n 'create stack section label': 'Create table',\n 'add row': 'Add row',\n 'create comment': 'Create thread',\n 'column action sort descending': 'Sort Descending',\n 'column action sort ascending': 'Sort Ascending',\n 'column action clear sorting': 'Clear Sorting',\n 'column action settings': 'Column Settings',\n 'column action delete': 'Delete Column',\n 'delete row label': 'Delete row',\n 'bulk delete row label': 'Delete selected rows',\n 'column deleted label': 'Column deleted',\n 'new column button label': 'Create column',\n },\n },\n },\n] as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, {\n forwardRef,\n type PropsWithChildren,\n useCallback,\n useImperativeHandle,\n useState,\n type WheelEvent,\n} from 'react';\n\nimport { getValue } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { Filter, getSpace, fullyQualifiedId } from '@dxos/react-client/echo';\nimport { useAttention } from '@dxos/react-ui-attention';\nimport { type DxGridElement, Grid, type GridContentProps, closestCell } from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\nimport { isNotFalsy } from '@dxos/util';\n\nimport { ColumnActionsMenu } from './ColumnActionsMenu';\nimport { ColumnSettings } from './ColumnSettings';\nimport { RowActionsMenu } from './RowActionsMenu';\nimport { type TableModel } from '../../model';\nimport { type GridCell } from '../../util';\nimport { TableCellEditor, type TableCellEditorProps } from '../TableCellEditor';\n\n// NOTE(Zan): These fragments add border to inline-end and block-end of the grid using pseudo-elements.\n// These are offset by 1px to avoid double borders in planks.\nconst inlineEndLine =\n '[&>.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';\nconst blockEndLine =\n '[&>.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';\n\nconst frozen = { frozenRowsStart: 1, frozenColsStart: 1, frozenColsEnd: 1 };\n\n//\n// Root\n//\n\nexport type TableRootProps = PropsWithChildren<{ role?: string }>;\n\nconst TableRoot = ({ children }: TableRootProps) => {\n return (\n <div role='none' className='relative flex flex-col'>\n {children}\n </div>\n );\n};\n\n//\n// Main\n//\n\nexport type TableController = {\n update?: (cell?: GridCell) => void;\n};\n\nexport type TableMainProps = {\n model?: TableModel;\n};\n\nconst TableMain = forwardRef<TableController, TableMainProps>(({ model }, forwardedRef) => {\n const [dxGrid, setDxGrid] = useState<DxGridElement | null>(null);\n\n const { hasAttention } = useAttention(model?.table ? fullyQualifiedId(model.table) : 'table');\n\n /**\n * Provides an external controller that can be called to repaint the table.\n */\n useImperativeHandle<TableController, TableController>(\n forwardedRef,\n () => {\n if (!model || !dxGrid) {\n return {};\n }\n\n dxGrid.getCells = model.getCells.bind(model);\n return {\n update: (cell) => {\n if (cell) {\n dxGrid.updateIfWithinBounds(cell);\n } else {\n dxGrid.updateCells(true);\n }\n },\n };\n },\n [model, dxGrid],\n );\n\n const handleFocus: TableCellEditorProps['onFocus'] = (increment, delta) => {\n dxGrid?.refocus(increment, delta);\n };\n\n const handleEnter = useCallback<NonNullable<TableCellEditorProps['onEnter']>>(\n (cell) => {\n // TODO(burdon): Insert row only if bottom row isn't completely blank already.\n if (model && cell.row === model.getRowCount() - 1) {\n model.insertRow(cell.row);\n }\n },\n [model],\n );\n\n const handleKeyDown = useCallback<NonNullable<GridContentProps['onKeyDown']>>(\n (event) => {\n const cell = closestCell(event.target);\n if (!model || !cell) {\n return;\n }\n\n switch (event.key) {\n case 'Backspace':\n case 'Delete': {\n model.setCellData(cell, undefined);\n break;\n }\n }\n },\n [model],\n );\n\n const handleAxisResize = useCallback<NonNullable<GridContentProps['onAxisResize']>>(\n (event) => {\n if (event.axis === 'col') {\n const columnIndex = parseInt(event.index, 10);\n model?.setColumnWidth(columnIndex, event.size);\n }\n },\n [model],\n );\n\n const handleWheel = useCallback(\n (event: WheelEvent) => {\n if (!hasAttention) {\n event.stopPropagation();\n }\n },\n [hasAttention],\n );\n\n // TODO(burdon): Factor out?\n const handleQuery = useCallback<NonNullable<TableCellEditorProps['onQuery']>>(\n async ({ field, props }, _text) => {\n if (model && props.referenceSchema && field.referencePath) {\n const space = getSpace(model.table);\n invariant(space);\n const schema = space.db.schemaRegistry.getSchema(props.referenceSchema);\n if (schema) {\n // TODO(burdon): Cache/filter.\n const { objects } = await space.db.query(Filter.schema(schema)).run();\n return objects\n .map((obj) => {\n const value = getValue(obj, field.referencePath!);\n if (!value || typeof value !== 'string') {\n return undefined;\n }\n\n return {\n label: value,\n data: obj,\n };\n })\n .filter(isNotFalsy);\n }\n }\n\n return [];\n },\n [model],\n );\n\n if (!model) {\n return <span role='none' className='attention-surface' />;\n }\n\n return (\n <>\n <Grid.Root id={model.table.id ?? 'table-grid'}>\n <TableCellEditor model={model} onEnter={handleEnter} onFocus={handleFocus} onQuery={handleQuery} />\n\n <Grid.Content\n onWheelCapture={handleWheel}\n className={mx(\n '[--dx-grid-base:var(--surface-bg)] [&_.dx-grid]:grow [&_.dx-grid]:max-is-max [&_.dx-grid]:bs-0 [&_.dx-grid]:max-bs-max',\n inlineEndLine,\n blockEndLine,\n )}\n frozen={frozen}\n columns={model.columnMeta.value}\n limitRows={model.getRowCount() ?? 0}\n limitColumns={model.table.view?.fields?.length ?? 0}\n onAxisResize={handleAxisResize}\n onClick={model?.handleGridClick}\n onKeyDown={handleKeyDown}\n overscroll='trap'\n ref={setDxGrid}\n />\n </Grid.Root>\n\n <RowActionsMenu model={model} />\n <ColumnActionsMenu model={model} />\n <ColumnSettings model={model} />\n </>\n );\n});\n\n//\n// CellEditor\n//\n\nexport const Table = {\n Root: TableRoot,\n Main: TableMain,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DropdownMenu, useTranslation } from '@dxos/react-ui';\n\nimport { type TableModel } from '../../model';\nimport { translationKey } from '../../translations';\n\ntype ColumnActionsMenuProps = { model?: TableModel };\n\nexport const ColumnActionsMenu = ({ model }: ColumnActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const state = model?.modalController.state.value;\n\n if (!model || state?.type !== 'column') {\n return null;\n }\n\n const currentSort = model.sorting;\n const isCurrentColumnSorted = currentSort?.fieldId === state.fieldId;\n\n return (\n <DropdownMenu.Root modal={false} open={state?.type === 'column'} onOpenChange={model.modalController.close}>\n <DropdownMenu.VirtualTrigger virtualRef={model.modalController.trigger} />\n <DropdownMenu.Portal>\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n {(!isCurrentColumnSorted || currentSort?.direction === 'asc') && (\n <DropdownMenu.Item onClick={() => model.setSort(state.fieldId, 'desc')}>\n {t('column action sort descending')}\n </DropdownMenu.Item>\n )}\n {(!isCurrentColumnSorted || currentSort?.direction === 'desc') && (\n <DropdownMenu.Item onClick={() => model.setSort(state.fieldId, 'asc')}>\n {t('column action sort ascending')}\n </DropdownMenu.Item>\n )}\n {isCurrentColumnSorted && (\n <DropdownMenu.Item onClick={() => model.clearSort()}>\n {t('column action clear sorting')}\n </DropdownMenu.Item>\n )}\n {model.getColumnCount() > 1 && (\n <DropdownMenu.Item onClick={() => model.deleteColumn(state.fieldId)}>\n {t('column action delete')}\n </DropdownMenu.Item>\n )}\n <DropdownMenu.Item onClick={() => model.modalController.openColumnSettings()}>\n {t('column action settings')}\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { getSpace } from '@dxos/react-client/echo';\nimport { DropdownMenu } from '@dxos/react-ui';\nimport { FieldEditor } from '@dxos/react-ui-data';\nimport { type FieldType } from '@dxos/schema';\n\nimport { type TableModel } from '../../model';\n\ntype ColumnSettingsProps = { model?: TableModel };\n\nexport const ColumnSettings = ({ model }: ColumnSettingsProps) => {\n const [newField, setNewField] = useState<FieldType>();\n const state = model?.modalController.state.value;\n\n const space = getSpace(model?.table);\n\n useEffect(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && model?.projection) {\n setNewField(model.projection.createFieldProjection());\n } else {\n setNewField(undefined);\n }\n }, [model?.projection, state]);\n\n const existingField = useMemo(() => {\n if (state?.type === 'columnSettings') {\n const { mode } = state;\n if (mode.type === 'edit') {\n return model?.table?.view?.fields.find((f) => f.id === mode.fieldId);\n }\n }\n return undefined;\n }, [model?.table?.view?.fields, state]);\n\n const field = existingField ?? newField;\n\n const handleClose = useCallback(() => {\n model?.modalController.close();\n }, [model?.modalController]);\n\n const handleCancel = useCallback(() => {\n if (state?.type === 'columnSettings' && state.mode.type === 'create' && newField) {\n model?.projection?.deleteFieldProjection(newField.id);\n }\n }, [model?.projection, state, newField]);\n\n if (!model?.table?.view || !model.projection || !field) {\n return null;\n }\n\n return (\n <DropdownMenu.Root modal={false} open={state?.type === 'columnSettings'}>\n <DropdownMenu.VirtualTrigger virtualRef={model.modalController.trigger} />\n <DropdownMenu.Portal>\n <DropdownMenu.Content classNames='md:is-64'>\n <DropdownMenu.Viewport>\n <FieldEditor\n view={model.table.view}\n projection={model.projection}\n field={field}\n registry={space?.db.schemaRegistry}\n onClose={handleClose}\n onCancel={handleCancel}\n />\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Portal>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React from 'react';\n\nimport { DropdownMenu, useTranslation } from '@dxos/react-ui';\n\nimport { type TableModel } from '../../model';\nimport { translationKey } from '../../translations';\n\ntype RowActionsMenuProps = { model: TableModel };\n\nexport const RowActionsMenu = ({ model }: RowActionsMenuProps) => {\n const { t } = useTranslation(translationKey);\n const state = model.modalController.state.value;\n const hasSelection = model.selection.hasSelection.value;\n\n if (state?.type !== 'row') {\n return null;\n }\n\n return (\n <DropdownMenu.Root modal={false} open={true} onOpenChange={model.modalController.close}>\n <DropdownMenu.VirtualTrigger virtualRef={model.modalController.trigger} />\n <DropdownMenu.Content>\n <DropdownMenu.Viewport>\n <DropdownMenu.Item onClick={() => model.deleteRow(state.rowIndex)}>\n {t(hasSelection ? 'bulk delete row label' : 'delete row label')}\n </DropdownMenu.Item>\n </DropdownMenu.Viewport>\n <DropdownMenu.Arrow />\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { FormatEnum } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { type DxGrid } from '@dxos/lit-grid';\nimport {\n editorKeys,\n type EditorKeyEvent,\n GridCellEditor,\n type GridCellEditorProps,\n type EditorKeyOrBlurHandler,\n type EditorBlurHandler,\n type GridScopedProps,\n useGridContext,\n} from '@dxos/react-ui-grid';\nimport { type FieldProjection } from '@dxos/schema';\n\nimport { completion } from './extension';\nimport { type TableModel } from '../../model';\nimport { type GridCell, toGridCell } from '../../util';\n\nexport type TableCellEditorProps = {\n model?: TableModel;\n onEnter?: (cell: GridCell) => void;\n onFocus?: DxGrid['refocus'];\n onQuery?: (field: FieldProjection, text: string) => Promise<{ label: string; data: any }[]>;\n};\n\nexport const TableCellEditor = ({\n model,\n onEnter,\n onFocus,\n onQuery,\n __gridScope,\n}: GridScopedProps<TableCellEditorProps>) => {\n const { editing } = useGridContext('TableCellEditor', __gridScope);\n const fieldProjection = useMemo<FieldProjection | undefined>(() => {\n if (!model || !editing) {\n return;\n }\n\n const { col } = toGridCell(editing.index);\n const field = model.projection.view.fields[col];\n const fieldProjection = model.projection.getFieldProjection(field.id);\n invariant(fieldProjection);\n return fieldProjection;\n }, [model, editing]);\n\n const handleClose = useCallback<EditorKeyOrBlurHandler>(\n (value, event) => {\n if (!model || !editing || !fieldProjection) {\n return;\n }\n\n const cell = toGridCell(editing.index);\n onEnter?.(cell);\n if (event && onFocus) {\n onFocus(determineNavigationAxis(event), determineNavigationDelta(event));\n }\n },\n [model, editing, onFocus, onEnter, fieldProjection, determineNavigationAxis, determineNavigationDelta],\n );\n\n const handleBlur = useCallback<EditorBlurHandler>(\n (value) => {\n if (!model || !editing) {\n return;\n }\n\n const cell = toGridCell(editing.index);\n if (value !== undefined) {\n model.setCellData(cell, value);\n }\n },\n [model, editing],\n );\n\n const extension = useMemo(() => {\n if (!fieldProjection) {\n return [];\n }\n\n const extension = [\n editorKeys({\n onClose: handleClose,\n ...(editing?.initialContent && { onNav: handleClose }),\n }),\n ];\n\n if (onQuery) {\n switch (fieldProjection.props.format) {\n case FormatEnum.Ref: {\n extension.push([\n completion({\n onQuery: (text) => onQuery(fieldProjection, text),\n onMatch: (data) => {\n if (model && editing) {\n const cell = toGridCell(editing.index);\n model.setCellData(cell, data);\n onEnter?.(cell);\n onFocus?.();\n }\n },\n }),\n ]);\n break;\n }\n }\n }\n\n return extension;\n }, [model, editing, fieldProjection, handleClose]);\n\n const getCellContent = useCallback<GridCellEditorProps['getCellContent']>(() => {\n if (model && editing) {\n const value = model.getCellData(toGridCell(editing.index));\n return value !== undefined ? String(value) : '';\n }\n }, [model, editing]);\n\n return <GridCellEditor extension={extension} getCellContent={getCellContent} onBlur={handleBlur} />;\n};\n\nconst determineNavigationAxis = ({ key }: EditorKeyEvent): 'col' | 'row' | undefined => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowDown':\n case 'Enter': {\n return 'row';\n }\n\n case 'ArrowLeft':\n case 'ArrowRight':\n case 'Tab':\n return 'col';\n }\n};\n\nconst determineNavigationDelta = ({ key, shift }: EditorKeyEvent): -1 | 1 => {\n switch (key) {\n case 'ArrowUp':\n case 'ArrowLeft':\n return -1;\n\n case 'ArrowDown':\n case 'ArrowRight':\n return 1;\n }\n\n return shift ? -1 : 1;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n autocompletion,\n pickedCompletion,\n type CompletionContext,\n type CompletionResult,\n} from '@codemirror/autocomplete';\nimport { type Extension } from '@codemirror/state';\nimport { EditorView } from '@codemirror/view';\n\nexport type CompletionOptions = {\n onQuery: (text: string) => Promise<CompletionResult['options']>;\n onMatch: (data: any) => void;\n};\n\n/**\n * Autocomplete Codemirror extension.\n * https://codemirror.net/docs/ref/#autocomplete.autocompletion\n */\nexport const completion = ({ onQuery, onMatch }: CompletionOptions): Extension => {\n return [\n EditorView.theme({\n '.cm-completionDialog': {\n width: 'var(--dx-gridCellWidth)',\n },\n }),\n\n autocompletion({\n icons: false,\n activateOnTyping: true,\n override: [\n async (context: CompletionContext): Promise<CompletionResult> => {\n const text = context.state.doc.toString();\n return {\n from: 0,\n options: await onQuery(text),\n };\n },\n ],\n\n // TODO(burdon): Consts from grid (to line-up with grid).\n tooltipClass: () => 'cm-completionDialog !mt-[8px] !-ml-[4px] [&>ul]:!max-h-[264px]',\n optionClass: () => 'flex h-[33px] items-center',\n\n // Uncomment to debug.\n // closeOnBlur: true,\n }),\n\n // Check for accepted completion metadata in the transaction.\n EditorView.updateListener.of((update) => {\n update.transactions.forEach((tr) => {\n const completion = tr.annotation(pickedCompletion);\n if (completion) {\n onMatch((completion as any).data);\n }\n });\n }),\n ];\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type DxGridCellIndex } from '@dxos/react-ui-grid';\n\n// TODO(burdon): Factor out to grid.\nexport type GridCell = { col: number; row: number };\n\n/**\n * Generates a string key for a cell based on its column and row indices.\n */\nexport const fromGridCell = ({ col, row }: GridCell): DxGridCellIndex => {\n return `${col},${row}` as const; // TODO(burdon): \":\" delim.\n};\n\n/**\n * Converts a cell key string back into column and row coordinates.\n */\nexport const toGridCell = (cell: DxGridCellIndex): GridCell => {\n const [col, row] = cell.split(',').map(Number);\n return { row, col };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Explicitly marks signal dependencies for tracking within effects.\n * Returns the passed value to enable inline usage.\n */\nexport const touch = <T>(value: T) => value;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport {\n AST,\n Format,\n FormatEnum,\n type JsonPath,\n type JsonProp,\n type MutableSchema,\n S,\n TypedObject,\n TypeEnum,\n} from '@dxos/echo-schema';\nimport { log } from '@dxos/log';\nimport { PublicKey } from '@dxos/react-client';\nimport { create, type Space } from '@dxos/react-client/echo';\nimport { createFieldId, createView, ViewProjection } from '@dxos/schema';\n\nimport { type TableType } from '../types';\n\n// TODO(burdon): Pass in type.\n// TODO(burdon): User should determine typename.\nexport const initializeTable = ({ space, table }: { space: Space; table: TableType }): MutableSchema => {\n log.info('initializeTable', { table });\n\n const ContactSchema = TypedObject({\n typename: `example.com/type/${PublicKey.random().truncate()}`,\n version: '0.1.0',\n })({\n name: S.optional(S.String).annotations({\n [AST.TitleAnnotationId]: 'Name',\n }),\n email: S.optional(Format.Email),\n salary: S.optional(Format.Currency()).annotations({\n [AST.TitleAnnotationId]: 'Salary',\n }), // TODO(burdon): Should default to prop name?\n });\n\n const contactSchema = space.db.schemaRegistry.addSchema(ContactSchema);\n table.view = createView({\n name: 'Test',\n typename: contactSchema.typename,\n jsonSchema: contactSchema.jsonSchema,\n fields: ['name', 'email', 'salary'],\n });\n\n const projection = new ViewProjection(contactSchema, table.view!);\n projection.setFieldProjection({\n field: {\n id: table.view.fields[2].id,\n path: 'salary' as JsonPath,\n size: 150,\n },\n });\n\n projection.setFieldProjection({\n field: {\n id: createFieldId(),\n path: 'manager' as JsonPath,\n referencePath: 'name' as JsonPath,\n },\n props: {\n property: 'manager' as JsonProp,\n type: TypeEnum.Ref,\n format: FormatEnum.Ref,\n referenceSchema: contactSchema.typename,\n title: 'Manager',\n },\n });\n\n // TODO(burdon): Last (first) row should not be in db and should be managed by the model.\n space.db.add(create(contactSchema, {}));\n\n return contactSchema;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\ntype TableButton = 'columnSettings' | 'rowMenu' | 'newColumn';\n\nconst TABLE_ATTRS: { [K in TableButton]: string } = {\n columnSettings: 'data-table-column-settings-button',\n rowMenu: 'data-table-row-menu-button',\n newColumn: 'data-table-new-column-button',\n} as const;\n\nconst ICONS: { [K in TableButton]: string } = {\n columnSettings: 'ph--caret-down--regular',\n rowMenu: 'ph--dots-three--regular',\n newColumn: 'ph--plus--regular',\n} as const;\n\nconst createButtonHtml = ({\n button,\n value = '',\n disabled = false,\n}: {\n button: TableButton;\n value?: string;\n disabled?: boolean;\n}): string => {\n const buttonClasses = 'ch-button is-6 pli-0.5 min-bs-0 absolute inset-block-1 inline-end-2' as const;\n return `<button class=\"${buttonClasses}\" ${TABLE_ATTRS[button]}=\"${value}\" ${disabled ? 'disabled' : ''}><svg><use href=\"/icons.svg#${ICONS[button]}\"/></svg></button>`;\n};\n\nexport const tableButtons = {\n columnSettings: {\n attr: TABLE_ATTRS.columnSettings,\n icon: ICONS.columnSettings,\n render: ({ fieldId }: { fieldId: string }) => createButtonHtml({ button: 'columnSettings', value: fieldId }),\n },\n rowMenu: {\n attr: TABLE_ATTRS.rowMenu,\n icon: ICONS.rowMenu,\n render: ({ rowIndex }: { rowIndex: number }) => createButtonHtml({ button: 'rowMenu', value: rowIndex.toString() }),\n },\n addColumn: {\n attr: TABLE_ATTRS.newColumn,\n icon: ICONS.newColumn,\n render: ({ disabled }: { disabled?: boolean } = {}) => createButtonHtml({ button: 'newColumn', disabled }),\n },\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ChatText, RowsPlusBottom } from '@phosphor-icons/react';\nimport { createContext } from '@radix-ui/react-context';\nimport React, { type PropsWithChildren } from 'react';\n\nimport { Toolbar as NaturalToolbar, type ThemedClassName, useTranslation } from '@dxos/react-ui';\n\nimport { ToolbarButton, ToolbarSeparator } from './common';\nimport { translationKey } from '../../translations';\n\n//\n// Root\n//\n\n// TODO(Zan): This should become a union later.\nexport type ToolbarAction = { type: 'add-row' } | { type: 'comment' };\n\nexport type ToolbarActionType = ToolbarAction['type'];\n\nexport type ToolbarActionHandler = (action: ToolbarAction) => void;\n\nexport type ToolbarProps = ThemedClassName<\n PropsWithChildren<{\n onAction?: ToolbarActionHandler;\n }>\n>;\n\nconst [ToolbarContextProvider, useToolbarContext] = createContext<ToolbarProps>('Toolbar');\n\nconst ToolbarRoot = ({ classNames, children, onAction }: ToolbarProps) => {\n return (\n <ToolbarContextProvider onAction={onAction}>\n <NaturalToolbar.Root classNames={['is-full shrink-0 overflow-x-auto overflow-y-hidden p-1', classNames]}>\n {children}\n </NaturalToolbar.Root>\n </ToolbarContextProvider>\n );\n};\n\nconst Editing = () => {\n const { onAction } = useToolbarContext('Editing');\n const { t } = useTranslation(translationKey);\n\n return (\n <>\n <ToolbarButton\n value='add-row'\n Icon={RowsPlusBottom}\n data-testid='table.toolbar.add-row'\n onClick={() => onAction?.({ type: 'add-row' })}\n >\n {t('add row')}\n </ToolbarButton>\n </>\n );\n};\n\nconst Actions = () => {\n const { onAction } = useToolbarContext('Actions');\n const { t } = useTranslation(translationKey);\n\n return (\n <>\n <ToolbarButton\n value='comment'\n Icon={ChatText}\n data-testid='table.toolbar.comment'\n onClick={() => onAction?.({ type: 'comment' })}\n >\n {t('create comment')}\n </ToolbarButton>\n </>\n );\n};\n\nexport const Toolbar = {\n Root: ToolbarRoot,\n Editing,\n Actions,\n Separator: ToolbarSeparator,\n};\n\nexport { useToolbarContext };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Icon } from '@phosphor-icons/react';\nimport React from 'react';\n\nimport {\n Toolbar as NaturalToolbar,\n Tooltip,\n type ToolbarButtonProps as NaturalToolbarButtonProps,\n type ToolbarToggleGroupItemProps as NaturalToolbarToggleGroupItemProps,\n} from '@dxos/react-ui';\nimport { getSize } from '@dxos/react-ui-theme';\n\n// TODO(burdon): Factor out in common with react-ui-editor.\n\nexport const iconStyles = getSize(5);\nexport const buttonStyles = 'min-bs-0 p-2';\nexport const tooltipProps = { side: 'top' as const, classNames: 'z-10' };\n\nexport const ToolbarSeparator = () => <div role='separator' className='grow' />;\n\n//\n// ToolbarButton\n//\n\ntype ToolbarButtonProps = NaturalToolbarButtonProps & { Icon: Icon };\n\nexport const ToolbarButton = ({ Icon, children, ...props }: ToolbarButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.Button variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.Button>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n\n//\n// ToolbarToggleButton\n//\n\nexport type ToolbarToggleButtonProps = NaturalToolbarToggleGroupItemProps & { Icon: Icon };\n\nexport const ToolbarToggleButton = ({ Icon, children, ...props }: ToolbarToggleButtonProps) => {\n return (\n <Tooltip.Root>\n <Tooltip.Trigger asChild>\n <NaturalToolbar.ToggleGroupItem variant='ghost' {...props} classNames={buttonStyles}>\n <Icon className={iconStyles} />\n <span className='sr-only'>{children}</span>\n </NaturalToolbar.ToggleGroupItem>\n </Tooltip.Trigger>\n <Tooltip.Portal>\n <Tooltip.Content {...tooltipProps}>\n {children}\n <Tooltip.Arrow />\n </Tooltip.Content>\n </Tooltip.Portal>\n </Tooltip.Root>\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { useEffect, useState } from 'react';\n\nimport { type ReactiveObject } from '@dxos/react-client/echo';\nimport { type ViewProjection } from '@dxos/schema';\n\nimport { type BaseTableRow, TableModel, type TableModelProps } from '../model';\nimport { type TableType } from '../types';\n\nexport type UseTableModelParams<T extends BaseTableRow = { id: string }> = {\n table?: TableType;\n projection?: ViewProjection;\n objects?: ReactiveObject<T>[];\n} & Pick<TableModelProps<T>, 'onInsertRow' | 'onDeleteRows' | 'onDeleteColumn' | 'onCellUpdate' | 'onRowOrderChanged'>;\n\nexport const useTableModel = <T extends BaseTableRow = { id: string }>({\n objects,\n table,\n projection,\n ...props\n}: UseTableModelParams<T>): TableModel<T> | undefined => {\n const [model, setModel] = useState<TableModel<T>>();\n useEffect(() => {\n if (!table || !projection) {\n return;\n }\n\n let model: TableModel<T> | undefined;\n const t = setTimeout(async () => {\n model = new TableModel<T>({ table, projection, ...props });\n await model.open();\n setModel(model);\n });\n\n return () => {\n clearTimeout(t);\n void model?.close();\n };\n }, [table, projection]); // TODO(burdon): Trigger if callbacks change?\n\n // Update data.\n useEffect(() => {\n if (objects) {\n model?.setRows(objects);\n }\n }, [model, objects]);\n\n return model;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { computed, effect, signal, type ReadonlySignal } from '@preact/signals-core';\nimport orderBy from 'lodash.orderby';\n\nimport { Resource } from '@dxos/context';\nimport { getValue, setValue, FormatEnum, type JsonProp } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport { PublicKey } from '@dxos/react-client';\nimport {\n cellClassesForFieldType,\n cellClassesForRowSelection,\n formatForDisplay,\n formatForEditing,\n parseValue,\n} from '@dxos/react-ui-data';\nimport {\n type DxGridAxisMeta,\n type DxGridCellValue,\n type DxGridPlane,\n type DxGridPlaneCells,\n type DxGridPlaneRange,\n} from '@dxos/react-ui-grid';\nimport { mx } from '@dxos/react-ui-theme';\nimport { VIEW_FIELD_LIMIT, type ViewProjection, type FieldType } from '@dxos/schema';\n\nimport { ModalController } from './modal-controller';\nimport { SelectionModel } from './selection-model';\nimport { type TableType } from '../types';\nimport { fromGridCell, type GridCell } from '../util';\nimport { tableButtons, touch } from '../util';\nimport { tableControls } from '../util/table-controls';\n\nexport type SortDirection = 'asc' | 'desc';\nexport type SortConfig = { fieldId: string; direction: SortDirection };\n\nexport type BaseTableRow = Record<JsonProp, any> & { id: string };\n\nexport type TableModelProps<T extends BaseTableRow = { id: string }> = {\n table: TableType;\n projection: ViewProjection;\n sorting?: SortConfig[];\n pinnedRows?: { top: number[]; bottom: number[] };\n onInsertRow?: (index?: number) => void;\n onDeleteRows?: (index: number, obj: T[]) => void;\n onDeleteColumn?: (fieldId: string) => void;\n onCellUpdate?: (cell: GridCell) => void;\n onRowOrderChanged?: () => void;\n};\n\nexport class TableModel<T extends BaseTableRow = { id: string }> extends Resource {\n public readonly id = `table-model-${PublicKey.random().truncate()}`;\n\n private readonly _table: TableType;\n private readonly _projection: ViewProjection;\n\n private readonly _visibleRange = signal<DxGridPlaneRange>({\n start: { row: 0, col: 0 },\n end: { row: 0, col: 0 },\n });\n\n /**\n * Maps display indices to data indices.\n * Used for translating between sorted/displayed order and original data order.\n * Keys are display indices, values are corresponding data indices.\n */\n private readonly _displayToDataIndex: Map<number, number> = new Map();\n\n private readonly _onInsertRow?: TableModelProps<T>['onInsertRow'];\n private readonly _onDeleteRows?: TableModelProps<T>['onDeleteRows'];\n private readonly _onDeleteColumn?: TableModelProps<T>['onDeleteColumn'];\n private readonly _onCellUpdate?: TableModelProps<T>['onCellUpdate'];\n private readonly _onRowOrderChanged?: TableModelProps<T>['onRowOrderChanged'];\n\n private readonly _sorting = signal<SortConfig | undefined>(undefined);\n private _sortedRows!: ReadonlySignal<T[]>;\n private _rows = signal<T[]>([]);\n\n private _pinnedRows: NonNullable<TableModelProps<T>['pinnedRows']>;\n\n private _selection!: SelectionModel<T>;\n private _columnMeta?: ReadonlySignal<DxGridAxisMeta>;\n private readonly _modalController = new ModalController();\n\n constructor({\n table,\n projection,\n sorting = [],\n pinnedRows = { top: [], bottom: [] },\n onCellUpdate,\n onDeleteColumn,\n onDeleteRows,\n onInsertRow,\n onRowOrderChanged,\n }: TableModelProps<T>) {\n super();\n this._table = table;\n this._projection = projection;\n\n this._sorting.value = sorting.at(0);\n this._pinnedRows = pinnedRows;\n this._onInsertRow = onInsertRow;\n this._onDeleteRows = onDeleteRows;\n this._onDeleteColumn = onDeleteColumn;\n this._onCellUpdate = onCellUpdate;\n this._onRowOrderChanged = onRowOrderChanged;\n }\n\n public get table() {\n return this._table;\n }\n\n public get projection() {\n return this._projection;\n }\n\n public get pinnedRows(): NonNullable<TableModelProps<T>['pinnedRows']> {\n return this._pinnedRows;\n }\n\n public get columnMeta(): ReadonlySignal<DxGridAxisMeta> {\n invariant(this._columnMeta);\n return this._columnMeta;\n }\n\n public get sorting(): SortConfig | undefined {\n return this._sorting.value;\n }\n\n public get modalController() {\n return this._modalController;\n }\n\n public get selection() {\n return this._selection;\n }\n\n //\n // Initialisation\n //\n\n protected override async _open() {\n this.initializeColumnMeta();\n this.initializeSorting();\n this.initializeEffects();\n this._selection = new SelectionModel(this._sortedRows, () => this._onRowOrderChanged?.());\n await this._selection.open(this._ctx);\n }\n\n private initializeColumnMeta(): void {\n this._columnMeta = computed(() => {\n const fields = this._table.view?.fields ?? [];\n const meta = Object.fromEntries(\n fields.map((field, index: number) => [index, { size: field?.size ?? 256, resizeable: true }]),\n );\n\n return {\n grid: meta,\n frozenColsStart: { 0: { size: 30, resizeable: false } },\n frozenColsEnd: { 0: { size: 40, resizeable: false } },\n };\n });\n }\n\n private initializeSorting(): void {\n this._sortedRows = computed(() => {\n this._displayToDataIndex.clear();\n const sort = this._sorting.value;\n if (!sort) {\n return this._rows.value;\n }\n\n const field = this._table.view?.fields.find((field) => field.id === sort.fieldId);\n if (!field) {\n return this._rows.value;\n }\n\n const dataWithIndices = this._rows.value.map((item, index) => {\n const value = getValue(item, field.path);\n return { item, index, value, isEmpty: value == null || value === '' };\n });\n const sorted = orderBy(dataWithIndices, ['isEmpty', 'value'], ['asc', sort.direction]);\n\n for (let displayIndex = 0; displayIndex < sorted.length; displayIndex++) {\n const { index: dataIndex } = sorted[displayIndex];\n if (displayIndex !== dataIndex) {\n this._displayToDataIndex.set(displayIndex, dataIndex);\n }\n }\n\n return sorted.map(({ item }) => item);\n });\n }\n\n private initializeEffects(): void {\n const rowOrderWatcher = effect(() => {\n touch(this._sortedRows.value);\n this._onRowOrderChanged?.();\n });\n this._ctx.onDispose(rowOrderWatcher);\n\n /**\n * Creates reactive effects for each row in the visible range.\n * Subscribes to changes in the visible range, recreating row effects when it changes.\n * When a row's data changes, invokes onCellUpdate to notify subscribers and trigger UI updates.\n */\n const rowEffectManager = effect(() => {\n const { start, end } = touch(this._visibleRange.value);\n const rowEffects: ReturnType<typeof effect>[] = [];\n for (let row = start.row; row <= end.row; row++) {\n rowEffects.push(\n effect(() => {\n const obj = this._sortedRows.value[row];\n this?._table?.view?.fields.forEach((field) => touch(getValue(obj, field.path)));\n this._onCellUpdate?.({ row, col: start.col });\n }),\n );\n }\n\n return () => rowEffects.forEach((cleanup) => cleanup());\n });\n this._ctx.onDispose(rowEffectManager);\n }\n\n //\n // Get Cells\n //\n\n public getCells = (range: DxGridPlaneRange, plane: DxGridPlane): DxGridPlaneCells => {\n switch (plane) {\n case 'grid': {\n this._visibleRange.value = range;\n return this.getMainGridCells(range);\n }\n case 'frozenRowsStart': {\n return this.getHeaderCells(range);\n }\n case 'frozenColsStart': {\n return this.getSelectionColumnCells(range);\n }\n case 'frozenColsEnd': {\n return this.getActionColumnCells(range);\n }\n case 'fixedStartStart': {\n return this.getSelectAllCell();\n }\n case 'fixedStartEnd': {\n return this.getNewColumnCell();\n }\n default: {\n return {};\n }\n }\n };\n\n private getMainGridCells = (range: DxGridPlaneRange): DxGridPlaneCells => {\n const values: DxGridPlaneCells = {};\n const fields = this._table.view?.fields ?? [];\n\n const addCell = (obj: T, field: FieldType, colIndex: number, displayIndex: number): void => {\n const { props } = this._projection.getFieldProjection(field.id);\n const value: DxGridCellValue = {\n get value() {\n const value = getValue(obj, field.path);\n if (value == null) {\n return '';\n }\n\n switch (props.format) {\n case FormatEnum.Ref: {\n if (!field.referencePath) {\n return ''; // TODO(burdon): Show error.\n }\n\n return getValue(value, field.referencePath);\n }\n\n default: {\n return formatForDisplay({ type: props.type, format: props.format, value });\n }\n }\n },\n };\n\n const classes = [];\n const formatClasses = cellClassesForFieldType({ type: props.type, format: props.format });\n if (formatClasses) {\n classes.push(formatClasses);\n }\n const rowSelectionClasses = cellClassesForRowSelection(this._selection.isObjectSelected(obj));\n if (rowSelectionClasses) {\n classes.push(rowSelectionClasses);\n }\n if (classes.length > 0) {\n value.className = mx(classes.flat());\n }\n\n const idx = fromGridCell({ col: colIndex, row: displayIndex });\n values[idx] = value;\n };\n\n for (let row = range.start.row; row <= range.end.row && row < this._sortedRows.value.length; row++) {\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n const field = fields[col];\n if (!field) {\n continue;\n }\n\n addCell(this._sortedRows.value[row], field, col, row);\n }\n }\n\n return values;\n };\n\n private getHeaderCells = (range: DxGridPlaneRange): DxGridPlaneCells => {\n const values: DxGridPlaneCells = {};\n const fields = this.table.view?.fields ?? [];\n for (let col = range.start.col; col <= range.end.col && col < fields.length; col++) {\n const { field, props } = this._projection.getFieldProjection(fields[col].id);\n values[fromGridCell({ col, row: 0 })] = {\n value: props.title ?? field.path,\n readonly: true,\n resizeHandle: 'col',\n accessoryHtml: tableButtons.columnSettings.render({ fieldId: field.id }),\n };\n }\n\n return values;\n };\n\n private getSelectionColumnCells = (range: DxGridPlaneRange): DxGridPlaneCells => {\n const values: DxGridPlaneCells = {};\n for (let row = range.start.row; row <= range.end.row && row < this._rows.value.length; row++) {\n const isSelected = this._selection.isRowIndexSelected(row);\n const classes = cellClassesForRowSelection(isSelected);\n values[fromGridCell({ col: 0, row })] = {\n value: '',\n readonly: true,\n className: classes ? mx(classes) : undefined,\n accessoryHtml: tableControls.checkbox.render({ rowIndex: row, checked: isSelected }),\n };\n }\n\n return values;\n };\n\n private getActionColumnCells = (range: DxGridPlaneRange): DxGridPlaneCells => {\n const values: DxGridPlaneCells = {};\n for (let row = range.start.row; row <= range.end.row && row < this._rows.value.length; row++) {\n const isSelected = this._selection.isRowIndexSelected(row);\n const classes = cellClassesForRowSelection(isSelected);\n values[fromGridCell({ col: 0, row })] = {\n value: '',\n readonly: true,\n className: classes ? mx(classes) : undefined,\n accessoryHtml: tableButtons.rowMenu.render({ rowIndex: row }),\n };\n }\n\n return values;\n };\n\n private getSelectAllCell = (): DxGridPlaneCells => {\n return {\n [fromGridCell({ col: 0, row: 0 })]: {\n value: '',\n accessoryHtml: tableControls.checkbox.render({\n rowIndex: 0,\n header: true,\n checked: this._selection.allRowsSeleted.value,\n }),\n readonly: true,\n },\n };\n };\n\n private getNewColumnCell = (): DxGridPlaneCells => {\n return {\n [fromGridCell({ col: 0, row: 0 })]: {\n value: '',\n accessoryHtml: tableButtons.addColumn.render({\n disabled: (this._table.view?.fields?.length ?? 0) >= VIEW_FIELD_LIMIT,\n }),\n readonly: true,\n },\n };\n };\n\n //\n // Data\n //\n\n public setRows = (obj: T[]): void => {\n this._rows.value = obj;\n };\n\n public getRowCount = (): number => this._rows.value.length;\n\n public getColumnCount = (): number => this.table.view?.fields.length ?? 0;\n\n public insertRow = (rowIndex?: number): void => {\n const row = rowIndex !== undefined ? this._displayToDataIndex.get(rowIndex) ?? rowIndex : this._rows.value.length;\n this._onInsertRow?.(row);\n };\n\n public deleteRow = (rowIndex: number): void => {\n const row = this._displayToDataIndex.get(rowIndex) ?? rowIndex;\n const obj = this._rows.value[row];\n const objectsToDelete = [];\n\n if (this._selection.hasSelection.value) {\n const selectedRows = this._selection.getSelectedRows();\n objectsToDelete.push(...selectedRows);\n } else {\n objectsToDelete.push(obj);\n }\n\n this._onDeleteRows?.(row, objectsToDelete);\n };\n\n public getCellData = ({ col, row }: GridCell): any => {\n const fields = this.table.view?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return undefined;\n }\n\n const field = fields[col];\n const dataIndex = this._displayToDataIndex.get(row) ?? row;\n const value = getValue(this._rows.value[dataIndex], field.path);\n if (value == null) {\n return '';\n }\n\n const { props } = this._projection.getFieldProjection(field.id);\n switch (props.format) {\n case FormatEnum.Ref: {\n if (!field.referencePath) {\n return ''; // TODO(burdon): Show error.\n }\n\n return getValue(value, field.referencePath);\n }\n\n default: {\n return formatForEditing({ type: props.type, format: props.format, value });\n }\n }\n };\n\n public setCellData = ({ col, row }: GridCell, value: any): void => {\n const rowIdx = this._displayToDataIndex.get(row) ?? row;\n const fields = this.table.view?.fields ?? [];\n if (col < 0 || col >= fields.length) {\n return;\n }\n\n const field = fields[col];\n const { props } = this._projection.getFieldProjection(field.id);\n switch (props.format) {\n case FormatEnum.Ref: {\n setValue(this._rows.value[rowIdx], field.path, value);\n break;\n }\n\n default: {\n setValue(\n this._rows.value[rowIdx],\n field.path,\n parseValue({\n type: props.type,\n format: props.format,\n value,\n }),\n );\n break;\n }\n }\n };\n\n //\n // Column Operations\n //\n\n public deleteColumn(fieldId: string): void {\n if (!this.table.view) {\n return;\n }\n\n const field = this.table.view.fields.find((field) => field.id === fieldId);\n if (field && this._onDeleteColumn) {\n if (this._sorting.value?.fieldId === fieldId) {\n this.clearSort();\n }\n this._onDeleteColumn(field.id);\n }\n }\n\n //\n // Interactions\n //\n public handleGridClick = (event: React.MouseEvent): void => {\n if (!this._modalController.handleClick(event)) {\n const target = event.target as HTMLElement;\n\n const selectionCheckbox = target.closest(`input[${tableControls.checkbox.attributes.checkbox}]`);\n if (selectionCheckbox) {\n const isHeader = selectionCheckbox.hasAttribute(tableControls.checkbox.attributes.header);\n if (isHeader) {\n if (this._selection.allRowsSeleted.value) {\n this._selection.setSelection('none');\n } else {\n this._selection.setSelection('all');\n }\n } else {\n const rowIndex = Number(selectionCheckbox.getAttribute(tableControls.checkbox.attributes.checkbox));\n this._selection.toggleSelectionForRowIndex(rowIndex);\n }\n }\n }\n };\n\n //\n // Resize\n //\n\n public setColumnWidth(columnIndex: number, width: number): void {\n const fields = this.table.view?.fields ?? [];\n if (columnIndex < fields.length) {\n const newWidth = Math.max(0, width);\n const field = fields[columnIndex];\n if (field) {\n field.size = newWidth;\n }\n }\n }\n\n //\n // Sorting\n //\n\n public setSort(fieldId: string, direction: SortDirection): void {\n this._sorting.value = { fieldId, direction };\n }\n\n public clearSort(): void {\n this._sorting.value = undefined;\n }\n\n //\n // Pinning\n //\n\n // TODO(burdon): Change to setPinned(on/off).\n public pinRow(rowIndex: number, side: 'top' | 'bottom'): void {\n this._pinnedRows[side].push(rowIndex);\n }\n\n public unpinRow(rowIndex: number): void {\n this._pinnedRows.top = this._pinnedRows.top.filter((index: number) => index !== rowIndex);\n this._pinnedRows.bottom = this._pinnedRows.bottom.filter((index: number) => index !== rowIndex);\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { signal } from '@preact/signals-core';\nimport { type RefObject, type MouseEvent, type MutableRefObject } from 'react';\n\nimport { tableButtons } from '../util';\n\nexport type ColumnSettingsMode = { type: 'create' } | { type: 'edit'; fieldId: string };\n\nexport type ModalState =\n | { type: 'row'; rowIndex: number }\n | { type: 'column'; fieldId: string }\n | { type: 'columnSettings'; mode: ColumnSettingsMode }\n | { type: 'closed' };\n\nexport class ModalController {\n private readonly _state = signal<ModalState>({ type: 'closed' });\n private readonly _triggerRef: MutableRefObject<HTMLElement> = { current: null as unknown as HTMLElement };\n\n public get state() {\n return this._state;\n }\n\n public get trigger() {\n return this._triggerRef as RefObject<HTMLButtonElement>;\n }\n\n public handleClick = (event: MouseEvent): boolean => {\n const target = event.target as HTMLElement;\n\n const rowButton = target.closest(`button[${tableButtons.rowMenu.attr}]`);\n if (rowButton) {\n this._triggerRef.current = rowButton as HTMLElement;\n this._state.value = {\n type: 'row',\n rowIndex: Number(rowButton.getAttribute(tableButtons.rowMenu.attr)),\n };\n return true;\n }\n\n const columnButton = target.closest(`button[${tableButtons.columnSettings.attr}]`);\n if (columnButton) {\n const fieldId = columnButton.getAttribute(tableButtons.columnSettings.attr)!;\n this._triggerRef.current = columnButton as HTMLElement;\n this._state.value = {\n type: 'column',\n fieldId,\n };\n return true;\n }\n\n const addColumnButton = target.closest(`button[${tableButtons.addColumn.attr}]`);\n if (addColumnButton) {\n this._triggerRef.current = addColumnButton as HTMLElement;\n this._state.value = {\n type: 'columnSettings',\n mode: { type: 'create' },\n };\n return true;\n }\n\n return false;\n };\n\n public openColumnSettings = () => {\n if (this._state.value.type === 'column') {\n const fieldId = this._state.value.fieldId;\n // Queue next render to let the column action modal close completely.\n requestAnimationFrame(() => {\n this._state.value = {\n type: 'columnSettings',\n mode: { type: 'edit', fieldId },\n };\n });\n }\n };\n\n public close = () => {\n this._state.value = { type: 'closed' };\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { computed, effect, signal, type ReadonlySignal } from '@preact/signals-core';\n\nimport { Resource } from '@dxos/context';\n\nimport { type BaseTableRow } from './table-model';\nimport { touch } from '../util';\n\nexport class SelectionModel<T extends BaseTableRow> extends Resource {\n private readonly _selection = signal<Set<string>>(new Set());\n\n private readonly _validSelectedIds = computed<Set<string>>(() => {\n const rows = this._rows.value;\n if (!rows) {\n return new Set<string>();\n }\n const validIds = new Set(rows.map((row) => row.id));\n return new Set([...this._selection.value].filter((id) => validIds.has(id)));\n });\n\n private readonly _hasSelection = computed<boolean>(() => this._validSelectedIds.value.size > 0);\n\n private readonly _allSelected = computed<boolean>(() => {\n const rows = this._rows.value;\n if (rows.length === 0) {\n return false;\n }\n return rows.length !== 0 || rows.every((row) => this._selection.value.has(row.id));\n });\n\n constructor(\n private readonly _rows: ReadonlySignal<T[]>,\n private readonly _onSelectionChanged?: () => void,\n ) {\n super();\n }\n\n protected override async _open() {\n const selectionWatcher = effect(() => {\n touch(this._selection.value);\n this._onSelectionChanged?.();\n });\n this._ctx.onDispose(selectionWatcher);\n }\n\n //\n // Getters\n //\n\n public get selection(): ReadonlySignal<Set<string>> {\n return this._selection;\n }\n\n public get hasSelection(): ReadonlySignal<boolean> {\n return this._hasSelection;\n }\n\n public get allRowsSeleted(): ReadonlySignal<boolean> {\n return this._allSelected;\n }\n\n public getSelectedRows = (): T[] => {\n const selectedIds = this._validSelectedIds.value;\n return this._rows.value.filter((row) => selectedIds.has(row.id));\n };\n\n public isRowIndexSelected = (rowIndex: number): boolean => {\n const row = this._rows.value[rowIndex];\n return this._selection.value.has(row.id);\n };\n\n public isObjectSelected = (object: T): boolean => {\n return this._selection.value.has(object.id);\n };\n\n //\n // Manipulation\n //\n\n public toggleSelectionForRowIndex = (rowIndex: number): void => {\n const row = this._rows.value[rowIndex];\n const newSelection = new Set(this._selection.value);\n\n if (newSelection.has(row.id)) {\n newSelection.delete(row.id);\n } else {\n newSelection.add(row.id);\n }\n\n this._selection.value = newSelection;\n };\n\n public setSelection = (mode: 'all' | 'none'): void => {\n this._selection.value = mode === 'all' ? new Set(this._rows.value.map((row) => row.id)) : new Set();\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nexport const checkboxAttributes = {\n checkbox: 'data-table-checkbox',\n header: 'data-table-header',\n} as const;\n\nexport type RenderCheckboxProps = { rowIndex: number; header?: boolean; checked?: boolean; disabled?: boolean };\nexport const renderCheckbox = ({\n rowIndex,\n header = false,\n checked = false,\n disabled = false,\n}: RenderCheckboxProps): string => {\n const baseClasses = 'absolute inset-block-[6px] inline-end-[6px]' as const;\n const { attributes } = tableControls.checkbox;\n return `<input type=\"checkbox\" class=\"${baseClasses}\" ${attributes.checkbox}=\"${rowIndex}\" ${header ? attributes.header : ''} ${checked ? 'checked' : ''} ${disabled ? 'disabled' : ''}/>`;\n};\n\nexport const tableControls = {\n checkbox: {\n attributes: checkboxAttributes,\n render: renderCheckbox,\n },\n} as const;\n"],
5
+ "mappings": "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",
6
+ "names": ["translationKey", "React", "forwardRef", "useCallback", "useImperativeHandle", "useState", "getValue", "invariant", "Filter", "getSpace", "fullyQualifiedId", "useAttention", "Grid", "closestCell", "mx", "isNotFalsy", "React", "DropdownMenu", "useTranslation", "ColumnActionsMenu", "model", "t", "useTranslation", "translationKey", "state", "modalController", "value", "type", "currentSort", "sorting", "isCurrentColumnSorted", "fieldId", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "Viewport", "direction", "Item", "onClick", "setSort", "clearSort", "getColumnCount", "deleteColumn", "openColumnSettings", "Arrow", "React", "useCallback", "useEffect", "useMemo", "useState", "getSpace", "DropdownMenu", "FieldEditor", "ColumnSettings", "model", "newField", "setNewField", "useState", "state", "modalController", "value", "space", "getSpace", "table", "useEffect", "type", "mode", "projection", "createFieldProjection", "undefined", "existingField", "useMemo", "view", "fields", "find", "f", "id", "fieldId", "field", "handleClose", "useCallback", "close", "handleCancel", "deleteFieldProjection", "React", "DropdownMenu", "Root", "modal", "open", "VirtualTrigger", "virtualRef", "trigger", "Portal", "Content", "classNames", "Viewport", "FieldEditor", "registry", "db", "schemaRegistry", "onClose", "onCancel", "Arrow", "React", "DropdownMenu", "useTranslation", "RowActionsMenu", "model", "t", "useTranslation", "translationKey", "state", "modalController", "value", "hasSelection", "selection", "type", "React", "DropdownMenu", "Root", "modal", "open", "onOpenChange", "close", "VirtualTrigger", "virtualRef", "trigger", "Content", "Viewport", "Item", "onClick", "deleteRow", "rowIndex", "Arrow", "React", "useCallback", "useMemo", "FormatEnum", "invariant", "editorKeys", "GridCellEditor", "useGridContext", "autocompletion", "pickedCompletion", "EditorView", "completion", "onQuery", "onMatch", "EditorView", "theme", "width", "autocompletion", "icons", "activateOnTyping", "override", "context", "text", "state", "doc", "toString", "from", "options", "tooltipClass", "optionClass", "updateListener", "of", "update", "transactions", "forEach", "tr", "annotation", "pickedCompletion", "data", "fromGridCell", "col", "row", "toGridCell", "cell", "split", "map", "Number", "touch", "value", "AST", "Format", "FormatEnum", "S", "TypedObject", "TypeEnum", "log", "PublicKey", "create", "createFieldId", "createView", "ViewProjection", "initializeTable", "space", "table", "info", "ContactSchema", "typename", "random", "truncate", "version", "name", "optional", "String", "annotations", "TitleAnnotationId", "email", "Email", "salary", "Currency", "contactSchema", "db", "schemaRegistry", "addSchema", "view", "jsonSchema", "fields", "projection", "setFieldProjection", "field", "id", "path", "size", "referencePath", "props", "property", "type", "Ref", "format", "referenceSchema", "title", "add", "TABLE_ATTRS", "columnSettings", "rowMenu", "newColumn", "ICONS", "createButtonHtml", "button", "value", "disabled", "buttonClasses", "tableButtons", "attr", "icon", "render", "fieldId", "rowIndex", "toString", "addColumn", "TableCellEditor", "model", "onEnter", "onFocus", "onQuery", "__gridScope", "editing", "useGridContext", "fieldProjection", "useMemo", "col", "toGridCell", "index", "field", "projection", "view", "fields", "getFieldProjection", "id", "invariant", "handleClose", "useCallback", "value", "event", "cell", "determineNavigationAxis", "determineNavigationDelta", "handleBlur", "undefined", "setCellData", "extension", "editorKeys", "onClose", "initialContent", "onNav", "props", "format", "FormatEnum", "Ref", "push", "completion", "text", "onMatch", "data", "getCellContent", "getCellData", "String", "React", "GridCellEditor", "onBlur", "key", "shift", "inlineEndLine", "blockEndLine", "frozen", "frozenRowsStart", "frozenColsStart", "frozenColsEnd", "TableRoot", "children", "React", "div", "role", "className", "TableMain", "forwardRef", "model", "forwardedRef", "dxGrid", "setDxGrid", "useState", "hasAttention", "useAttention", "table", "fullyQualifiedId", "useImperativeHandle", "getCells", "bind", "update", "cell", "updateIfWithinBounds", "updateCells", "handleFocus", "increment", "delta", "refocus", "handleEnter", "useCallback", "row", "getRowCount", "insertRow", "handleKeyDown", "event", "closestCell", "target", "key", "setCellData", "undefined", "handleAxisResize", "axis", "columnIndex", "parseInt", "index", "setColumnWidth", "size", "handleWheel", "stopPropagation", "handleQuery", "field", "props", "_text", "referenceSchema", "referencePath", "space", "getSpace", "invariant", "schema", "db", "schemaRegistry", "getSchema", "objects", "query", "Filter", "run", "map", "obj", "value", "getValue", "label", "data", "filter", "isNotFalsy", "span", "Grid", "Root", "id", "TableCellEditor", "onEnter", "onFocus", "onQuery", "Content", "onWheelCapture", "mx", "columns", "columnMeta", "limitRows", "limitColumns", "view", "fields", "length", "onAxisResize", "onClick", "handleGridClick", "onKeyDown", "overscroll", "ref", "RowActionsMenu", "ColumnActionsMenu", "ColumnSettings", "Table", "Main", "ChatText", "RowsPlusBottom", "createContext", "React", "Toolbar", "NaturalToolbar", "useTranslation", "React", "Toolbar", "NaturalToolbar", "Tooltip", "getSize", "iconStyles", "getSize", "buttonStyles", "tooltipProps", "side", "classNames", "ToolbarSeparator", "React", "div", "role", "className", "ToolbarButton", "Icon", "children", "props", "Tooltip", "Root", "Trigger", "asChild", "NaturalToolbar", "Button", "variant", "span", "Portal", "Content", "Arrow", "ToolbarContextProvider", "useToolbarContext", "createContext", "ToolbarRoot", "classNames", "children", "onAction", "React", "NaturalToolbar", "Root", "Editing", "t", "useTranslation", "translationKey", "ToolbarButton", "value", "Icon", "RowsPlusBottom", "data-testid", "onClick", "type", "Actions", "ChatText", "Toolbar", "Separator", "ToolbarSeparator", "useEffect", "useState", "computed", "effect", "signal", "orderBy", "Resource", "getValue", "setValue", "FormatEnum", "invariant", "PublicKey", "cellClassesForFieldType", "cellClassesForRowSelection", "formatForDisplay", "formatForEditing", "parseValue", "mx", "VIEW_FIELD_LIMIT", "signal", "ModalController", "_state", "signal", "type", "_triggerRef", "current", "handleClick", "event", "target", "rowButton", "closest", "tableButtons", "rowMenu", "attr", "value", "rowIndex", "Number", "getAttribute", "columnButton", "columnSettings", "fieldId", "addColumnButton", "addColumn", "mode", "openColumnSettings", "requestAnimationFrame", "close", "state", "trigger", "computed", "effect", "signal", "Resource", "SelectionModel", "Resource", "constructor", "_rows", "_onSelectionChanged", "_selection", "signal", "Set", "_validSelectedIds", "computed", "rows", "value", "validIds", "map", "row", "id", "filter", "has", "_hasSelection", "size", "_allSelected", "length", "every", "getSelectedRows", "selectedIds", "isRowIndexSelected", "rowIndex", "isObjectSelected", "object", "toggleSelectionForRowIndex", "newSelection", "delete", "add", "setSelection", "mode", "_open", "selectionWatcher", "effect", "touch", "_ctx", "onDispose", "selection", "hasSelection", "allRowsSeleted", "checkboxAttributes", "checkbox", "header", "renderCheckbox", "rowIndex", "checked", "disabled", "baseClasses", "attributes", "tableControls", "render", "TableModel", "Resource", "constructor", "table", "projection", "sorting", "pinnedRows", "top", "bottom", "onCellUpdate", "onDeleteColumn", "onDeleteRows", "onInsertRow", "onRowOrderChanged", "id", "PublicKey", "random", "truncate", "_visibleRange", "signal", "start", "row", "col", "end", "_displayToDataIndex", "Map", "_sorting", "undefined", "_rows", "_modalController", "ModalController", "getCells", "range", "plane", "value", "getMainGridCells", "getHeaderCells", "getSelectionColumnCells", "getActionColumnCells", "getSelectAllCell", "getNewColumnCell", "values", "fields", "_table", "view", "addCell", "obj", "field", "colIndex", "displayIndex", "props", "_projection", "getFieldProjection", "getValue", "path", "format", "FormatEnum", "Ref", "referencePath", "formatForDisplay", "type", "classes", "formatClasses", "cellClassesForFieldType", "push", "rowSelectionClasses", "cellClassesForRowSelection", "_selection", "isObjectSelected", "length", "className", "mx", "flat", "idx", "fromGridCell", "_sortedRows", "title", "readonly", "resizeHandle", "accessoryHtml", "tableButtons", "columnSettings", "render", "fieldId", "isSelected", "isRowIndexSelected", "tableControls", "checkbox", "rowIndex", "checked", "rowMenu", "header", "allRowsSeleted", "addColumn", "disabled", "VIEW_FIELD_LIMIT", "setRows", "getRowCount", "getColumnCount", "insertRow", "get", "_onInsertRow", "deleteRow", "objectsToDelete", "hasSelection", "selectedRows", "getSelectedRows", "_onDeleteRows", "getCellData", "dataIndex", "formatForEditing", "setCellData", "rowIdx", "setValue", "parseValue", "handleGridClick", "event", "handleClick", "target", "selectionCheckbox", "closest", "attributes", "isHeader", "hasAttribute", "setSelection", "Number", "getAttribute", "toggleSelectionForRowIndex", "at", "_pinnedRows", "_onDeleteColumn", "_onCellUpdate", "_onRowOrderChanged", "columnMeta", "invariant", "_columnMeta", "modalController", "selection", "_open", "initializeColumnMeta", "initializeSorting", "initializeEffects", "SelectionModel", "open", "_ctx", "computed", "meta", "Object", "fromEntries", "map", "index", "size", "resizeable", "grid", "frozenColsStart", "frozenColsEnd", "clear", "sort", "find", "dataWithIndices", "item", "isEmpty", "sorted", "orderBy", "direction", "set", "rowOrderWatcher", "effect", "touch", "onDispose", "rowEffectManager", "rowEffects", "forEach", "cleanup", "deleteColumn", "clearSort", "setColumnWidth", "columnIndex", "width", "newWidth", "Math", "max", "setSort", "pinRow", "side", "unpinRow", "filter", "useTableModel", "objects", "table", "projection", "props", "model", "setModel", "useState", "useEffect", "t", "setTimeout", "TableModel", "open", "clearTimeout", "close", "setRows"]
7
7
  }