@freighttech/ui 0.13.18

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 (1477) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +31 -0
  3. package/dist/backend/AppShell.js +1289 -0
  4. package/dist/backend/AppShell.js.map +7 -0
  5. package/dist/backend/BackendChromeProvider.js +83 -0
  6. package/dist/backend/BackendChromeProvider.js.map +7 -0
  7. package/dist/backend/BackendPageSurface.js +19 -0
  8. package/dist/backend/BackendPageSurface.js.map +7 -0
  9. package/dist/backend/CollapsibleNavSection.js +149 -0
  10. package/dist/backend/CollapsibleNavSection.js.map +7 -0
  11. package/dist/backend/ContextHelp.js +33 -0
  12. package/dist/backend/ContextHelp.js.map +7 -0
  13. package/dist/backend/CrudForm.js +3163 -0
  14. package/dist/backend/CrudForm.js.map +7 -0
  15. package/dist/backend/DataTable.js +2091 -0
  16. package/dist/backend/DataTable.js.map +7 -0
  17. package/dist/backend/EmptyState.js +52 -0
  18. package/dist/backend/EmptyState.js.map +7 -0
  19. package/dist/backend/FilterBar.js +147 -0
  20. package/dist/backend/FilterBar.js.map +7 -0
  21. package/dist/backend/FilterOverlay.js +337 -0
  22. package/dist/backend/FilterOverlay.js.map +7 -0
  23. package/dist/backend/FlashMessages.js +158 -0
  24. package/dist/backend/FlashMessages.js.map +7 -0
  25. package/dist/backend/HtmlRichTextEditor.js +129 -0
  26. package/dist/backend/HtmlRichTextEditor.js.map +7 -0
  27. package/dist/backend/IntegrationsButton.js +25 -0
  28. package/dist/backend/IntegrationsButton.js.map +7 -0
  29. package/dist/backend/JsonBuilder.js +323 -0
  30. package/dist/backend/JsonBuilder.js.map +7 -0
  31. package/dist/backend/JsonDisplay.js +207 -0
  32. package/dist/backend/JsonDisplay.js.map +7 -0
  33. package/dist/backend/NextStepCallout.js +79 -0
  34. package/dist/backend/NextStepCallout.js.map +7 -0
  35. package/dist/backend/Page.js +27 -0
  36. package/dist/backend/Page.js.map +7 -0
  37. package/dist/backend/PerspectiveSidebar.js +456 -0
  38. package/dist/backend/PerspectiveSidebar.js.map +7 -0
  39. package/dist/backend/ProfileDropdown.js +341 -0
  40. package/dist/backend/ProfileDropdown.js.map +7 -0
  41. package/dist/backend/RowActions.js +155 -0
  42. package/dist/backend/RowActions.js.map +7 -0
  43. package/dist/backend/SectionHeader.js +74 -0
  44. package/dist/backend/SectionHeader.js.map +7 -0
  45. package/dist/backend/SettingsButton.js +25 -0
  46. package/dist/backend/SettingsButton.js.map +7 -0
  47. package/dist/backend/Sidebar.js +510 -0
  48. package/dist/backend/Sidebar.js.map +7 -0
  49. package/dist/backend/Sidebar.stories.js +166 -0
  50. package/dist/backend/Sidebar.stories.js.map +7 -0
  51. package/dist/backend/TruncatedCell.js +92 -0
  52. package/dist/backend/TruncatedCell.js.map +7 -0
  53. package/dist/backend/UserMenu.js +146 -0
  54. package/dist/backend/UserMenu.js.map +7 -0
  55. package/dist/backend/ValueIcons.js +34 -0
  56. package/dist/backend/ValueIcons.js.map +7 -0
  57. package/dist/backend/WebhookSetupGuide.js +79 -0
  58. package/dist/backend/WebhookSetupGuide.js.map +7 -0
  59. package/dist/backend/charts/BarChart.js +154 -0
  60. package/dist/backend/charts/BarChart.js.map +7 -0
  61. package/dist/backend/charts/ChartUtils.js +141 -0
  62. package/dist/backend/charts/ChartUtils.js.map +7 -0
  63. package/dist/backend/charts/ComboChart.js +261 -0
  64. package/dist/backend/charts/ComboChart.js.map +7 -0
  65. package/dist/backend/charts/ComboChart.stories.js +88 -0
  66. package/dist/backend/charts/ComboChart.stories.js.map +7 -0
  67. package/dist/backend/charts/KpiCard.js +96 -0
  68. package/dist/backend/charts/KpiCard.js.map +7 -0
  69. package/dist/backend/charts/LineChart.js +165 -0
  70. package/dist/backend/charts/LineChart.js.map +7 -0
  71. package/dist/backend/charts/PieChart.js +121 -0
  72. package/dist/backend/charts/PieChart.js.map +7 -0
  73. package/dist/backend/charts/ScatterChart.js +320 -0
  74. package/dist/backend/charts/ScatterChart.js.map +7 -0
  75. package/dist/backend/charts/TopNTable.js +91 -0
  76. package/dist/backend/charts/TopNTable.js.map +7 -0
  77. package/dist/backend/charts/WaterfallChart.js +136 -0
  78. package/dist/backend/charts/WaterfallChart.js.map +7 -0
  79. package/dist/backend/charts/index.js +30 -0
  80. package/dist/backend/charts/index.js.map +7 -0
  81. package/dist/backend/columns/ColumnChooserPanel.js +244 -0
  82. package/dist/backend/columns/ColumnChooserPanel.js.map +7 -0
  83. package/dist/backend/confirm-dialog/ConfirmDialog.js +214 -0
  84. package/dist/backend/confirm-dialog/ConfirmDialog.js.map +7 -0
  85. package/dist/backend/confirm-dialog/index.js +7 -0
  86. package/dist/backend/confirm-dialog/index.js.map +7 -0
  87. package/dist/backend/confirm-dialog/useConfirmDialog.js +113 -0
  88. package/dist/backend/confirm-dialog/useConfirmDialog.js.map +7 -0
  89. package/dist/backend/custom-fields/FieldDefinitionsEditor.js +1352 -0
  90. package/dist/backend/custom-fields/FieldDefinitionsEditor.js.map +7 -0
  91. package/dist/backend/custom-fields/FieldDefinitionsManager.js +332 -0
  92. package/dist/backend/custom-fields/FieldDefinitionsManager.js.map +7 -0
  93. package/dist/backend/dashboard/DashboardScreen.js +598 -0
  94. package/dist/backend/dashboard/DashboardScreen.js.map +7 -0
  95. package/dist/backend/dashboard/index.js +5 -0
  96. package/dist/backend/dashboard/index.js.map +7 -0
  97. package/dist/backend/dashboard/widgetRegistry.js +55 -0
  98. package/dist/backend/dashboard/widgetRegistry.js.map +7 -0
  99. package/dist/backend/date-range/DateRangeSelect.js +39 -0
  100. package/dist/backend/date-range/DateRangeSelect.js.map +7 -0
  101. package/dist/backend/date-range/InlineDateRangeSelect.js +42 -0
  102. package/dist/backend/date-range/InlineDateRangeSelect.js.map +7 -0
  103. package/dist/backend/date-range/InlineGranularitySelect.js +40 -0
  104. package/dist/backend/date-range/InlineGranularitySelect.js.map +7 -0
  105. package/dist/backend/date-range/dateRanges.js +176 -0
  106. package/dist/backend/date-range/dateRanges.js.map +7 -0
  107. package/dist/backend/date-range/index.js +25 -0
  108. package/dist/backend/date-range/index.js.map +7 -0
  109. package/dist/backend/detail/AccessDeniedMessage.js +28 -0
  110. package/dist/backend/detail/AccessDeniedMessage.js.map +7 -0
  111. package/dist/backend/detail/ActivitiesSection.js +947 -0
  112. package/dist/backend/detail/ActivitiesSection.js.map +7 -0
  113. package/dist/backend/detail/AddressEditor.js +417 -0
  114. package/dist/backend/detail/AddressEditor.js.map +7 -0
  115. package/dist/backend/detail/AddressTiles.js +441 -0
  116. package/dist/backend/detail/AddressTiles.js.map +7 -0
  117. package/dist/backend/detail/AddressesSection.js +274 -0
  118. package/dist/backend/detail/AddressesSection.js.map +7 -0
  119. package/dist/backend/detail/AttachmentDeleteDialog.js +41 -0
  120. package/dist/backend/detail/AttachmentDeleteDialog.js.map +7 -0
  121. package/dist/backend/detail/AttachmentMetadataDialog.js +519 -0
  122. package/dist/backend/detail/AttachmentMetadataDialog.js.map +7 -0
  123. package/dist/backend/detail/AttachmentVisualPreview.js +132 -0
  124. package/dist/backend/detail/AttachmentVisualPreview.js.map +7 -0
  125. package/dist/backend/detail/AttachmentsSection.js +281 -0
  126. package/dist/backend/detail/AttachmentsSection.js.map +7 -0
  127. package/dist/backend/detail/CustomDataSection.js +575 -0
  128. package/dist/backend/detail/CustomDataSection.js.map +7 -0
  129. package/dist/backend/detail/DetailFieldsSection.js +85 -0
  130. package/dist/backend/detail/DetailFieldsSection.js.map +7 -0
  131. package/dist/backend/detail/ErrorMessage.js +28 -0
  132. package/dist/backend/detail/ErrorMessage.js.map +7 -0
  133. package/dist/backend/detail/InlineEditors.js +697 -0
  134. package/dist/backend/detail/InlineEditors.js.map +7 -0
  135. package/dist/backend/detail/LoadingMessage.js +14 -0
  136. package/dist/backend/detail/LoadingMessage.js.map +7 -0
  137. package/dist/backend/detail/NotesSection.js +1022 -0
  138. package/dist/backend/detail/NotesSection.js.map +7 -0
  139. package/dist/backend/detail/TabEmptyState.js +25 -0
  140. package/dist/backend/detail/TabEmptyState.js.map +7 -0
  141. package/dist/backend/detail/TagsSection.js +375 -0
  142. package/dist/backend/detail/TagsSection.js.map +7 -0
  143. package/dist/backend/detail/addressFormat.js +77 -0
  144. package/dist/backend/detail/addressFormat.js.map +7 -0
  145. package/dist/backend/detail/index.js +36 -0
  146. package/dist/backend/detail/index.js.map +7 -0
  147. package/dist/backend/devtools/UmesDevToolsPanel.js +109 -0
  148. package/dist/backend/devtools/UmesDevToolsPanel.js.map +7 -0
  149. package/dist/backend/devtools/components/ConflictWarnings.js +32 -0
  150. package/dist/backend/devtools/components/ConflictWarnings.js.map +7 -0
  151. package/dist/backend/devtools/components/EnricherTiming.js +46 -0
  152. package/dist/backend/devtools/components/EnricherTiming.js.map +7 -0
  153. package/dist/backend/devtools/components/EventFlow.js +34 -0
  154. package/dist/backend/devtools/components/EventFlow.js.map +7 -0
  155. package/dist/backend/devtools/components/ExtensionPointList.js +58 -0
  156. package/dist/backend/devtools/components/ExtensionPointList.js.map +7 -0
  157. package/dist/backend/devtools/components/InterceptorActivity.js +36 -0
  158. package/dist/backend/devtools/components/InterceptorActivity.js.map +7 -0
  159. package/dist/backend/devtools/index.js +7 -0
  160. package/dist/backend/devtools/index.js.map +7 -0
  161. package/dist/backend/devtools/useUmesDevTools.js +125 -0
  162. package/dist/backend/devtools/useUmesDevTools.js.map +7 -0
  163. package/dist/backend/document-viewer/RegionOverlay.js +92 -0
  164. package/dist/backend/document-viewer/RegionOverlay.js.map +7 -0
  165. package/dist/backend/document-viewer/index.js +6 -0
  166. package/dist/backend/document-viewer/index.js.map +7 -0
  167. package/dist/backend/dynamic-grid/DynamicGrid.js +130 -0
  168. package/dist/backend/dynamic-grid/DynamicGrid.js.map +7 -0
  169. package/dist/backend/dynamic-grid/adapters.js +34 -0
  170. package/dist/backend/dynamic-grid/adapters.js.map +7 -0
  171. package/dist/backend/dynamic-grid/components/GridCell.js +149 -0
  172. package/dist/backend/dynamic-grid/components/GridCell.js.map +7 -0
  173. package/dist/backend/dynamic-grid/components/GridRow.js +32 -0
  174. package/dist/backend/dynamic-grid/components/GridRow.js.map +7 -0
  175. package/dist/backend/dynamic-grid/hooks/useGridKeyboardNav.js +115 -0
  176. package/dist/backend/dynamic-grid/hooks/useGridKeyboardNav.js.map +7 -0
  177. package/dist/backend/dynamic-grid/index.js +9 -0
  178. package/dist/backend/dynamic-grid/index.js.map +7 -0
  179. package/dist/backend/dynamic-grid/types.js +1 -0
  180. package/dist/backend/dynamic-grid/types.js.map +7 -0
  181. package/dist/backend/dynamic-table/DynamicTable.js +2607 -0
  182. package/dist/backend/dynamic-table/DynamicTable.js.map +7 -0
  183. package/dist/backend/dynamic-table/DynamicTable.stories.js +233 -0
  184. package/dist/backend/dynamic-table/DynamicTable.stories.js.map +7 -0
  185. package/dist/backend/dynamic-table/components/ActiveFilterChips.js +60 -0
  186. package/dist/backend/dynamic-table/components/ActiveFilterChips.js.map +7 -0
  187. package/dist/backend/dynamic-table/components/BulkActionsBar.js +58 -0
  188. package/dist/backend/dynamic-table/components/BulkActionsBar.js.map +7 -0
  189. package/dist/backend/dynamic-table/components/Cell.js +155 -0
  190. package/dist/backend/dynamic-table/components/Cell.js.map +7 -0
  191. package/dist/backend/dynamic-table/components/CellCommentDialog.js +726 -0
  192. package/dist/backend/dynamic-table/components/CellCommentDialog.js.map +7 -0
  193. package/dist/backend/dynamic-table/components/CellCommentHoverPopup.js +77 -0
  194. package/dist/backend/dynamic-table/components/CellCommentHoverPopup.js.map +7 -0
  195. package/dist/backend/dynamic-table/components/ColumnFilterPopover.js +485 -0
  196. package/dist/backend/dynamic-table/components/ColumnFilterPopover.js.map +7 -0
  197. package/dist/backend/dynamic-table/components/ColumnHeaderMenu.js +173 -0
  198. package/dist/backend/dynamic-table/components/ColumnHeaderMenu.js.map +7 -0
  199. package/dist/backend/dynamic-table/components/ColumnHeaders.js +528 -0
  200. package/dist/backend/dynamic-table/components/ColumnHeaders.js.map +7 -0
  201. package/dist/backend/dynamic-table/components/CompactLabelCell.js +64 -0
  202. package/dist/backend/dynamic-table/components/CompactLabelCell.js.map +7 -0
  203. package/dist/backend/dynamic-table/components/ConfigureViewFields.js +139 -0
  204. package/dist/backend/dynamic-table/components/ConfigureViewFields.js.map +7 -0
  205. package/dist/backend/dynamic-table/components/ConfigureViewFilters.js +305 -0
  206. package/dist/backend/dynamic-table/components/ConfigureViewFilters.js.map +7 -0
  207. package/dist/backend/dynamic-table/components/ConfigureViewFormatting.js +169 -0
  208. package/dist/backend/dynamic-table/components/ConfigureViewFormatting.js.map +7 -0
  209. package/dist/backend/dynamic-table/components/ConfigureViewFormulas.js +298 -0
  210. package/dist/backend/dynamic-table/components/ConfigureViewFormulas.js.map +7 -0
  211. package/dist/backend/dynamic-table/components/ConfigureViewGrouping.js +224 -0
  212. package/dist/backend/dynamic-table/components/ConfigureViewGrouping.js.map +7 -0
  213. package/dist/backend/dynamic-table/components/ConfigureViewLinkedColumns.js +167 -0
  214. package/dist/backend/dynamic-table/components/ConfigureViewLinkedColumns.js.map +7 -0
  215. package/dist/backend/dynamic-table/components/ConfigureViewPanel.js +592 -0
  216. package/dist/backend/dynamic-table/components/ConfigureViewPanel.js.map +7 -0
  217. package/dist/backend/dynamic-table/components/ConfigureViewRollups.js +269 -0
  218. package/dist/backend/dynamic-table/components/ConfigureViewRollups.js.map +7 -0
  219. package/dist/backend/dynamic-table/components/ConfigureViewSorting.js +107 -0
  220. package/dist/backend/dynamic-table/components/ConfigureViewSorting.js.map +7 -0
  221. package/dist/backend/dynamic-table/components/ContextMenu.js +91 -0
  222. package/dist/backend/dynamic-table/components/ContextMenu.js.map +7 -0
  223. package/dist/backend/dynamic-table/components/DateCell.js +80 -0
  224. package/dist/backend/dynamic-table/components/DateCell.js.map +7 -0
  225. package/dist/backend/dynamic-table/components/Debugger.js +311 -0
  226. package/dist/backend/dynamic-table/components/Debugger.js.map +7 -0
  227. package/dist/backend/dynamic-table/components/DensityControl.js +289 -0
  228. package/dist/backend/dynamic-table/components/DensityControl.js.map +7 -0
  229. package/dist/backend/dynamic-table/components/EmptyState.js +42 -0
  230. package/dist/backend/dynamic-table/components/EmptyState.js.map +7 -0
  231. package/dist/backend/dynamic-table/components/EntitySearchEditor.js +369 -0
  232. package/dist/backend/dynamic-table/components/EntitySearchEditor.js.map +7 -0
  233. package/dist/backend/dynamic-table/components/ExportMenu.js +63 -0
  234. package/dist/backend/dynamic-table/components/ExportMenu.js.map +7 -0
  235. package/dist/backend/dynamic-table/components/FilterDatePicker.js +165 -0
  236. package/dist/backend/dynamic-table/components/FilterDatePicker.js.map +7 -0
  237. package/dist/backend/dynamic-table/components/FilterValueInput.js +200 -0
  238. package/dist/backend/dynamic-table/components/FilterValueInput.js.map +7 -0
  239. package/dist/backend/dynamic-table/components/FooterTotalsRow.js +165 -0
  240. package/dist/backend/dynamic-table/components/FooterTotalsRow.js.map +7 -0
  241. package/dist/backend/dynamic-table/components/FullscreenOverlay.js +51 -0
  242. package/dist/backend/dynamic-table/components/FullscreenOverlay.js.map +7 -0
  243. package/dist/backend/dynamic-table/components/GroupHeaderRow.js +108 -0
  244. package/dist/backend/dynamic-table/components/GroupHeaderRow.js.map +7 -0
  245. package/dist/backend/dynamic-table/components/GroupSummaryRow.js +134 -0
  246. package/dist/backend/dynamic-table/components/GroupSummaryRow.js.map +7 -0
  247. package/dist/backend/dynamic-table/components/ImportPanel.js +341 -0
  248. package/dist/backend/dynamic-table/components/ImportPanel.js.map +7 -0
  249. package/dist/backend/dynamic-table/components/ImportPreviewGrid.js +114 -0
  250. package/dist/backend/dynamic-table/components/ImportPreviewGrid.js.map +7 -0
  251. package/dist/backend/dynamic-table/components/LoadErrorState.js +23 -0
  252. package/dist/backend/dynamic-table/components/LoadErrorState.js.map +7 -0
  253. package/dist/backend/dynamic-table/components/MentionPopup.js +149 -0
  254. package/dist/backend/dynamic-table/components/MentionPopup.js.map +7 -0
  255. package/dist/backend/dynamic-table/components/PerspectiveDeleteDialog.js +57 -0
  256. package/dist/backend/dynamic-table/components/PerspectiveDeleteDialog.js.map +7 -0
  257. package/dist/backend/dynamic-table/components/PerspectivePublishDialog.js +100 -0
  258. package/dist/backend/dynamic-table/components/PerspectivePublishDialog.js.map +7 -0
  259. package/dist/backend/dynamic-table/components/PerspectiveTabMenu.js +159 -0
  260. package/dist/backend/dynamic-table/components/PerspectiveTabMenu.js.map +7 -0
  261. package/dist/backend/dynamic-table/components/PerspectiveTabs.js +319 -0
  262. package/dist/backend/dynamic-table/components/PerspectiveTabs.js.map +7 -0
  263. package/dist/backend/dynamic-table/components/PerspectiveTemplateMenu.js +90 -0
  264. package/dist/backend/dynamic-table/components/PerspectiveTemplateMenu.js.map +7 -0
  265. package/dist/backend/dynamic-table/components/RowHeaderCell.js +58 -0
  266. package/dist/backend/dynamic-table/components/RowHeaderCell.js.map +7 -0
  267. package/dist/backend/dynamic-table/components/SearchBar.js +221 -0
  268. package/dist/backend/dynamic-table/components/SearchBar.js.map +7 -0
  269. package/dist/backend/dynamic-table/components/SelectMenu.js +186 -0
  270. package/dist/backend/dynamic-table/components/SelectMenu.js.map +7 -0
  271. package/dist/backend/dynamic-table/components/StaleDataBar.js +26 -0
  272. package/dist/backend/dynamic-table/components/StaleDataBar.js.map +7 -0
  273. package/dist/backend/dynamic-table/components/TableDeleteDialog.js +48 -0
  274. package/dist/backend/dynamic-table/components/TableDeleteDialog.js.map +7 -0
  275. package/dist/backend/dynamic-table/components/TablePagination.js +69 -0
  276. package/dist/backend/dynamic-table/components/TablePagination.js.map +7 -0
  277. package/dist/backend/dynamic-table/components/TableSkeleton.js +43 -0
  278. package/dist/backend/dynamic-table/components/TableSkeleton.js.map +7 -0
  279. package/dist/backend/dynamic-table/components/ToolbarOverflow.js +204 -0
  280. package/dist/backend/dynamic-table/components/ToolbarOverflow.js.map +7 -0
  281. package/dist/backend/dynamic-table/components/ViewModeSwitch.js +50 -0
  282. package/dist/backend/dynamic-table/components/ViewModeSwitch.js.map +7 -0
  283. package/dist/backend/dynamic-table/components/VirtualRow.js +214 -0
  284. package/dist/backend/dynamic-table/components/VirtualRow.js.map +7 -0
  285. package/dist/backend/dynamic-table/components/editors.js +1483 -0
  286. package/dist/backend/dynamic-table/components/editors.js.map +7 -0
  287. package/dist/backend/dynamic-table/components/renderers.js +131 -0
  288. package/dist/backend/dynamic-table/components/renderers.js.map +7 -0
  289. package/dist/backend/dynamic-table/events/events.js +73 -0
  290. package/dist/backend/dynamic-table/events/events.js.map +7 -0
  291. package/dist/backend/dynamic-table/formula/check.js +243 -0
  292. package/dist/backend/dynamic-table/formula/check.js.map +7 -0
  293. package/dist/backend/dynamic-table/formula/evaluate.js +302 -0
  294. package/dist/backend/dynamic-table/formula/evaluate.js.map +7 -0
  295. package/dist/backend/dynamic-table/formula/functions.js +602 -0
  296. package/dist/backend/dynamic-table/formula/functions.js.map +7 -0
  297. package/dist/backend/dynamic-table/formula/index.js +47 -0
  298. package/dist/backend/dynamic-table/formula/index.js.map +7 -0
  299. package/dist/backend/dynamic-table/formula/parse.js +293 -0
  300. package/dist/backend/dynamic-table/formula/parse.js.map +7 -0
  301. package/dist/backend/dynamic-table/formula/types.js +24 -0
  302. package/dist/backend/dynamic-table/formula/types.js.map +7 -0
  303. package/dist/backend/dynamic-table/handlers/cellWrites.js +143 -0
  304. package/dist/backend/dynamic-table/handlers/cellWrites.js.map +7 -0
  305. package/dist/backend/dynamic-table/handlers/index.js +504 -0
  306. package/dist/backend/dynamic-table/handlers/index.js.map +7 -0
  307. package/dist/backend/dynamic-table/handlers/perspectiveHandlers.js +377 -0
  308. package/dist/backend/dynamic-table/handlers/perspectiveHandlers.js.map +7 -0
  309. package/dist/backend/dynamic-table/hooks/index.js +524 -0
  310. package/dist/backend/dynamic-table/hooks/index.js.map +7 -0
  311. package/dist/backend/dynamic-table/hooks/useAbbreviations.js +19 -0
  312. package/dist/backend/dynamic-table/hooks/useAbbreviations.js.map +7 -0
  313. package/dist/backend/dynamic-table/hooks/useAnnotations.js +115 -0
  314. package/dist/backend/dynamic-table/hooks/useAnnotations.js.map +7 -0
  315. package/dist/backend/dynamic-table/hooks/useColumnVirtualizer.js +155 -0
  316. package/dist/backend/dynamic-table/hooks/useColumnVirtualizer.js.map +7 -0
  317. package/dist/backend/dynamic-table/hooks/useColumnWidthPersistence.js +135 -0
  318. package/dist/backend/dynamic-table/hooks/useColumnWidthPersistence.js.map +7 -0
  319. package/dist/backend/dynamic-table/hooks/useDensityPreference.js +203 -0
  320. package/dist/backend/dynamic-table/hooks/useDensityPreference.js.map +7 -0
  321. package/dist/backend/dynamic-table/hooks/useDynamicTablePage.js +1005 -0
  322. package/dist/backend/dynamic-table/hooks/useDynamicTablePage.js.map +7 -0
  323. package/dist/backend/dynamic-table/hooks/useEscapeLayer.js +32 -0
  324. package/dist/backend/dynamic-table/hooks/useEscapeLayer.js.map +7 -0
  325. package/dist/backend/dynamic-table/hooks/useGrouping.js +256 -0
  326. package/dist/backend/dynamic-table/hooks/useGrouping.js.map +7 -0
  327. package/dist/backend/dynamic-table/hooks/useSuggestionFetch.js +63 -0
  328. package/dist/backend/dynamic-table/hooks/useSuggestionFetch.js.map +7 -0
  329. package/dist/backend/dynamic-table/hooks/useTableDateFormat.js +11 -0
  330. package/dist/backend/dynamic-table/hooks/useTableDateFormat.js.map +7 -0
  331. package/dist/backend/dynamic-table/index.js +476 -0
  332. package/dist/backend/dynamic-table/index.js.map +7 -0
  333. package/dist/backend/dynamic-table/registry/ContentRegistryContext.js +126 -0
  334. package/dist/backend/dynamic-table/registry/ContentRegistryContext.js.map +7 -0
  335. package/dist/backend/dynamic-table/registry/TableRegistryContext.js +43 -0
  336. package/dist/backend/dynamic-table/registry/TableRegistryContext.js.map +7 -0
  337. package/dist/backend/dynamic-table/registry/filterAccessibleTables.js +13 -0
  338. package/dist/backend/dynamic-table/registry/filterAccessibleTables.js.map +7 -0
  339. package/dist/backend/dynamic-table/registry/index.js +44 -0
  340. package/dist/backend/dynamic-table/registry/index.js.map +7 -0
  341. package/dist/backend/dynamic-table/registry/lazyTable.js +55 -0
  342. package/dist/backend/dynamic-table/registry/lazyTable.js.map +7 -0
  343. package/dist/backend/dynamic-table/registry/types.js +1 -0
  344. package/dist/backend/dynamic-table/registry/types.js.map +7 -0
  345. package/dist/backend/dynamic-table/registry/widgetCatalog.js +96 -0
  346. package/dist/backend/dynamic-table/registry/widgetCatalog.js.map +7 -0
  347. package/dist/backend/dynamic-table/server/aggregate.js +261 -0
  348. package/dist/backend/dynamic-table/server/aggregate.js.map +7 -0
  349. package/dist/backend/dynamic-table/server/dateWindows.js +105 -0
  350. package/dist/backend/dynamic-table/server/dateWindows.js.map +7 -0
  351. package/dist/backend/dynamic-table/server/filterParser.js +97 -0
  352. package/dist/backend/dynamic-table/server/filterParser.js.map +7 -0
  353. package/dist/backend/dynamic-table/server/filterSuggestions.js +70 -0
  354. package/dist/backend/dynamic-table/server/filterSuggestions.js.map +7 -0
  355. package/dist/backend/dynamic-table/server/index.js +47 -0
  356. package/dist/backend/dynamic-table/server/index.js.map +7 -0
  357. package/dist/backend/dynamic-table/server/makeDynamicTableRoute.js +270 -0
  358. package/dist/backend/dynamic-table/server/makeDynamicTableRoute.js.map +7 -0
  359. package/dist/backend/dynamic-table/split-view/ContentPicker.js +171 -0
  360. package/dist/backend/dynamic-table/split-view/ContentPicker.js.map +7 -0
  361. package/dist/backend/dynamic-table/split-view/EmptySlot.js +47 -0
  362. package/dist/backend/dynamic-table/split-view/EmptySlot.js.map +7 -0
  363. package/dist/backend/dynamic-table/split-view/SplitViewHost.js +863 -0
  364. package/dist/backend/dynamic-table/split-view/SplitViewHost.js.map +7 -0
  365. package/dist/backend/dynamic-table/split-view/WidgetPane.js +280 -0
  366. package/dist/backend/dynamic-table/split-view/WidgetPane.js.map +7 -0
  367. package/dist/backend/dynamic-table/split-view/WorkspaceFilterBar.js +524 -0
  368. package/dist/backend/dynamic-table/split-view/WorkspaceFilterBar.js.map +7 -0
  369. package/dist/backend/dynamic-table/split-view/index.js +61 -0
  370. package/dist/backend/dynamic-table/split-view/index.js.map +7 -0
  371. package/dist/backend/dynamic-table/split-view/layoutPersistence.js +91 -0
  372. package/dist/backend/dynamic-table/split-view/layoutPersistence.js.map +7 -0
  373. package/dist/backend/dynamic-table/split-view/sharedCriteria.js +62 -0
  374. package/dist/backend/dynamic-table/split-view/sharedCriteria.js.map +7 -0
  375. package/dist/backend/dynamic-table/split-view/types.js +426 -0
  376. package/dist/backend/dynamic-table/split-view/types.js.map +7 -0
  377. package/dist/backend/dynamic-table/split-view/useSplitViewLayouts.js +79 -0
  378. package/dist/backend/dynamic-table/split-view/useSplitViewLayouts.js.map +7 -0
  379. package/dist/backend/dynamic-table/store/index.js +611 -0
  380. package/dist/backend/dynamic-table/store/index.js.map +7 -0
  381. package/dist/backend/dynamic-table/styles/ContextMenu.css.js +2 -0
  382. package/dist/backend/dynamic-table/styles/DynamicTable.css.js +2 -0
  383. package/dist/backend/dynamic-table/styles/DynamicTable.v2.css.js +2 -0
  384. package/dist/backend/dynamic-table/styles/SearchBar.css.js +2 -0
  385. package/dist/backend/dynamic-table/styles/dateCell.css.js +2 -0
  386. package/dist/backend/dynamic-table/styles/density.css.js +2 -0
  387. package/dist/backend/dynamic-table/types/density.js +29 -0
  388. package/dist/backend/dynamic-table/types/density.js.map +7 -0
  389. package/dist/backend/dynamic-table/types/filters.js +124 -0
  390. package/dist/backend/dynamic-table/types/filters.js.map +7 -0
  391. package/dist/backend/dynamic-table/types/grouping.js +34 -0
  392. package/dist/backend/dynamic-table/types/grouping.js.map +7 -0
  393. package/dist/backend/dynamic-table/types/import.js +7 -0
  394. package/dist/backend/dynamic-table/types/import.js.map +7 -0
  395. package/dist/backend/dynamic-table/types/index.js +46 -0
  396. package/dist/backend/dynamic-table/types/index.js.map +7 -0
  397. package/dist/backend/dynamic-table/types/perspective.js +79 -0
  398. package/dist/backend/dynamic-table/types/perspective.js.map +7 -0
  399. package/dist/backend/dynamic-table/types/rollup.js +13 -0
  400. package/dist/backend/dynamic-table/types/rollup.js.map +7 -0
  401. package/dist/backend/dynamic-table/utils/abbreviations.js +228 -0
  402. package/dist/backend/dynamic-table/utils/abbreviations.js.map +7 -0
  403. package/dist/backend/dynamic-table/utils/anchoredPosition.js +21 -0
  404. package/dist/backend/dynamic-table/utils/anchoredPosition.js.map +7 -0
  405. package/dist/backend/dynamic-table/utils/badgeAutoFit.js +35 -0
  406. package/dist/backend/dynamic-table/utils/badgeAutoFit.js.map +7 -0
  407. package/dist/backend/dynamic-table/utils/clipboard.js +172 -0
  408. package/dist/backend/dynamic-table/utils/clipboard.js.map +7 -0
  409. package/dist/backend/dynamic-table/utils/coerceCellValue.js +52 -0
  410. package/dist/backend/dynamic-table/utils/coerceCellValue.js.map +7 -0
  411. package/dist/backend/dynamic-table/utils/colorAdjacency.js +27 -0
  412. package/dist/backend/dynamic-table/utils/colorAdjacency.js.map +7 -0
  413. package/dist/backend/dynamic-table/utils/columnFill.js +36 -0
  414. package/dist/backend/dynamic-table/utils/columnFill.js.map +7 -0
  415. package/dist/backend/dynamic-table/utils/columnSpacerStyle.js +21 -0
  416. package/dist/backend/dynamic-table/utils/columnSpacerStyle.js.map +7 -0
  417. package/dist/backend/dynamic-table/utils/columnWindow.js +293 -0
  418. package/dist/backend/dynamic-table/utils/columnWindow.js.map +7 -0
  419. package/dist/backend/dynamic-table/utils/conditionalFormat.js +188 -0
  420. package/dist/backend/dynamic-table/utils/conditionalFormat.js.map +7 -0
  421. package/dist/backend/dynamic-table/utils/exportTable.js +82 -0
  422. package/dist/backend/dynamic-table/utils/exportTable.js.map +7 -0
  423. package/dist/backend/dynamic-table/utils/fillGeometry.js +92 -0
  424. package/dist/backend/dynamic-table/utils/fillGeometry.js.map +7 -0
  425. package/dist/backend/dynamic-table/utils/fillPatterns.js +241 -0
  426. package/dist/backend/dynamic-table/utils/fillPatterns.js.map +7 -0
  427. package/dist/backend/dynamic-table/utils/formatAggregate.js +82 -0
  428. package/dist/backend/dynamic-table/utils/formatAggregate.js.map +7 -0
  429. package/dist/backend/dynamic-table/utils/formatDateCompact.js +508 -0
  430. package/dist/backend/dynamic-table/utils/formatDateCompact.js.map +7 -0
  431. package/dist/backend/dynamic-table/utils/formatLabelCompact.js +312 -0
  432. package/dist/backend/dynamic-table/utils/formatLabelCompact.js.map +7 -0
  433. package/dist/backend/dynamic-table/utils/formulaColumns.js +158 -0
  434. package/dist/backend/dynamic-table/utils/formulaColumns.js.map +7 -0
  435. package/dist/backend/dynamic-table/utils/importMapping.js +118 -0
  436. package/dist/backend/dynamic-table/utils/importMapping.js.map +7 -0
  437. package/dist/backend/dynamic-table/utils/importParse.js +121 -0
  438. package/dist/backend/dynamic-table/utils/importParse.js.map +7 -0
  439. package/dist/backend/dynamic-table/utils/lookupColumns.js +28 -0
  440. package/dist/backend/dynamic-table/utils/lookupColumns.js.map +7 -0
  441. package/dist/backend/dynamic-table/utils/perspectiveTransforms.js +191 -0
  442. package/dist/backend/dynamic-table/utils/perspectiveTransforms.js.map +7 -0
  443. package/dist/backend/dynamic-table/utils/rollupColumns.js +81 -0
  444. package/dist/backend/dynamic-table/utils/rollupColumns.js.map +7 -0
  445. package/dist/backend/dynamic-table/validators/index.js +36 -0
  446. package/dist/backend/dynamic-table/validators/index.js.map +7 -0
  447. package/dist/backend/fields/registry.generated.js +8 -0
  448. package/dist/backend/fields/registry.generated.js.map +7 -0
  449. package/dist/backend/fields/registry.js +29 -0
  450. package/dist/backend/fields/registry.js.map +7 -0
  451. package/dist/backend/filters/AdvancedFilterBuilder.js +280 -0
  452. package/dist/backend/filters/AdvancedFilterBuilder.js.map +7 -0
  453. package/dist/backend/forms/ActionsDropdown.js +160 -0
  454. package/dist/backend/forms/ActionsDropdown.js.map +7 -0
  455. package/dist/backend/forms/FormActionButtons.js +59 -0
  456. package/dist/backend/forms/FormActionButtons.js.map +7 -0
  457. package/dist/backend/forms/FormFooter.js +18 -0
  458. package/dist/backend/forms/FormFooter.js.map +7 -0
  459. package/dist/backend/forms/FormHeader.js +125 -0
  460. package/dist/backend/forms/FormHeader.js.map +7 -0
  461. package/dist/backend/forms/index.js +11 -0
  462. package/dist/backend/forms/index.js.map +7 -0
  463. package/dist/backend/hooks/useAdvancedFilter.js +64 -0
  464. package/dist/backend/hooks/useAdvancedFilter.js.map +7 -0
  465. package/dist/backend/indexes/PartialIndexBanner.js +74 -0
  466. package/dist/backend/indexes/PartialIndexBanner.js.map +7 -0
  467. package/dist/backend/indexes/store.js +62 -0
  468. package/dist/backend/indexes/store.js.map +7 -0
  469. package/dist/backend/injection/ComponentOverrideProvider.js +55 -0
  470. package/dist/backend/injection/ComponentOverrideProvider.js.map +7 -0
  471. package/dist/backend/injection/InjectedField.js +166 -0
  472. package/dist/backend/injection/InjectedField.js.map +7 -0
  473. package/dist/backend/injection/InjectionSpot.js +323 -0
  474. package/dist/backend/injection/InjectionSpot.js.map +7 -0
  475. package/dist/backend/injection/InjectionWizard.js +256 -0
  476. package/dist/backend/injection/InjectionWizard.js.map +7 -0
  477. package/dist/backend/injection/PageInjectionBoundary.js +26 -0
  478. package/dist/backend/injection/PageInjectionBoundary.js.map +7 -0
  479. package/dist/backend/injection/SseEventIndicator.js +8 -0
  480. package/dist/backend/injection/SseEventIndicator.js.map +7 -0
  481. package/dist/backend/injection/StatusBadgeInjectionSpot.js +34 -0
  482. package/dist/backend/injection/StatusBadgeInjectionSpot.js.map +7 -0
  483. package/dist/backend/injection/StatusBadgeRenderer.js +58 -0
  484. package/dist/backend/injection/StatusBadgeRenderer.js.map +7 -0
  485. package/dist/backend/injection/WidgetSharedState.js +49 -0
  486. package/dist/backend/injection/WidgetSharedState.js.map +7 -0
  487. package/dist/backend/injection/WizardInjectionSpot.js +30 -0
  488. package/dist/backend/injection/WizardInjectionSpot.js.map +7 -0
  489. package/dist/backend/injection/eventBridge.js +129 -0
  490. package/dist/backend/injection/eventBridge.js.map +7 -0
  491. package/dist/backend/injection/helpers.js +26 -0
  492. package/dist/backend/injection/helpers.js.map +7 -0
  493. package/dist/backend/injection/mergeMenuItems.js +49 -0
  494. package/dist/backend/injection/mergeMenuItems.js.map +7 -0
  495. package/dist/backend/injection/mutationEvents.js +20 -0
  496. package/dist/backend/injection/mutationEvents.js.map +7 -0
  497. package/dist/backend/injection/resolveInjectedIcon.js +23 -0
  498. package/dist/backend/injection/resolveInjectedIcon.js.map +7 -0
  499. package/dist/backend/injection/spotIds.js +72 -0
  500. package/dist/backend/injection/spotIds.js.map +7 -0
  501. package/dist/backend/injection/useAppEvent.js +35 -0
  502. package/dist/backend/injection/useAppEvent.js.map +7 -0
  503. package/dist/backend/injection/useGuardedMutation.js +71 -0
  504. package/dist/backend/injection/useGuardedMutation.js.map +7 -0
  505. package/dist/backend/injection/useInjectedMenuItems.js +49 -0
  506. package/dist/backend/injection/useInjectedMenuItems.js.map +7 -0
  507. package/dist/backend/injection/useInjectionDataWidgets.js +36 -0
  508. package/dist/backend/injection/useInjectionDataWidgets.js.map +7 -0
  509. package/dist/backend/injection/useOperationProgress.js +64 -0
  510. package/dist/backend/injection/useOperationProgress.js.map +7 -0
  511. package/dist/backend/injection/useRegisteredComponent.js +89 -0
  512. package/dist/backend/injection/useRegisteredComponent.js.map +7 -0
  513. package/dist/backend/injection/useWidgetSharedState.js +26 -0
  514. package/dist/backend/injection/useWidgetSharedState.js.map +7 -0
  515. package/dist/backend/injection/visibility-utils.js +29 -0
  516. package/dist/backend/injection/visibility-utils.js.map +7 -0
  517. package/dist/backend/injection/widgetRegistry.js +55 -0
  518. package/dist/backend/injection/widgetRegistry.js.map +7 -0
  519. package/dist/backend/inputs/ComboboxInput.js +228 -0
  520. package/dist/backend/inputs/ComboboxInput.js.map +7 -0
  521. package/dist/backend/inputs/DatePicker.js +148 -0
  522. package/dist/backend/inputs/DatePicker.js.map +7 -0
  523. package/dist/backend/inputs/DateTimePicker.js +188 -0
  524. package/dist/backend/inputs/DateTimePicker.js.map +7 -0
  525. package/dist/backend/inputs/EventPatternInput.js +38 -0
  526. package/dist/backend/inputs/EventPatternInput.js.map +7 -0
  527. package/dist/backend/inputs/EventSelect.js +115 -0
  528. package/dist/backend/inputs/EventSelect.js.map +7 -0
  529. package/dist/backend/inputs/LookupSelect.js +197 -0
  530. package/dist/backend/inputs/LookupSelect.js.map +7 -0
  531. package/dist/backend/inputs/PhoneNumberField.js +133 -0
  532. package/dist/backend/inputs/PhoneNumberField.js.map +7 -0
  533. package/dist/backend/inputs/SwitchableMarkdownInput.js +73 -0
  534. package/dist/backend/inputs/SwitchableMarkdownInput.js.map +7 -0
  535. package/dist/backend/inputs/TagsInput.js +258 -0
  536. package/dist/backend/inputs/TagsInput.js.map +7 -0
  537. package/dist/backend/inputs/TimeInput.js +132 -0
  538. package/dist/backend/inputs/TimeInput.js.map +7 -0
  539. package/dist/backend/inputs/TimePicker.js +105 -0
  540. package/dist/backend/inputs/TimePicker.js.map +7 -0
  541. package/dist/backend/inputs/index.js +12 -0
  542. package/dist/backend/inputs/index.js.map +7 -0
  543. package/dist/backend/markdown/MarkdownContent.js +20 -0
  544. package/dist/backend/markdown/MarkdownContent.js.map +7 -0
  545. package/dist/backend/markdown/index.js +3 -0
  546. package/dist/backend/markdown/index.js.map +7 -0
  547. package/dist/backend/markdown/useMarkdownRemarkPlugins.js +33 -0
  548. package/dist/backend/markdown/useMarkdownRemarkPlugins.js.map +7 -0
  549. package/dist/backend/messages/MessageComposer.js +158 -0
  550. package/dist/backend/messages/MessageComposer.js.map +7 -0
  551. package/dist/backend/messages/MessageObjectDetail.js +81 -0
  552. package/dist/backend/messages/MessageObjectDetail.js.map +7 -0
  553. package/dist/backend/messages/MessageObjectPreview.js +48 -0
  554. package/dist/backend/messages/MessageObjectPreview.js.map +7 -0
  555. package/dist/backend/messages/MessageObjectRecordPicker.js +89 -0
  556. package/dist/backend/messages/MessageObjectRecordPicker.js.map +7 -0
  557. package/dist/backend/messages/MessagePrioritySelector.js +74 -0
  558. package/dist/backend/messages/MessagePrioritySelector.js.map +7 -0
  559. package/dist/backend/messages/MessagesIcon.js +22 -0
  560. package/dist/backend/messages/MessagesIcon.js.map +7 -0
  561. package/dist/backend/messages/SendObjectMessageDialog.js +65 -0
  562. package/dist/backend/messages/SendObjectMessageDialog.js.map +7 -0
  563. package/dist/backend/messages/index.js +17 -0
  564. package/dist/backend/messages/index.js.map +7 -0
  565. package/dist/backend/messages/message-compose-form-groups.js +333 -0
  566. package/dist/backend/messages/message-compose-form-groups.js.map +7 -0
  567. package/dist/backend/messages/message-composer.types.js +1 -0
  568. package/dist/backend/messages/message-composer.types.js.map +7 -0
  569. package/dist/backend/messages/message-priority.js +40 -0
  570. package/dist/backend/messages/message-priority.js.map +7 -0
  571. package/dist/backend/messages/useMessageCompose.js +488 -0
  572. package/dist/backend/messages/useMessageCompose.js.map +7 -0
  573. package/dist/backend/messages/useMessageComposeOperations.js +163 -0
  574. package/dist/backend/messages/useMessageComposeOperations.js.map +7 -0
  575. package/dist/backend/messages/useMessagesPoll.js +79 -0
  576. package/dist/backend/messages/useMessagesPoll.js.map +7 -0
  577. package/dist/backend/notifications/NotificationBell.js +83 -0
  578. package/dist/backend/notifications/NotificationBell.js.map +7 -0
  579. package/dist/backend/notifications/NotificationCountBadge.js +9 -0
  580. package/dist/backend/notifications/NotificationCountBadge.js.map +7 -0
  581. package/dist/backend/notifications/NotificationDispatcher.js +165 -0
  582. package/dist/backend/notifications/NotificationDispatcher.js.map +7 -0
  583. package/dist/backend/notifications/NotificationItem.js +187 -0
  584. package/dist/backend/notifications/NotificationItem.js.map +7 -0
  585. package/dist/backend/notifications/NotificationPanel.js +146 -0
  586. package/dist/backend/notifications/NotificationPanel.js.map +7 -0
  587. package/dist/backend/notifications/index.js +19 -0
  588. package/dist/backend/notifications/index.js.map +7 -0
  589. package/dist/backend/notifications/useNotificationActions.js +124 -0
  590. package/dist/backend/notifications/useNotificationActions.js.map +7 -0
  591. package/dist/backend/notifications/useNotificationEffect.js +13 -0
  592. package/dist/backend/notifications/useNotificationEffect.js.map +7 -0
  593. package/dist/backend/notifications/useNotifications.js +11 -0
  594. package/dist/backend/notifications/useNotifications.js.map +7 -0
  595. package/dist/backend/notifications/useNotificationsPoll.js +135 -0
  596. package/dist/backend/notifications/useNotificationsPoll.js.map +7 -0
  597. package/dist/backend/notifications/useNotificationsSse.js +173 -0
  598. package/dist/backend/notifications/useNotificationsSse.js.map +7 -0
  599. package/dist/backend/operations/LastOperationBanner.js +80 -0
  600. package/dist/backend/operations/LastOperationBanner.js.map +7 -0
  601. package/dist/backend/operations/store.js +183 -0
  602. package/dist/backend/operations/store.js.map +7 -0
  603. package/dist/backend/progress/ProgressTopBar.js +129 -0
  604. package/dist/backend/progress/ProgressTopBar.js.map +7 -0
  605. package/dist/backend/progress/useProgress.js +11 -0
  606. package/dist/backend/progress/useProgress.js.map +7 -0
  607. package/dist/backend/progress/useProgressPoll.js +69 -0
  608. package/dist/backend/progress/useProgressPoll.js.map +7 -0
  609. package/dist/backend/progress/useProgressSse.js +104 -0
  610. package/dist/backend/progress/useProgressSse.js.map +7 -0
  611. package/dist/backend/schedule/ScheduleAgenda.js +107 -0
  612. package/dist/backend/schedule/ScheduleAgenda.js.map +7 -0
  613. package/dist/backend/schedule/ScheduleGrid.js +107 -0
  614. package/dist/backend/schedule/ScheduleGrid.js.map +7 -0
  615. package/dist/backend/schedule/ScheduleToolbar.js +166 -0
  616. package/dist/backend/schedule/ScheduleToolbar.js.map +7 -0
  617. package/dist/backend/schedule/ScheduleView.js +168 -0
  618. package/dist/backend/schedule/ScheduleView.js.map +7 -0
  619. package/dist/backend/schedule/index.js +6 -0
  620. package/dist/backend/schedule/index.js.map +7 -0
  621. package/dist/backend/schedule/recurrence.js +83 -0
  622. package/dist/backend/schedule/recurrence.js.map +7 -0
  623. package/dist/backend/schedule/types.js +1 -0
  624. package/dist/backend/schedule/types.js.map +7 -0
  625. package/dist/backend/section-page/SectionNav.js +104 -0
  626. package/dist/backend/section-page/SectionNav.js.map +7 -0
  627. package/dist/backend/section-page/SectionPage.js +33 -0
  628. package/dist/backend/section-page/SectionPage.js.map +7 -0
  629. package/dist/backend/section-page/index.js +7 -0
  630. package/dist/backend/section-page/index.js.map +7 -0
  631. package/dist/backend/section-page/types.js +1 -0
  632. package/dist/backend/section-page/types.js.map +7 -0
  633. package/dist/backend/settings/SettingsNavigation.js +43 -0
  634. package/dist/backend/settings/SettingsNavigation.js.map +7 -0
  635. package/dist/backend/settings/SettingsPageWrapper.js +66 -0
  636. package/dist/backend/settings/SettingsPageWrapper.js.map +7 -0
  637. package/dist/backend/settings/index.js +6 -0
  638. package/dist/backend/settings/index.js.map +7 -0
  639. package/dist/backend/upgrades/UpgradeActionBanner.js +91 -0
  640. package/dist/backend/upgrades/UpgradeActionBanner.js.map +7 -0
  641. package/dist/backend/utils/api.js +178 -0
  642. package/dist/backend/utils/api.js.map +7 -0
  643. package/dist/backend/utils/apiCall.js +68 -0
  644. package/dist/backend/utils/apiCall.js.map +7 -0
  645. package/dist/backend/utils/crud.js +126 -0
  646. package/dist/backend/utils/crud.js.map +7 -0
  647. package/dist/backend/utils/customFieldColumns.js +100 -0
  648. package/dist/backend/utils/customFieldColumns.js.map +7 -0
  649. package/dist/backend/utils/customFieldDefs.js +143 -0
  650. package/dist/backend/utils/customFieldDefs.js.map +7 -0
  651. package/dist/backend/utils/customFieldFilters.js +151 -0
  652. package/dist/backend/utils/customFieldFilters.js.map +7 -0
  653. package/dist/backend/utils/customFieldForms.js +169 -0
  654. package/dist/backend/utils/customFieldForms.js.map +7 -0
  655. package/dist/backend/utils/customFieldRelationDisplay.js +239 -0
  656. package/dist/backend/utils/customFieldRelationDisplay.js.map +7 -0
  657. package/dist/backend/utils/customFieldValues.js +26 -0
  658. package/dist/backend/utils/customFieldValues.js.map +7 -0
  659. package/dist/backend/utils/flash.js +16 -0
  660. package/dist/backend/utils/flash.js.map +7 -0
  661. package/dist/backend/utils/nav.js +280 -0
  662. package/dist/backend/utils/nav.js.map +7 -0
  663. package/dist/backend/utils/richTextSanitizer.js +11 -0
  664. package/dist/backend/utils/richTextSanitizer.js.map +7 -0
  665. package/dist/backend/utils/scopedHeaderStack.js +44 -0
  666. package/dist/backend/utils/scopedHeaderStack.js.map +7 -0
  667. package/dist/backend/utils/serverErrors.js +237 -0
  668. package/dist/backend/utils/serverErrors.js.map +7 -0
  669. package/dist/backend/utils/useAutoDiscoveredFields.js +96 -0
  670. package/dist/backend/utils/useAutoDiscoveredFields.js.map +7 -0
  671. package/dist/backend/version-history/VersionHistoryAction.js +67 -0
  672. package/dist/backend/version-history/VersionHistoryAction.js.map +7 -0
  673. package/dist/backend/version-history/VersionHistoryDetail.js +57 -0
  674. package/dist/backend/version-history/VersionHistoryDetail.js.map +7 -0
  675. package/dist/backend/version-history/VersionHistoryPanel.js +270 -0
  676. package/dist/backend/version-history/VersionHistoryPanel.js.map +7 -0
  677. package/dist/backend/version-history/index.js +13 -0
  678. package/dist/backend/version-history/index.js.map +7 -0
  679. package/dist/backend/version-history/labels.js +52 -0
  680. package/dist/backend/version-history/labels.js.map +7 -0
  681. package/dist/backend/version-history/types.js +1 -0
  682. package/dist/backend/version-history/types.js.map +7 -0
  683. package/dist/backend/version-history/useAuditPermissions.js +72 -0
  684. package/dist/backend/version-history/useAuditPermissions.js.map +7 -0
  685. package/dist/backend/version-history/useVersionHistory.js +141 -0
  686. package/dist/backend/version-history/useVersionHistory.js.map +7 -0
  687. package/dist/backend/views/NewViewForm.js +56 -0
  688. package/dist/backend/views/NewViewForm.js.map +7 -0
  689. package/dist/backend/views/ShareForm.js +49 -0
  690. package/dist/backend/views/ShareForm.js.map +7 -0
  691. package/dist/backend/views/ViewChip.js +112 -0
  692. package/dist/backend/views/ViewChip.js.map +7 -0
  693. package/dist/backend/views/ViewChipMenu.js +89 -0
  694. package/dist/backend/views/ViewChipMenu.js.map +7 -0
  695. package/dist/backend/views/types.js +1 -0
  696. package/dist/backend/views/types.js.map +7 -0
  697. package/dist/frontend/AuthFooter.js +23 -0
  698. package/dist/frontend/AuthFooter.js.map +7 -0
  699. package/dist/frontend/LanguageSwitcher.js +57 -0
  700. package/dist/frontend/LanguageSwitcher.js.map +7 -0
  701. package/dist/frontend/Layout.js +14 -0
  702. package/dist/frontend/Layout.js.map +7 -0
  703. package/dist/hooks/useIsMobile.js +21 -0
  704. package/dist/hooks/useIsMobile.js.map +7 -0
  705. package/dist/index.js +40 -0
  706. package/dist/index.js.map +7 -0
  707. package/dist/portal/PortalContext.js +113 -0
  708. package/dist/portal/PortalContext.js.map +7 -0
  709. package/dist/portal/PortalLayoutProvider.js +5 -0
  710. package/dist/portal/PortalLayoutProvider.js.map +7 -0
  711. package/dist/portal/PortalLayoutShell.js +44 -0
  712. package/dist/portal/PortalLayoutShell.js.map +7 -0
  713. package/dist/portal/PortalShell.js +229 -0
  714. package/dist/portal/PortalShell.js.map +7 -0
  715. package/dist/portal/components/PortalCard.js +31 -0
  716. package/dist/portal/components/PortalCard.js.map +7 -0
  717. package/dist/portal/components/PortalEmptyState.js +16 -0
  718. package/dist/portal/components/PortalEmptyState.js.map +7 -0
  719. package/dist/portal/components/PortalFeatureCard.js +21 -0
  720. package/dist/portal/components/PortalFeatureCard.js.map +7 -0
  721. package/dist/portal/components/PortalNotificationBell.js +67 -0
  722. package/dist/portal/components/PortalNotificationBell.js.map +7 -0
  723. package/dist/portal/components/PortalNotificationPanel.js +158 -0
  724. package/dist/portal/components/PortalNotificationPanel.js.map +7 -0
  725. package/dist/portal/components/PortalPageHeader.js +16 -0
  726. package/dist/portal/components/PortalPageHeader.js.map +7 -0
  727. package/dist/portal/components/index.js +18 -0
  728. package/dist/portal/components/index.js.map +7 -0
  729. package/dist/portal/hooks/useCustomerAuth.js +69 -0
  730. package/dist/portal/hooks/useCustomerAuth.js.map +7 -0
  731. package/dist/portal/hooks/usePortalAppEvent.js +26 -0
  732. package/dist/portal/hooks/usePortalAppEvent.js.map +7 -0
  733. package/dist/portal/hooks/usePortalDashboardWidgets.js +37 -0
  734. package/dist/portal/hooks/usePortalDashboardWidgets.js.map +7 -0
  735. package/dist/portal/hooks/usePortalEventBridge.js +129 -0
  736. package/dist/portal/hooks/usePortalEventBridge.js.map +7 -0
  737. package/dist/portal/hooks/usePortalInjectedMenuItems.js +88 -0
  738. package/dist/portal/hooks/usePortalInjectedMenuItems.js.map +7 -0
  739. package/dist/portal/hooks/usePortalNotifications.js +85 -0
  740. package/dist/portal/hooks/usePortalNotifications.js.map +7 -0
  741. package/dist/portal/hooks/useTenantContext.js +53 -0
  742. package/dist/portal/hooks/useTenantContext.js.map +7 -0
  743. package/dist/primitives/DataLoader.js +68 -0
  744. package/dist/primitives/DataLoader.js.map +7 -0
  745. package/dist/primitives/ErrorNotice.js +14 -0
  746. package/dist/primitives/ErrorNotice.js.map +7 -0
  747. package/dist/primitives/Notice.js +55 -0
  748. package/dist/primitives/Notice.js.map +7 -0
  749. package/dist/primitives/alert.js +38 -0
  750. package/dist/primitives/alert.js.map +7 -0
  751. package/dist/primitives/badge.js +33 -0
  752. package/dist/primitives/badge.js.map +7 -0
  753. package/dist/primitives/button.js +45 -0
  754. package/dist/primitives/button.js.map +7 -0
  755. package/dist/primitives/calendar.js +62 -0
  756. package/dist/primitives/calendar.js.map +7 -0
  757. package/dist/primitives/card.js +91 -0
  758. package/dist/primitives/card.js.map +7 -0
  759. package/dist/primitives/checkbox.js +28 -0
  760. package/dist/primitives/checkbox.js.map +7 -0
  761. package/dist/primitives/dialog.js +101 -0
  762. package/dist/primitives/dialog.js.map +7 -0
  763. package/dist/primitives/form-field.js +78 -0
  764. package/dist/primitives/form-field.js.map +7 -0
  765. package/dist/primitives/icon-button.js +40 -0
  766. package/dist/primitives/icon-button.js.map +7 -0
  767. package/dist/primitives/input.js +22 -0
  768. package/dist/primitives/input.js.map +7 -0
  769. package/dist/primitives/label.js +21 -0
  770. package/dist/primitives/label.js.map +7 -0
  771. package/dist/primitives/popover.js +36 -0
  772. package/dist/primitives/popover.js.map +7 -0
  773. package/dist/primitives/primitives.stories.js +187 -0
  774. package/dist/primitives/primitives.stories.js.map +7 -0
  775. package/dist/primitives/progress.js +28 -0
  776. package/dist/primitives/progress.js.map +7 -0
  777. package/dist/primitives/separator.js +9 -0
  778. package/dist/primitives/separator.js.map +7 -0
  779. package/dist/primitives/sheet.js +103 -0
  780. package/dist/primitives/sheet.js.map +7 -0
  781. package/dist/primitives/spinner.js +24 -0
  782. package/dist/primitives/spinner.js.map +7 -0
  783. package/dist/primitives/status-badge.js +38 -0
  784. package/dist/primitives/status-badge.js.map +7 -0
  785. package/dist/primitives/switch.js +80 -0
  786. package/dist/primitives/switch.js.map +7 -0
  787. package/dist/primitives/table.js +29 -0
  788. package/dist/primitives/table.js.map +7 -0
  789. package/dist/primitives/tabs.js +90 -0
  790. package/dist/primitives/tabs.js.map +7 -0
  791. package/dist/primitives/textarea.js +21 -0
  792. package/dist/primitives/textarea.js.map +7 -0
  793. package/dist/primitives/tooltip.js +60 -0
  794. package/dist/primitives/tooltip.js.map +7 -0
  795. package/dist/primitives-v2/Alert.js +69 -0
  796. package/dist/primitives-v2/Alert.js.map +7 -0
  797. package/dist/primitives-v2/Alert.stories.js +42 -0
  798. package/dist/primitives-v2/Alert.stories.js.map +7 -0
  799. package/dist/primitives-v2/Avatar.js +93 -0
  800. package/dist/primitives-v2/Avatar.js.map +7 -0
  801. package/dist/primitives-v2/Avatar.stories.js +57 -0
  802. package/dist/primitives-v2/Avatar.stories.js.map +7 -0
  803. package/dist/primitives-v2/Badge.js +50 -0
  804. package/dist/primitives-v2/Badge.js.map +7 -0
  805. package/dist/primitives-v2/Badge.stories.js +66 -0
  806. package/dist/primitives-v2/Badge.stories.js.map +7 -0
  807. package/dist/primitives-v2/Breadcrumb.js +53 -0
  808. package/dist/primitives-v2/Breadcrumb.js.map +7 -0
  809. package/dist/primitives-v2/Breadcrumb.stories.js +70 -0
  810. package/dist/primitives-v2/Breadcrumb.stories.js.map +7 -0
  811. package/dist/primitives-v2/Button.js +85 -0
  812. package/dist/primitives-v2/Button.js.map +7 -0
  813. package/dist/primitives-v2/Button.stories.js +48 -0
  814. package/dist/primitives-v2/Button.stories.js.map +7 -0
  815. package/dist/primitives-v2/Checkbox.js +65 -0
  816. package/dist/primitives-v2/Checkbox.js.map +7 -0
  817. package/dist/primitives-v2/Checkbox.stories.js +31 -0
  818. package/dist/primitives-v2/Checkbox.stories.js.map +7 -0
  819. package/dist/primitives-v2/IconButton.js +13 -0
  820. package/dist/primitives-v2/IconButton.js.map +7 -0
  821. package/dist/primitives-v2/IconButton.stories.js +37 -0
  822. package/dist/primitives-v2/IconButton.stories.js.map +7 -0
  823. package/dist/primitives-v2/Input.js +74 -0
  824. package/dist/primitives-v2/Input.js.map +7 -0
  825. package/dist/primitives-v2/Input.stories.js +56 -0
  826. package/dist/primitives-v2/Input.stories.js.map +7 -0
  827. package/dist/primitives-v2/NavGroup.js +54 -0
  828. package/dist/primitives-v2/NavGroup.js.map +7 -0
  829. package/dist/primitives-v2/NavGroup.stories.js +39 -0
  830. package/dist/primitives-v2/NavGroup.stories.js.map +7 -0
  831. package/dist/primitives-v2/NavItem.js +61 -0
  832. package/dist/primitives-v2/NavItem.js.map +7 -0
  833. package/dist/primitives-v2/NavItem.stories.js +56 -0
  834. package/dist/primitives-v2/NavItem.stories.js.map +7 -0
  835. package/dist/primitives-v2/SearchInput.js +93 -0
  836. package/dist/primitives-v2/SearchInput.js.map +7 -0
  837. package/dist/primitives-v2/SearchInput.stories.js +41 -0
  838. package/dist/primitives-v2/SearchInput.stories.js.map +7 -0
  839. package/dist/primitives-v2/Sidebar.js +48 -0
  840. package/dist/primitives-v2/Sidebar.js.map +7 -0
  841. package/dist/primitives-v2/Sidebar.stories.js +76 -0
  842. package/dist/primitives-v2/Sidebar.stories.js.map +7 -0
  843. package/dist/primitives-v2/Tab.js +78 -0
  844. package/dist/primitives-v2/Tab.js.map +7 -0
  845. package/dist/primitives-v2/Tab.stories.js +51 -0
  846. package/dist/primitives-v2/Tab.stories.js.map +7 -0
  847. package/dist/primitives-v2/Tag.js +61 -0
  848. package/dist/primitives-v2/Tag.js.map +7 -0
  849. package/dist/primitives-v2/Tag.stories.js +121 -0
  850. package/dist/primitives-v2/Tag.stories.js.map +7 -0
  851. package/dist/primitives-v2/Toggle.js +72 -0
  852. package/dist/primitives-v2/Toggle.js.map +7 -0
  853. package/dist/primitives-v2/Toggle.stories.js +34 -0
  854. package/dist/primitives-v2/Toggle.stories.js.map +7 -0
  855. package/dist/primitives-v2/Topbar.js +24 -0
  856. package/dist/primitives-v2/Topbar.js.map +7 -0
  857. package/dist/primitives-v2/Topbar.stories.js +58 -0
  858. package/dist/primitives-v2/Topbar.stories.js.map +7 -0
  859. package/dist/primitives-v2/index.js +41 -0
  860. package/dist/primitives-v2/index.js.map +7 -0
  861. package/dist/primitives-v2/utils.js +7 -0
  862. package/dist/primitives-v2/utils.js.map +7 -0
  863. package/dist/theme/BrandThemeProvider.js +49 -0
  864. package/dist/theme/BrandThemeProvider.js.map +7 -0
  865. package/dist/theme/QueryProvider.js +44 -0
  866. package/dist/theme/QueryProvider.js.map +7 -0
  867. package/dist/theme/ThemeProvider.js +96 -0
  868. package/dist/theme/ThemeProvider.js.map +7 -0
  869. package/dist/theme/ThemeToggle.js +88 -0
  870. package/dist/theme/ThemeToggle.js.map +7 -0
  871. package/dist/theme/index.js +12 -0
  872. package/dist/theme/index.js.map +7 -0
  873. package/dist/theme/m3.css.js +2 -0
  874. package/dist/theme/tokens.v2.css.js +2 -0
  875. package/dist/theme/typography.css.js +2 -0
  876. package/dist/theme/typography.stories.js +123 -0
  877. package/dist/theme/typography.stories.js.map +7 -0
  878. package/dist/theme/typography.tokens.js +281 -0
  879. package/dist/theme/typography.tokens.js.map +7 -0
  880. package/dist/types/react-big-calendar.d.js +1 -0
  881. package/dist/types/react-big-calendar.d.js.map +7 -0
  882. package/package.json +411 -0
  883. package/src/backend/AppShell.tsx +1606 -0
  884. package/src/backend/BackendChromeProvider.tsx +99 -0
  885. package/src/backend/BackendPageSurface.tsx +57 -0
  886. package/src/backend/CollapsibleNavSection.tsx +201 -0
  887. package/src/backend/ContextHelp.tsx +40 -0
  888. package/src/backend/CrudForm.tsx +3796 -0
  889. package/src/backend/DataTable.tsx +2584 -0
  890. package/src/backend/EmptyState.tsx +65 -0
  891. package/src/backend/FilterBar.tsx +171 -0
  892. package/src/backend/FilterOverlay.tsx +388 -0
  893. package/src/backend/FlashMessages.tsx +189 -0
  894. package/src/backend/HtmlRichTextEditor.tsx +124 -0
  895. package/src/backend/IntegrationsButton.tsx +29 -0
  896. package/src/backend/JsonBuilder.tsx +359 -0
  897. package/src/backend/JsonDisplay.tsx +258 -0
  898. package/src/backend/NextStepCallout.tsx +134 -0
  899. package/src/backend/Page.tsx +30 -0
  900. package/src/backend/PerspectiveSidebar.tsx +506 -0
  901. package/src/backend/ProfileDropdown.tsx +369 -0
  902. package/src/backend/RowActions.tsx +158 -0
  903. package/src/backend/SectionHeader.tsx +119 -0
  904. package/src/backend/SettingsButton.tsx +28 -0
  905. package/src/backend/Sidebar.stories.tsx +183 -0
  906. package/src/backend/Sidebar.tsx +737 -0
  907. package/src/backend/TruncatedCell.tsx +133 -0
  908. package/src/backend/UserMenu.tsx +153 -0
  909. package/src/backend/ValueIcons.tsx +48 -0
  910. package/src/backend/WebhookSetupGuide.tsx +127 -0
  911. package/src/backend/__tests__/AppShell.test.tsx +392 -0
  912. package/src/backend/__tests__/CrudForm.custom-fields.test.tsx +180 -0
  913. package/src/backend/__tests__/CrudForm.datetime.test.tsx +95 -0
  914. package/src/backend/__tests__/CrudForm.defaults.test.tsx +195 -0
  915. package/src/backend/__tests__/CrudForm.navigation.test.tsx +156 -0
  916. package/src/backend/__tests__/CrudForm.render.test.tsx +146 -0
  917. package/src/backend/__tests__/CrudForm.transformData.test.tsx +231 -0
  918. package/src/backend/__tests__/CrudForm.unsavedNavigation.test.tsx +145 -0
  919. package/src/backend/__tests__/CrudForm.validation.test.tsx +178 -0
  920. package/src/backend/__tests__/CustomDataSection.test.tsx +465 -0
  921. package/src/backend/__tests__/DataTable.extensions.test.tsx +339 -0
  922. package/src/backend/__tests__/DataTable.namespaces.test.ts +32 -0
  923. package/src/backend/__tests__/DataTable.render.test.tsx +48 -0
  924. package/src/backend/__tests__/FieldDefinitionsEditor.test.tsx +64 -0
  925. package/src/backend/__tests__/FlashMessages.test.tsx +105 -0
  926. package/src/backend/__tests__/FormHeader.test.tsx +81 -0
  927. package/src/backend/__tests__/NotificationDispatcher.test.ts +172 -0
  928. package/src/backend/__tests__/VersionHistoryPanel.test.tsx +109 -0
  929. package/src/backend/__tests__/component-replacement.test.tsx +270 -0
  930. package/src/backend/__tests__/custom-field-filters.test.ts +72 -0
  931. package/src/backend/__tests__/custom-field-forms.test.ts +54 -0
  932. package/src/backend/__tests__/nav-utils.test.ts +175 -0
  933. package/src/backend/__tests__/serverErrors.test.ts +83 -0
  934. package/src/backend/__tests__/useAuditPermissions.test.tsx +51 -0
  935. package/src/backend/__tests__/useNotifications.strategy.test.ts +58 -0
  936. package/src/backend/__tests__/useProgress.strategy.test.ts +62 -0
  937. package/src/backend/charts/BarChart.tsx +208 -0
  938. package/src/backend/charts/ChartUtils.tsx +196 -0
  939. package/src/backend/charts/ComboChart.stories.tsx +103 -0
  940. package/src/backend/charts/ComboChart.tsx +350 -0
  941. package/src/backend/charts/KpiCard.tsx +155 -0
  942. package/src/backend/charts/LineChart.tsx +207 -0
  943. package/src/backend/charts/PieChart.tsx +157 -0
  944. package/src/backend/charts/ScatterChart.tsx +498 -0
  945. package/src/backend/charts/TopNTable.tsx +141 -0
  946. package/src/backend/charts/WaterfallChart.tsx +213 -0
  947. package/src/backend/charts/index.ts +21 -0
  948. package/src/backend/columns/ColumnChooserPanel.tsx +293 -0
  949. package/src/backend/confirm-dialog/ConfirmDialog.tsx +275 -0
  950. package/src/backend/confirm-dialog/index.ts +7 -0
  951. package/src/backend/confirm-dialog/useConfirmDialog.tsx +146 -0
  952. package/src/backend/custom-fields/FieldDefinitionsEditor.tsx +1413 -0
  953. package/src/backend/custom-fields/FieldDefinitionsManager.tsx +381 -0
  954. package/src/backend/dashboard/DashboardScreen.tsx +706 -0
  955. package/src/backend/dashboard/__tests__/DashboardScreen.test.tsx +114 -0
  956. package/src/backend/dashboard/index.ts +1 -0
  957. package/src/backend/dashboard/widgetRegistry.ts +68 -0
  958. package/src/backend/date-range/DateRangeSelect.tsx +50 -0
  959. package/src/backend/date-range/InlineDateRangeSelect.tsx +52 -0
  960. package/src/backend/date-range/InlineGranularitySelect.tsx +63 -0
  961. package/src/backend/date-range/__tests__/dateRanges.test.ts +224 -0
  962. package/src/backend/date-range/dateRanges.ts +218 -0
  963. package/src/backend/date-range/index.ts +15 -0
  964. package/src/backend/detail/AccessDeniedMessage.tsx +32 -0
  965. package/src/backend/detail/ActivitiesSection.tsx +1261 -0
  966. package/src/backend/detail/AddressEditor.tsx +479 -0
  967. package/src/backend/detail/AddressTiles.tsx +591 -0
  968. package/src/backend/detail/AddressesSection.tsx +362 -0
  969. package/src/backend/detail/AttachmentDeleteDialog.tsx +56 -0
  970. package/src/backend/detail/AttachmentMetadataDialog.tsx +674 -0
  971. package/src/backend/detail/AttachmentVisualPreview.tsx +155 -0
  972. package/src/backend/detail/AttachmentsSection.tsx +327 -0
  973. package/src/backend/detail/CustomDataSection.tsx +700 -0
  974. package/src/backend/detail/DetailFieldsSection.tsx +163 -0
  975. package/src/backend/detail/ErrorMessage.tsx +32 -0
  976. package/src/backend/detail/InlineEditors.tsx +894 -0
  977. package/src/backend/detail/LoadingMessage.tsx +14 -0
  978. package/src/backend/detail/NotesSection.tsx +1266 -0
  979. package/src/backend/detail/TabEmptyState.tsx +48 -0
  980. package/src/backend/detail/TagsSection.tsx +470 -0
  981. package/src/backend/detail/__tests__/InlineEditors.test.tsx +59 -0
  982. package/src/backend/detail/addressFormat.tsx +121 -0
  983. package/src/backend/detail/index.ts +46 -0
  984. package/src/backend/devtools/UmesDevToolsPanel.tsx +122 -0
  985. package/src/backend/devtools/components/ConflictWarnings.tsx +36 -0
  986. package/src/backend/devtools/components/EnricherTiming.tsx +50 -0
  987. package/src/backend/devtools/components/EventFlow.tsx +45 -0
  988. package/src/backend/devtools/components/ExtensionPointList.tsx +59 -0
  989. package/src/backend/devtools/components/InterceptorActivity.tsx +48 -0
  990. package/src/backend/devtools/index.ts +2 -0
  991. package/src/backend/devtools/useUmesDevTools.ts +188 -0
  992. package/src/backend/document-viewer/RegionOverlay.tsx +150 -0
  993. package/src/backend/document-viewer/index.ts +2 -0
  994. package/src/backend/dynamic-grid/DynamicGrid.tsx +161 -0
  995. package/src/backend/dynamic-grid/adapters.ts +57 -0
  996. package/src/backend/dynamic-grid/components/GridCell.tsx +194 -0
  997. package/src/backend/dynamic-grid/components/GridRow.tsx +40 -0
  998. package/src/backend/dynamic-grid/hooks/useGridKeyboardNav.ts +134 -0
  999. package/src/backend/dynamic-grid/index.ts +4 -0
  1000. package/src/backend/dynamic-grid/types.ts +55 -0
  1001. package/src/backend/dynamic-table/DynamicTable.stories.tsx +274 -0
  1002. package/src/backend/dynamic-table/DynamicTable.tsx +4419 -0
  1003. package/src/backend/dynamic-table/README.md +1199 -0
  1004. package/src/backend/dynamic-table/URL_FILTERING.md +217 -0
  1005. package/src/backend/dynamic-table/__e2e__/GridHarness.ts +1155 -0
  1006. package/src/backend/dynamic-table/__e2e__/SplitViewHarness.ts +366 -0
  1007. package/src/backend/dynamic-table/__tests__/BulkActionsBar.test.tsx +143 -0
  1008. package/src/backend/dynamic-table/__tests__/ColumnQuickFilter.test.tsx +607 -0
  1009. package/src/backend/dynamic-table/__tests__/ConfigureViewFilters.suggestions.test.tsx +177 -0
  1010. package/src/backend/dynamic-table/__tests__/ConfigureViewFormatting.test.tsx +125 -0
  1011. package/src/backend/dynamic-table/__tests__/ConfigureViewFormulas.test.tsx +228 -0
  1012. package/src/backend/dynamic-table/__tests__/ConfigureViewGrouping.aggregations.test.tsx +131 -0
  1013. package/src/backend/dynamic-table/__tests__/ConfigureViewPanel.baseView.test.tsx +162 -0
  1014. package/src/backend/dynamic-table/__tests__/ConfigureViewPanel.focus.test.tsx +54 -0
  1015. package/src/backend/dynamic-table/__tests__/ConfigureViewPanel.sections.test.tsx +142 -0
  1016. package/src/backend/dynamic-table/__tests__/ConfigureViewRollups.test.tsx +228 -0
  1017. package/src/backend/dynamic-table/__tests__/ContextMenu.test.tsx +89 -0
  1018. package/src/backend/dynamic-table/__tests__/DynamicTable.density.test.tsx +299 -0
  1019. package/src/backend/dynamic-table/__tests__/DynamicTable.exportTruncation.test.tsx +145 -0
  1020. package/src/backend/dynamic-table/__tests__/DynamicTable.loadError.test.tsx +173 -0
  1021. package/src/backend/dynamic-table/__tests__/DynamicTable.wiring.test.tsx +357 -0
  1022. package/src/backend/dynamic-table/__tests__/EmptyState.test.tsx +70 -0
  1023. package/src/backend/dynamic-table/__tests__/ExportMenu.test.tsx +82 -0
  1024. package/src/backend/dynamic-table/__tests__/FooterTotalsRow.test.tsx +154 -0
  1025. package/src/backend/dynamic-table/__tests__/GroupSummaryRow.render.test.tsx +131 -0
  1026. package/src/backend/dynamic-table/__tests__/LoadErrorState.test.tsx +74 -0
  1027. package/src/backend/dynamic-table/__tests__/MentionPopup.search.test.tsx +127 -0
  1028. package/src/backend/dynamic-table/__tests__/PerspectiveTabs.test.tsx +170 -0
  1029. package/src/backend/dynamic-table/__tests__/RowHeaderCell.selection.test.tsx +80 -0
  1030. package/src/backend/dynamic-table/__tests__/abbreviationsSubscription.test.ts +171 -0
  1031. package/src/backend/dynamic-table/__tests__/aggregate.spec.test.ts +224 -0
  1032. package/src/backend/dynamic-table/__tests__/aggregateDimension.test.tsx +191 -0
  1033. package/src/backend/dynamic-table/__tests__/anchoredPosition.test.ts +88 -0
  1034. package/src/backend/dynamic-table/__tests__/badgeAutoFit.test.ts +121 -0
  1035. package/src/backend/dynamic-table/__tests__/cellHandlers.save.test.ts +282 -0
  1036. package/src/backend/dynamic-table/__tests__/cellWrites.test.ts +274 -0
  1037. package/src/backend/dynamic-table/__tests__/clipboard.test.ts +230 -0
  1038. package/src/backend/dynamic-table/__tests__/coerceCellValue.test.ts +117 -0
  1039. package/src/backend/dynamic-table/__tests__/colorAdjacency.test.ts +151 -0
  1040. package/src/backend/dynamic-table/__tests__/columnFill.test.ts +66 -0
  1041. package/src/backend/dynamic-table/__tests__/columnHeaderHandlers.sort.test.ts +100 -0
  1042. package/src/backend/dynamic-table/__tests__/columnHeaderReorder.test.tsx +209 -0
  1043. package/src/backend/dynamic-table/__tests__/columnReorderPersistence.test.tsx +127 -0
  1044. package/src/backend/dynamic-table/__tests__/columnVirtualization.render.test.tsx +420 -0
  1045. package/src/backend/dynamic-table/__tests__/columnVisibilityPersistence.test.tsx +136 -0
  1046. package/src/backend/dynamic-table/__tests__/columnWindow.test.ts +643 -0
  1047. package/src/backend/dynamic-table/__tests__/commentAudience.test.tsx +137 -0
  1048. package/src/backend/dynamic-table/__tests__/commentScope.test.tsx +214 -0
  1049. package/src/backend/dynamic-table/__tests__/conditionalFormat.test.ts +175 -0
  1050. package/src/backend/dynamic-table/__tests__/contentRegistry.test.ts +267 -0
  1051. package/src/backend/dynamic-table/__tests__/dateWindows.test.ts +149 -0
  1052. package/src/backend/dynamic-table/__tests__/density.test.ts +204 -0
  1053. package/src/backend/dynamic-table/__tests__/exportTable.test.ts +146 -0
  1054. package/src/backend/dynamic-table/__tests__/fillGeometry.test.ts +201 -0
  1055. package/src/backend/dynamic-table/__tests__/fillPatterns.test.ts +272 -0
  1056. package/src/backend/dynamic-table/__tests__/filterParser.presets.test.ts +64 -0
  1057. package/src/backend/dynamic-table/__tests__/filterParser.relative.test.ts +109 -0
  1058. package/src/backend/dynamic-table/__tests__/filterSuggestions.test.ts +152 -0
  1059. package/src/backend/dynamic-table/__tests__/formatAggregate.test.ts +99 -0
  1060. package/src/backend/dynamic-table/__tests__/formatDateCompact.test.ts +489 -0
  1061. package/src/backend/dynamic-table/__tests__/formatLabelCompact.test.ts +717 -0
  1062. package/src/backend/dynamic-table/__tests__/formula.check.test.ts +257 -0
  1063. package/src/backend/dynamic-table/__tests__/formula.evaluate.test.ts +274 -0
  1064. package/src/backend/dynamic-table/__tests__/formula.functions.test.ts +226 -0
  1065. package/src/backend/dynamic-table/__tests__/formula.noEval.test.ts +92 -0
  1066. package/src/backend/dynamic-table/__tests__/formula.parse.test.ts +233 -0
  1067. package/src/backend/dynamic-table/__tests__/formulaColumns.test.tsx +213 -0
  1068. package/src/backend/dynamic-table/__tests__/handlerIdentity.test.ts +77 -0
  1069. package/src/backend/dynamic-table/__tests__/importMapping.test.ts +174 -0
  1070. package/src/backend/dynamic-table/__tests__/importParse.test.ts +130 -0
  1071. package/src/backend/dynamic-table/__tests__/importServerOnly.test.ts +37 -0
  1072. package/src/backend/dynamic-table/__tests__/layoutPersistence.test.ts +372 -0
  1073. package/src/backend/dynamic-table/__tests__/mouseHandlers.doubleClick.test.ts +155 -0
  1074. package/src/backend/dynamic-table/__tests__/perspectivePersonalization.test.ts +188 -0
  1075. package/src/backend/dynamic-table/__tests__/perspectiveResolver.test.ts +133 -0
  1076. package/src/backend/dynamic-table/__tests__/perspectiveState.defaultGrouping.test.ts +306 -0
  1077. package/src/backend/dynamic-table/__tests__/perspectiveState.defaults.test.ts +107 -0
  1078. package/src/backend/dynamic-table/__tests__/perspectiveTemplates.test.tsx +269 -0
  1079. package/src/backend/dynamic-table/__tests__/perspectiveTransforms.aggregations.test.ts +105 -0
  1080. package/src/backend/dynamic-table/__tests__/perspectiveTransforms.conditionalFormats.test.ts +107 -0
  1081. package/src/backend/dynamic-table/__tests__/perspectiveTransforms.dateFormat.test.ts +61 -0
  1082. package/src/backend/dynamic-table/__tests__/perspectiveTransforms.formulas.test.ts +85 -0
  1083. package/src/backend/dynamic-table/__tests__/perspectiveTransforms.frozenColumns.test.ts +124 -0
  1084. package/src/backend/dynamic-table/__tests__/rollupColumns.test.ts +149 -0
  1085. package/src/backend/dynamic-table/__tests__/sharedCriteria.test.ts +255 -0
  1086. package/src/backend/dynamic-table/__tests__/splitViewTree.test.ts +324 -0
  1087. package/src/backend/dynamic-table/__tests__/store.clipboardMarker.test.ts +143 -0
  1088. package/src/backend/dynamic-table/__tests__/store.fillPreview.test.ts +168 -0
  1089. package/src/backend/dynamic-table/__tests__/store.mutations.test.ts +345 -0
  1090. package/src/backend/dynamic-table/__tests__/store.selection.test.ts +157 -0
  1091. package/src/backend/dynamic-table/__tests__/store.undo.test.ts +225 -0
  1092. package/src/backend/dynamic-table/__tests__/store.valueSource.test.tsx +204 -0
  1093. package/src/backend/dynamic-table/__tests__/useAnnotations.legacyOptions.test.tsx +58 -0
  1094. package/src/backend/dynamic-table/__tests__/useColumnVirtualizer.test.ts +290 -0
  1095. package/src/backend/dynamic-table/__tests__/useDensityPreference.test.ts +435 -0
  1096. package/src/backend/dynamic-table/__tests__/useDynamicTablePage.duplicate.test.tsx +99 -0
  1097. package/src/backend/dynamic-table/__tests__/useDynamicTablePage.export.test.tsx +281 -0
  1098. package/src/backend/dynamic-table/__tests__/useDynamicTablePage.personalization.test.tsx +313 -0
  1099. package/src/backend/dynamic-table/__tests__/useDynamicTablePage.perspectiveRestore.test.tsx +126 -0
  1100. package/src/backend/dynamic-table/__tests__/useGrouping.aggregations.test.ts +158 -0
  1101. package/src/backend/dynamic-table/__tests__/useGrouping.groupKey.test.ts +58 -0
  1102. package/src/backend/dynamic-table/__tests__/useKeyboardNavigation.test.ts +594 -0
  1103. package/src/backend/dynamic-table/__tests__/useStickyOffsets.memo.test.tsx +75 -0
  1104. package/src/backend/dynamic-table/__tests__/useStickyOffsets.test.ts +106 -0
  1105. package/src/backend/dynamic-table/__tests__/widgetPane.test.tsx +338 -0
  1106. package/src/backend/dynamic-table/components/ActiveFilterChips.tsx +109 -0
  1107. package/src/backend/dynamic-table/components/BulkActionsBar.tsx +89 -0
  1108. package/src/backend/dynamic-table/components/Cell.tsx +292 -0
  1109. package/src/backend/dynamic-table/components/CellCommentDialog.tsx +887 -0
  1110. package/src/backend/dynamic-table/components/CellCommentHoverPopup.tsx +94 -0
  1111. package/src/backend/dynamic-table/components/ColumnFilterPopover.tsx +775 -0
  1112. package/src/backend/dynamic-table/components/ColumnHeaderMenu.tsx +189 -0
  1113. package/src/backend/dynamic-table/components/ColumnHeaders.tsx +867 -0
  1114. package/src/backend/dynamic-table/components/CompactLabelCell.tsx +293 -0
  1115. package/src/backend/dynamic-table/components/ConfigureViewFields.tsx +173 -0
  1116. package/src/backend/dynamic-table/components/ConfigureViewFilters.tsx +346 -0
  1117. package/src/backend/dynamic-table/components/ConfigureViewFormatting.tsx +205 -0
  1118. package/src/backend/dynamic-table/components/ConfigureViewFormulas.tsx +423 -0
  1119. package/src/backend/dynamic-table/components/ConfigureViewGrouping.tsx +264 -0
  1120. package/src/backend/dynamic-table/components/ConfigureViewLinkedColumns.tsx +249 -0
  1121. package/src/backend/dynamic-table/components/ConfigureViewPanel.tsx +857 -0
  1122. package/src/backend/dynamic-table/components/ConfigureViewRollups.tsx +364 -0
  1123. package/src/backend/dynamic-table/components/ConfigureViewSorting.tsx +121 -0
  1124. package/src/backend/dynamic-table/components/ContextMenu.tsx +140 -0
  1125. package/src/backend/dynamic-table/components/DateCell.tsx +205 -0
  1126. package/src/backend/dynamic-table/components/Debugger.tsx +340 -0
  1127. package/src/backend/dynamic-table/components/DensityControl.tsx +441 -0
  1128. package/src/backend/dynamic-table/components/EmptyState.tsx +103 -0
  1129. package/src/backend/dynamic-table/components/EntitySearchEditor.tsx +528 -0
  1130. package/src/backend/dynamic-table/components/ExportMenu.tsx +90 -0
  1131. package/src/backend/dynamic-table/components/FilterDatePicker.tsx +194 -0
  1132. package/src/backend/dynamic-table/components/FilterValueInput.tsx +294 -0
  1133. package/src/backend/dynamic-table/components/FooterTotalsRow.tsx +291 -0
  1134. package/src/backend/dynamic-table/components/FullscreenOverlay.tsx +66 -0
  1135. package/src/backend/dynamic-table/components/GroupHeaderRow.tsx +136 -0
  1136. package/src/backend/dynamic-table/components/GroupSummaryRow.tsx +184 -0
  1137. package/src/backend/dynamic-table/components/ImportPanel.tsx +445 -0
  1138. package/src/backend/dynamic-table/components/ImportPreviewGrid.tsx +155 -0
  1139. package/src/backend/dynamic-table/components/LoadErrorState.tsx +70 -0
  1140. package/src/backend/dynamic-table/components/MentionPopup.tsx +224 -0
  1141. package/src/backend/dynamic-table/components/PerspectiveDeleteDialog.tsx +96 -0
  1142. package/src/backend/dynamic-table/components/PerspectivePublishDialog.tsx +152 -0
  1143. package/src/backend/dynamic-table/components/PerspectiveTabMenu.tsx +215 -0
  1144. package/src/backend/dynamic-table/components/PerspectiveTabs.tsx +426 -0
  1145. package/src/backend/dynamic-table/components/PerspectiveTemplateMenu.tsx +135 -0
  1146. package/src/backend/dynamic-table/components/RowHeaderCell.tsx +73 -0
  1147. package/src/backend/dynamic-table/components/SearchBar.tsx +309 -0
  1148. package/src/backend/dynamic-table/components/SelectMenu.tsx +237 -0
  1149. package/src/backend/dynamic-table/components/StaleDataBar.tsx +74 -0
  1150. package/src/backend/dynamic-table/components/TableDeleteDialog.tsx +74 -0
  1151. package/src/backend/dynamic-table/components/TablePagination.tsx +96 -0
  1152. package/src/backend/dynamic-table/components/TableSkeleton.tsx +123 -0
  1153. package/src/backend/dynamic-table/components/ToolbarOverflow.tsx +284 -0
  1154. package/src/backend/dynamic-table/components/ViewModeSwitch.tsx +92 -0
  1155. package/src/backend/dynamic-table/components/VirtualRow.tsx +346 -0
  1156. package/src/backend/dynamic-table/components/editors.tsx +1727 -0
  1157. package/src/backend/dynamic-table/components/renderers.tsx +162 -0
  1158. package/src/backend/dynamic-table/events/events.ts +107 -0
  1159. package/src/backend/dynamic-table/formula/check.ts +359 -0
  1160. package/src/backend/dynamic-table/formula/evaluate.ts +473 -0
  1161. package/src/backend/dynamic-table/formula/functions.ts +737 -0
  1162. package/src/backend/dynamic-table/formula/index.ts +57 -0
  1163. package/src/backend/dynamic-table/formula/parse.ts +414 -0
  1164. package/src/backend/dynamic-table/formula/types.ts +151 -0
  1165. package/src/backend/dynamic-table/handlers/cellWrites.ts +362 -0
  1166. package/src/backend/dynamic-table/handlers/index.ts +789 -0
  1167. package/src/backend/dynamic-table/handlers/perspectiveHandlers.ts +684 -0
  1168. package/src/backend/dynamic-table/hooks/index.ts +888 -0
  1169. package/src/backend/dynamic-table/hooks/useAbbreviations.ts +67 -0
  1170. package/src/backend/dynamic-table/hooks/useAnnotations.ts +215 -0
  1171. package/src/backend/dynamic-table/hooks/useColumnVirtualizer.ts +303 -0
  1172. package/src/backend/dynamic-table/hooks/useColumnWidthPersistence.ts +214 -0
  1173. package/src/backend/dynamic-table/hooks/useDensityPreference.ts +451 -0
  1174. package/src/backend/dynamic-table/hooks/useDynamicTablePage.tsx +1681 -0
  1175. package/src/backend/dynamic-table/hooks/useEscapeLayer.ts +72 -0
  1176. package/src/backend/dynamic-table/hooks/useGrouping.ts +428 -0
  1177. package/src/backend/dynamic-table/hooks/useSuggestionFetch.ts +109 -0
  1178. package/src/backend/dynamic-table/hooks/useTableDateFormat.tsx +19 -0
  1179. package/src/backend/dynamic-table/index.ts +497 -0
  1180. package/src/backend/dynamic-table/registry/ContentRegistryContext.tsx +244 -0
  1181. package/src/backend/dynamic-table/registry/TableRegistryContext.tsx +84 -0
  1182. package/src/backend/dynamic-table/registry/filterAccessibleTables.ts +36 -0
  1183. package/src/backend/dynamic-table/registry/index.ts +38 -0
  1184. package/src/backend/dynamic-table/registry/lazyTable.tsx +80 -0
  1185. package/src/backend/dynamic-table/registry/types.ts +181 -0
  1186. package/src/backend/dynamic-table/registry/widgetCatalog.ts +226 -0
  1187. package/src/backend/dynamic-table/server/aggregate.ts +474 -0
  1188. package/src/backend/dynamic-table/server/dateWindows.ts +201 -0
  1189. package/src/backend/dynamic-table/server/filterParser.ts +132 -0
  1190. package/src/backend/dynamic-table/server/filterSuggestions.ts +150 -0
  1191. package/src/backend/dynamic-table/server/index.ts +47 -0
  1192. package/src/backend/dynamic-table/server/makeDynamicTableRoute.ts +426 -0
  1193. package/src/backend/dynamic-table/split-view/ContentPicker.tsx +251 -0
  1194. package/src/backend/dynamic-table/split-view/EmptySlot.tsx +69 -0
  1195. package/src/backend/dynamic-table/split-view/SplitViewHost.tsx +1336 -0
  1196. package/src/backend/dynamic-table/split-view/WidgetPane.tsx +390 -0
  1197. package/src/backend/dynamic-table/split-view/WorkspaceFilterBar.tsx +728 -0
  1198. package/src/backend/dynamic-table/split-view/index.ts +48 -0
  1199. package/src/backend/dynamic-table/split-view/layoutPersistence.ts +185 -0
  1200. package/src/backend/dynamic-table/split-view/sharedCriteria.ts +196 -0
  1201. package/src/backend/dynamic-table/split-view/types.ts +778 -0
  1202. package/src/backend/dynamic-table/split-view/useSplitViewLayouts.ts +97 -0
  1203. package/src/backend/dynamic-table/store/index.ts +1011 -0
  1204. package/src/backend/dynamic-table/styles/ContextMenu.css +387 -0
  1205. package/src/backend/dynamic-table/styles/DynamicTable.css +3659 -0
  1206. package/src/backend/dynamic-table/styles/DynamicTable.v2.css +2651 -0
  1207. package/src/backend/dynamic-table/styles/SearchBar.css +426 -0
  1208. package/src/backend/dynamic-table/styles/dateCell.css +146 -0
  1209. package/src/backend/dynamic-table/styles/density.css +690 -0
  1210. package/src/backend/dynamic-table/types/density.ts +179 -0
  1211. package/src/backend/dynamic-table/types/filters.ts +156 -0
  1212. package/src/backend/dynamic-table/types/grouping.ts +189 -0
  1213. package/src/backend/dynamic-table/types/import.ts +132 -0
  1214. package/src/backend/dynamic-table/types/index.ts +1198 -0
  1215. package/src/backend/dynamic-table/types/perspective.ts +436 -0
  1216. package/src/backend/dynamic-table/types/rollup.ts +111 -0
  1217. package/src/backend/dynamic-table/utils/abbreviations.ts +556 -0
  1218. package/src/backend/dynamic-table/utils/anchoredPosition.ts +106 -0
  1219. package/src/backend/dynamic-table/utils/badgeAutoFit.ts +108 -0
  1220. package/src/backend/dynamic-table/utils/clipboard.ts +294 -0
  1221. package/src/backend/dynamic-table/utils/coerceCellValue.ts +96 -0
  1222. package/src/backend/dynamic-table/utils/colorAdjacency.ts +87 -0
  1223. package/src/backend/dynamic-table/utils/columnFill.ts +93 -0
  1224. package/src/backend/dynamic-table/utils/columnSpacerStyle.ts +53 -0
  1225. package/src/backend/dynamic-table/utils/columnWindow.ts +668 -0
  1226. package/src/backend/dynamic-table/utils/conditionalFormat.ts +300 -0
  1227. package/src/backend/dynamic-table/utils/exportTable.ts +140 -0
  1228. package/src/backend/dynamic-table/utils/fillGeometry.ts +187 -0
  1229. package/src/backend/dynamic-table/utils/fillPatterns.ts +422 -0
  1230. package/src/backend/dynamic-table/utils/formatAggregate.ts +145 -0
  1231. package/src/backend/dynamic-table/utils/formatDateCompact.ts +879 -0
  1232. package/src/backend/dynamic-table/utils/formatLabelCompact.ts +640 -0
  1233. package/src/backend/dynamic-table/utils/formulaColumns.tsx +237 -0
  1234. package/src/backend/dynamic-table/utils/importMapping.ts +202 -0
  1235. package/src/backend/dynamic-table/utils/importParse.ts +220 -0
  1236. package/src/backend/dynamic-table/utils/lookupColumns.tsx +47 -0
  1237. package/src/backend/dynamic-table/utils/perspectiveTransforms.ts +368 -0
  1238. package/src/backend/dynamic-table/utils/rollupColumns.ts +162 -0
  1239. package/src/backend/dynamic-table/validators/index.ts +40 -0
  1240. package/src/backend/fields/registry.generated.ts +8 -0
  1241. package/src/backend/fields/registry.ts +38 -0
  1242. package/src/backend/filters/AdvancedFilterBuilder.tsx +339 -0
  1243. package/src/backend/forms/ActionsDropdown.tsx +198 -0
  1244. package/src/backend/forms/FormActionButtons.tsx +98 -0
  1245. package/src/backend/forms/FormFooter.tsx +27 -0
  1246. package/src/backend/forms/FormHeader.tsx +204 -0
  1247. package/src/backend/forms/index.ts +4 -0
  1248. package/src/backend/hooks/useAdvancedFilter.ts +77 -0
  1249. package/src/backend/indexes/PartialIndexBanner.tsx +86 -0
  1250. package/src/backend/indexes/store.ts +88 -0
  1251. package/src/backend/injection/ComponentOverrideProvider.tsx +66 -0
  1252. package/src/backend/injection/InjectedField.tsx +196 -0
  1253. package/src/backend/injection/InjectionSpot.tsx +457 -0
  1254. package/src/backend/injection/InjectionWizard.tsx +335 -0
  1255. package/src/backend/injection/PageInjectionBoundary.tsx +31 -0
  1256. package/src/backend/injection/SseEventIndicator.tsx +11 -0
  1257. package/src/backend/injection/StatusBadgeInjectionSpot.tsx +50 -0
  1258. package/src/backend/injection/StatusBadgeRenderer.tsx +100 -0
  1259. package/src/backend/injection/WidgetSharedState.ts +58 -0
  1260. package/src/backend/injection/WizardInjectionSpot.tsx +46 -0
  1261. package/src/backend/injection/eventBridge.ts +158 -0
  1262. package/src/backend/injection/helpers.ts +35 -0
  1263. package/src/backend/injection/mergeMenuItems.ts +80 -0
  1264. package/src/backend/injection/mutationEvents.ts +22 -0
  1265. package/src/backend/injection/resolveInjectedIcon.tsx +30 -0
  1266. package/src/backend/injection/spotIds.ts +64 -0
  1267. package/src/backend/injection/useAppEvent.ts +76 -0
  1268. package/src/backend/injection/useGuardedMutation.ts +101 -0
  1269. package/src/backend/injection/useInjectedMenuItems.ts +67 -0
  1270. package/src/backend/injection/useInjectionDataWidgets.ts +41 -0
  1271. package/src/backend/injection/useOperationProgress.ts +105 -0
  1272. package/src/backend/injection/useRegisteredComponent.tsx +106 -0
  1273. package/src/backend/injection/useWidgetSharedState.ts +28 -0
  1274. package/src/backend/injection/visibility-utils.ts +31 -0
  1275. package/src/backend/injection/widgetRegistry.ts +68 -0
  1276. package/src/backend/inputs/ComboboxInput.tsx +272 -0
  1277. package/src/backend/inputs/DatePicker.tsx +162 -0
  1278. package/src/backend/inputs/DateTimePicker.tsx +199 -0
  1279. package/src/backend/inputs/EventPatternInput.tsx +46 -0
  1280. package/src/backend/inputs/EventSelect.tsx +183 -0
  1281. package/src/backend/inputs/LookupSelect.tsx +253 -0
  1282. package/src/backend/inputs/PhoneNumberField.tsx +166 -0
  1283. package/src/backend/inputs/SwitchableMarkdownInput.tsx +106 -0
  1284. package/src/backend/inputs/TagsInput.tsx +297 -0
  1285. package/src/backend/inputs/TimeInput.tsx +146 -0
  1286. package/src/backend/inputs/TimePicker.tsx +120 -0
  1287. package/src/backend/inputs/__tests__/DatePicker.test.tsx +76 -0
  1288. package/src/backend/inputs/__tests__/DateTimePicker.logic.test.ts +126 -0
  1289. package/src/backend/inputs/__tests__/PhoneNumberField.test.tsx +73 -0
  1290. package/src/backend/inputs/__tests__/TagsInput.test.tsx +78 -0
  1291. package/src/backend/inputs/__tests__/TimeInput.test.tsx +134 -0
  1292. package/src/backend/inputs/__tests__/TimePicker.test.tsx +50 -0
  1293. package/src/backend/inputs/index.ts +11 -0
  1294. package/src/backend/markdown/MarkdownContent.tsx +33 -0
  1295. package/src/backend/markdown/index.ts +2 -0
  1296. package/src/backend/markdown/useMarkdownRemarkPlugins.ts +39 -0
  1297. package/src/backend/messages/MessageComposer.tsx +197 -0
  1298. package/src/backend/messages/MessageObjectDetail.tsx +95 -0
  1299. package/src/backend/messages/MessageObjectPreview.tsx +64 -0
  1300. package/src/backend/messages/MessageObjectRecordPicker.tsx +149 -0
  1301. package/src/backend/messages/MessagePrioritySelector.tsx +78 -0
  1302. package/src/backend/messages/MessagesIcon.tsx +32 -0
  1303. package/src/backend/messages/SendObjectMessageDialog.tsx +74 -0
  1304. package/src/backend/messages/__tests__/MessageComposer.test.tsx +350 -0
  1305. package/src/backend/messages/__tests__/SendObjectMessageDialog.test.tsx +77 -0
  1306. package/src/backend/messages/index.ts +22 -0
  1307. package/src/backend/messages/message-compose-form-groups.tsx +383 -0
  1308. package/src/backend/messages/message-composer.types.ts +82 -0
  1309. package/src/backend/messages/message-priority.ts +53 -0
  1310. package/src/backend/messages/useMessageCompose.ts +666 -0
  1311. package/src/backend/messages/useMessageComposeOperations.ts +259 -0
  1312. package/src/backend/messages/useMessagesPoll.ts +118 -0
  1313. package/src/backend/notifications/NotificationBell.tsx +91 -0
  1314. package/src/backend/notifications/NotificationCountBadge.tsx +14 -0
  1315. package/src/backend/notifications/NotificationDispatcher.ts +213 -0
  1316. package/src/backend/notifications/NotificationItem.tsx +262 -0
  1317. package/src/backend/notifications/NotificationPanel.tsx +225 -0
  1318. package/src/backend/notifications/__tests__/NotificationCountBadge.test.tsx +34 -0
  1319. package/src/backend/notifications/index.ts +20 -0
  1320. package/src/backend/notifications/useNotificationActions.ts +161 -0
  1321. package/src/backend/notifications/useNotificationEffect.ts +17 -0
  1322. package/src/backend/notifications/useNotifications.ts +12 -0
  1323. package/src/backend/notifications/useNotificationsPoll.ts +167 -0
  1324. package/src/backend/notifications/useNotificationsSse.ts +220 -0
  1325. package/src/backend/operations/LastOperationBanner.tsx +85 -0
  1326. package/src/backend/operations/__tests__/LastOperationBanner.test.tsx +101 -0
  1327. package/src/backend/operations/store.ts +230 -0
  1328. package/src/backend/progress/ProgressTopBar.tsx +189 -0
  1329. package/src/backend/progress/useProgress.ts +12 -0
  1330. package/src/backend/progress/useProgressPoll.ts +100 -0
  1331. package/src/backend/progress/useProgressSse.ts +118 -0
  1332. package/src/backend/schedule/ScheduleAgenda.tsx +136 -0
  1333. package/src/backend/schedule/ScheduleGrid.tsx +136 -0
  1334. package/src/backend/schedule/ScheduleToolbar.tsx +178 -0
  1335. package/src/backend/schedule/ScheduleView.tsx +201 -0
  1336. package/src/backend/schedule/index.ts +5 -0
  1337. package/src/backend/schedule/recurrence.ts +99 -0
  1338. package/src/backend/schedule/types.ts +26 -0
  1339. package/src/backend/section-page/SectionNav.tsx +140 -0
  1340. package/src/backend/section-page/SectionPage.tsx +34 -0
  1341. package/src/backend/section-page/index.ts +3 -0
  1342. package/src/backend/section-page/types.ts +30 -0
  1343. package/src/backend/settings/SettingsNavigation.tsx +74 -0
  1344. package/src/backend/settings/SettingsPageWrapper.tsx +78 -0
  1345. package/src/backend/settings/index.ts +3 -0
  1346. package/src/backend/upgrades/UpgradeActionBanner.tsx +128 -0
  1347. package/src/backend/utils/__tests__/api.scoped-headers.test.ts +58 -0
  1348. package/src/backend/utils/__tests__/api.test.ts +148 -0
  1349. package/src/backend/utils/__tests__/apiCall.scoped-request-headers.test.ts +58 -0
  1350. package/src/backend/utils/__tests__/apiCall.test.ts +109 -0
  1351. package/src/backend/utils/__tests__/crud.test.ts +87 -0
  1352. package/src/backend/utils/__tests__/customFieldDefs.test.ts +25 -0
  1353. package/src/backend/utils/__tests__/customFieldValues.test.ts +35 -0
  1354. package/src/backend/utils/__tests__/richTextSanitizer.test.ts +57 -0
  1355. package/src/backend/utils/api.ts +214 -0
  1356. package/src/backend/utils/apiCall.ts +123 -0
  1357. package/src/backend/utils/crud.ts +174 -0
  1358. package/src/backend/utils/customFieldColumns.ts +118 -0
  1359. package/src/backend/utils/customFieldDefs.ts +247 -0
  1360. package/src/backend/utils/customFieldFilters.ts +174 -0
  1361. package/src/backend/utils/customFieldForms.ts +203 -0
  1362. package/src/backend/utils/customFieldRelationDisplay.ts +302 -0
  1363. package/src/backend/utils/customFieldValues.ts +41 -0
  1364. package/src/backend/utils/flash.ts +17 -0
  1365. package/src/backend/utils/nav.ts +402 -0
  1366. package/src/backend/utils/richTextSanitizer.ts +7 -0
  1367. package/src/backend/utils/scopedHeaderStack.ts +49 -0
  1368. package/src/backend/utils/serverErrors.ts +313 -0
  1369. package/src/backend/utils/useAutoDiscoveredFields.ts +138 -0
  1370. package/src/backend/version-history/VersionHistoryAction.tsx +76 -0
  1371. package/src/backend/version-history/VersionHistoryDetail.tsx +87 -0
  1372. package/src/backend/version-history/VersionHistoryPanel.tsx +331 -0
  1373. package/src/backend/version-history/index.ts +9 -0
  1374. package/src/backend/version-history/labels.ts +56 -0
  1375. package/src/backend/version-history/types.ts +27 -0
  1376. package/src/backend/version-history/useAuditPermissions.ts +94 -0
  1377. package/src/backend/version-history/useVersionHistory.ts +173 -0
  1378. package/src/backend/views/NewViewForm.tsx +54 -0
  1379. package/src/backend/views/ShareForm.tsx +62 -0
  1380. package/src/backend/views/ViewChip.tsx +123 -0
  1381. package/src/backend/views/ViewChipMenu.tsx +94 -0
  1382. package/src/backend/views/types.ts +4 -0
  1383. package/src/frontend/AuthFooter.tsx +29 -0
  1384. package/src/frontend/LanguageSwitcher.tsx +66 -0
  1385. package/src/frontend/Layout.tsx +13 -0
  1386. package/src/hooks/useIsMobile.ts +27 -0
  1387. package/src/index.ts +40 -0
  1388. package/src/portal/PortalContext.tsx +180 -0
  1389. package/src/portal/PortalLayoutProvider.tsx +5 -0
  1390. package/src/portal/PortalLayoutShell.tsx +64 -0
  1391. package/src/portal/PortalShell.tsx +370 -0
  1392. package/src/portal/components/PortalCard.tsx +77 -0
  1393. package/src/portal/components/PortalEmptyState.tsx +32 -0
  1394. package/src/portal/components/PortalFeatureCard.tsx +41 -0
  1395. package/src/portal/components/PortalNotificationBell.tsx +81 -0
  1396. package/src/portal/components/PortalNotificationPanel.tsx +230 -0
  1397. package/src/portal/components/PortalPageHeader.tsx +33 -0
  1398. package/src/portal/components/index.ts +6 -0
  1399. package/src/portal/hooks/useCustomerAuth.ts +97 -0
  1400. package/src/portal/hooks/usePortalAppEvent.ts +56 -0
  1401. package/src/portal/hooks/usePortalDashboardWidgets.ts +50 -0
  1402. package/src/portal/hooks/usePortalEventBridge.ts +162 -0
  1403. package/src/portal/hooks/usePortalInjectedMenuItems.ts +130 -0
  1404. package/src/portal/hooks/usePortalNotifications.ts +116 -0
  1405. package/src/portal/hooks/useTenantContext.ts +83 -0
  1406. package/src/primitives/DataLoader.tsx +93 -0
  1407. package/src/primitives/ErrorNotice.tsx +17 -0
  1408. package/src/primitives/Notice.tsx +83 -0
  1409. package/src/primitives/alert.tsx +59 -0
  1410. package/src/primitives/badge.tsx +43 -0
  1411. package/src/primitives/button.tsx +60 -0
  1412. package/src/primitives/calendar.tsx +69 -0
  1413. package/src/primitives/card.tsx +92 -0
  1414. package/src/primitives/checkbox.tsx +34 -0
  1415. package/src/primitives/dialog.tsx +122 -0
  1416. package/src/primitives/form-field.tsx +106 -0
  1417. package/src/primitives/icon-button.tsx +48 -0
  1418. package/src/primitives/input.tsx +26 -0
  1419. package/src/primitives/label.tsx +18 -0
  1420. package/src/primitives/popover.tsx +37 -0
  1421. package/src/primitives/primitives.stories.tsx +223 -0
  1422. package/src/primitives/progress.tsx +28 -0
  1423. package/src/primitives/separator.tsx +7 -0
  1424. package/src/primitives/sheet.tsx +137 -0
  1425. package/src/primitives/spinner.tsx +27 -0
  1426. package/src/primitives/status-badge.tsx +62 -0
  1427. package/src/primitives/switch.tsx +92 -0
  1428. package/src/primitives/table.tsx +27 -0
  1429. package/src/primitives/tabs.tsx +131 -0
  1430. package/src/primitives/textarea.tsx +20 -0
  1431. package/src/primitives/tooltip.tsx +85 -0
  1432. package/src/primitives-v2/AGENTS.md +66 -0
  1433. package/src/primitives-v2/Alert.stories.tsx +56 -0
  1434. package/src/primitives-v2/Alert.tsx +108 -0
  1435. package/src/primitives-v2/Avatar.stories.tsx +60 -0
  1436. package/src/primitives-v2/Avatar.tsx +139 -0
  1437. package/src/primitives-v2/Badge.stories.tsx +80 -0
  1438. package/src/primitives-v2/Badge.tsx +99 -0
  1439. package/src/primitives-v2/Breadcrumb.stories.tsx +61 -0
  1440. package/src/primitives-v2/Breadcrumb.tsx +96 -0
  1441. package/src/primitives-v2/Button.stories.tsx +72 -0
  1442. package/src/primitives-v2/Button.tsx +178 -0
  1443. package/src/primitives-v2/Checkbox.stories.tsx +34 -0
  1444. package/src/primitives-v2/Checkbox.tsx +103 -0
  1445. package/src/primitives-v2/IconButton.stories.tsx +40 -0
  1446. package/src/primitives-v2/IconButton.tsx +40 -0
  1447. package/src/primitives-v2/Input.stories.tsx +60 -0
  1448. package/src/primitives-v2/Input.tsx +113 -0
  1449. package/src/primitives-v2/NavGroup.stories.tsx +50 -0
  1450. package/src/primitives-v2/NavGroup.tsx +76 -0
  1451. package/src/primitives-v2/NavItem.stories.tsx +68 -0
  1452. package/src/primitives-v2/NavItem.tsx +105 -0
  1453. package/src/primitives-v2/SearchInput.stories.tsx +44 -0
  1454. package/src/primitives-v2/SearchInput.tsx +123 -0
  1455. package/src/primitives-v2/Sidebar.stories.tsx +91 -0
  1456. package/src/primitives-v2/Sidebar.tsx +92 -0
  1457. package/src/primitives-v2/Tab.stories.tsx +62 -0
  1458. package/src/primitives-v2/Tab.tsx +148 -0
  1459. package/src/primitives-v2/Tag.stories.tsx +123 -0
  1460. package/src/primitives-v2/Tag.tsx +115 -0
  1461. package/src/primitives-v2/Toggle.stories.tsx +37 -0
  1462. package/src/primitives-v2/Toggle.tsx +93 -0
  1463. package/src/primitives-v2/Topbar.stories.tsx +65 -0
  1464. package/src/primitives-v2/Topbar.tsx +37 -0
  1465. package/src/primitives-v2/index.ts +31 -0
  1466. package/src/primitives-v2/utils.ts +9 -0
  1467. package/src/theme/BrandThemeProvider.tsx +122 -0
  1468. package/src/theme/QueryProvider.tsx +46 -0
  1469. package/src/theme/ThemeProvider.tsx +120 -0
  1470. package/src/theme/ThemeToggle.tsx +88 -0
  1471. package/src/theme/index.ts +4 -0
  1472. package/src/theme/m3.css +622 -0
  1473. package/src/theme/tokens.v2.css +559 -0
  1474. package/src/theme/typography.css +163 -0
  1475. package/src/theme/typography.stories.tsx +157 -0
  1476. package/src/theme/typography.tokens.ts +326 -0
  1477. package/src/types/react-big-calendar.d.ts +16 -0
@@ -0,0 +1,1198 @@
1
+ // types/index.ts
2
+
3
+ import type { PerspectiveConfig } from './perspective';
4
+ // The batch-save event strings are DEFINED in `handlers/cellWrites` (the module
5
+ // that emits them) and imported here so there is exactly one spelling of each.
6
+ // Do not retype them below.
7
+ import {
8
+ CELL_BATCH_SAVE_EVENT,
9
+ CELL_BATCH_SAVE_RESULT_EVENT,
10
+ } from '../handlers/cellWrites';
11
+ import type {
12
+ CellWrite,
13
+ CellWriteOrigin,
14
+ CellWriteReport,
15
+ CellWriteResult,
16
+ CellWriteRejectReason,
17
+ CellWriteRejectionCounts,
18
+ CellValueCoercer,
19
+ CoerceReason,
20
+ CoerceResult,
21
+ } from '../handlers/cellWrites';
22
+ import type {
23
+ FillDetector,
24
+ FillMode,
25
+ FillPattern,
26
+ FillSeed,
27
+ } from '../utils/fillPatterns';
28
+ import type { DensityLevel } from './density';
29
+
30
+ // Multi-cell write vocabulary. RE-EXPORTED, never redeclared — a second
31
+ // declaration of `FillMode` is exactly the drift this barrel exists to prevent.
32
+ export type {
33
+ CellWrite,
34
+ CellWriteOrigin,
35
+ CellWriteReport,
36
+ CellWriteResult,
37
+ CellWriteRejectReason,
38
+ CellWriteRejectionCounts,
39
+ CellValueCoercer,
40
+ CoerceReason,
41
+ CoerceResult,
42
+ FillDetector,
43
+ FillMode,
44
+ FillPattern,
45
+ FillSeed,
46
+ };
47
+
48
+ export type CellId = `${number}:${number}`;
49
+
50
+ export interface SelectionState {
51
+ type: 'cell' | 'range' | 'row' | 'column' | 'rowRange' | 'colRange' | null;
52
+ anchor: { row: number; col: number } | null;
53
+ focus: { row: number; col: number } | null;
54
+ }
55
+
56
+ export interface SelectionBounds {
57
+ startRow: number;
58
+ endRow: number;
59
+ startCol: number;
60
+ endCol: number;
61
+ }
62
+
63
+ export interface RangeEdges {
64
+ top?: boolean;
65
+ bottom?: boolean;
66
+ left?: boolean;
67
+ right?: boolean;
68
+ }
69
+
70
+ /** Which way a fill drag runs. Excel locks to ONE axis; so does this. */
71
+ export type FillAxis = 'vertical' | 'horizontal';
72
+
73
+ /**
74
+ * Active drag-to-fill ("fill handle") preview — a RECTANGLE, exactly as Excel
75
+ * draws it. Built on `SelectionBounds` so there is one rectangle type in the
76
+ * grid, not two.
77
+ *
78
+ * `source` is the block the drag started from (the selection at mousedown);
79
+ * `bounds` is the union of source + extension, i.e. the outline the user sees.
80
+ * When the handle is dragged BACK INTO the source, `bounds === source`,
81
+ * `clearing` is true and `cleared` names the sub-rect that will be EMPTIED.
82
+ */
83
+ export interface FillPreview {
84
+ /** The block the drag started from (the selection at mousedown). */
85
+ source: SelectionBounds;
86
+ /** Union of source + extension — the outline Excel draws. */
87
+ bounds: SelectionBounds;
88
+ axis: FillAxis;
89
+ /** True when the extension runs up/left, so the series extrapolates backwards. */
90
+ backwards: boolean;
91
+ /** True when the handle was dragged back into the source: `bounds === source`. */
92
+ clearing: boolean;
93
+ /** Only set while `clearing`. Always a sub-rect of `source`. */
94
+ cleared: SelectionBounds | null;
95
+ mode: FillMode;
96
+ }
97
+
98
+ /**
99
+ * Excel's MARCHING ANTS: the animated dashed outline that marks what is on the
100
+ * clipboard, from `Ctrl+C`/`Ctrl+X` until it is dismissed.
101
+ *
102
+ * It is a SEPARATE rectangle from the selection on purpose — the whole point is
103
+ * that it survives you moving the cursor somewhere else, which is exactly when
104
+ * a user needs to be told what a `Ctrl+V` is about to paste.
105
+ *
106
+ * Addressed by INDEX into the full view-order column array and the loaded row
107
+ * list, like every other rectangle in this grid, so a marked column that is
108
+ * outside the virtualization window is still marked.
109
+ */
110
+ export interface ClipboardMarker {
111
+ /** Which gesture produced it. Both draw the same outline (Excel does too). */
112
+ mode: 'copy' | 'cut';
113
+ bounds: SelectionBounds;
114
+ }
115
+
116
+ export interface CellState {
117
+ value: any;
118
+ isSelected: boolean;
119
+ isInRange: boolean;
120
+ rangeEdges: RangeEdges;
121
+ isEditing: boolean;
122
+ saveState: SaveStateType;
123
+ isNewRow: boolean;
124
+ /** True while a fill-handle drag is previewing this cell (source OR extension). */
125
+ isFillPreview: boolean;
126
+ /** In the extension only — this cell will be WRITTEN on release. */
127
+ isFillTarget: boolean;
128
+ /** In `cleared` — this cell will be EMPTIED on release (back-drag). */
129
+ isFillClearing: boolean;
130
+ /**
131
+ * Carries the drag nub: the bottom-right corner of a selection with at least
132
+ * one fillable column. Computed in the STORE (it needs the whole selection
133
+ * and the column defs) so `Cell` holds no column knowledge.
134
+ */
135
+ isFillOrigin: boolean;
136
+ /** Outer edges of the fill-preview rectangle, for the dashed border. */
137
+ fillEdges: RangeEdges;
138
+ /** Inside the clipboard marker — carries the marching-ants outline. */
139
+ isClipboardSource: boolean;
140
+ /** Outer edges of the clipboard rectangle. Only these are painted. */
141
+ clipboardEdges: RangeEdges;
142
+ /** `null` when this cell is not in the marker. */
143
+ clipboardMode: 'copy' | 'cut' | null;
144
+ /**
145
+ * The one cell the pointer is currently over. Lives in the STORE, not in
146
+ * React state: a `useState` on DynamicTable would re-render every mounted row
147
+ * on every pointer move, whereas `setHoveredCell` repaints exactly the cell
148
+ * left and the cell entered — the same two-cell cost `setEditingCell` pays.
149
+ * Used by the hover comment affordance (ledger 8.1).
150
+ */
151
+ isHovered: boolean;
152
+ }
153
+
154
+ export type SaveStateType = 'saving' | 'success' | 'error' | null;
155
+
156
+ /** One cell mutation captured for undo/redo, keyed by stable row id + column. */
157
+ export interface UndoCellChange {
158
+ rowId: any;
159
+ colKey: string;
160
+ oldValue: any;
161
+ newValue: any;
162
+ }
163
+
164
+ /** A single undoable action — one inline edit (1 change) or one fill (N changes). */
165
+ export interface UndoEntry {
166
+ changes: UndoCellChange[];
167
+ }
168
+
169
+ // ============================================
170
+ // IN-GRID FIND & REPLACE
171
+ // ============================================
172
+ // Not persisted, and deliberately NOT part of `PerspectiveConfig` — a saved view
173
+ // must not carry a stale search.
174
+
175
+ export interface FindOptions {
176
+ query: string;
177
+ matchCase: boolean;
178
+ /** Match the whole cell rather than a substring (Excel's "Match entire cell"). */
179
+ wholeCell: boolean;
180
+ }
181
+
182
+
183
+
184
+ export type ReplaceRejectReason = 'readOnly' | 'unsupportedColumn' | 'uncoercible' | 'rowGone';
185
+
186
+ export interface ReplaceResult {
187
+ replaced: number;
188
+ rejected: Array<{ row: number; col: number; reason: ReplaceRejectReason }>;
189
+ }
190
+
191
+ export type CellSubscriber = () => void;
192
+
193
+ /**
194
+ * Status-palette variant for `type: 'badge'` cells. Maps 1:1 onto the
195
+ * `--status-v2-*` token triplets (bg / border / text). v2 design system.
196
+ */
197
+ export type DynamicTableBadgeVariant =
198
+ | 'neutral' | 'primary' | 'outline' | 'success' | 'error' | 'warning'
199
+ | 'info' | 'purple' | 'teal' | 'orange' | 'sky' | 'rose';
200
+
201
+ export interface ColumnDef {
202
+ data: string;
203
+ title?: string;
204
+ /** Tooltip text shown on hover over the column header */
205
+ headerTooltip?: string;
206
+ width?: number;
207
+ type?: 'text' | 'numeric' | 'date' | 'dropdown' | 'boolean' | 'multiselect';
208
+ /** Horizontal alignment of cell content. v2 design (right-align numbers, centre checkboxes). */
209
+ align?: 'left' | 'center' | 'right';
210
+ /** Render the cell text in the monospace (Geist Mono) face — refs, codes, dates, amounts. v2 design. */
211
+ mono?: boolean;
212
+ /**
213
+ * Render the cell value as a status pill (v2 design). Presentation-only —
214
+ * the column's `type` still governs sort/filter/edit behaviour, so a status
215
+ * column stays `type: 'dropdown'`/`'text'` and just *displays* as a badge.
216
+ */
217
+ badge?: boolean;
218
+ /**
219
+ * With `badge`: resolve a cell value to a status-palette variant.
220
+ * A function wins over `badgeMap`; both fall back to `'neutral'`.
221
+ */
222
+ badgeVariant?: DynamicTableBadgeVariant | ((value: any, rowData: any) => DynamicTableBadgeVariant);
223
+ /** With `badge`: static value → variant lookup (e.g. `{ Active: 'success' }`). */
224
+ badgeMap?: Record<string, DynamicTableBadgeVariant>;
225
+ readOnly?: boolean;
226
+ /**
227
+ * The module refuses an empty value for this field (its create/update
228
+ * validator would 400). Multi-cell writes reject an emptying write on a
229
+ * required column up front with reason `'required'`, rather than firing N
230
+ * doomed PATCHes and leaving the grid showing values the server never took.
231
+ */
232
+ required?: boolean;
233
+ /**
234
+ * Fill-series behaviour for the drag handle. `'auto'` (default) runs the
235
+ * pattern chain — numeric step, date step, weekday step, `REF-001` suffix —
236
+ * and falls back to copying. `'copy'` forces plain tiling for a column whose
237
+ * values only *look* like a series (a postcode, a phone number).
238
+ */
239
+ fillSeries?: 'auto' | 'copy';
240
+ /**
241
+ * Exclude this column from the drag-to-fill handle while still allowing normal
242
+ * inline edits. Use for unique / identity fields (e.g. an invoice number)
243
+ * where copying one value down would create duplicates. Default: false.
244
+ */
245
+ disableFill?: boolean;
246
+ sticky?: 'left' | 'right';
247
+ source?: any[];
248
+ renderer?: (value: any, rowData: any, col: any, rowIndex: number, colIndex: number) => React.ReactNode;
249
+ /**
250
+ * Optional formatter for this column's value in a group-summary (subtotal)
251
+ * row. When omitted, the table uses a dedicated locale number formatter.
252
+ * Use this for columns that need bespoke summary formatting (e.g. currency).
253
+ */
254
+ summaryRenderer?: (value: number, col: any) => React.ReactNode;
255
+ editor?: (
256
+ value: any,
257
+ onChange: (v: any) => void,
258
+ onSave: () => void,
259
+ onCancel: () => void,
260
+ rowData: any,
261
+ col: any,
262
+ rowIndex: number,
263
+ colIndex: number
264
+ ) => React.ReactNode;
265
+ /** Returns CSS class name(s) for conditional cell styling based on value/row data */
266
+ cellClassName?: (value: any, rowData: any, rowIndex: number, colIndex: number) => string | undefined;
267
+ /**
268
+ * Optional formatter for this column's value when the row is exported to
269
+ * CSV/Excel. Use it for columns whose stored cell value is not human-readable
270
+ * (e.g. a relation column that stores `JSON.stringify({ id, name })`).
271
+ * When omitted, the raw cell value is stringified — matching the Copy button.
272
+ */
273
+ exportValue?: (value: any, rowData: any) => string | number | null | undefined;
274
+ }
275
+
276
+ export interface DragState {
277
+ isDragging: boolean;
278
+ type: 'cell' | 'row' | 'column' | null;
279
+ start: { row: number; col: number } | null;
280
+ }
281
+
282
+ export interface SortState {
283
+ columnIndex: number | null;
284
+ direction: 'asc' | 'desc' | null;
285
+ }
286
+
287
+ export interface ContextMenuState {
288
+ isOpen: boolean;
289
+ position: { x: number; y: number };
290
+ actions: ContextMenuAction[];
291
+ type: 'column' | 'row' | 'cell' | null;
292
+ index: number | null;
293
+ colIndex?: number | null;
294
+ }
295
+
296
+ export interface ContextMenuAction {
297
+ id: string;
298
+ label: string;
299
+ icon?: string;
300
+ disabled?: boolean;
301
+ separator?: boolean;
302
+ }
303
+
304
+ export interface FilterRow {
305
+ id: string;
306
+ field: string;
307
+ operator: string;
308
+ values: any[];
309
+ }
310
+
311
+ export type FilterColor = 'blue' | 'green' | 'purple' | 'orange' | 'pink' | 'teal' | 'yellow' | 'red';
312
+
313
+ export interface SavedFilter {
314
+ id: string;
315
+ name: string;
316
+ rows: FilterRow[];
317
+ color?: FilterColor;
318
+ }
319
+
320
+ // Event types
321
+ export interface CellEditSaveEvent {
322
+ rowIndex: number;
323
+ colIndex: number;
324
+ oldValue: any;
325
+ newValue: any;
326
+ prop: string;
327
+ rowData: any;
328
+ id?: string;
329
+ }
330
+
331
+ /** One cell inside a {@link CellBatchSaveEvent}. Mirrors `CellEditSaveEvent`. */
332
+ export interface CellBatchSaveEntry {
333
+ rowIndex: number;
334
+ colIndex: number;
335
+ prop: string;
336
+ oldValue: any;
337
+ newValue: any;
338
+ rowData: any;
339
+ id?: string;
340
+ }
341
+
342
+ /**
343
+ * Emitted ONCE per multi-cell write, alongside the per-cell `CELL_EDIT_SAVE`s.
344
+ * Additive: a consumer that ignores it keeps working exactly as before.
345
+ */
346
+ export interface CellBatchSaveEvent {
347
+ origin: CellWriteOrigin;
348
+ writes: CellBatchSaveEntry[];
349
+ }
350
+
351
+ /** The applied/rejected tally for one multi-cell write. */
352
+ export interface CellBatchSaveResultEvent {
353
+ applied: number;
354
+ rejected: { rowIndex: number; colIndex: number; reason?: CellWriteRejectReason }[];
355
+ }
356
+
357
+ export interface CellSaveStartEvent {
358
+ rowIndex: number;
359
+ colIndex: number;
360
+ }
361
+
362
+ export interface CellSaveSuccessEvent {
363
+ rowIndex: number;
364
+ colIndex: number;
365
+ }
366
+
367
+ export interface CellSaveErrorEvent {
368
+ rowIndex: number;
369
+ colIndex: number;
370
+ error?: string;
371
+ }
372
+
373
+ export interface NewRowSaveEvent {
374
+ rowIndex: number;
375
+ rowData: any;
376
+ }
377
+
378
+ export interface NewRowSaveStartEvent {
379
+ rowIndex: number;
380
+ }
381
+
382
+ export interface NewRowSaveSuccessEvent {
383
+ rowIndex: number;
384
+ savedRowData: any;
385
+ }
386
+
387
+ export interface NewRowSaveErrorEvent {
388
+ rowIndex: number;
389
+ error?: string;
390
+ }
391
+
392
+ export interface ColumnSortEvent {
393
+ columnIndex: number;
394
+ columnName: string;
395
+ direction: 'asc' | 'desc' | null;
396
+ }
397
+
398
+ export interface SearchEvent {
399
+ query: string;
400
+ timestamp: number;
401
+ }
402
+
403
+ export interface FilterChangeEvent {
404
+ filters: FilterRow[];
405
+ savedFilterId?: string | null;
406
+ }
407
+
408
+ export interface FilterSaveEvent {
409
+ filter: SavedFilter;
410
+ }
411
+
412
+ export interface FilterSelectEvent {
413
+ id: string | null;
414
+ filterRows: FilterRow[];
415
+ }
416
+
417
+ export interface FilterRenameEvent {
418
+ id: string;
419
+ newName: string;
420
+ }
421
+
422
+ export interface FilterDeleteEvent {
423
+ id: string;
424
+ }
425
+
426
+ export interface ColumnContextMenuEvent {
427
+ columnIndex: number;
428
+ columnName: string;
429
+ actionId: string;
430
+ }
431
+
432
+ export interface RowContextMenuEvent {
433
+ rowIndex: number;
434
+ rowData: any;
435
+ actionId: string;
436
+ }
437
+
438
+ export interface CellContextMenuEvent {
439
+ rowIndex: number;
440
+ colIndex: number;
441
+ rowData: any;
442
+ col: ColumnDef;
443
+ actionId: string;
444
+ }
445
+
446
+ export const TableEvents = {
447
+ CELL_EDIT_SAVE: 'table:cell:edit:save',
448
+ CELL_SAVE_START: 'table:cell:save:start',
449
+ CELL_SAVE_SUCCESS: 'table:cell:save:success',
450
+ CELL_SAVE_ERROR: 'table:cell:save:error',
451
+ /** One multi-cell write (paste / cut / clear / fill / replace / import). */
452
+ CELL_BATCH_SAVE: CELL_BATCH_SAVE_EVENT,
453
+ /** The applied/rejected tally for that same write. */
454
+ CELL_BATCH_SAVE_RESULT: CELL_BATCH_SAVE_RESULT_EVENT,
455
+ NEW_ROW_SAVE: 'table:new:row:save',
456
+ NEW_ROW_SAVE_START: 'table:new:row:save:start',
457
+ NEW_ROW_SAVE_SUCCESS: 'table:new:row:save:success',
458
+ NEW_ROW_SAVE_ERROR: 'table:new:row:save:error',
459
+ FILTER_CHANGE: 'table:filter:change',
460
+ FILTER_SAVE: 'table:filter:save',
461
+ FILTER_SELECT: 'table:filter:select',
462
+ FILTER_RENAME: 'table:filter:rename',
463
+ FILTER_DELETE: 'table:filter:delete',
464
+ COLUMN_SORT: 'table:column:sort',
465
+ SEARCH: 'table:search',
466
+ COLUMN_CONTEXT_MENU_ACTION: 'table:column:context:action',
467
+ ROW_CONTEXT_MENU_ACTION: 'table:row:context:action',
468
+ CELL_CONTEXT_MENU_ACTION: 'table:cell:context:action',
469
+ // Perspective events
470
+ PERSPECTIVE_SAVE: 'table:perspective:save',
471
+ PERSPECTIVE_SELECT: 'table:perspective:select',
472
+ PERSPECTIVE_RENAME: 'table:perspective:rename',
473
+ PERSPECTIVE_DELETE: 'table:perspective:delete',
474
+ PERSPECTIVE_CHANGE: 'table:perspective:change',
475
+ PERSPECTIVE_DUPLICATE: 'table:perspective:duplicate',
476
+ PERSPECTIVE_SET_DEFAULT: 'table:perspective:setDefault',
477
+ PERSPECTIVE_PUBLISH: 'table:perspective:publish',
478
+ PERSPECTIVE_TEMPLATE_COPY: 'table:perspective:templateCopy',
479
+ } as const;
480
+
481
+ // Type mapping for event payloads - maps event names to their payload types
482
+ export type TableEventPayloads = {
483
+ [TableEvents.CELL_EDIT_SAVE]: CellEditSaveEvent;
484
+ [TableEvents.CELL_SAVE_START]: CellSaveStartEvent;
485
+ [TableEvents.CELL_SAVE_SUCCESS]: CellSaveSuccessEvent;
486
+ [TableEvents.CELL_SAVE_ERROR]: CellSaveErrorEvent;
487
+ [TableEvents.CELL_BATCH_SAVE]: CellBatchSaveEvent;
488
+ [TableEvents.CELL_BATCH_SAVE_RESULT]: CellBatchSaveResultEvent;
489
+ [TableEvents.NEW_ROW_SAVE]: NewRowSaveEvent;
490
+ [TableEvents.NEW_ROW_SAVE_START]: NewRowSaveStartEvent;
491
+ [TableEvents.NEW_ROW_SAVE_SUCCESS]: NewRowSaveSuccessEvent;
492
+ [TableEvents.NEW_ROW_SAVE_ERROR]: NewRowSaveErrorEvent;
493
+ [TableEvents.FILTER_CHANGE]: FilterChangeEvent;
494
+ [TableEvents.FILTER_SAVE]: FilterSaveEvent;
495
+ [TableEvents.FILTER_SELECT]: FilterSelectEvent;
496
+ [TableEvents.FILTER_RENAME]: FilterRenameEvent;
497
+ [TableEvents.FILTER_DELETE]: FilterDeleteEvent;
498
+ [TableEvents.COLUMN_SORT]: ColumnSortEvent;
499
+ [TableEvents.SEARCH]: SearchEvent;
500
+ [TableEvents.COLUMN_CONTEXT_MENU_ACTION]: ColumnContextMenuEvent;
501
+ [TableEvents.ROW_CONTEXT_MENU_ACTION]: RowContextMenuEvent;
502
+ [TableEvents.CELL_CONTEXT_MENU_ACTION]: CellContextMenuEvent;
503
+ // Perspective event payloads (types imported from ./perspective)
504
+ [TableEvents.PERSPECTIVE_SAVE]: import('./perspective').PerspectiveSaveEvent;
505
+ [TableEvents.PERSPECTIVE_SELECT]: import('./perspective').PerspectiveSelectEvent;
506
+ [TableEvents.PERSPECTIVE_RENAME]: import('./perspective').PerspectiveRenameEvent;
507
+ [TableEvents.PERSPECTIVE_DELETE]: import('./perspective').PerspectiveDeleteEvent;
508
+ [TableEvents.PERSPECTIVE_CHANGE]: import('./perspective').PerspectiveChangeEvent;
509
+ [TableEvents.PERSPECTIVE_DUPLICATE]: import('./perspective').PerspectiveDuplicateEvent;
510
+ [TableEvents.PERSPECTIVE_SET_DEFAULT]: import('./perspective').PerspectiveSetDefaultEvent;
511
+ [TableEvents.PERSPECTIVE_PUBLISH]: import('./perspective').PerspectivePublishEvent;
512
+ [TableEvents.PERSPECTIVE_TEMPLATE_COPY]: import('./perspective').PerspectiveTemplateCopyEvent;
513
+ };
514
+
515
+ // Type for event handler map - each key is an event name, value is handler function
516
+ export type EventHandlers = {
517
+ [K in keyof TableEventPayloads]?: (payload: TableEventPayloads[K], event?: Event) => void;
518
+ };
519
+
520
+ export interface PaginationProps {
521
+ currentPage: number;
522
+ totalPages: number;
523
+ limit: number;
524
+ /** Total record count across all pages — drives the v2 footer's "X–Y of Z" text. */
525
+ total?: number;
526
+ limitOptions?: number[];
527
+ onPageChange: (page: number) => void;
528
+ onLimitChange: (limit: number) => void;
529
+ }
530
+
531
+ /**
532
+ * Style preset for read-only cells.
533
+ * - 'muted': Gray background (default) - indicates cells are not editable
534
+ * - 'normal': Same as editable cells - white/transparent background
535
+ * - 'subtle': Very subtle background tint - minimal visual difference
536
+ */
537
+ export type ReadOnlyStyle = 'muted' | 'normal' | 'subtle';
538
+
539
+ /**
540
+ * Style preset for row hover in clickable row mode.
541
+ * - 'default': Light blue background (same as selection)
542
+ * - 'subtle': Very light gray background
543
+ * - 'accent': Uses theme accent color
544
+ */
545
+ export type RowHoverStyle = 'default' | 'subtle' | 'accent';
546
+
547
+ /**
548
+ * A custom batch action shown in the grouped-actions (bulk) bar that appears
549
+ * when ≥1 row is selected. Configured per-table via `uiConfig.bulkActions`;
550
+ * rendered after the built-in Copy (and optional Delete) buttons.
551
+ */
552
+ export interface BulkActionConfig {
553
+ /** Stable identifier (used as the React key). */
554
+ id: string;
555
+ /** Button label. */
556
+ label: string;
557
+ /** Optional leading icon (e.g. a lucide-react element). */
558
+ icon?: React.ReactNode;
559
+ /** Invoked with the currently-selected row ids when the button is clicked. */
560
+ onClick: (selectedIds: string[]) => void | Promise<void>;
561
+ /** Optionally disable the action for the current selection. */
562
+ disabled?: (selectedIds: string[]) => boolean;
563
+ }
564
+
565
+ /**
566
+ * What `TableUIConfig.searchSuggestions` receives.
567
+ *
568
+ * `inputRef` is handed over so the panel can attach its OWN `keydown` listener
569
+ * to the input: arrow-key navigation of a list has to be driven from the control
570
+ * that holds focus, and focus never leaves the box. `submit` puts a query into
571
+ * the box AND into the dataset in one move — what clicking a hint does.
572
+ */
573
+ export type SearchSuggestionsContext = {
574
+ /** What the box holds right now, undebounced. */
575
+ query: string;
576
+ inputRef: React.RefObject<HTMLInputElement | null>;
577
+ /** Close the panel and leave the query alone. */
578
+ close: () => void;
579
+ /** Set the query and search for it immediately. */
580
+ submit: (query: string) => void;
581
+ };
582
+
583
+ export type SearchSuggestionsRenderer = (ctx: SearchSuggestionsContext) => React.ReactNode;
584
+
585
+ /**
586
+ * What `searchBarStart` is handed when it is a function.
587
+ *
588
+ * Deliberately small: the rows currently loaded and the filter pair. A header
589
+ * is not a body renderer and must not be given selection, grouping toggles or
590
+ * paging — those belong to the table's own chrome, and handing them out is how
591
+ * two controls end up disagreeing about one piece of state.
592
+ */
593
+ export interface SearchBarRenderContext {
594
+ /** The rows on this page, after search and filters. */
595
+ data: any[];
596
+ filters: FilterRow[];
597
+ setFilters: (filters: FilterRow[]) => void;
598
+ }
599
+
600
+ export interface TableUIConfig {
601
+ /** Hide the entire toolbar (header with title, search, buttons) */
602
+ hideToolbar?: boolean;
603
+ /** Hide just the title in the toolbar */
604
+ hideTitle?: boolean;
605
+ /** Hide just the search bar */
606
+ hideSearch?: boolean;
607
+ /** Hide the "Add Row" button */
608
+ hideAddRowButton?: boolean;
609
+ /** Hide the perspective tabs row (All, Base, +) */
610
+ hidePerspectiveTabs?: boolean;
611
+ /**
612
+ * Offer a view switcher in the toolbar's icon cluster.
613
+ *
614
+ * Two or more entries render an M3 segmented button; fewer render nothing,
615
+ * so a table with one way to draw itself is byte-identical to today. The
616
+ * chosen mode is a property of the SAVED VIEW (`PerspectiveConfig.viewMode`),
617
+ * not of the session — see that type for why.
618
+ *
619
+ * A mode other than `'table'` needs `renderBody`; without it the switcher
620
+ * would offer a mode that draws nothing.
621
+ */
622
+ viewModes?: TableViewModeOption[];
623
+ /**
624
+ * Fired when the view switcher changes mode, and once on mount with the
625
+ * initial mode.
626
+ *
627
+ * The table owns `viewMode` internally, which is right — it decides whether
628
+ * to call `renderBody`. But a host often has chrome that belongs to only one
629
+ * of the two renderers: the documents list draws folders as a row of tiles
630
+ * INSIDE its grid body, so the folder chips it puts in `searchBarStart` are
631
+ * a duplicate there and the only thing that can reach a folder in the list.
632
+ * Without this the host cannot tell which it is looking at, and the same
633
+ * folders appear twice in two different shapes.
634
+ */
635
+ onViewModeChange?: (mode: import('./perspective').TableViewMode) => void;
636
+ /** Hide the pagination controls */
637
+ hidePagination?: boolean;
638
+ /** Hide the Actions column */
639
+ hideActionsColumn?: boolean;
640
+ /**
641
+ * Hide the toolbar Export button (CSV/Excel download of the selected rows,
642
+ * or the current page when nothing is selected). Default: false (shown).
643
+ */
644
+ hideExportButton?: boolean;
645
+ /**
646
+ * Base file name (without extension) for exported CSV/Excel files. When
647
+ * omitted, the table name is slugified. Example: 'invoices' → 'invoices.csv'.
648
+ */
649
+ exportFileName?: string;
650
+ /** Custom content rendered at the start of the top bar (before title) */
651
+ topBarStart?: React.ReactNode;
652
+ /** Custom content rendered at the end of the top bar (after add button) */
653
+ topBarEnd?: React.ReactNode;
654
+ /** v2 only: content rendered at the right end of the search row (e.g. a
655
+ * primary action button placed on the same line as the search input). */
656
+ searchBarEnd?: React.ReactNode;
657
+ /**
658
+ * v2 only: content rendered FIRST in the search-row actions (before the add
659
+ * button / searchBarEnd / export), e.g. a leading toolbar action.
660
+ *
661
+ * MAY BE A RENDER FUNCTION, and that is what makes chrome shared between the
662
+ * two renderers possible. `renderBody` is called only when the view mode is
663
+ * not `table`, so anything needing `filters` / `setFilters` could previously
664
+ * only exist in the GRID — the documents module drew its folder row there and
665
+ * the list view saw no change at all, which is precisely the bug that
666
+ * prompted this. A header that narrows the table has to be reachable from
667
+ * both, and this slot is the one both render.
668
+ */
669
+ searchBarStart?: React.ReactNode | ((ctx: SearchBarRenderContext) => React.ReactNode);
670
+
671
+ /**
672
+ * Full-width content between the toolbar and the table body, in BOTH view
673
+ * modes.
674
+ *
675
+ * `searchBarStart` puts its content INSIDE the search row, squeezed beside
676
+ * the title and the search box. That is right for a leading toolbar action
677
+ * and wrong for a band: the documents module's folder row landed there and
678
+ * came out as a cramped strip to the right of the heading, nothing like the
679
+ * row of folders it is meant to be.
680
+ *
681
+ * A function receives the same small context, so a band can narrow the
682
+ * table from a place both renderers paint.
683
+ */
684
+ beforeBody?: React.ReactNode | ((ctx: SearchBarRenderContext) => React.ReactNode);
685
+ /**
686
+ * A suggestions panel under the search box — the Drive-style "hits as you
687
+ * type" affordance.
688
+ *
689
+ * NOT a `ReactNode` like the slots above, and not anywhere near them: those
690
+ * render into `.hot-toolbar-actions`, which sits AFTER the toolbar spacer, on
691
+ * the far right of the row. A hint panel has to be under the input it
692
+ * belongs to, so `SearchBar` owns the anchoring (measured + portalled, because
693
+ * `.hot-card` clips) and this hands back only the contents.
694
+ *
695
+ * A render prop because relevance is domain knowledge: what a good hint shows,
696
+ * where it comes from and what it means to click one is the host's business.
697
+ */
698
+ searchSuggestions?: SearchSuggestionsRenderer;
699
+ /** Debounce before the search box publishes a query. Default 300ms; a table
700
+ * with `searchSuggestions` usually wants less, so the panel feels live. */
701
+ searchDebounceMs?: number;
702
+ /** Placeholder for the search box. Default: "Search…". */
703
+ searchPlaceholder?: string;
704
+ /**
705
+ * Rename a group heading — given the field, the raw value and the row count.
706
+ *
707
+ * The grouping engine has one word for a group with no value, `(Empty)`
708
+ * (`EMPTY_GROUP_VALUE`), and it names the TABLE'S INTERNALS rather than the
709
+ * data. Grouped by case, that pile is "No case" — the documents nobody has
710
+ * filed — and only the host knows that. Without this hook a host can rename
711
+ * the sections in its own body renderer and not in the table, which is how one
712
+ * list ends up calling the same pile two different things.
713
+ *
714
+ * Return `undefined` to keep the default.
715
+ */
716
+ formatGroupValue?: (ctx: { field: string; value: string; count: number }) => string | undefined;
717
+ /** Enable fullscreen toggle button. Default: false */
718
+ enableFullscreen?: boolean;
719
+ /** Callback when fullscreen state changes */
720
+ onFullscreenChange?: (isFullscreen: boolean) => void;
721
+ /**
722
+ * Enable the Excel/Airtable-style fill handle: a grab-nub on the single
723
+ * active editable cell that drag-fills its value up/down the column.
724
+ * Default: false (opt-in per table).
725
+ */
726
+ enableFillHandle?: boolean;
727
+ /**
728
+ * Above this many target cells, a fill drag asks for confirmation before
729
+ * writing (each filled cell fires a save → a persist request). Default: 100.
730
+ */
731
+ fillConfirmThreshold?: number;
732
+ /**
733
+ * Visual style for read-only cells. Default: 'muted'
734
+ * - 'muted': Gray background - indicates cells are not editable
735
+ * - 'normal': Same as editable cells - no visual difference
736
+ * - 'subtle': Very subtle background - minimal visual indication
737
+ */
738
+ readOnlyStyle?: ReadOnlyStyle;
739
+ /**
740
+ * Hover style for clickable rows. Only applies when onRowClick is set.
741
+ * - 'default': Light blue (selection color)
742
+ * - 'subtle': Light gray
743
+ * - 'accent': Theme accent color
744
+ * @default 'default'
745
+ */
746
+ rowHoverStyle?: RowHoverStyle;
747
+ /**
748
+ * Disable the built-in column header context menu (modern layout).
749
+ * When true, reverts to classic double-click behavior for column actions.
750
+ * @default false
751
+ */
752
+ disableBuiltinColumnMenu?: boolean;
753
+ /**
754
+ * Remove the outer border and border-radius from the table container.
755
+ * Use when the table fills the full page and should blend with the layout.
756
+ * @default false
757
+ */
758
+ borderless?: boolean;
759
+ /**
760
+ * Custom batch actions appended to the grouped-actions (bulk) bar shown when
761
+ * ≥1 row is selected. Each is rendered after the built-in Copy / Delete
762
+ * buttons and receives the selected row ids on click.
763
+ */
764
+ bulkActions?: BulkActionConfig[];
765
+ /**
766
+ * Virtualize COLUMNS in addition to rows.
767
+ *
768
+ * Default FALSE — opt-in per table, because it changes rendering for 56
769
+ * consumer files. With it off the grid mounts every column exactly as it does
770
+ * today (the window "fails open" to the full set), so switching the flag off
771
+ * is a byte-identical render, not a fallback path.
772
+ *
773
+ * THE NAME IS LOAD-BEARING: `apps/web/src/app/dev/dynamic-table-stress/`
774
+ * spreads this literal key when `?colvirt=1`. Any other spelling and the
775
+ * measurement toggle silently no-ops.
776
+ *
777
+ * @default false
778
+ */
779
+ enableColumnVirtualization?: boolean;
780
+ /**
781
+ * Horizontal overscan in columns, i.e. how many unseen columns are mounted
782
+ * either side of the viewport. Raising it spends the density budget this
783
+ * feature exists to buy — diagnose blank columns as a commit-latency problem
784
+ * before reaching for this.
785
+ *
786
+ * @default 3 (DEFAULT_COLUMN_OVERSCAN)
787
+ */
788
+ columnOverscan?: number;
789
+ /**
790
+ * Hide the row-density picker in the toolbar. Density is a PER-USER
791
+ * preference (see `hooks/useDensityPreference`), so hiding the control does
792
+ * not pin the level — a user who set `dense` elsewhere still gets `dense`
793
+ * here. Use `densityLevel` for that.
794
+ *
795
+ * @default false
796
+ */
797
+ hideDensityControl?: boolean;
798
+ /**
799
+ * Keep Export / Row height / Fullscreen as separate toolbar buttons.
800
+ *
801
+ * Default is CONDENSED — one overflow button — because those three are
802
+ * secondary controls that were each spending toolbar width on every table in
803
+ * the app, crowding out the primary action a page actually cares about
804
+ * ("Create Offer", "Add Location"). Set this when a table genuinely wants
805
+ * them one click away.
806
+ */
807
+ expandToolbarActions?: boolean;
808
+ /**
809
+ * Rows a HOST appends inside the toolbar's overflow menu.
810
+ *
811
+ * Exists so a host adds items to the table's one menu instead of rendering a
812
+ * second button next to it — which is what an earlier build did, leaving two
813
+ * near-identical overflow buttons side by side.
814
+ */
815
+ toolbarOverflowExtras?: React.ReactNode;
816
+ /**
817
+ * DEVELOPER override for tables whose structure demands a fixed density (a
818
+ * two-row summary strip, a fixed-height drawer sub-table). Read-only: it wins
819
+ * for THIS table and is never persisted, so it cannot silently become the
820
+ * user's setting everywhere. Omit for the normal case.
821
+ */
822
+ densityLevel?: DensityLevel;
823
+ }
824
+
825
+ /**
826
+ * Function type for loading filter suggestions from a server.
827
+ * When provided, the filter popover will use this instead of extracting values from loaded data.
828
+ * This is recommended for large datasets (1000+ rows) to avoid client-side performance issues.
829
+ *
830
+ * @param field - The field/column name to get suggestions for
831
+ * @param query - The current search query typed by the user (for filtering suggestions server-side)
832
+ * @returns Promise resolving to an array of suggestion strings
833
+ */
834
+ export type LoadFilterSuggestions = (field: string, query: string) => Promise<string[]>;
835
+
836
+ /**
837
+ * A whitelisted field a linked (lookup) column can surface from a related record.
838
+ */
839
+ export interface LookupSourceFieldOption {
840
+ /** Target field key, e.g. `'tax_id'`. */
841
+ key: string;
842
+ /** Translated, user-facing field label. */
843
+ label: string;
844
+ }
845
+
846
+ /**
847
+ * A foreign-key relationship the current table can attach linked columns to.
848
+ * Supplied by the host (which knows its `tableId`) via {@link LoadLookupSources}
849
+ * so `packages/ui` never imports the host's lookup module.
850
+ */
851
+ export interface LookupSourceOption {
852
+ /** Registered lookup source key (an FK relationship), e.g. `'contractor'`. */
853
+ key: string;
854
+ /** Translated, user-facing relationship label, e.g. `'Contractor'`. */
855
+ label: string;
856
+ /** Whitelisted fields that may be surfaced as linked columns. */
857
+ fields: LookupSourceFieldOption[];
858
+ }
859
+
860
+ /**
861
+ * Loads the foreign-key lookup sources available for this table. When provided,
862
+ * the Configure View drawer shows a "Linked columns" section. Called lazily when
863
+ * the drawer opens.
864
+ */
865
+ export type LoadLookupSources = () => Promise<LookupSourceOption[]>;
866
+
867
+ // ============================================
868
+ // KEYBOARD SHORTCUTS
869
+ // ============================================
870
+
871
+ /**
872
+ * Defines a keyboard shortcut for a row action.
873
+ * Shortcuts only fire when a single cell is selected (not editing, not multi-select).
874
+ */
875
+ export interface RowActionShortcut {
876
+ /** Unique identifier for this shortcut (e.g., 'view', 'delete') */
877
+ id: string;
878
+ /** Display label for documentation/tooltips (e.g., 'Open detail') */
879
+ label: string;
880
+ /** The key to match (e.g., 'Enter', 'd', 'Backspace') — uses KeyboardEvent.key */
881
+ key: string;
882
+ /** Whether Shift must be held. Default: false */
883
+ shift?: boolean;
884
+ /** Whether Ctrl/Cmd must be held. Default: false */
885
+ ctrlOrCmd?: boolean;
886
+ /** Whether Alt must be held. Default: false */
887
+ alt?: boolean;
888
+ }
889
+
890
+ /**
891
+ * Configuration for DynamicTable keyboard shortcuts.
892
+ */
893
+ export interface KeyboardShortcutsConfig {
894
+ /** Row-level action shortcuts (fire when a single row is selected) */
895
+ rowActions?: RowActionShortcut[];
896
+ }
897
+
898
+ /**
899
+ * Callback fired when a keyboard shortcut triggers a row action.
900
+ * @param actionId - The `id` of the matched RowActionShortcut
901
+ * @param rowData - The data object for the currently selected row
902
+ * @param rowIndex - The index of the currently selected row
903
+ */
904
+ export type OnRowAction = (actionId: string, rowData: any, rowIndex: number) => void;
905
+
906
+ export interface DynamicTableProps {
907
+ data?: any[];
908
+ columns?: ColumnDef[];
909
+ colHeaders?: boolean;
910
+ rowHeaders?: boolean;
911
+ height?: string | number;
912
+ width?: string | number;
913
+ idColumnName?: string;
914
+ tableName?: string;
915
+ /**
916
+ * Stable identifier for this table, used to persist per-user column widths in
917
+ * localStorage across reloads. Scoped to the signed-in user (falling back to
918
+ * the active organization). When omitted, manual column resizes are not
919
+ * remembered. Pass the same id you use for `perspectives` so widths track the
920
+ * table, not the page instance.
921
+ */
922
+ tableId?: string;
923
+ tableRef: React.RefObject<HTMLDivElement | null>;
924
+ columnActions?: (column: ColumnDef, colIndex: number) => ContextMenuAction[];
925
+ rowActions?: (rowData: any, rowIndex: number) => ContextMenuAction[];
926
+ actionsRenderer?: (rowData: any, rowIndex: number) => React.ReactNode;
927
+ pagination?: PaginationProps;
928
+ /**
929
+ * The dataset-wide search term currently narrowing `data` (the `SearchBar`'s
930
+ * query). Read-only, and used for ONE thing: find-and-replace's scope label
931
+ * says "…in 100 loaded rows (filtered by "abc")" so a loaded-page match count
932
+ * can never be mistaken for a dataset count. Omitted → the clause is omitted.
933
+ */
934
+ searchQuery?: string;
935
+
936
+
937
+
938
+ // DEPRECATED - Keep for backward compatibility (converts to perspectives internally)
939
+ savedFilters?: SavedFilter[];
940
+ activeFilterId?: string | null;
941
+ hiddenColumns?: string[];
942
+
943
+ // Debug mode - shows floating event log panel
944
+ debug?: boolean;
945
+
946
+ // UI visibility configuration
947
+ uiConfig?: TableUIConfig;
948
+
949
+
950
+ /**
951
+ * Refs to adjacent DynamicTable containers for cross-table navigation.
952
+ * ArrowDown at the last row / ArrowUp at the first row moves focus to
953
+ * `next` / `prev`. Tab past the last editable cell also moves to `next`,
954
+ * and Shift+Tab before the first editable cell moves to `prev`.
955
+ */
956
+ /** When true, automatically selects the first cell when table receives focus */
957
+ autoSelectOnFocus?: boolean;
958
+ /** When true, Tab navigation enters edit mode on the target cell. @default true */
959
+ autoEditOnTab?: boolean;
960
+ /** Function to load filter suggestions from the server */
961
+ loadFilterSuggestions?: LoadFilterSuggestions;
962
+ /** Function to load the table's FK lookup sources. When set, the Configure
963
+ * View drawer shows a "Linked columns" section. */
964
+ loadLookupSources?: LoadLookupSources;
965
+ /** Keyboard shortcuts for row-level actions */
966
+ keyboardShortcuts?: KeyboardShortcutsConfig;
967
+ /** Callback fired when a keyboard shortcut triggers a row action */
968
+ onRowAction?: OnRowAction;
969
+ /** Refs to adjacent DynamicTable containers for cross-table navigation */
970
+ siblingTableRefs?: {
971
+ prev?: React.RefObject<HTMLDivElement | null>;
972
+ next?: React.RefObject<HTMLDivElement | null>;
973
+ };
974
+ /** Callback when a row is clicked. Enables clickable row mode with hover highlighting. */
975
+ onRowClick?: (rowIndex: number, rowData: any, event: React.MouseEvent) => void;
976
+ /** Callback when a row is double-clicked */
977
+ onRowDoubleClick?: (rowIndex: number, rowData: any, event: React.MouseEvent) => void;
978
+ /** ID of the row to highlight (same style as hover) */
979
+ highlightedRowId?: string | null;
980
+ /** Width in pixels for the actions column. @default 80 */
981
+ actionsColumnWidth?: number;
982
+ /** Enable cell comments and color annotations */
983
+ enableComments?: boolean;
984
+ /** Entity type for annotations. String or function that resolves per-row. */
985
+ commentsEntityType?: string | ((row: any) => string);
986
+ /**
987
+ * B8a — resolve the annotation target for ONE CELL, so a row that is not one
988
+ * record can scope each column to the record its value actually belongs to.
989
+ * Defaults to `{ entityType: commentsEntityType, rowId: row[idColumnName] }`.
990
+ * See the same prop on `DynamicTable` for the full rationale.
991
+ */
992
+ commentsCellTarget?: (row: Record<string, any>, col: ColumnDef) => { entityType: string; rowId: string };
993
+ /** Optional view context label stored as metadata (e.g., "project_sea_containers"). */
994
+ commentsViewContext?: string;
995
+ /** Called after any annotation or comment change (create, update, delete). */
996
+ onAnnotationChange?: () => void;
997
+ /** Message to display when table has no data */
998
+ emptyMessage?: string;
999
+ /** Saved perspective configurations */
1000
+ savedPerspectives?: PerspectiveConfig[];
1001
+ /** Currently active perspective ID */
1002
+ activePerspectiveId?: string | null;
1003
+ /**
1004
+ * The view that opens by default FOR THIS USER (workshop A4). Drives the star
1005
+ * on the tab and the enabled state of "Set as my default". Per-user: upstream
1006
+ * scopes `isDefault` by `userId`.
1007
+ */
1008
+ defaultPerspectiveId?: string | null;
1009
+ /**
1010
+ * Views colleagues published as SHARED TEMPLATES. Offered for copying only —
1011
+ * never applied to anyone automatically, which is what keeps every saved
1012
+ * setting per-user after sharing exists.
1013
+ */
1014
+ sharedTemplates?: import('./perspective').PerspectiveTemplate[];
1015
+ /** Whether this user may publish a view (server's `perspectives.role_defaults` answer). */
1016
+ canPublishTemplates?: boolean;
1017
+ /** Roles a template can be published to. Empty unless `canPublishTemplates`. */
1018
+ publishableRoles?: Array<{ id: string; name: string }>;
1019
+ /** Columns hidden by default */
1020
+ defaultHiddenColumns?: string[];
1021
+ /** Density of row padding (v2 design). */
1022
+ density?: 'sm' | 'md';
1023
+ /** Zebra-stripe alternate rows with the secondary surface (v2 design). */
1024
+ striped?: boolean;
1025
+ /** Called with the selected row IDs whenever the v2 checkbox-column
1026
+ * selection changes. Drives bulk actions (e.g. mark-paid). */
1027
+ onSelectionChange?: (selectedIds: string[]) => void;
1028
+ /**
1029
+ * Fetch the entire dataset (all pages, ignoring the active perspective's
1030
+ * filters) for a whole-table export. Supplied by `useDynamicTablePage`. When
1031
+ * present, the toolbar Export button exports every row across all columns;
1032
+ * when absent it falls back to the currently-loaded page.
1033
+ *
1034
+ * MAY REJECT, and the caller must let it (HEDGE-123). A page that fails
1035
+ * mid-pagination must abort the export, never shorten it — a short CSV looks
1036
+ * exactly like a complete one and goes into a reconciliation unnoticed.
1037
+ *
1038
+ * May also resolve to an {@link ExportAllResult} instead of a bare array, to
1039
+ * report a result it could not prove complete. A bare array still means
1040
+ * "complete", so existing implementations are unaffected.
1041
+ */
1042
+ onExportAll?: () => Promise<any[] | ExportAllResult>;
1043
+ /**
1044
+ * Server-computed aggregate over the whole filtered dataset, from
1045
+ * `useDynamicTablePage`. Absent/null → the pinned totals row folds the loaded
1046
+ * page instead and says so.
1047
+ */
1048
+ aggregateResult?: import('./grouping').AggregateResult | null;
1049
+ aggregateLoading?: boolean;
1050
+ aggregateError?: boolean;
1051
+ /**
1052
+ * The LIST request itself failed (HEDGE-119) — not "the table is empty".
1053
+ *
1054
+ * Supplied by `useDynamicTablePage` from the dataset query's error state.
1055
+ * When true the zero-row region renders `LoadErrorState` instead of
1056
+ * `EmptyState`, because a rejected query and a genuinely empty table both
1057
+ * arrive as `data: []` and were previously indistinguishable on screen.
1058
+ * Defaults false, so every existing host keeps its current behaviour.
1059
+ */
1060
+ loadError: boolean;
1061
+ /** Re-runs the failed list request from the error state's retry button. */
1062
+ onRetryLoad?: () => void;
1063
+ /**
1064
+ * Draw the table's BODY as something other than rows.
1065
+ *
1066
+ * THE POINT OF THIS PROP is that the alternative renderer cannot own state
1067
+ * the table also owns. `DynamicTable` stays mounted and keeps everything it
1068
+ * already keeps — the toolbar, the search box, the filters, the perspective
1069
+ * tabs, the grouping, the selection, the pagination and the bulk-action bar.
1070
+ * Only the region between the toolbar and the footer changes. So a second
1071
+ * view cannot diverge from the table by construction, rather than by anyone
1072
+ * remembering to keep them in step.
1073
+ *
1074
+ * Called only while `viewMode` is not `'table'`. When it is absent the mode
1075
+ * has nothing to switch to and the switcher is not rendered.
1076
+ */
1077
+ renderBody?: (ctx: TableBodyRenderContext) => React.ReactNode;
1078
+
1079
+ /**
1080
+ * ⚠ `DynamicTableProps` IS DECLARED TWICE — here and in `DynamicTable.tsx`.
1081
+ *
1082
+ * They have drifted in BOTH directions, which is how FMS's production build
1083
+ * broke: this copy carried `defaultGrouping` and not `renderBody`, the other
1084
+ * carried `renderBody` and not `defaultGrouping`, and the component and its
1085
+ * consumers each resolved a different one. `tsc` reported a prop that is
1086
+ * plainly used as not existing.
1087
+ *
1088
+ * Reconciled rather than merged: collapsing two ~150-member interfaces is a
1089
+ * change worth doing on its own, not while unblocking a deploy. Anything
1090
+ * added to one MUST be added to the other until then.
1091
+ */
1092
+ /** Grouping applied when a perspective declares none. See the fuller note on
1093
+ * the sibling declaration. */
1094
+ defaultGrouping?: import('./grouping').GroupRule[];
1095
+ }
1096
+
1097
+ /**
1098
+ * Everything an alternative body renderer is given. It is READ-MOSTLY on
1099
+ * purpose: the callbacks mutate the table's own state, so a renderer changes
1100
+ * the same thing the table would have changed.
1101
+ */
1102
+ export interface TableBodyRenderContext {
1103
+ /** The current page of rows, exactly as the table has them. */
1104
+ data: any[];
1105
+ /** The resolved, visible columns in display order. */
1106
+ columns: ColumnDef[];
1107
+ /**
1108
+ * The grouped layout when a `GroupRule[]` is active, else `null`. Section
1109
+ * headers carry `memberDataIndices`, which is what makes a group's
1110
+ * select-all select rows a collapsed section is hiding.
1111
+ */
1112
+ visualRows: import('./grouping').VisualRow[] | null;
1113
+ /** The active grouping. Empty ⇒ the body renders one flat run of rows. */
1114
+ groupRules: import('./grouping').GroupRule[];
1115
+ collapsedGroups: ReadonlySet<string>;
1116
+ toggleGroup: (groupKey: string) => void;
1117
+ /** Row-key values of the selected rows. Same set the bulk bar counts. */
1118
+ selectedRowIds: ReadonlySet<string>;
1119
+ /** The column whose value identifies a row for selection. */
1120
+ rowKeyColumn: string;
1121
+ selectable: boolean;
1122
+ toggleRowSelect: (rowId: string, opts?: { shiftKey?: boolean }) => void;
1123
+ toggleGroupSelect: (rowIds: string[]) => void;
1124
+ clearSelection: () => void;
1125
+ /** The needle currently narrowing the rows, for an honest empty state. */
1126
+ searchQuery?: string;
1127
+ /**
1128
+ * The live filter rules — the SAME array the Configure View drawer and the
1129
+ * header quick filters edit.
1130
+ *
1131
+ * A body renderer that offers its own quick filter (a chip row, a facet
1132
+ * list) writes through `setFilters` rather than holding a selection of its
1133
+ * own. That is what makes such a control visible to the table view, to the
1134
+ * active-filter chips and to a saved view; a private selection would be a
1135
+ * second filter model that can disagree with the list.
1136
+ */
1137
+ filters: FilterRow[];
1138
+ setFilters: (filters: FilterRow[]) => void;
1139
+ /** How many filter rules are active, for an honest empty state. */
1140
+ filterCount: number;
1141
+ /** Drop the search / the filters — the two ways out of an empty result. */
1142
+ clearSearch: () => void;
1143
+ clearFilters?: () => void;
1144
+ }
1145
+
1146
+ /** One segment of the view switcher. */
1147
+ export interface TableViewModeOption {
1148
+ mode: import('./perspective').TableViewMode;
1149
+ /** Accessible label. Also the tooltip. */
1150
+ label: string;
1151
+ icon: React.ReactNode;
1152
+ }
1153
+
1154
+ // Re-export filter types
1155
+ export * from './filters';
1156
+
1157
+ // Re-export perspective types
1158
+ export * from './perspective';
1159
+
1160
+ // Re-export grouping types
1161
+ export * from './grouping';
1162
+
1163
+ // Re-export rollup ("summarised column") types. Single export site — see the
1164
+ // header of ./rollup for why nothing else may re-export these names.
1165
+ export * from './rollup';
1166
+
1167
+ /**
1168
+ * The outcome of a whole-table export fetch (HEDGE-123).
1169
+ *
1170
+ * Exists so a partial result can never be mistaken for a complete one. The
1171
+ * defect this replaces returned a bare `any[]` whichever happened: a page that
1172
+ * 500'd, a page that came back as `200` with an unparseable body, and a walk
1173
+ * that hit an internal iteration cap all produced the same value as a clean
1174
+ * finish — a shorter array, with nothing to distinguish it.
1175
+ *
1176
+ * That is the CSV mirror of the empty-list defect in HEDGE-119. There the user
1177
+ * read a failed fetch as "no rows"; here they read a truncated file as "these
1178
+ * are all the rows". The second is worse, because a file looks like an answer:
1179
+ * a failure is visible and can be retried, a short export goes into a
1180
+ * reconciliation and is never questioned.
1181
+ *
1182
+ * Hard failures REJECT rather than resolving to this. This type is only for
1183
+ * the case where rows were genuinely fetched but completeness cannot be proven.
1184
+ */
1185
+ export interface ExportAllResult {
1186
+ /** The rows actually collected. */
1187
+ rows: any[];
1188
+ /** How many rows the server said exist, when it reported a total. */
1189
+ expected: number | null;
1190
+ /**
1191
+ * False when the walk stopped without proving it had everything. The caller
1192
+ * must NOT hand the user a file in that case — it must say how many of how
1193
+ * many it got.
1194
+ */
1195
+ complete: boolean;
1196
+ /** Why completeness could not be proven. Present only when `complete` is false. */
1197
+ reason?: string;
1198
+ }